本节书摘来自异步社区《Scrum要素》一书中的第1章1节起初:瀑布方法,作者【美】Chris Sims,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1 起初:瀑布方法
Scrum要素
1901年的时候,一位名叫安妮·爱德森·泰勒的63岁冒险家,把自己装进木桶从尼亚加拉大瀑布上冲下去,没有任何明确的理由。浮出水面后,除了有些轻微伤口之外,看起来别无大碍,她随后宣称“我情愿走到炮口前面,被轰成碎片,也不要再来一遍瀑布冲流。”


如果你曾参加过使用瀑布方法、乱糟糟的大型企业级软件项目,兴许就能理解安妮的感受。然而让人惊讶的是,沮丧的开发人员对安妮不幸遭遇的认同感,和瀑布这个词的本义并无关系。

Winston W. Royce在他提交给1970年IEEE WestCom软件工程会议的论文[1]中,首次提出了著名的传统瀑布方法。Royce并未使用瀑布这个词,但他确定描述了一种线性顺序流程,其中每一阶段都必须等待上一阶段结束之后才能开始。颇有点讽刺的是,Royce之所以提供这个模型,就是要拿它当靶子说明不能这样做软件开发!如图1-1所示。


Royce继续说,人们肯定不愿意按此方式操作软件项目,接着又描述了一种他宣称绝对更高级的迭代式流程,该流程跟当今的敏捷方法论很相像。然而,不知怎么的,偏偏是描述瀑布模型的部分受到听众的追捧,并由此变得广为人知。

1985年,美国国防部决定采纳瀑布方法作为旗下所有项目的官方标准,不管是政府机构还是独立防务承包商都要遵守此标准。此事件巩固了“瀑布”的地位。瀑布模型由此成为所有企业级软件开发项目的可信模型。

到了21世纪,就连政府也开始隐隐地感觉到,瀑布模型可能是有缺陷的。2005年NASA一篇介绍此方法的官方文档[2]写到,“一些大型系统的失败或取消被认为跟标准瀑布模型有关。它还非常昂贵。”文中接着还提到,“极限编程”看似很有前途。

4年后,NASA的一篇新闻采访引起了骚动,他们宣布其工程师设计发明了NASA自己的敏捷方法论,名为“大师风味极限编程(Extreme Programming Maestro Style)[3]”。我们知道,这听起来更像是在In-N-Out汉堡店[4]里合着薯条一块点餐的东西,但NASA却用来开发火星登陆者机器人的控制程序!

定义瀑布
瀑布模型将开发和交付企业软件项目的流程分割为相互独立的阶段:

1.需求收集

2.设计

3.编码

4.测试

在瀑布流程中,每一步骤都必须等待前一步骤结束后才能继续,也只有等待所有步骤都结束后才有可能向客户交付价值。

在图1-1上你可以很清晰地看出“瀑布”这个名字的来由,开发流程正是从一个阶段流向下一个阶段,(往往都是不折不扣地)带着项目向下冲,不可阻挡。

瀑布方法的支持者喜欢使用这种方式的确有原因。对新手来说,用“瀑布”来安排进度和作汇报,首席执行官、首席财务官、企业律师和其他干系人在签合同与定预算的时候才能用上熟悉的工具和流程。毫无疑问,让这些家伙拥抱变化是难度很大的挑战,难度远远大过改变那些最固执的项目经理和开发人员而让他们接受敏捷。

设计方面,“瀑布”支持者所坚持的哲学是大设计前置(BDUF,Big Design Up Front),这也是众多计划驱动型软件开发方法论的普遍做法。(使用BDUF短语和简写最多的是它的批评者,发音时嘴唇略微卷曲,颇像是一些学生对Big Man On Campus[5]短语或BMOC简写的使用,他们用来称呼学校里的“笨蛋运动员”。)

人们往往会举出如下论证支持BDUF,在开始实现之前先进行“完美化”(perfecting)设计,能够早点捕获错误和缺陷,从而降低项目全过程成本。

美中不足之处就在于那词语太不现实了:完美化。如果你是制造汽车,那么先调生产线再投入生产绝对是优良方案。要保证挡泥板和车体外壳吻合并不难,设计图纸阶段就可以做到,如果很晚才发现它们不匹配,那就得重塑贵重模具,还会耽误整个生产流程。

BDUF的思想基础在于,在投入生产前先“完美化”产品设计是可以做到的。如果是在说汽车挡泥板,那倒是说得没错……但软件产品是复杂系统,而不是静态物件,毫无经验数据只能设计出致命的烂系统,在出问题前把事情搞得一团糟,谁也不知道会有什么后果,留下一堆烂摊子等你收拾。

对软件开发行业来说这意味着,就算你在绘图板前耗上一整天,创造出了惊人的美妙理论,让人期待不已。但是,就在你将它付诸实践的那一刻……“我的妈呀”[6],各种意料之外的状况和并发症开始涌现。更糟糕的是,说不定什么时候,你的客户就决定不再和这个软件继续玩了。

[1] 译者注:论文下载地址,http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/ waterfall.pdf。

