谷歌测试定律的启示

发表于:2023-1-29 10:07

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:肖哥shelwin    来源:测试不将就

  在软件测试中,谷歌测试定律是一个非常重要的定律。
  这个定律的内容并不复杂。它描述了不同的测试级别中,所发现的软件Bug的解决成本(Fixing Cost)之间的巨大差别。具体来说,随着测试级别从低级往高级推进(Small Tests -> Medium Tests -> Large Tests,或单元测试 -> 组件测试 -> 集成测试 -> 系统测试),测试中所发现的软件Bug的解决成本呈指数级增长。
  那么,这个重要的定律,对于我们有些什么样的启示呢?如何运用这个定律指导我们更好地开展软件测试工作?
  1重视低级别的软件测试
  为何要强调低级别测试(前期测试阶段)的重要性?在实际中,由于各种因素(测试覆盖度不够高、测试力度不够强、测试工具不够可靠、测试样本不够可信等),软件Bug可能会遗漏到后续测试阶段。但是从理论上说,每个测试阶段都有潜力发现尽量多的软件Bug。通过加大前期测试的投入、优化前期测试的过程、提升前期测试的效果,来减少遗漏到后期测试阶段的Bug数量,这条路是可行的。
  另外,根据谷歌测试定律,同一个软件Bug,在后期测试阶段被发现,相比在前期测试阶段被发现,其解决成本可能要高一个数量级。为了节省公司成本、提高产品质量,我们应该尽可能地在前期测试阶段发现更多的Bug。
  为此,我们务必要确保前期测试的有效性和覆盖度。前期测试阶段的高度自动化,有助于实现这样的目标。在总的测试资源有限的情况下,将更多的测试资源投入到前期测试阶段是必要的。反过来说,如果前期阶段的测试不充分,导致大量本该在前期测试阶段被发现的Bug遗漏到后期测试阶段才被发现。到时候,我们可能需要投入巨量的人力物力去解决这些Bug。这对部门和公司来说,将是难以承受之重。
  2千方百计缩短测试时间
  狭义的测试时间指测试步骤的执行时间,广义的测试时间指从开发人员提交代码到获得测试反馈结果的时间间隔。缩短测试时间,不仅有利于提升软件测试的生产力(单位时间执行更多的测试),而且有利于提升软件开发的生产力。
  很多时候,软件开发是一个反复提交代码的过程。如果测试的验证速度很快,那么代码的提交就会更频繁,软件开发的效率也就得到了提高。任何一个测试阶段,无论是单元测试还是系统测试,加快测试速度、缩短反馈时间,都是很重要的。在实际中,通过改进系统的可测性、并行或分布式执行测试用例等,可以有效地提高测试速度、缩短测试时间。
  3测试工作要尽可能早地开展
  在敏捷时代,测试无须等待软件开发完成之后才展开,而是与软件开发同步进行。具体来说,在每个迭代周期,软件开发致力于交付一个或多个可供用户使用的功能点。这有助于测试工作的提早介入。测试开展得越早,软件Bug发现得也就越早,解决软件Bug的成本也就越低。
  在实际中,测试工作的开展不仅受制于软件开发进度,还受制于测试自身所依赖的外部软件和工具。通过使用模拟器技术(即Mock),我们可以减少对外部的依赖,不仅避免测试进度受制于人,而且将测试更多地聚焦在被测对象身上。
  4CBRT: 基于代码改动的回归测试
  所谓CBRT(Change-Based Regression Testing),指的是每次代码改动均执行回归测试用例。在软件开发中,代码的改动(Change)是常态。新功能实现、Bug修复、代码重构等都会带来代码的修改。回归测试(Regression Testing)是确保代码改动不破坏已有功能的重要举措。然而,回归测试能不能发挥更大的作用,与回归测试的执行时间有关系。是代码每次改动就执行回归测试,还是许多改动合在一起后再执行回归测试,有很大差别。前者,回归测试一旦发现Bug,责任人是清楚的,解决Bug也更容易;而后者,回归测试一旦发现Bug,单单排查原因、找到责任人就需要耗费大量的时间。因此,代码一旦发生改动就立即执行回归测试是很有必要的。
  在谷歌,考虑到每次代码改动均执行所有回归测试(测试集可能非常大)带来的开销较大。为此,基于对代码模块和测试用例的关联度分析,在谷歌,每次代码改动只执行回归测试子集,即只执行那些可能受到被改动代码影响的测试用例的集合。
  5对测试遗漏出去的每一个Bug进行EDA
  无论前期测试做得如何好,我们都不能百分之百保证不会遗漏Bug到后期测试阶段。也就是说,只要后期测试阶段发现了软件Bug,那就意味着前提测试阶段具有改进的空间。那么,如何持续地改进前期测试呢? 我们认为,针对每一个遗漏到后期测试阶段的软件Bug,至少有两件事情是可以做的。首先,开发人员需要做代码改动,而前期测试人员也应该针对测试用例做改进。这样,我们可以基于改进后的前期测试用例对代码改动进行验证。另外,前期测试人员需要进行EDA(Escaped Defect Analysis),即遗漏问题分析。不仅要分析为什么问题被遗漏了,更要给出具体和切实可行的改进措施,以举一反三,避免此类错误再次发生。只有持续地改进,我们才能把前期测试工作做得越来越好,从而最大程度减少遗漏到后期测试阶段的Bug数量。
  理论从实践中来,又回到实践中去。谷歌测试定律是从实践中总结出的测试定律,又反过来指导我们更好地进行测试实践。关于以上五点启示,您怎么看?

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号