开发者测试的那些事第一篇

分支覆盖与变异测试

Posted by LJJ on October 12, 2019

分支覆盖与变异测试

  • 本文内容如题,是为了配合开发者测试Competition所做出的一些学习记录。我个人对测试的态度还是比较看好的,身为一个开发者具有测试思维,能够管理好自己的代码的结构,减小代码出错的机率。熟悉简单的单元测试、接口测试和集成测试也是一个优秀开发者应该具备的基本素质。

分支覆盖

  • 分支覆盖要求程序中每个条件判定语句的真值结果和假值结果都至 少出现一次。
  • 分支覆盖不仅考虑了各个条件判定语句的覆盖需求,还考虑了这些 语句分支的覆盖需求,因而较语句覆盖测试强度更高。

那么如下,对于程序来说,条件语句的真假分支至少被执行一次。 .

.

变异测试

  • 程序变异是指基于预先定义的基本操作对程序进行修改,进而得到源程序变异程序的过程。
  • 当源程序与变异程序存在执行差异时,则认为测试检测到变异程序中的错误,变异程序被杀死。
  • 变异测试是一种对测试集的充分性进行评估的技术,以创建更有效的测试集。
  • 变异测试可以度量测试用例缺陷检测能力。

若有代码:

if(a && b) c = 1;
else c = 0; 条件运算符如果用||来替换&&,就会产生以下变异:

if(a || b) c = 1;
else c = 0;

为了杀死这个突变,需要满足以下条件:

  1. 测试数据必须对突变和原始程序引起的不同状态覆盖。如:a=1,b=0可以达到目的。
  2. c的值应该传播到程序输出,并被测试检查。

弱突变覆盖需满足1,强突变覆盖需同时满足1,2。

以下是两个变异算子表:

  • 面向过程

.

  • 面向对象

.

  • 分支覆盖得分: branch score
  • 变异覆盖得分: mutation score