所谓软件过程模型就是一种开发策略,这种策略针对软件工程的各个阶段提供了一套范形,使工程的进展达到预期的目的。对一个软件的开发无论其大小,我们都需要选择一个合适的软件过程模型,这种选择基于项目和应用的性质、采用的方法、需要的控制,以及要交付的产品的特点。一个错误模型的选择,将迷失我们的开发方向。
一、瀑布模型
原理:
将软件开发开发过程分成多个阶段,前一阶段的输出是后一阶段的输入,必须等前一阶段的工作完成之后,才能开始后一阶段的工作。
优点:
过程各阶段划分清晰,输入输出及阶段任务明确。可强迫开发人员采用规范化的方法。
缺点:
- 用户参与度低;
- 用户不能尽早使用上软件;
- 文档多,“文档驱动”;
- 前面阶段错误修复代价高。
适用项目:
需求明确,修改概率低。
二、增量过程模型
原理:
根据功能的基础性、核心性和客户的意愿,将功能分成组(增量),并进行排序。先开发优先级高的增量,完成后就交付用户使用,发现的问题在交付下一个增量时一并修改。
优点:
- 简化问题;
- 客户能尽早使用上软件;
- 在软件完全交付时,核心功能已经过长时期使用和测试,再出现故障的概率低。
缺点:
- 功能之间有联系,增量划分存在一定困难;
- 整体的设计需要更加精心。
适用的项目:
需求比较清晰,用户需要尽早用上软件的项目。
三、原型模型
原型是快速建立起来的用于验证某些不确定性的程序、程序界面等。
原型分类:
进化型原型:在此基础上进化成最终的程序。
抛弃型原型:验证完不确定性之后不再进化,使用其它语言(工具)开发最终程序。
优点:
- 开发人员和用户在“原型”上达成一致。这样一来,可以减少设计中的错误和开发中的风险,也减少了对用户培训的时间,而提高了系统的实用、正确性以及用户的满意程度。
- 缩短了开发周期,加快了工程进度。
- 降低成本。
缺点:
- 不适合大规模系统的开发;
- 开发过程管理要求高,整个开发过程要经过“修改—评价—再修改”的多次反复;
- 用户过早看到系统原型,误认为系统就是这个模样,易使用户失去信心;
- 开发人员易将原型取代系统分析;
- 缺乏规范化的文档资料
适用项目:
处理过程明确、简单系统;涉及面窄的小型系统;不确定性多的系统。
四、螺旋模型
原理:
在螺旋模型中,软件过程表示成一个螺线,而不是像以往的模型那样表示为一个具有回溯的活动序列。
在螺线上的每一个循环表示过程的一个阶段。
每个阶段开始时的任务是确定该阶段的目标、为完成这些目标选择方案及设定这些方案的约束条件。接下来的任务是,从风险角度分析上一步的工作结果,努力排除各种潜在的风险,通常用建造原型的方法来排除风险。如果成功地排除了所有风险,则启动下一步开发步骤,在这个步骤的工作过程相当于纯粹的瀑布模型。最后是评价该阶段的工作成果并计划下一个阶段的工作。
螺旋模型的4项活动 :
螺线上的每一个循环可划分为4个象限,分别表达了4个方面的活动。
- 目标设定——定义在该阶段的目标,弄清对过程和产品的限制条件,制订详细的管理计划,识别项目风险,可能还要计划与这些风险有关的对策。
- 风险估计与弱化——针对每一个风险进行详细分析,设想弱化风险的步骤。
- 开发与验证——评价风险之后选择系统开发模型。
- 计划——评价开发工作,确定是否继续进行螺线的下一个循环。如果确定要继续,则计划项目的下一个阶段的工作。
优点:
- 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。
- 减少了过多测试或测试不足所带来的风险。
- 在螺旋模型中维护只是模型的另一个周期,因而在维护和开发之间并没有本质区别。
缺点:
螺旋模型是风险驱动的,因此要求软件开发人员必须具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险:当项目实际上正在走向灾难时,开发人员可能还以为一切正常。
适合的项目:
大型软件项目。