相信这张图大家一定见过,它描述了在软件开发各个阶段,发现并修改bug所需的相对费用。 例如,一个本应在设计阶段发现的bug,如果一直到部署并开展应用之后才被发现, 那么修改这个bug所花费的代价是设计时修改的代价的470倍-880倍。

relative-cost-per-life-cycle.png

设计阶段是在选定方向,而编程则是朝着目标前进,测试就是检查有没有达到目的地。 如果最初选择了错误的方向,那么无论如何努力前进也无法到达目的地, 事后走回头路会花费更多的时间。最近在开发中几次验证了这个事实。 一次是在详细设计审查时发现了设计中的一个重大方向性错误, 如果没发现并继续编程,测试阶段再去改代码就会使得代码、测试用例等完全重做, 浪费大量时间。另外一个例子就是以前开发的一个项目, 当时没有做详细设计而直接开始编程,就等于放弃了修改bug效率最高的设计阶段, 增大了项目风险。

因此在软件开发中,最重要的阶段不是测试,而是设计(概要设计和详细设计)。 做好设计文档并严格审查,就能大幅度地减少开发风险,降低开发费用。