一、瀑布式开发
瀑布式开发是一种相对传统的计算机软件开发方法,1970年,著名的“瀑布模型”由Winston Royce明确提出,一直到八十年代还被人们广泛采用。
瀑布模型将软件的生命周期划分为六个阶段:制定计划、需求分析、软件设计、程序编写、软件测试、运行维护。并且规定它们的顺序是自上而下、相互衔接的,如同瀑布流水一般,“飞流直下三千尺”,快速达成客户的期望。
在这种模型中,软件开发的各种活动需严格按照线性的方式来进行,各项活动需要根据上一个活动的工作结果,实施完成所需的工作内容。当前活动在完成工作内容后,将结果进行验证,若验证通过,再将工作结果输入给下一项活动,然后继续下一项活动的工作内容,否则返回修改。
瀑布式开发的优点是软件开发严格按照预先计划进行,需求明确,工作量可控。
随着时代的发展,瀑布式开发模式已经不适合现代软件开发,主要是因为以下几点:
1.各阶段划分明确,但阶段之间产生大量文档,加重了工作量。
2.由于计划严格按照线性方式进行,用户只有在软件开发末期才能看到成果,开发风险较高。
3.早期出现错误不能及时发现,可能导致严重后果。
4.各个阶段衔接过程时间成本较高,团队人员沟通交流困难。
二、边做边改模型
现实中许多小公司采用的都是这种开发模式中,在“边做边改”开发模式中,没有严格的规格说明,产品也没有经过精心的设计,只是根据客户的需求一次又一次地修改。
软件开发人员拿到项目后,立即根据客户的需求编写程序,调试成功后生成软件的第一个版本。将其提供给客户,如果程序发生错误或客户有新的需求,技术人员再修改程序代码,直到通过测试并且让客户满意。这样的开发方式前期出成效快,但只适合一些对于编写逻辑不太严谨的小程序等,对于正常规模的开发来说,是不太适用的,主要原因在于:
1.缺乏设计和规划等重要环节,使得软件的结构混乱,导致最终无法修改。
2.开发过程忽略软件测试和程序的可维护性,也没有具体的文档,维护起来十分困难。
三、快速原型
快速原型模型首先要创建一个快速原型,实现客户或者未来用户与系统的交互,根据客户或用户对软件原型的评价,来进一步明确待开发软件的需求。软件开发人员先了解客户的真实需求,然后不断调整原型,使其满足客户的要求,其次则在模型的基础上开发客户所需的软件。
快速原型模型首先要创建一个快速原型,实现客户或者未来用户与系统的交互,根据客户或用户对软件原型的评价,来进一步明确待开发软件的需求。软件开发人员先了解客户的真实需求,然后不断调整原型,使其满足客户的要求,其次则在模型的基础上开发客户所需的软件。
快速原型可以降低瀑布式开发模式中由于需求不明确带来的风险。而快速原型的关键在于尽快建造出软件模型,原型系统的内部结构并不重要,一旦确定了客户需求,原有模型将不再需要而将其迅速修改。
快速原型开发模式生命周期短,并且有点整合“边做边改模式”和“瀑布式开发模式”的意味,但这种模式可能会导致系统设计差和难以维护等问题。
四、迭代开发
迭代模型也可称为迭代进化式开发或迭代增量式开发,是一种可以弥补瀑布式模式缺点的软件开发过程,它具有更高的生产率以及成功率。
在迭代开发模式中,整个开发工作可分为一系列固定长度的、短小的小项目,被称为一系列的迭代。每一次的迭代过程都包括了需求分析、软件设计和软件测试等基本活动,采用这种开发模式,软件开发项目可以在客户需求完全确定之前启动,并在每一次迭代中完成系统的一部分功能和业务逻辑的开发工作。然后再根据客户的反馈来进一步细化需求,并开始新一轮的迭代过程。这种开发模式的优点有:
1.降低在一个增量上的开支风险
2.提早发现问题,降低产品不能按照预期进入市场的风险。
3.明确问题焦点,提高工作效率,加快工作进度。
4.迭代过程适应需求变化,复用性高。
五、螺旋式开发
螺旋模型是一种演化软件定制开发过程的模型,它既具有快速原型的迭代特征,又有瀑布式开发的系统化。它引入了其他开发模式所不具备的风险分析,使软件在面临风险时能及时停止,减少损失,非常适合大型复杂的软件应用开发。
螺旋模型沿着螺线进行若干次迭代,活动的过程可分为四个阶段。第一阶段:制定计划。确定软件开发的方案和目标,弄清限制条件。第二阶段:风险分析。分析评估所选方案,考虑如何规避风险。第三阶段:计划实施。进行软件开发和验证等。第四阶段:客户评价。评价开发工作,提出反馈或修改建议,进行下一步工作。
在螺旋模型中,第一个发布的模型可能是没有任何产出的,也许只是纸上谈兵的一个目标,但随着一次又一次的交付,每一个版本都会朝着同一个方向迈进,最终将得到一个更加完善的版本。可以说它是一个由风险驱动的方法体系,因为在每个阶段进行之前,都要先进行风险评估。
六、敏捷开发
敏捷开发是一种以人为中心、迭代、循序渐进的开发模式。在这种模式中,一个大的软件项目可以划分为许多个小的子项目,每个子项目的结果都要进行测试,使其具有集成和可运行的特点。换句话说,就是把一个大项目分割成多个相互关联但也可以独立运行、单独完成的小项目。在这个过程中,软件始终处于可使用的状态。
敏捷开发团队主要有三个工作方法:
1.将所有个体作为一个整体进行工作
2.工作以短迭代周期的方式进行
3.每一次迭代完成都交付结果,并关注业务优先级。
敏捷开发模式的四个基本核心思想:
1.重视面对面的沟通,人与人实际交流胜过任何网络工具
2.将时间精力花费在可运行的程序上, 能执行的产品胜过编译全面的文档,它强调了原型和demonstration等的重要性。
3.鼓励团队合作,提升工作激情,敏捷开发可以把需求、开发、测试等团队成员整合为一个整体。
4.团队适应能力强,适应环境变化,拒绝按部就班。
七、演化模型
演化模型主要针对不能提前完全确定需求的开发。客户可以提出软件开发项目的核心需求,当开发人员实现核心需求后,客户再提供反馈和修改建议,以支持软件系统的最终设计和实现。
根据客户的需求,技术人员首先开发软件的核心系统。当核心系统投入运行时,客户再进行试用,并提出关于完善系统、提升系统等具体化需求。
技术人员根据客户的反馈结果进一步实施软件开发的迭代过程。第一次的迭代过程由需求分析、制定计划、设计、开发、程序编写、软件测试、集成等基本活动组成,为软件系统增添了一个可以定义和管理的子集。
这种开发模式采用了批量循环开发的方法,每次循环开发产出的一部分功能,都将成为软件原型的新功能。
因此,设计不断地演化出新的软件系统。我们也可以将这个开发模式看作是“瀑布式开发”的重复执行过程。
“演化模型”要求技术人员能够将项目的产品需求分割成不同的组,这种分组需要根据系统功能的重要性和对软件整体设计结构的影响来划分,以便进行批量循环开发。
八、喷泉式开发
喷泉式开发模式以用户的需求为动力,以对象为驱动模型,一般应用于采取对象技术的软件开发项目。
与传统的结构化生存期相比,喷泉式开发模式具有更多的增量和迭代性质。它在生存期的任何阶段都可以互相重叠和重复使用,并且在子生存期也可以嵌入软件项目的整个生存期。就像喷泉一样,喷出的水可以落在中间位置,也可以落在底部。
它的明显优点是可提升软件开发效率,缩短开发时间,适用于面向对象的软件开发过程。但由于喷泉式开发的各个阶段是可重叠的,所以项目实施过程需要大量专业人员,并且喷泉模型的的文档要求严格,使得审核难度增大。
九、智能模型
智能模型是一种基于知识的软件开发模型,它拥有数据查询、报表生成、屏幕定义、代码生成、高层图形功能和电子表格等工具。技术人员使用这些工具可以在更高层次上定义软件的某些特征,并且它们可以自动将技术人员定义的软件系统生成源码。
这种开发模式需要四代语言(4GL)的支持。四代语言跟前三代语言相比,它简单灵活容易掌握,面向问题,并拥有良好的用户界面,即使不是专业的软件开发人员也可以用它来编写代码;
4GL还具有高效的程序代码、智能缺乏假设、完整的数据库和应用程序生成器。目前市场上流行的4GL都有不同程度的以上特征。不过四代语言目前主要局限于事务信息系统中小型应用软件的开发。
十、混合模型
混合模型又可称为元模型或过程开发模型,将几种各不相同的模型组合成一个混合模型,使得一个软件开发项目朝着最有效的方向发展,这就是混合模型(或元模型)。事实上,现实中一些软件公司都是将几种不同的软件开发模式组合成自己所需的混合模型。