1.5.4 螺旋模型
在软件开发过程中必须及时识别和分析风险,并且采取适当措施以减少或清除风险的危害。1988年,Boehm最早提出了螺旋模型(Spiral model),该模型将瀑布模型与快速原型模型结合起来,并且加入两种模型均忽略了的风险分析。螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。螺旋模型可以看作是在每个阶段之前都增加了风险分析过程的快速原型模型,如图1.10所示。

图1.10 简化的螺旋模型
完整的螺旋模型如图1.11所示。

图1.11 完整的螺旋模型
在完整的螺旋模型中,软件过程表示成一个螺线,而不是像以往的模型那样表示为一个具有回溯的活动序列。螺线上的每一个循环表示过程的一个阶段。最内层的循环可以是处理系统可行性,下一层循环是研究系统需求,再下一层循环是研究系统设计,等等。
每个阶段开始时的任务是确定该阶段的目标、为完成这些目标选择方案及设定这些方案的约束条件。接下来的任务是,从风险角度分析上一步的工作结果,努力排除各种潜在的风险,通常用建造原型的方法来排除风险。如果成功地排除了所有风险,则启动下一步开发步骤,在这个步骤的工作过程相当于纯粹的瀑布模型。最后是评价该阶段的工作成果并计划下一阶段的工作。
螺线上的每个循环可划分为四个象限,分别表达了四个方面的活动。
(1)目标设定。定义在该阶段的目标,弄清对过程和产品的限制条件,制订详细的管理计划,识别项目风险,可能还要计划与这些风险有关的对策。(https://www.daowen.com)
(2)风险估计与弱化。针对每个风险进行详细分析,设想弱化风险的步骤。例如,若有一个风险为需求不合适,可以考虑开发一个原型系统。
(3)开发与验证。评价风险之后选择系统开发模型。例如,若用户界面风险的发生概率和影响最严重,则可以采用演进原型作为开发模型;若安全性风险是主要考虑因素,则可以采用形式化变换方法;若子系统集成成为主要风险,则瀑布模型最合适。
(4)计划。评价开发工作,确定是否继续进行螺线的下一个循环。如果确定要继续,则计划项目下一阶段的工作。
螺旋模型与其他软件过程模型之间的重要区别在于明确地考虑了开发中的风险。如果我们想使用一种新的程序设计语言,可能的风险是所使用的编译器将会产生不可靠的、低效的目标代码。风险很可能造成进度和成本超出,给项目带来问题。因此,风险弱化成为十分重要的项目管理活动。
螺旋模型的优点表现为如下三个方面。
(1)对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。
(2)减少了过多测试或测试不足所带来的风险。
(3)在螺旋模型中维护只是模型的另一个周期,因此,在维护和开发之间并没有本质区别。
螺旋模型的缺点表现如下。
螺旋模型是风险驱动的,因此,要求软件开发人员必须具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险,当项目正在走向灾难时,开发人员可能还以为一切正常。