天天看点

软件质量的普遍原理

世界上没有免费的午餐,即使有,味道也一定不会好到哪里去。但是软件开发跟高级烹调技术差之十万八千里,并且软件质量是如此的与众不同。软件质量的普遍原理就是改善质量以降低开发成本。

理解这一原理依赖于理解一个很容易观察到的关键事实:提高生产效率和改善质量的最佳途径就是减少花在这种代码返工上的时间,无论返工的代码是由需求、设计改变还是调试引起的。软件产品的业界平均生产效率大约是每人每天10 到50行最终交付代码(包括所有非编码开支)。

敲出10到50行的代码也就只是几分钟的事情,那么每天剩下的时间是怎么度过的呢?

这一生产力数据显得如此低下 , 部分原因是这样的业界平均值把非程序员所花费的时间也纳入“每天代码行数" 的计算里了 。测试人员 、 项目经理、 行政支持的时间都包含在里面。诸如需求开发和架构设计这种非编码工作 , 也会在计算时被考虑进去。但这些都不是时间花费如此惊人的主要原因。

绝大多数项目的最大规模的一种活动就是调试以及修正那些无法正常工作的代码。调试和与此相关的重构或者其他返工工作 , 在传统的不成熟的软件开发周期当中可能消耗大约 50%的时间。只要避免引入错误 , 就可以减少调试时间 , 从而提高生产力。因此, 效果最明显的缩短开发周期的办法就是改善产品的质量 ,返工上面的时间总量。

更多的质量保证工作能降低错误率,但不会增加开发的总成本。

IBM的一个研究也得到了类似的结论:

缺陷最少的软件项目的开发计划时间最短,并拥有最高的开发生产率,消除软件缺陷实际上是最昂贵且最耗时的一种软件工作。

在最小的尺度上这一结论同样正确。1985年有人进行了一项研究,要求166 个专业程序员根据相同的规范来写程序,他们写出来的程序平均有220行代码,每个人平均花费时间略少于5个小时。令人十分惊奇的是,那些花费时间不多不少的程序员编写的程序错误最多,而那些花费时间较多或较少的程序员编写的程序所含错误则明显要少得多。

与传统的“编码一测试一调试"相比,先进的软件质量计划可能更省钱。这种计划把投入到调试和重构的资源重新分配到前期的质量保证工作中,而前期工作在产品质量上体现的作用会比后期工作更为明显,因此把时间投入到前期工作中,能让程序员在后期工作中节省更多的时间。

这一方法的最终效果是软件的缺陷更少,开发时间更短,成本也更低。