测试三大难题之一 “测试有效性” 的应对策略

科技   2024-07-01 19:19   英国  

在《软件测试三大难题:我们必须面对和解决》文章中提到三大难题,前面已经讨论了两大难题:

下面则讨论最后一道难题:“测试有效性”。
测试有效性,如前面所说,它更关注如何测的问题、更关注测试过程的效率,即如何在有限的资源和时间内,最大化测试的价值。就这一点,其实三年前发表过一篇文章:如何最大化软件测试效能?(附分享的PPT),把这问题说得比较透测。
如果更准确说,测试有效性更关注每一项测试、每一次测试都是有效的,没有做无用功。之前,有同学分享过在单元测试的有效性,即用变异测试来检验测试的有效性。简单说,代码中某个被测试的条件做了改变,原先测试这项条件的测试用例能够发现这个Bug,即能够杀死所发生的变异。否则,原先测试这项条件的测试用例不能发现这个Bug,说明这项测试用例是无效的。
那么对接口测试、系统测试,也可以引入类似的概念来检验测试的有效性。只是在单元测试的代码中注入缺陷比较容易,在系统级注入测试会复杂,甚至引起一连串的问题。看看能否将常规的测试和混沌工程联系起来?你可以试着回答这样的问题。
测试有效性,除了通过变异测试来检验之外,其实就是要:
  1. 消除重复测试
  2. 消除测试中的等待时间
  3. 消除没必要的测试
  4. 消除没有价值的测试
第一项比较简单,第二项比较明确,做起来还是需要功力,包括如何构建虚拟的测试环境,并和CI/CD集成,做到持续测试。
第3项和第4项看似接近,其实含义是不同的。根据测试目标或基于风险的测试策略,我们不需要做到非常接近100%的测试,例如我们根据80/20原则,只要覆盖80%的风险,那么再做覆盖额外20%的测试是不必要的。
没有价值的测试,是指测试没有从用户的角度出发、没有服务于产品愿景。例如,虽然我们做了某些功能的测试,但这项功能设计就是错误,这项功能就已经偏离用户需求、偏离产品愿景方向,做这类功能的测试,就是没有意义的。
测试有效性,也存在着和测试充分性的博弈,片面追求某一项目标,可能都会带来新的问题,达到平衡,才是最重要的。要想达到平衡,这又涉及测试策略,可以参考软件测试三大难题:我们必须面对和解决》。
测试有效性,也可以参考我和两位朋友联合翻译的一本书《Effective in 软件测试》。
这周在英国剑桥大学,就先写这么多。每一位读者可以有更多的科学、哲学的思考,把测试引向更有价值、更高效的测试之路上。

(剑桥的数学桥,2个小时之前拍摄)

PS:欢迎提交AiDD北京站(8月16-17)、QECon上海站(9.21-22)的议题,如有问题,请留言。

软件工程3.0时代
由于大模型(LLM)正在改变着千行百业,软件工程(SE)更是首当其冲,迎来软件工程3.0新时代:模型驱动研发、模型驱动运维。本公众号将致力于研究SE3.0时代的软件研发新范式、理论与方法,介绍SE3.0时代的工具与实践。
 最新文章