1.5.1 瀑布模型
在20世纪80年代之前,瀑布模型(Waterfall model)一直是唯一被广泛采用的软件生存期模型。瀑布模型是一种基于里程碑的阶段过程模型,它所提供的里程碑式的工作流程,为软件项目按规程管理提供了便利,并对提高软件产品质量提供了有效保证。传统软件工程方法学的软件过程,基本上都可以用瀑布模型来描述,如图1.6所示。
1.传统的瀑布模型的特点如下
(1)软件生存周期的顺序性。顺序性是指只有前一阶段工作完成以后,后一阶段的工作才能开始;前一阶段的输出文档,就是后一阶段的输入文档。只有在前一阶段有正确的输出时,后一阶段才可能有正确的结果。因而,瀑布模型的特点是由文档驱动。如果在生存周期的某一阶段出现了错误,往往要追溯到在它之前的一些阶段。
瀑布模型开发方法适用于在软件需求比较明确,开发技术比较成熟,工程管理比较严格的场合下使用。
(2)尽可能推迟软件的编码。程序设计也称编码。实践表明,大、中型软件的编码阶段开始得越早,完成所需要的时间反而越长。瀑布模型在编码之前安排了需求分析、概要设计、详细设计等阶段,从而把逻辑设计和编码清楚地划分开来,尽可能推迟程序编码阶段,以保证软件开发质量。
(3)保证质量。为了保证质量,瀑布模型坚持两个重要做法:一方面,每个阶段都要完成规定的文档;另一方面,每个阶段都要对已完成的文档进行复审,以便及早发现隐患,排除故障。

图1.6 传统的瀑布模型
事实上,实际的瀑布模型是带“反馈环”的,如图1.7所示。
(https://www.daowen.com)
图1.7 实际的瀑布模型
上图中实线箭头表示开发过程,虚线箭头表示维护过程。当在后面阶段发现前面阶段的错误时,需要沿图中左侧的反馈线返回前面的阶段,修正前面阶段的产品之后再回来继续完成后面阶段的任务。
2.瀑布模型的优点
(1)可强迫开发人员采用规范化的方法。
(2)严格地规定了每个阶段必须提交的文档。
(3)要求每个阶段交出的所有产品都必须是经过验证(评审)的。
3.瀑布模型的缺点
(1)由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要,如果需求规格说明与用户需求之间有差异,就会发生这种情况。
(2)瀑布模型只适用于项目开始时需求已确定的情况。