问题1:确认内部错误
问题2:如果可能,确定一个不执行错误的测试用例
问题3:如果可能,确定一个执行错误,但是不会导致异常状态的测试用例
问题4:如果可能,确定一个导致异常状态,但结果无误的测试用例
第一组代码:
public int findLast(int[] x,int y){
//Effects:If x==null throw
NullPointerException
//else return the index of the last element
//in x that equals y.
//If no such element exists,return -1
for(int i=x.length-1;i>0;i--)
{
if (x[i]==y)
{
return i;
}
}
return -1;
}
//test:x=[2,3,5];y=2
//Expected=0
回答1:根据Tarantula算法可得,“for(int i=x.length-1;i>0;i--)”一行可疑值最大,内部错误为,i>0应为i>=0。
回答2:“x=null;y=2”这个测试用例不会执行内部错误,直接抛出异常。
回答3:“x=[2,3,5];y=3”这个测试用例会执行内部错误,但不会引起异常状态。程序循环到3时就会输出i。
回答4:“x=[2,3,5];y=6”这个测试用例会引起异常状态但结果无误。无论是程序正确与否输出都是-1。
第二组代码:
public static int lastZero(int[] x){
//Effects:if x==null throw
NullPointerException
//else return the index of the LAST 0 in x.
//Return -1 if 0 dose not occur int x
for (int i=0;i<x.length;i++)
{
If(x[i]==0)
{
Return i;
}
}
return -1;
}
//test;x=[0,1,0]
//Expected=2
回答1:根据Tarantula算法可得,“for (int i=0;i<x.length;i++)”一行可疑值最大,内部错误为,int i=0;i<x.length;i++应为int i=x.length-1;i>=0;i--。
回答2:“x=null”这个测试用例不会执行内部错误,直接抛出异常。
回答3:“x=[2]”这个测试用例会执行内部错误,但不会引起异常状态。内部错误导致检测顺序颠倒,但如果只循环一遍的话就不会引起异常了。
回答4:“x=[2,0,5]”这个测试用例会引起异常状态但结果无误。用例里只有一个0,结果只会是一样的。