瀑布模型
简介: 瀑布模型也叫预测型生命周期、完全计划驱动型生命周期。这个模型里,在项目生命周期的尽早时间,要确定项目范围及交付此范围所需的时间和成本。这个模型一般将软件的开发分为可行性分析(计划)、需求分析、软件设计(概要设计、详细设计)、编码(含单元测试)、测试、运行维护等几个阶段。上一阶段的输出作为本阶段的输入,环环相扣。

优点:
1、为项目提供了按阶段划分的检查点。
2、当前一阶段完成后,只需要去关注后续阶段。
3、可在迭代模型中应用瀑布模型。
4、它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。
缺点:
1、各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
2、由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
3、通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
4、不适应用户需求的变化。
5、由于是单一流程,开发中的经验教训不能反馈应用于本产品的过程。
适用项目:
1、需求明确或很少变更的项目。
2、已有类似项目开发经验的项目。
敏捷开发模型
简介: 敏捷方法,也叫适应性生命周期、或者变更驱动方法。在软件项目的敏捷开发中,软件项目的构建被切分为多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简言之,就是把一个大项目返程多个相互联系,但也可独立运行的 小项目,并分别完成,在此过程中软件一直处于可使用状态。
优点:
1、精确。敏捷方法采用小步快跑,每走完一步再调整并为下一步确定方向,直到真正的终点。
2、质量。敏捷方法对每一次迭代周期的质量都有严格要求。一些敏捷方法如极限编程等,甚至使用测试驱动开发(test-driven development),即在正式开发功能代码之前先开发该功能的测试代码。这些都为敏捷项目的整个开发周期提供了可靠的质量保证。
3、速度。敏捷团队只专注于开发项目中当前最需要的、最具价值的部分。这样能很快地投入开发。另外,较短的迭代周期使团队成员能迅速进入开发状态。
4、丰厚的投资回报率。在敏捷开发过程中,最具价值的功能总是被优先开发,这样能给客户带来最大的投资回报率。
5、高效的自我管理团队。敏捷开发要求团队成员必须积极主动,自我管理。在这样的团队中工作,每个团队成员的技术能力、交流、社交、表达和领导能力也都能得以提高。
缺点: 敏捷注重人员的沟通,忽略文档的重要性,若项目人员流动大太,将给维护带来不少难度,特别项目存在新手比较多时,老员工比较累。
适用项目:
1、项目团队的人数不太多
2、项目经常发生变更
3、高风险的项目实施
4、开发人员可以参与决策
原型化模型
简介: 原型化的第一步是建造一个快速原型,实现客户或未来用户与系统的交互,经过和用户针对原型的讨论和交流,确定用户需求。充分了解后,再在原型基础上开发出用户满意的产品。原型最重要的是确定用户的真正需求。
- 抛弃型原型:开发原型为了获取需求,在原型开发之后,以获取了更为清晰的需求信息,原型无需保留而废弃。一般分为需求分析、原型实现和客户评价3个阶段。
- 渐进型原型:原型作为软件最终产品的一部分,可满足用户的部分需求,进一步在此基础上开发,最后交付使用。一般分为需求分析、设计、编码、发布、实施、运维6个阶段。
优点: 软件产品的开发基本上是线性的。
缺点:
1、没有考虑软件的整体质量和长期可维护性。
2、大部分情况下不合适的操作算法被采用的目的是为了演示功能,不合适的开发工具被采用仅仅为了它的方便,还有不合适的操作系统被选择等等。
3、由于达不到质量要求,产品可能被抛弃,而采用新的模型重新设计。
适用项目:
1、客户能提出一般性的目标,但不能标出详细的输入、处理和输出需求。
2、开发者不能确定算法的有效性、操作系统的适应性以及人机交互的形式
螺旋模型
简介: 螺旋模型是一个演化软件过程的模型,将原型实现的迭代特征与线性顺序(瀑布)模型中控制和系统化的方面结合起来,使得软件的增量版本的快速开发成为可能。
螺旋模型沿着螺线旋转,自内向外每旋转一圈便开发出更完善的一个新版本。一个螺旋为一个阶段,每个螺旋式周期可分为:制定计划、风险分析、实施工程和客户评估。

