· 最终产品直到最后才出现,(但是软件的客户, 甚至软件工程师本人都需要尽早知道产品的原型, 试用)
这个“最终产品直到最后才出现“是很令人头痛的局限性, 考虑这个制造汽车的故事:
你(用户) 提出要发动机, 车身, 车窗, 方向盘, 加速踏板, 刹车, 手刹, 座位, 车灯…
生产商按照瀑布模型流程给你设计, 生产, 六个月后交付。
看到样车后…
你提出– 我当初忘了一件小事, 要有倒车灯
§ 当倒车的时候, 倒车灯会亮
生产商说:
§ 我要重新设计车尾部,加上倒车灯,把车底拆开,安装线路, 修改传动装置把倒车档和倒车灯联系起来。。。我得重新开始
你说: 这不是很小的一件事么?
这是小事还是大事?
它有适用范围么? 我认为有:
· 如果产品的定义非常稳定, 但是产品的正确性非常重要, 需要每一步的验证.
· 产品模块之间的接口, 输入和输出很好用形式化的方法定义和验证。
· 使用的技术非常成熟, 团队成员都很熟悉这些技术
· 负责各个步骤的子团队分属不同的机构, 或不同的地理位置, 不可能做到频繁的交流。
瀑布的各种变形