修复和预防Bug的成本的量化对比

来源:互联网 发布:java时间转换成毫秒 编辑:程序博客网 时间:2024/05/01 06:56
当我们打算提高软件质量的时候,首先考虑到的可能就是购买新工具的成本和实施新工具的人力成本,以及可能会因为增加了新的测试过程而“延长”的开发生命周期。但实际上,首先我们应该考虑从现在的产品生命周期中查找和修复问题产生的成本。除了这些直接的成本之外,我们有没有考虑过因为错过发布日期而错失的机会成本,以及由于客户不满意或者产品召回而造成的信誉损失?

在《Google如何测试软件 —— 帮我像Google一样测试》(“How Google Tests Software –Help me test like Google”)一书中,作者介绍了从开始到现在,Google™软件的测试流程是如何演变的。因为测试不够全面而产生的问题曾严重阻碍了Google的成功之路。Google根据参与修复问题的工程师的数量来计算出由于质量不过关而增加的成本。于是他们立刻制定了一个计划,决定通过持续测试来提高软件质量,并且尽量在软件开发生命周期的早期进行测试,这样就能够把那些修复问题的工程师解放出来,去研发新功能,从而在市场中取得竞争优势。

下面的例子有点像一个中型汽车项目一年的数据,其中使用了一些数字来源于Google:


表1:Google的度量表


表2:自己的度量表


我们在做这个测试的时候,很可能会发现,我们的团队将30%-50%的时间都花在了修复bug上面,这些都是直接成本。想象一下,如果我们将这些修复bug的时间更多地用在产品的研发和新功能的实施上,会怎么样?如果我们的用户碰到的bug越来越少,因而我们在用户支持方面的成本也越来越低,又会怎么样?


如果客户对我们越来越满意,那么他们很可能会向我们购买更多的产品!


很多机构和 Google一样,成功地采用了持续的软件质量控制方法,他们已经发现在开发生命周期中进行自动化测试会会带来巨大的回报。而采用这种方法的关键在于,尽量在开发早期建立查找bug的测试平台 —— 也就是说尽量在修复成本最低的时候发现bug。


下面的数据是Google提供的样例成本,表示的是在不同的测试阶段发现bug并进行修复所需要的成本。这些数据清楚地说明:在开发过程中越早发现问题,修复这些问题所耗费的成本越低。


表3:Google修复问题的成本

既然我们已经知道了修复什么样的bug最耗时耗力了,我们就应该知道怎么做最能有效地减少bug,提升质量。发现和修复bug的平均成本并不会随着时间的过去而降低,但是通过改善测试流程并实现测试的自动化,能够总体降低维护成本。下面的图表说明,制定一个更加完善的测试流程是如何降低软件的维护成本的。

图:软件的维护成本随着软件测试流程的不断成熟而不断下降

不同的组织机构的测试流程的成熟度可能是不同的。有些机构可能根本没有正式的测试基础框架,而有些组织,比如Google,却有完善的测试框架和流程。大多数组织可能都处于这两个极端之间。

我们应该从哪里开始着手来提高质量呢?和大多数工程任务一样,最有效的方法就是制定一个有规则的、按步实施的流程。所有的改变都要以前面所做的改进为基础,如下图所示。


图:软件测试流程可以逐步完成

通过采取注重预防bug,而不是修复bug的方法,企业或机构就能解放更多宝贵的工程师资源,来研发新产品,从而开拓出更大的市场。

要减少修复bug的成本,最好先引进静态分析和代码覆盖率工具。实施这些工具的时候,不需要改变开发团队的工作流程,只是会生成一些可操作的指标来帮助提高质量。VectorCAST/Lint静态分析工具会报告有问题的以及难以维护的编码结构。VectorCAST/Cover代码覆盖率工具会报告源代码中哪些代码已经经过检测,以及哪些尚未经过检测。

各个研发机构要先确定他们的软件测试流程的成熟度,并能够和他们的团队一起了解他们所面临的挑战,帮助他们改进测试方案,在产品发布前减少bug,加快投放市场的步伐,提高投资回报率。


1 0