[2] 译者注:可于如下链接阅读此文档,http://web.archive.org/web/20050310133243/http: //asd-www.larc.nasa.gov/barkstrom/public/The_Standard_Waterfall_Model_For_Systems_Development.htm。

[3] 译者注:可于如下链接阅读此文档,http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/ 20090029264_2009028698.pdf。

[4] 译者注:http://zh.wikipedia.org/wiki/In-N-Out汉堡。

[5] 译者注:Big Man On Campus为俗语,常用来称呼学校的某个“重要”学生,通常用于嘲弄不太聪明的运动员,参见http://idioms.thefreedictionary.com/big+man+on+campus。

[6] 译者注:原文Whoa Nelly,现代美语中用来指代某物(例如汽车、自行车或某状况)或某人突然失去控制,出现在面前并造成了无法预期后果,可参考http://www.urbandictionary.com/define.php?term=whoa%20nelly。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

《Scrum要素》—第1章1节起初:瀑布方法相关推荐

  1. 《软件工程(第4版?修订版)》—第1章1.5节 系统的方法

    本节书摘来自异步社区<软件工程(第4版?修订版)>一书中的第1章1.5节 系统的方法,作者[美]Shari Lawrence Pfleeger , [加]Joanne M.Atlee,更多 ...

  2. 如何建立图像数据矩阵和图像显示灰度之间的关系!_放射技术考试第四章第一节 数字图像的特征...

    第四章第一节   数字图像的特征 一.模拟与数字 (一)模拟信号 在信息科学中,能够计数的离散量称为数字信号(整数),不能计数的连续量称为模拟信号. 模拟是以某种范畴的表达方式如实地反映另一种范畴.例 ...

  3. 软件构造 第二章 第一节 软件生命周期和版本控制

    软件构造第二章 第一节 软件生命周期和版本控制 基本内容 Software Development Lifecycle (SDLC) Traditional software process mode ...

  4. 老李推荐:第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发 1...

    老李推荐:第14章4节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-端口转发 在初始化HierarchyViewer的实例过程中, ...

  5. 第二节认识计算机教案,第二章 第二节 局域网的构建 教学设计_博客

    <第二章 第二节 局域网的构建 教学设计_博客>由会员分享,可在线阅读,更多相关<第二章 第二节 局域网的构建 教学设计_博客(3页珍藏版)>请在装配图网上搜索. 1.第二章 ...

  6. 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用 1...

    老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用 上一节我们描述了monkey的命令处理入口函数run是如何调用optionPro ...

  7. 老李推荐:第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例 1...

    老李推荐:第3章3节<MonkeyRunner源码剖析>脚本编写示例: MonkeyImage API使用示例 在上一节的第一个"增加日记"的示例中,我们并没有看到日记 ...

  8. 工程项目管理丁士昭第二版_2021年软考系统集成项目管理工程师知识点预习第十四章第二节...

    听说99%的同学都来这里充电吖 为了方便大家尽早投入2021年的软考考试备考中,我们已开始连载<系统集成项目管理工程师>知识点,今天带来的是 第十四章 第二节 编制询价~ 知识点:第十四章 ...

  9. 老李推荐: 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 1...

    老李推荐: 第8章4节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-启动AndroidDebugBridge 上一节我们看到在启动AndroidDebugBri ...

最新文章

  1. NS4146 D类音频放大电路
  2. Codeforces 603A Alternative Thinking
  3. 多线程----join插队
  4. mysql 学习笔记10 常用数学函数
  5. Weblogic EJB 学习笔记(2)精
  6. day10-列表生成式
  7. 开发者该如何利用 C# 加解密?
  8. 学完python能做什么-学完Python后能做什么?
  9. 机器视觉行业的很多知识
  10. 深度学习入门系列(总结篇)
  11. 二战十大致命武器之“喷火”式战斗机
  12. wps软件打不开共享超链接_WPS超链接打不开?
  13. 区块链架构与扩容方案
  14. css 设置鼠标经过的时候鼠标变成手状假装是个链接
  15. mac简体拼音打出来是英文_Mac OS X自带中文拼音输入法详解
  16. 形容词做状语(少见)
  17. EXCEL基础:XLOOKUP函数的简单使用
  18. Python实现AI图像识别-身份证识别
  19. 四川省2021年卫生副高考试成绩查询时间,四川省2021年卫生资格考试成绩查询时间:6月4日起...
  20. 优化用电,安全省心,同为(TOWE)智能循环定时桌面PDU插座APZ-1013DX

热门文章

  1. Python运算符及用法(超级详细)
  2. 高效学习离不开清晰可倍速的网课||【计算机专硕】考研学习资源分享
  3. Linux使用坚果云
  4. 【老生谈算法】matlab实现FFT变换算法源码——FFT变换算法
  5. Override? Or Overwrite?
  6. 走进 DAO 时代:就像智能分布在各处的海星,当你打掉他身体的一部分,这个部分甚至会长成另一只海星...
  7. 论文写作课学习心得体会
  8. JavaScript高级进阶之设计模式 抽象工厂模式
  9. 利用大数据 构建用户画像 为电商平台 提供精准营销
  10. Java进制转换(二进制、八进制、十进制、十六进制)