项目管理 那些年被误解的瀑布模型 (waterfall model) - 邹欣

laofo · 2014年03月25日 · 2 次阅读

有人这样说

瀑布模型 (waterfall model) 当软件工程还是年幼的行业的时候, 它从别的成熟行业 (硬件设计, 建筑工程) 借用了不少经验和模型。在那些” 硬” 的行业中, 产品大多遵循 [分析 -> 设计-> 实现 (制造) -> 销售 -> 维护] 这个流程。 由于在硬行业中产品一旦大规模生产, 要再返回去修改时非常困难, 甚至不可能的。因此这个模型描述了单向的, 不可逆的生产过程。

Winston Royce 在 1970 年的论文 “Managing the Development of Large Software Systems” (link) 第一次明确地描述了这个模型 (虽然他没有用 waterfall 这个词)。

但是要注意的是, Winston 并不推崇严格意义上的瀑布模型, 相反他指出了此模型的各种缺陷, 并提出了一些改进的办法。

例如, Winston 正确地指出了在设计大型系统的时候, 要做相邻步骤的回溯,解决上一阶段未能解决的问题: [attach] 2298[/attach] 又如: Winston 指出, 要让产品成功, 最好把这个模型走两遍,先有一个模拟版本 (simulation of final product), 在此基础上收集反馈, 改进各个步骤, 并交付一个最终的版本: [attach] 2300[/attach] Winston 还指出, 用户的及早介入, 讨论,复审是很重要的。他建议–

Customer involvement should be formal, in-depth, and continuing.

他也提到在这个模型下文档的重要性: 下面的图中显示了 8 种文档: [attach] 2301[/attach] 有讽刺意义的是, 似乎其他人并没有仔细读这个论文, 一些人看了图, 觉得很爽, 就拿来用了,而且希望 waterfall 一次就把产品做好,同时产生出好些有用的文档。 一时间 Waterfall 传播开来了。对于它的缺点, 一些人不正确地指责 Winston。

可以看看网友做的漫画, 看看 Waterfall 的传播和误解:

the rise and fall of waterfall: Royce Winston

尽管狭隘定义的瀑布模型有这样那样的问题, 我个人认为这个瀑布模型还是反映了人类解决问题的一个常用的模型。它在软件工程中的局限性在于–

· 各步骤之间是分离的,(但是软件的生产过程中的各个步骤不能这样严格分离出来。) · 回溯修改很困难甚至不可能, (但是软件生产的过程需要时时回溯) · 最终产品直到最后才出现,(但是软件的客户, 甚至软件工程师本人都需要尽早知道产品的原型, 试用)

这个 “最终产品直到最后才出现 “是很令人头痛的局限性, 考虑这个制造汽车的故事:

你 (用户) 提出要发动机, 车身, 车窗, 方向盘, 加速踏板, 刹车, 手刹, 座位, 车灯… 生产商按照瀑布模型流程给你设计, 生产, 六个月后交付。 看到样车后… 你提出– 我当初忘了一件小事, 要有倒车灯 § 当倒车的时候, 倒车灯会亮 生产商说: § 我要重新设计车尾部,加上倒车灯,把车底拆开,安装线路, 修改传动装置把倒车档和倒车灯联系起来。。。我得重新开始 你说: 这不是很小的一件事么?

这是小事还是大事?

它有适用范围么? 我认为有:

· 如果产品的定义非常稳定, 但是产品的正确性非常重要, 需要每一步的验证. · 产品模块之间的接口, 输入和输出很好用形式化的方法定义和验证。 · 使用的技术非常成熟, 团队成员都很熟悉这些技术 · 负责各个步骤的子团队分属不同的机构, 或不同的地理位置, 不可能做到频繁的交流。

瀑布的各种变形 为了解决瀑布模型的问题, 大家在实践中提出了各种变形:

· 生鱼片模型 (各相邻模块像生鱼片那样部分重叠) [attach] 2302[/attach] [attach] 2303[/attach] 这个模型解决了各个步骤之间分离的缺点, 同时也带来了一些困扰– 究竟什么时候上一个阶段结束呢? · 大瀑布带着小瀑布 为了解决不同子系统之间进度不一, 技术要求迥异, 需要区别对待的问题。有人引入了子瀑布模型:

在这种瀑布群下, 要把各个子系统统一到最后做” System Testing” 的阶段,难度不是一般的大啊! 但是在这样的开发流程中, 用户只有到了最后才能看到结果, 用户真是等不起。 [attach] 2304[/attach]

作者:邹欣 http://www.cnblogs.com/xinz/archive/2011/10/07/2200511.html

需要 登录 后方可回复。