代码一 public int findLast (int[] x, int y) { |
1) i>0应改为i>=0,因为如果是按照原程序的i>0则无法判断x数组的第一位是否等于y的值,导致最后运行结果出现偏差
2) x=null,y=2;
这里由于x为空,所以不进入for循环,直接返回NullPointerException;
Excepted:NullPointerException,
Actual:NullPointerException;
(3) x=[1,2,3],y=2;
这里最后一个等于y的值不在x[0]处,而在x[1],所以for循环并没有执行到"i>=0"的条件出,所以不会出现error状态;
Excepted:1,
Actual:1;
(4) x=[3,4,5],y=2;
这里虽然执行到了error状况,但由于x中并没有与y相等的值,所以得到结果是正确的,所以没有出现failure;
Excepted:-1,
Actual:-1;
public static int lastZero (int[] x) { |
出现与预期结果不同的情况是因为源代码判断的是出现第一个0的位置而不是最后一个0的位置,不应该在第一次出现x[i]==0的情况后就直接返回i,而应该继续往后寻找,直到到达x的最后一位,在选取最大的i输出
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,结果只会是一样的。