优点:
1、设计上的灵活性,可以在项目的各个阶段进行变更。
2、以小的分段来构建大型系统,使成本计算变得简单容易。
3、客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
4、随着项目推进,客户始终掌握项目的最新信息,从而他或她能够和管理层有效地交互。
5、客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。
缺点: 很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。
适用项目: 庞大复杂、风险较高的项目。
迭代模型
简介: 迭代模型,摒弃了传统的需求分析,设计,编码,测试的流程,而是将整个生命周期变成若干个冲刺(Sprint)阶段,而每一个阶段都是由以上若干或者全部传统的流程组成,在每一个阶段中,都会包含下面四个阶段:初始阶段,细化阶段,构建阶段,交付阶段。
在初始阶段中,确认本次冲刺的范围、边界、系统选择的架构、计划、以及所需要的资源等信息。在细化阶段中,对问题进行建域,创建开发案例,创建模板以及准备工具等。在构建阶段的主要任务就是完成构建的开发并且进行测试,将完成的构建集成为产品,并且测试所有的功能(CI)。在交付阶段,主要是完成本次冲刺,将软件产品交付给相关的干系人。
优点:
1、降低了在一个增量上的开支风险。如果开发人员重复某个迭代,那么损失只是这一个开发有误的迭代的花费。
2、降低了产品无法按照既定进度进入市场的风险。通过在开发早期就确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙。
3、加快了整个开发工作的进度。因为开发人员清楚问题的焦点所在,他们的工作会更有效率。
4、由于用户的需求并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应需求的变化会更容易些。
缺点: 项目早期开发可能有所变化 ,需有一个高素质的项目管理者和一个高技术水平的开发团队。
适用项目:
1、在项目开发早期需求可能有所变化。
2、分析设计人员对应用领域很熟悉。
3、高风险项目。
4、用户可不同程度地参与整个项目的开发过程。
5、使用面向对象的语言或统一建模语言(UML)。
6、使用CASE工具,如Rose。
7、具有高素质的项目管理者和软件研发团队。
V模型
简介: V模型的左边下降的是开发过程各阶段,与此相对应的是右边上升的部分,即测试过程的各个阶段。开发过程依次是需求分析、概要设计、详细设计、编码;测试过程依次是单元测试、集成测试、系统测试、验收测试。
优点:
1、非常明确的表明了测试过程中存在的不同的级别,并且非常清晰的描述了这些测试阶段和开发阶段的对应关系。
2、将开发阶段清楚的表现出来,便于控制开发的过程。当所有阶段都结束时,软件开发就结束了。
缺点: V模型仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段,忽视了测试对需求分析,系统设计的验证,需求的满足情况一直到后期的验收测试才被验证。
适用项目: V模式是一种传统软件开发模型,一般适用于一些传统信息系统应用的开发。而一些高性能高风险的系统、互联网软件,或一个系统难以被具体模块化的时候,就比较难做成V模式所需的各种构件,需要更强调迭代的开发模型或者敏捷开发模型。
喷泉模型
简介: 喷泉模型(fountain model)是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。该模型认为软件开发过程自下而上周期的各阶段是相互迭代和无间隙的特性。
优点: 该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
缺点: 由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
适用项目: 面向对象的软件开发项目。
参考资料:
【1】《系统集成项目管理工程师教程》第二版,清华大学出版社
【2】5种项目生命周期模型(个人笔记)
【3】五种典型开发周期模型(瀑布、V、原型化、螺旋、迭代)
【4】软件生命周期模型优缺点及适用范围
【5】常见软件开发模型对比:瀑布、迭代、螺旋、敏捷
【6】为什么要敏捷开发,敏捷开发有什么好处?
【7】百度百科