突变测试可达性感染和传播

时间:2015-11-25 06:32:16

标签: mutation-testing

嘿伙计我有一个关于突变测试的问题,这里是示例代码

//Effects: If numbers null throw NullPointException
// else return LAST occurance of val in numbers[]
//If val not in numbers [] return -1
 
public static int findVal (int numbers[], int val)
{
 int findVal = -1;
for( int i = 0 ;  i < numbers.length ; i++)     // for( int i = 1 ;  i < numbers.length ; i++)
 
if( numbers[i] == val)
findVal = i;
return (findVal);
}
 

(a)如果可能,找到一个未到达突变体的测试输入。

(b)如果可能,找一个满足可达性但不能感染突变体的测试输入。

(c)如果可能,找一个满足感染但不能繁殖突变的测试输入。

(d)如果可能,找一个杀死突变体的测试输入。

1 个答案:

答案 0 :(得分:2)

您没有在问题中包含可达性,感染和传播的定义 - 我假设如下:

  • 可达性:执行变异表达式
  • 感染:变异表达式的值与原始(未突变)表达式的值不同
  • 传播:感染状态(不同的表达值)导致可观察状态的感染

还要注意(d)不仅取决于输入,还取决于测试oracle - 实现传播并不意味着杀死突变体。

以下输入符合您的要求:

(a)没有这样的输入;每个输入都会执行循环初始值设定项int i = 0,即使numbers为空,因此numbers.length会引发NullPointerException。请注意,只有不调用findVal方法的测试才能到达突变体 - 调用findVal意味着满足此突变体的可达性。

(b)没有这样的输入; mutated表达式独立于方法参数(i=0!= i=1用于任何输入) - 满足可达性意味着满足此突变体的感染。

(c)numbers是一个空数组;如果numbers.length为0,则i的初始值(对于任何i&gt; = 0)并不重要,即使i的状态为{感染。为numbers传递null是另一个满足感染但不传播的例子。

(d)numbers是一个单元素数组,其元素值等于val。有许多输入可以满足繁殖,这意味着突变体可以被杀死 - 测试是否真正杀死了突变体取决于测试是否对结果产生了影响。