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

mutation testing reachability infection and propagation

大家好,我有一个关于突变测试的问题,这里是示例代码

//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) 如果可能,找到杀死突变体的测试输入。

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

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

另请注意,(d) 不仅取决于输入,还取决于测试预言——实现传播并不意味着杀死突变体。

以下输入满足您的要求:

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

(b) 不存在这样的输入;突变的表达独立于方法参数(i=0 != i=1 对于任何输入)——满足可达性意味着满足该突变体的感染。

(c) numbers 为空数组;如果 numbers.length 为 0,则 i 的初始值(对于任何 i>=0)无关紧要,即使 i 的状态已被感染。为 numbers 传入 null 是另一个满足感染但不满足传播的示例。

(d) numbers是单元素数组,其元素值为val。有很多满足传播的输入,这意味着突变体可以被杀死——测试是否真正杀死突变体取决于测试是否断言结果。