探秘瀑布式软件开发的“错误起源”

最近一直在反思一个问题,那就是瀑布式软件开发的问题究竟出在哪儿了?这个问题首先要先问问瀑布式开发的鼻祖--Winston Royce,而看了Royce当年的论文之后,有不小的发现。其实他当时提出瀑布式软件开发就已经指出这个过程存在很大的问题,在论文中他提出,瀑布式开发中测试在很靠后的阶段才第一次介入(接触到软件),如果发现设计中(或需求上)的问题结果很严重。
论文的原文如下:
Screen Shot 2015-01-04 at 9.48.47 PM
结果不言而喻,提出者已经质疑的一个理论,被无限放大了。

接下来从另外一个角度继续探究这个问题,即瀑布式软件开发是从哪儿学来的?我们很容易的可以从制造业的流水线工厂内找到相似的模型。针对制造工厂的生产环节,努力做到的一点是标准的(相同的)输入,经过流水线后,会产生标准的(相同的)输出。因此在输入的时候就要想尽办法要让内容保证标准。如下图,瀑布式软件开发也在做同样的事情。
1.pic
所以在瀑布式软件开发中,首先要做的事情是尽可能的收集需求,收集的越多越好,越详细越好;接着就是做需求分析和设计,这个阶段也是追求完美,最后根据这些完美的详尽的文档制定出一份无懈可击的计划,然后开发团队按照计划执行就搞定了。
如果发生需求变更怎么办,有需求变更委员会。据我个人的经验,需求变更是很难通过需求变更委员会的批准的。因为瀑布式软件开发会认为我都已经做完设计了,这个时候变化会带来大量返工。所以越到后面的阶段,变更越难。

那么瀑布式软件开发有没有优点呢?下面我们看看瀑布式软件开发有哪些优点:【翻译自http://www.waterfall-model.com/

  • 在进入下一个阶段之前必须完成当前阶段的工作。因此如果该阶段有问题可以很容易的发现。
  • 许多重要信息都留在纸面上。新员工进入项目时,可以很方便的知道进行到哪儿了。
  • 瀑布式软件开发方法几乎所有的软件开发者都熟悉,也很容易采用。

最后,你怎么看呢?