瀑布模型
定义
这种模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。它包括问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试和维护。
特点
阶段的顺序性和依赖性
必须等前一阶段的工作完成之后,才能开始后一阶段的工作。
前一阶段的输出文档就是后一阶段的输入文档。
推迟实现的观点
质量保证的观点
软件工程的重要目标是优质,高产。
缺点
增加工作量
各个阶段的划分完全固定,阶段之间产生大量的文档,极大的增加了工作量
开发风险大
由于开发模型是线性的,用户只有等到整个过程的末期才能看到开发成果,从而增加了开发的风险
早期错误发现晚
早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果
不适应需求变化
不能反映实际的开发方式,软件开发需要迭代;无法适应需求不明确和需求的变化
适用场合
适用于系统需求明确且稳定,技术成熟,工程管理较严格的场合,如军工,航天,医疗
V模型
原型模型
别称
原型化模型,快速原型模型
原型
一个部分开发的产品,使客户和开发人员能够对计划开发的系统的相关方面进行检查
目的
明确并完善需求,如演示原型
研究技术选择方案,如技术验证原型
结果
抛弃原型
把原型发展成最终产品
优点
减少需求不明确带来的风险
缺点
构造原型采用的技术和工具不一定主流
快速建立起来的系统加上连续的修改可能导致原型质量低下
设计者在质量和原型中进行折中
客户意识不到一些质量问题
适用场合
客户定义一个总体目标集,但是他们并不清楚系统的具体输入输出;或开发者不确定算法的效率,软件与操作系统是否兼容以及客户与计算机交互的方式
增量模型
增量
满足用户需求的一个子集,能够完成一定功能,小而可用的软件
特点
非整体开发的模型,进化式的开发过程
从部分需求出发,先建立一个不完整的系统,通过测试运行这个系统取得经验和反馈,进一步使系统扩充和完善
结合原型模型的基本要素和迭代的特征,采用了基于时间的线性序列
增量的开发可用瀑布模型或快速原型模型
优点
开放式体系结构,便于维护
项目初期不用投入太多的人力资源
产品逐步交付,适应需求变化
可根据产品中间产品提出改进意见,减少返工,降低开发风险
缺点
开发者难以根据客户的需求给出大小合适的增量
软件的开放式体系结构实现困难
边做边改,软件过程控制易失去整体性
适用场合
适用于软件开发中需求可能发生变化,具有较大风险,或者希望尽早进入市场的项目
螺旋模型
优点
螺旋模型强调原型的可扩充性和可修改性,原型的进化贯穿整个软件生存周期,有助于目标软件的适应能力,支持用户需求的动态变化
为项目管理人员及时调整管理决策提供方便,降低开发风险
看作可执行的需求规格说明,为用户和开发人员共同理解,作为继续开发的基础,为用户参与所有关键决策提供方便
缺点
迭代效率不高会增加成本并推迟交付时间
要求开发队伍水平高,否则会带来更大风险
适用场合
支持面向过程,面向对象等多支持需求不明确,特别是大型软件系统的开发
喷泉模型
喷泉模型是一种比较典型的面向对象软件开发模型,以用户需求为动力,以对象作为驱动的模型,适合面向对象的开发方法。
具有迭代性和无间隙性。
各个开发步骤反复多次迭代
优点
各个阶段没有明显界限,开发人员可以同步进行开发,提高效率,节省时间
缺点
不利于项目的管理
喷泉模型要求严格管理文档,审核难度增大
适用场合
适用于面向对象开发