变体测试(Mutation Testing):发现程序隐藏的缺陷

104 阅读2分钟

变体测试(Mutation Testing):发现程序隐藏的缺陷

什么是变体测试

变体测试是一种白盒测试方法,用于测试测试用例的有效性。在变体测试中,变体测试框架会对程序进行微小的改动,例如更改变量名、运算符等,然后运行测试用例。如果测试用例能够检测到这些变化并且失败了,就说明测试用例能够发现这个变体,也就说明测试用例是有效的。

变体测试的运行过程

变体测试的运行过程包括以下几个步骤:

  1. 改变程序:对程序进行微小的改动,例如更改变量名、运算符等。
  2. 运行测试用例:运行测试用例,以验证测试用例是否能够检测到改变后的程序中的缺陷。
  3. 分析测试结果:分析测试结果,确定测试用例的有效性,同时确定程序中的缺陷。

image.png

变体测试当中蕴含的假设

为什么变体测试只需要进行微小的改动,就能够验证测试用例的有效性呢?这主要是基于两个假设:

1.称职程序员假设:假设程序员正确理解了需求,并且实现的代码在功能上是正确的,没有犯低级错误或者故意引入缺陷。

2.程序的耦合效应:程序中的不同部分之间存在耦合效应,因此微小的改动可能会对整个程序产生影响。

变体测试可以做到什么

通过变体测试,可以实现以下效果:

  1. 检测测试用例的有效性:通过对程序进行微小的改动,可以验证测试用例是否能够检测到程序中的缺陷,从而确定测试用例的有效性。
  2. 识别测试弱点:变体测试可以帮助测试人员识别测试中的弱点,发现没有测试到的问题,从而完善测试用例。
  3. 发现程序中的缺陷:通过变体测试,可以发现程序中隐藏的缺陷,从而提高软件的质量。

变体测试的适用场景

变体测试主要适用于:

  1. 项目的逻辑很复杂,输入和输出不是以页面/UI等形式呈现的,比如计算费率、计算价格、信用卡逻辑、批处理功能
  2. 测试对象主要是接口测试的。 变体测试不适用于:
  3. 测试对象主要是前端的/有UI的/没有业务知识的的。

变体测试的推荐框架

  1. Javascript 代码:stryker