1
 软件工程
1.4.3.1 2.3.1 瀑布模型

2.3.1 瀑布模型

瀑布模型即生存模型,其核心思想是按工序将问题简化,将功能设计与设计分离。瀑布模型将软件生存周期划分为计划、需求分析、设计、编码、测试和运行维护等6个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落,如图2-2所示。

img6

图2-2 瀑布模型

按照传统的瀑布模型来开发软件,有如下几个特点。

1.阶段间具有顺序性和依赖性

这个特点具有两重含义。

(1)必须等前一个阶段工作完成后,才能开始后一阶段的工作;

(2)前一阶段的输出文档就是后一阶段的输入文档,因此只有前一阶段的输出文档正确,后一阶段的工作才能获得正确结果。

2.推迟实现的观点

瀑布模型在编码之前设置了计划、需求分析、设计3个阶段。需求分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现。清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现,是瀑布模型的一条重要指导思想,可以避免项目中不必要的大量返工。

3.质量保证的观点

1)瀑布模型的每个阶段都应坚持两个重要做法

(1)每个阶段都必须完成规定的文档,没有完成合格的文档就是没有完成该阶段的任务。

(2)每个阶段结束前都要对所完成的文档进行评审,以便尽早的发现和改正问题。

2)瀑布模型的缺点

以上是隐含在软件生存周期各个阶段后面的指导思想,是比具体任务更重要的内容。但是,这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于以下几个方面:

(1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;

(2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;

(3)早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。

我们应该认识到,“线性”是人们最容易掌握并能熟练应用的思维方法。当人们碰到一个复杂的“非线性”问题时,总是千方百计地将其分解或转化为一系列简单的线性问题,然后逐个解决。一个软件系统的整体可能是复杂的,而单个子程序总是简单的,可以用线性的方式来实现。线性是一种简洁,简洁就是美。当我们领会了线性的精神,就不要再呆板地套用线性模型的外表,而应该灵活使用它。例如,增量模型实质上就是分段的线性模型,螺旋模型则是连接的弯曲了的线性模型,在其他模型中也能够找到线性模型的影子。