1.引言
为了获取高质量的软件,需要完成一系列的任务,完成这些任务的工作步骤就是软件过程。通常人们用软件生命周期模型来描述软件过程,软件生命周期模型规定了把软件生命周期划分成哪些阶段及各阶段的执行顺序。
生命周期模型为软件开发提供支持,为软件开发过程中所有活动提供***策保证,为参与软件开发的所有成员提供帮助和指导。软件生命周期模型的适用与否,对于软件开发的成功、用户的满意影响巨大。
做任何事情都有风险,软件开发也一样。软件风险使任何软件开发项目中都普遍存在的问题,它可能在不同程度上损害软件开发过程和软件产品的质量,因此在软件开发过程中如果能够及时识别和分析风险,进而采取相应措施去设法避开或转移风险。螺旋模型是根据系统包含的风险看待软件开发过程的一种软件生命周期模型,螺旋模型的基本思想是使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型,如***1所示。
***1 简化的螺旋模型
2.瀑布模型
螺旋模型是由TRW公司的B.Boehm于1998年首先提出的,综合了瀑布模型和快速原型模型的优点,还增加了两者都忽视的风险分析,把开发活动和风险管理结合起来,将风险减到最小并控制风险。
螺旋模型以需求和一个初始的开发计划(包括预算、约束、人员安排方案、设计和开发环境)为起点,在产生“操作概念”文档(它从高层描述系统如何工作)之前,该过程插入一个评估风险和可选原型的步骤。在操作文档中,一组需求被指定并进行详细检查,以确保需求尽可能完整和一致。因此,操作概念是第一次迭代的产品,而需求则是第二次迭代的主要产品。在第三次迭代中,系统开发产生设计,而第四次迭代能够进行测试。完整的螺旋模型如***2所示。
***2 完整的螺旋模型
螺旋模型项目从小规模开始,然后探测风险,制定风险控制计划,由此确定下一步项目是否还要继续,然后进行下一个螺旋的反复。螺旋模型第一圈的开始起点可能是一个概念项目,也可能是被舍弃不用的项目。螺旋模型的每一次迭代都根据需求和约束进行风险分析,以权衡不同的选择,并且在确定某一特定选择之前,通过原型化验证可行性或期望度。当风险确认后,项目经理必须决定如何消除或最小化风险。
螺旋模型的每一次迭代都包含了以下六个步骤:
(1)决定目标,替代方案和约束。
(2)识别和解决项目的风险。
(3)评估技术方案和替代解决方案。
(4)开发本次迭代的交付物和验证迭代产出的正确性。
(5)计划下一次迭代。
(6)提交下一次迭代的步骤和方案。
螺旋模型随着项目成本不断增加,风险逐渐减小。在每次迭代结束后都需要对结构进行评估和验证,以帮助软件开发小组加强项目的管理和跟踪,当发现无法继续进行下去时,可以及早地终止项目。
同其它生命周期模型相比,螺旋模型比较复杂。螺旋模型的特点鲜明。每一圈是一个阶段,每个阶段里又有一些活动。阶段可分为操作的概念、软件需求、产品设计、详细设计、编码、单元测试、集成和测试、验收测试、实现。活动包 括需求与计划、风险分析、设计与制作、用户评价。螺旋模型为软件项目的管理人员及时调整决策提供了便利,从而降低软件开发的风险。
螺旋模型支持用户需求的动态变化。在软件开发过程中,用户可能会不断修正原来提出的需求,甚至可能增加新的需求。为了适应这种情形,原形的总体结构、算法、源代码和测试方案都应该具有良好的可扩充性和可修改性。在螺旋模型中,需求分析和软件实现是互相依赖、紧密联系的。开发过程中,开发人员依据需求分析的结果需求规格说明来进行软件实现;实现过程中,又对需求规格说明进行精确,结合新发现的需求和用户提出的新的需求对需求规格说明进行修改。需求规格说明是用户和软件开发人员进行沟通和交流的基础。螺旋模型要求用户不断为原型进行评估,用户关于原型的意见对后续软件开发起决定作用,用户参与到软件开发的所有关键决策中。螺旋模型有助于提高所开发的软件产品的适应能力,这种模型强调原型的可扩充性和修改性,在整个生命周期中一直存在原型的进化,这就要求软件开发人员考虑到未来所有可能的软件进化,设计出易于扩充、易于修改的软件产品。
螺旋模型有许多优点:对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;更重要的是,在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。风险分析可使一些极端困难的问题和可能导致费用过高的问题被更改或取消。
螺旋模型并不完美,主要优势在于它是风险驱动的,但是这也可能是它的一个弱点。除非软件开发人员具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险:当项目实际上正在走向灾难时,开发人员可能还认为一切正常。因此,需要开发人员具有相当丰富的风险评估经验和专门知识,还需要管理人员有高度的责任心、专注及有管理经验。而且螺旋模型要求用户参与阶段评价,对用户来说比较困难,不易取得好的效果。过多的迭代次数会增加开发成本,延迟提交时间;并且在迭代的过程中,如果不能标识重要的客户需求和关键的改进点,就会在人力、财力和时间方面引起无谓的损耗。
不是任何软件都可采用螺旋模型进行开发的,螺旋模型主要适用于内部开发的大规模软件项目。如果进行风险分析的费用接近整个项目的经费预算,则风险分析是不可行的。事实上,项目越大,风险也越大,因此,进行风险分析的必要性也越大。此外,只有内部开发的项目,才能在风险过大时方便地中止项目。
在不确定性因素很多,很多东西前面无法计划的情况下,一般尽量采用螺旋模型,并且开发者必须精通风险分析和风险排除方面的知识及经验,这样,使用螺旋模型才会获得成功。
3、结束语
没有任何一种生命周期模型是万能的,每一种生命周期模型都有一定的适用范围。
每个软件开发组织都需要为它的组织、管理、员工和软件过程确定合适的生命周期模型,而且还要根据当前开发的具体的软件产品的特点适当地改变模型,一般这样的模型结合各种生命周期模型的适当特点,扬长避短。