嘿伙计我有一个关于突变测试的问题,这里是示例代码
//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)如果可能,找一个杀死突变体的测试输入。
答案 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
。有许多输入可以满足繁殖,这意味着突变体可以被杀死 - 测试是否真正杀死了突变体取决于测试是否对结果产生了影响。