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

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

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

时间: 2024-10-06 20:35:53

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

《Scrum要素》—第1章2节加入敏捷实践者行列

2 加入敏捷实践者行列 Scrum要素 虽然现在还只是遐想,但我想我能够弄到钱先折腾个概念出来,随后再把它包装成一个好点子. --伍迪·艾伦 2001年,17位超级极客齐聚犹他州的雪鸟滑雪山庄,共同探索有关软件开发未来发展的共同理念.其中包括Scrum.极限编程.水晶.特性驱动开发等一些新生方法论的发起者,还包括Jim Highsmith所说的"寻求文档驱动型重型软件开发流程替代品的同道中人".Jim为后人记录下了这些事件. 与会者达成了一致意见,将这场"运动"命名

《Scrum要素》目录—导读

版权声明 Scrum要素 Simplified Chinese translation copyright 2013 by Posts and Telecommunications Press ALL RIGHTS RESERVED The Elements of Scrum, ISBN-13: 978-0-9828669-1-7 by Chris Sims, Hillary Louise Johnson Copyright 2012 by Chris Sims and Hillary Loui

Programming MS Office 2000 Web Components第二章第二节

web 第二章第二节 电子表格组件的高级功能 我们已经讨论了电子表格组件的大部分基本功能,现在让我们转向一些高级功能.大部分的这些高级功能Excel2000都不包含,因为这些是组件专门需要的特殊功能.而那些Excel2000中存在的功能,在电子表格组件中也被增强,使得可以提供一些新的功能. 属性绑定和实时数据 "属性绑定"是电子表格组件中最新奇的新功能之一,它是指控件能够将同一个web页面上其它对象的属性和方法用作单元值或公式参数的能力.电子表格控件使用标准的COM机制来实现绑定到属性

Programming Microsoft Office 2000 Web Components第一章第一节

web 第一章第二节 Office Web Components是什么? Office Web Components是一组的COM控件,设计的目的是为众多的控件容器提供交互的电子表格建模,数据报表和数据可视化功能.OWC库包含四个主要的组件:电子表格组件,图表组件,透视表组件和数据源组件.我们将在这一节中简要论述每个控件,然后在后续各章中讨论更多细节. 注释: COM也被称作ActiveX.当微软发明了术语"ActiveX"来描述COM技术时,我正在Visual Basic小组,这个术

web.config文件自定义配置节的使用方法的一个简单例子

web web.config文件自定义配置节的使用方法的一个简单例子用来演示的程序名为MyApp,Namespace也是MyApp 1.编辑web.config文件 添加以下内容,声明一个Section <configSections>    <section name="AppConfig" type="MyApp.AppConfig, MyApp" /> </configSections>   声明了一个叫AppConfig的

Word中批量删除节信息的方法

Word中批量删除节信息的方法   这时要想编辑页码,只有两个思路,要么一节一节的编辑(因为页码的编辑只在当前节内生效);要么就批量删除掉所有的节,再重新编辑.如果这篇文档只有十几页,我可能就会新建一个空文档,再通过复制粘贴的方法去除那些摸不着边儿的分节符了.但是此文档过于臃肿,如果这样操作甚至会死机的.而且,格式刷和"清除格式"对各种分隔符均无效. 因为批量替换空格等字符可以用过替换来实现,于是想到"可否替换掉分节符呢".Ctrl+H调出替换对话框,在"

Word2013文档中分节符插入方法

  Word2013文档中分节符插入方法          第1步,打开Word2013文档窗口,将光标定位到准备插入分节符的位置.然后切换到"页面布局"功能区,在"页面设置"分组中单击"分隔符"按钮,如图所示. Word2013 第2步,在打开的分隔符列表中,"分节符"区域列出4中不同类型的分节符: (1)下一页:插入分节符并在下一页上开始新节; (2)连续:插入分节符并在同一页上开始新节; (3)偶数页:插入分节符并在下一

《路由设计的优化》一第1章 网络设计目标与方法1.1 网络设计目标

第1章 网络设计目标与方法 路由设计的优化进行网络扩容.网络设计或重新规划时,无论网络规模大小,首要考虑的问题是什么?是将要使用的链路类型.路由器类型,抑或是采用何种路由协议?我相信都不是!因为大家首要考虑的应该是网络的用途,网络应具备哪些功能特性?网络设计的目标是什么?网络应采取何种流量承载方式以最优化地满足商业需求? 1.1 网络设计目标 路由设计的优化由于在网络用户眼里,网络就是一系列应用的集合,而不是一系列线路.光纤连接器.协议.路由器和交换机的集合,因而在设计网络时,必须考虑网络为支撑

《精通QTP——自动化测试技术领航》—第1章11.节自动化测试从零开始

第1章 测试脚本开发从零开始1.1 自动化测试从零开始精通QTP--自动化测试技术领航阶段要点 自动化测试的优势与劣势. 引入自动化测试的条件. 避免自动化测试的因素. 实例解读软件测试自动化. 严格的自动化测试流程. 自动化测试用例设计详解. 1.1.1 什么是自动化测试1.1.1.1 引言"自动化测试",一个耳熟能详的软件测试行业术语.一个绝大部分测试界人员的奋斗目标.一个听上去就很有感觉的名词.一个甚至能牵动未来测试界发展水平快慢的技术.是的,以上说的几点都没有错,它就是软件测试