对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型与演化模型结合起来,并且加入两种模型均忽略了的风险分析。螺旋模型沿着螺线旋转,如图1.5.3所示,在笛卡尔坐标的四个象限上分别表达了四个方面的活动,即: 制定计划──确定软件目标,选定实施方案,弄清项目开发的限制条件; 风险分析──分析所选方案,考虑如何识别和消除风险; 实施工程──实施软件开发 客户评估──评价开发工作,提出修正建议。 沿螺线自内向外每旋转一圈便开发出更为完善的一个新的软件版本。 螺旋模型的基本思想:是生命周期模型和快速原型模型的结合,其基本思想是借助构建原型来降低风险,把软件开发的每一个阶段都看作是增加了风险分析的快速原型模型。螺旋模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个部分,软件开发的整个过程就是这4个部分的迭代,每迭代一次,过程就完成一个周期,软件开发就前进一个层次,系统就生成一个新的版本。 螺旋模型的特点: (1)模型结合性:螺旋模型的每一个周期都应用了原型模型排除风险,在确认了原型之后,则又启动生命周期模型继续过程的演化。因此,螺旋模型是生命周期模型和快速原型模型的结合,体现了两个模型的优点。
2)过程迭代性:软件开发过程的每个阶段都是一次迭代,这种迭代不是过程的简单重复,而是每旋转一个圈就前进一个层次,得到一个新的版本。 螺旋模型的优点:强调可选方案和约束条件有利于已有软件的重用,有助于把软件质量作为软件开发的一个重要目标,减少过多或测试不足带来的风险。维护看成是模型的另一个周期,在维护和开发之间没有本质的区别。 螺旋模型的缺点:要求软件开发人员具有丰富的风险评估经验和有关的专门知识,开发过程比较复杂,给过程管理和控制带来一定的难度。 5 增量模型
与建造大厦相同,软件也是一步一步建造起来的。在增量模型中,软件被作为一系列的增量构
件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成. 增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。整个产品被分解成若干个构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险,如图2.2所示。增量模型也存在以下缺陷: (1)
由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好
的系统部分,这需要软件具备开放式的体系结构。 (2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的
能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。 在使用增量模型时,个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生终的完善产品。 例如,使用增量模型开发字处理软件。可以考虑,个增量发布基本的文件管理、编辑和文档生成功能,第二个增量发布更加完善的编辑和文档生成功能,第三个增量实现拼写和文法检查功能,第四个增量完成高级的页面布局功能。 增量模型的基本思想:把软件产品作为一系列的增量构件来设计、实现、集成和测试。开发时分批逐步向用户提交产品,每次提交一个满足用户需求子集的增量构件,直到后一次得到满足用户全部需求的完整产品为止。 增量模型的特点:过程渐进性:软件过程分批次完成,每次提交一个满足用户需求子集的增量构件,产品规模逐渐增大,直到得到满足用户全部需求的完整产品为止。 增量模型的优点:能在较短的时间内向用户提交部分功能的构件,并且在逐步增加产品功能的过程中有充裕的时间学习和适应新的功能,减少一个全新软件可能给用户带来的冲击。 增量模型的缺点:增量构件的划分依赖于系统功能的构成和软件开发人员的经验,每次集成新的增量构件必须不破坏原有软件系统的结构,因此要求软件系统的体系结构必须具有高度的开放性和可扩充性。