2

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

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

4

1 回答 1

2

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

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

另请注意,(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已感染。传递 null fornumbers是另一个满足感染但不满足传播的示例。

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

于 2015-11-25T10:53:37.110 回答