瀑布模型(Waterfall Model)
是最早出现的软件开发模型,它提供了软件开发的基本框架,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。包括软件工程开发、企业项目开发、产品生产以及市场销售等构造瀑布模型。
核心思想
瀑布模型核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
优点:
1)为项目提供了按阶段划分的检瀑布模型
查点。
2)当前一阶段完成后,您只需要去关注后续阶段。
3)可在迭代模型中应用瀑布模型。
增量迭代应用于瀑布模型。迭代1解决最大的问题。每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。
4)它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。
缺点:
1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
4)瀑布模型的突出缺点是不适应用户需求的变化。
V模型
是瀑布模型的进阶,是软件开发过程中的一个重要模型,由于其模型构图形似字母V,所以又称软件测试的V模型。
单元测试:是否满足详细设计的要求
集成测试:验证已测试过的部分是否可以很好地结合在一起
系统测试:检验系统功能、性能是否达到系统的要求。
验收测试:确定软件的时限是否满足用户需求或合同需求
优点:
1、包含了底层测试(单元测试)和高层测试(系统测试);
2、清楚的标识了开发和测试的各个阶段;
3、自上而下逐步求精,每个阶段分工明确,便于整体项目的把控。
缺点:
1、自上而下的顺序导致了,测试工作在编码之后,就导致错误不能及时的进行修改;
2、实际工作中,需求经常变化,导致v模型步骤,反复执行,返工量很大,灵活度较低。
W模型
又叫双v模型,相对于V模型,W模型增加了软件开发各阶段中同步进行的验证和确认活动,分别代表测试与开发过程,明确表示出了测试与开发的并行关系,有利于尽早地全面的发现问题。例如,需求分析完成后,测试人员就应该参与到对需求文档的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,这将显著减少总体测试时间,加快项目进度。
优点:
1、开发伴随着整个开发周期,需求和设计同样要测试;
2、更早的介入测试,可以发现初期的缺陷,修复成本低;
3、分阶段工作,方便项目整体管理。
缺点:
1、开发和测试依然是线性的关系,需求的变更和调整,依然不方便;
2、如果没有文档,根本无法执行w模型;
3、对于项目组成员的技术要求更高!
快速原型模型
是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集;
快速原型模型是增量模型的另一种形式,在开发真实系统之前,迅速建造一个可以运行的软件原型 ,以便理解和澄清问题,在该原型的基础上,逐渐完成整个系统的开发工作;
它允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的原型,该原型向用户展示待开发软件的全部或部分功能和性能;用户对该原型进行测试评定,给出具体改进意见以丰富细化软件需求;开发人员据此对软件进行修改完善,直至用户满意认可之后,进行软件的完整实现及测试、维护
优点:
克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险
适合预先不能确切定义需求的软件系统的开发
缺点:
所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下
使用前提是要有一个展示性的产品原型,一定程度上可能会限制开发人员的创新
增量模型
增量模型也称渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能,使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能
优点:
1、能在较短的时间内向用户提交可完成部分工作的产品
2、将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展
3、以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统
4、开发顺序灵活。开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整
缺点:
1、由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构
2、在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性
3、如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程
螺旋模型
螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径
螺旋模型是快速原型模型以进化的开发方式为中心,在每个项目阶段使用瀑布模型法。该模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次。
图中带箭头的点划线的长度代表当前累计的开发费用,螺旋线的角度值代表开发进度,螺旋线的每个周期对应于一个开发阶段
图中的四个象限代表了以下活动
制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件
风险分析:分析评估所选方案,考虑如何识别和消除风险
实施工程:实施软件开发和验证
客户评估:评价开发工作,提出修正建议,制定下一步计划
优点:
1、对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标
2、减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险
3、在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别
缺点:
1、采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失
2、过多的迭代次数会增加开发成本,延迟提交时间