代码段1
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
q1: Identify the fault
a1: 循环条件中i>0应该改为i>=0, 如果不更改会忽略数组第一个数字
q2: If possible, identify a test case that does not execute the fault. (Reachability)
a2: test:x=[],y = 5
q3:f possible, identify a test case that executes the fault, but does not result in an error state.
a3: test: x=[2,3,5],y = 3;
q4:If possible identify a test case that results in an error, but not a failure.
a4: test: x=[2,3,5],y = 1;
代码段2
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 does not occur in x
for (int i = 0; i < x.length; i++)
{
if (x[i] == 0) {
return i; }
} return -1; }
// test: x=[0, 1, 0] // Expected = 2
q1: Identify the fault
a1: 循环应该从数组末位开始,而原代码中循环从数组首位开始,这样找到的不是最后一个0而是第一个0
q2: If possible, identify a test case that does not execute the fault. (Reachability)
a2: x = []
q3:f possible, identify a test case that executes the fault, but does not result in an error state.
a3: x = [0]
q4:If possible identify a test case that results in an error, but not a failure.
a4: x = [1]