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