瀑布模型

在20世纪80年代之前,瀑布模型一直是唯一被广泛采用的生命周期模型,现在它仍然是软件工程中应用得最广泛的过程模型。传统软件工程方法学的软件过程,基本上可以用瀑布模型来描述。

如下图所示为传统的瀑布模型。按照传统的瀑布模型开发软件,有下述的几个特点:

1. 阶段间具有顺序性和依赖性
阶段间具有顺序性和依赖性,这个特点有两重含义:

  • 必须等前一阶段的工作完成之后,才能开始后一阶段的工作;
  • 前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。

2. 推迟实现的特点
缺乏软件工程实践经验的软件开发人员,接到软件开发任务以后常常急于求成,总想尽早开始编写程序。但是,实践表明,对于规模较大的软件项目来说,往往编码开始得越早,最终完成开发工作所需要的时间反而越长。这是因为,前面阶段的工作没做或做得不扎实,过早地考虑进行程序实现,往往导致大量返工,有时甚至发生无法弥补的问题,带来灾难性后果。

瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现。

清楚区分逻辑设计与物理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要的指导思想。

3. 质量保证的观点
软件工程的基本目标是优质、高产。为了保证所开发的软件的质量,在瀑布模型的每个阶段都应该坚持两个重要做法。

  • 每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。完整、准确的合格文档不仅仅是软件开发时期各类人员之间相互通信的媒介,也是运行时期对软件进行维护的重要依据。
  • 每个阶段结束前都要对所完成的文档进行评审,以尽早发现问题,改正错误。事实上,越是早期阶段犯下的错误,暴漏出来的时间就越晚,排除故障改正错误所需付出的代价也越高。因此,及时审查,是保证软件质量、降低软件成本的重要措施。

实际中的瀑布模型

传统的瀑布模型过于理想化了,事实上,人在工作过程中不可能不犯错误。在设计阶段可能发现规格说明文档中的错误,而设计上的缺点或错误可能在实现过程中显现出来,在综合测试阶段将发现需求分析、设计或编码阶段的许多错误。因此,实际的瀑布模型是带"反馈环"的,如下图所示(实线箭头表示开发过程,虚线箭头表示维护过程)。


当在后面阶段发现前面阶段的错误时,需要沿图中左侧的反馈线返回前面你的阶段,修正前面阶段的产品之后再回来继续完成后面的阶段的任务。

瀑布模型的优点

  • 可强迫开发人员采用规范的方法(例如,结构化技术);
  • 严格地规定了每个阶段必须提交的文档;
  • 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证;

各个阶段产生的文档是维护软件产品时必不可少的,没有文档的软件几乎是不可能的。遵守瀑布模型的文档约束,将使软件维护变得比较容易一些。由于绝大部分软件预算都花费在软件维护上,因此,使软件变得比较容易维护就能显著降低软件预算。可以说,瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型

瀑布模型的缺点

但是,“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。

在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样的。但是,仅仅通过写在纸上的静态的规格说明,很难全面正确地认识动态的软件产品。而且事实证明,一旦一个用户开始使用一个软件,在他的头脑中关于该软件应该做什么的想法就会或多或少地发生变化,这就使得最初提出的需求变得不完全适用了。

事实上,要求用户不经过实践就提出完整准确的需求,在许多情况下都是不切实际的。总之,由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发的软件产品不能真正满足用户的需要。

