螺旋模型
螺旋模型是一种演进式软件过程模型。它结合了原型的迭代性质和瀑布模型的可控制性和系统性特点。它具有快速开发越来越完善的软件版本的潜力。
螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看做在每个阶段之前都增加了风险分析过程的快速原型模型。它是一种风险驱动的模型,是一种迭代模型。
特点:
采用循环的方式逐步加深系统定义和实现的深度,同时降低风险。
确定一系列里程碑作为支撑点,确保利益相关者认可是可行的且可令各方满意的系统解决方案。
主要解决问题:项目越大,软件越复杂,估算中的不确定因素就越多,承担的风险也就越大。软件风险可能在不同程度上损害了软件开发过程和软件产品的质量,严重时可能导致软件开发的失败。因此,在软件开发过程中必须及时识别和分析风险,并且采取一定的措施,消除或降低风险的危害。
螺旋模型将工程划分为制定计划、风险分析、实施工程、用户评价四个主要活动。这四个活动螺旋式地重复执行,直到最终得到用户认可的产品。
螺旋模型是一种迭代模型,它把开发过程分为几个螺旋周期,每迭代一次,螺旋线就前进一周,如图1.5所示。
图中带箭头的点画线的长度代表当前累计的开发费用,螺线旋过的角度值代表开发进度。
左上象限:螺旋线每个周期对应于一个开发阶段,每个阶段开始时(左上象限)的任务是:确定该阶段的目标、为完成这些目标选择方案及设定这些方案的约束条件。
右上象限:确定该阶段的目标、为完成这些目标选择方案及设定这些方案的约束条件。接下来的任务是:从风险角度分析上一步的工作结果,努力排除各种潜在的风险。通常用建造原型的方法来排除风险,如果风险不能排除,则停止开发工作或大幅度地削减项目规模;如果成功地排除了所有风险,则启动下一个开发步骤(见图1.5右下象限)
螺旋模型优点:
对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;更重要的是,在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
运用场景:螺旋模型主要适用于内部开发的大规模软件项目。如果进行风险分析的费用接近整个项目的经费预算,则风险分析是不可行的。
螺旋模型风险:
需要软件开发人员具有丰富的风险评估经验和这方面的专门知识,否则可能将出现真正的风险。
迭代开发
开发人员可以用多种方法决定如何将开发组织为发布。增量开发(incremental development)和迭代开发(iterative development)是两种最常用的方法。
在增量开发中,需求文档中指定的系统按功能划分为子系统。定义发布时首先定义一个小的功能子系统,然后在每一个新的发布中增加新功能。
而迭代开发是在一开始就提交一个完整的系统,然后在每一个新的发布中改变每个子系统的功能。
实际上,许多组织将迭代开发和增量开发方法结合起来使用。
与瀑布模型相比,迭代开发有以下三个重要优点。
1.降低了适应用户需求变更的成本。重新分析和修改文档的工作量比瀑布模型要少很多。
2.在开发过程中更容易得到用户对于已完成的开发工作的反馈。用户可以评价软件的现
实版本,并可以看到已经实现了多少。这比让用户从软件设计文档中判断工程进度要好很多。
3.使得更快地交付和部署有用的软件到客户方变成了可能,虽然不是所有的功能都已经包含在内。但与瀑布模型相比,用户可以更早地使用软件并创造商业价值。
增量方法存在两个问题:
(1)过程不可见。管理者需要通过经常性的可交付文档来把握进度,如果系统开发速度太快,要产生反映系统每个版本的文档就很不划算。
(2)伴随着新的增量的添加,系统结构在逐步退化。除非投入时间和金钱用在重构系统结构上以改善软件,否则定期的变更会损坏系统的结构。随着时间的推移,越往后变更系统越困难,而且成本也将逐步上升。