什么是谷歌测试定律?

软件测试 (Software Testing) 是软件工程 (Software Engineering) 中不可或缺的一个过程。软件测试触发预定义的测试步骤、比较软件的实际输出结果和预期输出结果,以此来评价软件质量 (Quality),判断软件的实现是否满足设计目标和用户需求。只有经过严格测试的软件,才能发布给用户使用。在实际中,根据测试阶段的不同,软件测试可以分为:

在谷歌,测试的分类更多地强调测试范围,而不是测试阶段。具体来说,谷歌把软件测试分为:

在长期的测试实践中,谷歌发现,不同的测试范围或阶段中发现的软件 Bug(即缺陷、漏洞,下同),其解决成本 (Fixing Cost) 具有极其显著的差别。举例来说,解决一个小范围测试 (单元测试) 中发现的软件 Bug 需要花费的成本是 5 美金左右,解决一个中等范围测试 (集成测试) 中发现的软件 Bug 的成本在 500 美金左右,而解决一个大范围测试 (系统测试) 中发现的软件 Bug 的花费则高达 5000 美金。

title

谷歌的这一经验数据在软件行业中引起了广泛共鸣、得到了许多人的认同。在这里,笔者以更加科学的方式来描述谷歌的这一发现,并将其命名为谷歌测试定律

[谷歌测试定律]. 随着测试阶段的推进 (Small Tests -> Medium Tests -> Large Tests,或单元测试 -> 组件测试 -> 集成测试 -> 系统测试),测试中所发现的软件 Bug 的解决成本呈指数级增长。

为什么谷歌测试定律成立?

软件 Bug 一旦被发现,我们需要做的事情是确定的,那就是找到软件 Bug 产生的原因、修改软件代码、然后验证代码的修改是否确实解决了 Bug。因此:

Bug 解决成本 = Bug 定位成本 + 代码修改成本 + 修改验证成本

综合 Bug 定位成本、代码修改成本和修改验证成本,我们发现,软件 Bug 的解决成本确实是随着测试阶段的推进成倍增加的。从数学角度看,总的趋势就是指数级增长的。至于这个指数曲线的底数的大小 (决定指数曲线增长幅度),虽无法精确地给定,但可以确定的是,当软件项目越大型、软件架构越复杂、参与人员越分散时,指数曲线的底数就越大,Bug 解决成本的增长幅度就越快

谷歌测试定律的启示

最后,欢迎关注我的个人微信公众号《测试不将就》,我们一起探讨高质量软件养成之道。


↙↙↙阅读原文可查看相关链接,并与作者交流