软件工程--瀑布模型特点详解相关推荐

  1. 『软件工程2』详解软件工程和软件过程模型

    文章目录 一.软件工程的定义 1.Fritz Bauer在NATO上给出的定义 2.Barry Boehm 3.IEEE在软件工程术语汇编中的定义 二.软件工程的层次 1.软件工程三个要素 2.软件工 ...

  2. 『软件工程6』详解软件项目管理之软件范围与估算

    软件项目管理--软件范围与估算 一.软件项目计划 1.目标 2.步骤 二.软件范围 1.软件范围定义 2.软件范围--引例 三.影响估算的因素 四.软件项目资源 1.软件项目资源构成 2.分析图 3. ...

  3. 『软件工程1』详解软件是什么

    软件基本概念 一.什么是产品 二.软件的双重角色 三.软件的涵义及特征 四.软件应用 五.软件危机 六.软件神话 一.什么是产品 1.从用户的角度 产品实际上就是信息,以某种方式使得用户世界更加美好 ...

  4. 软件工程--增量模型详解

    增量模型 增量模型也成为渐增模型,如下图所示. 使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计.编码.集成和测试.每个构件由多个相互作用的模块构成,并且能够完成特定的功能.使用增量模型时 ...

  5. 软件工程--总体设计过程详解

    总体设计过程 总体设计过程通常由两个主要阶段组成:系统设计阶段, 确定系统的具体实现方案:结构设计阶段, 确定软件结构.典型的总体设计过程包括下述9个步骤. 1. 设想供选择的方案 如何实现要求的系统 ...

  6. 项目开发——【流程图】软件工程程序流程图详解《如何正确绘制项目开发流程图》

    程序流程图详解 介绍:通过图形符号形象的表示解决问题的步骤和程序.好的流程图,不仅能对我们的程序设计起到作用:在帮助理解时,往往能起到"一张图胜过千言万语"的效果. 一.程序流程图 ...

  7. 2010年系统架构师考试题详解

    原文地址为: 2010年系统架构师考试题详解 考试科目一:综合知识 采用微内核结构的操作系统提高了系统的灵活性和可扩展性,(1) (1)A.并增强了系统的可靠性和可移植性,可运行于分布式系统中 B.并 ...

  8. 【软件分析】软件分析、设计与建模迭代式详解

    软件分析.设计与建模迭代式详解 1.introduction 1.1 OOA/D 1.2 Iterative, Evolutionary, and Agile 2.Case Study and Req ...

  9. 软件测试面试受挫?——我整理了一份超全面试题详解

    假如你明天就要去面试了,每家公司的业务不一样,对测试的要求也不一样,下面根据我工作这几年的面试经验,加上之前收集的资料,整理出来了一套超全的面试题详解(附赠答案),字节跳动.阿里.百度.腾讯.快手.美 ...

最新文章

  1. 超详细的Python中的字符串常识【赶紧收藏】
  2. Kubernetes 稳定性保障手册 -- 极简版
  3. 第四范式携手工银科技 首批入驻雄安人工智能算法开放平台
  4. dockerfile安装yum_Docker镜像-基于DockerFile制作yum版nginx镜像
  5. 【嵌入式】C语言高级编程-数组和结构体初始化(02)
  6. android 6.0动态权限问题
  7. 用计算机弹奏曲子童年,5.这首曲子使我想起了我的童年.十.书面表达现在.计算机游戏非常盛行.这是一件好事还是一件坏事?请你用英语写一篇短文来陈述自己的观点.并说明理由.字数:80-120....
  8. effective C++ 条款 11:在operator= 处理‘自我赋值’
  9. Fantastical 2如何编辑事件?
  10. 【贪心 哈夫曼树】bzoj2923: [Poi1998]The lightest language
  11. 回顾2019,展望2020
  12. solr自定义分词器
  13. 笔记本重装win7旗舰版原版操作系统
  14. zend studio 12.5 安装aptana
  15. 天蓝色在ps中的色值_天蓝色事件网格集成测试
  16. 你深入解析过java虚拟机:C1编译器,从HIR到LIR吗?
  17. Python下的自然语言处理利器-LTP语言技术平台 pyltp 学习手札
  18. 损失惨重!数据中心失火,360万个网站下线,Rust游戏25台服务器数据永久丢失...
  19. uniapp图片不显示 - 变量动态修改图片地址不生效 - 图片src路径错误
  20. HP工作站进入BIOS

热门文章

  1. Java学习路线图,看这一篇就够了!
  2. GO语言之strings包
  3. html5文本域边框管理,表单控件之富文本框实践
  4. Android 小部件播放视频
  5. 安装js包管理工具(node.js、yarm)及代码编辑工具(vs code)
  6. 关于SAP 打印时 特殊字符的输出
  7. DNS服务器主从文件加载失败,BIND主从服务器配置以及故障排除
  8. Android 选择器
  9. 第一次帮忙组装台式机
  10. Web使用记录挖掘_web挖掘