问题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,结果只会是一样的。