【软件工程】软件生命周期模型

软件生命周期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
下面介绍几种常见的软件生命周期模型:

瀑布模型

瀑布模型是将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到软件产品。
瀑布模型一直是唯一被广泛采用的生命周期模型,现在它仍然是软件工程中应用得最广泛的过程模型。

瀑布模型的核心思想:
瀑布模型核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
【软件工程】软件生命周期模型
瀑布模型的特点:

  • 阶段间具有顺序性和依赖性
    1、必须等前一阶段的工作完成之后,才能开始后一阶段的工作
    2、前一阶段的输出文档就是后一阶段的输入文档
  • 推迟实现的观点
    清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要的指导思想。
  • 质量保证的观点
    软件工程的基本目标是优质、高产。为保证所开发的软件的质量,在瀑布模型的每个阶段都应坚持两个重要做法:
    1、每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。
    2、每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。

瀑布模型的优点:
1、为项目提供了按阶段划分的检查点。
2、当前一阶段完成后,您只需要去关注后续阶段。
3、可在迭代模型中应用瀑布模型。
增量迭代应用于瀑布模型。迭代1解决最大的问题。每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。
4、它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。虽然有不少缺陷但比在软件开发中随意的状态要好得多。

瀑布模型的缺点:
1、实际的项目大部分情况难以按照该模型给出的顺序进行,而且这种模型的迭代是间接的,这很容易由微小的变化而造成大的混乱。
2、通常情况下客户难以表达真正的需求,而这种模型却要求如此,这种模型是不欢迎具有二义性问题存在的。
3、客户要等到开发周期的晚期才能看到程序运行的测试版本,而在这时发现大的错误时,可能引起客户的惊慌,而后果也可能是灾难性的。

传统的瀑布模型过于理想化了,事实上,人在工作过程中不可能不犯错误。实际的瀑布模型是带“反馈环”的。如下图:
【软件工程】软件生命周期模型
图中实线箭头表示开发过程,虚线箭头表示维护过程。
实际的瀑布模型当在后面阶段发现前面阶段的错误时,需要沿图中左侧的反馈线返回前面的阶段,修正前面阶段的产品之后再回来继续完成后面阶段的任务。

快速原型模型

快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。
【软件工程】软件生命周期模型
快速原型模型是不带反馈环的,这正是这种过程模型的主要优点。软件产品的开发基本上是线性顺序进行的。能基本上做到线性顺序开发的主要原因如下:
1、原型系统已经通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户需求,因此,在开发过程的后续阶段不会因为发现了规格说明文档的错误而进行较大的返工。
2、开发人员通过建立原型系统已经学到了许多东西,因此,在设计和编码阶段发生错误的可能性也比较小,这自然减少了在后续阶段需要改正前面阶段所犯错误的可能性。

快速原型模型的优点:
使用户能够感受到实际的系统,使开发者能够快速地构造出系统的框架。

快速原型模型缺点:
产品的先天性不足,因为开发者常常需要做实现上的折中,可能采用不合适的操作系统或程序设计语言,以使原型能够尽快工作。

增量模型

增量模型也称为渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。
【软件工程】软件生命周期模型
增量模型的优点:
1、人员分配灵活,刚开始不用投入大量人力资源,当核心产品很受欢迎时,可增加人力实现下一个增量。
2、能在较短时间内向用户提交可完成部分工作的产品。
3、逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。

增量模型的缺点:
1、 至始至终开发者和客户纠缠在一起,直到完全版本出来。
2、适合于软件需求不明确、设计方案有一定风险的软件项目。

使用增量模型的困难:
1、在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。
2、必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。

该模型具有一定的市场。

风险更大的增量模型:
【软件工程】软件生命周期模型

螺旋模型

螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。
【软件工程】软件生命周期模型
【软件工程】软件生命周期模型
螺旋模型的优点:
对于大型系统及软件的开发,这种模型是一个很好的方法。开发者和客户能够较好地对待和理解每一个演化级别上的风险。

螺旋模型的缺点:
1、需要相当的风险分析评估的专门技术,且成功依赖于这种技术。
2、很明显一个大的没有被发现的风险问题,将会导致问题的发生,可能导致演化的方法失去控制。
3、这种模型相对比较新,应用不广泛,其功效需要进一步的验证。

该模型适合于大型软件的开发

喷泉模型

“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。迭代是软件开发过程中普遍存在的一种内在属性。用面向对象方法学开发软件时,工作重点应该放在生命周期中的分析阶段。
【软件工程】软件生命周期模型
图中代表不同阶段的圆圈相互重叠,这明确表示两个活动之间存在交迭; 图中在一个阶段内的向下箭头代表该阶段内的迭代(或求精)。 图中较小的圆圈代表维护,圆圈较小象征着采用了面向对象范型之后维护时间缩短了。

喷泉模型的优点:
喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。

喷泉模型的缺点:
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。