软件测试,简单来说就是通过测试用例来寻找程序中的BUG。在软件测试过程中,有几个名词需要我们特殊注意。
Fault:
在软件测试中,fault是指程序中静态的缺陷,也就是指在程序中存在的编程错误。
Error:
在软件测试中,error是指由于程序中存在的fault而产生的不正确的内在状态。
Failure:
在软件测试中,failure是指程序产生与我们期望不同的结果,强调外在表现。
举个简单的例子来说,一个患者去到医院看病,向医生说明自己的症状(在这里,症状就是failure),医生根据症状,尽力查找病因(病因就是fault),查找病因的过程中,医生可能会给患者量血压,量体温(这里高血压就可以理解为error)。了解了以上概念,接下来就是本次作业内容。
程序1:
1 public int findLast (int[] x, int y) { 2 //Effects: If x==null throw NullPointerException 3 // else return the index of the last element 4 // in x that equals y. 5 // If no such element exists, return -1 6 for (int i=x.length-1; i > 0; i--) 7 { 8 if (x[i] == y) 9 { 10 return i; 11 } 12 } 13 return -1; 14 } 15 // test: x=[2, 3, 5]; y = 2 16 // Expected = 0
问题:
1、找到程序中的Fault
Fault:应该将 for 循环语句中 i>0 改为 i>=0,否则无法比较数组 x 中的第一个元素。
2、设计一个不执行Fault的测试用例:
X = null ,y = 2
3、设计一个执行Fault,没有导致Error的测试用例:
X = [3,5,2] , y = 2
4、设计一个导致Error,但不导致Failure的测试用例:
X = [3],y = 2
//Expected = -1
//Return = -1
程序2:
1 public static int lastZero (int[] x) { 2 //Effects: if x==null throw NullPointerException 3 // else return the index of the LAST 0 in x. 4 // Return -1 if 0 does not occur in x 5 for (int i = 0; i < x.length; i++) 6 { 7 if (x[i] == 0) 8 { 9 return i; 10 } 11 } return -1; 12 } 13 // test: x=[0, 1, 0] 14 // Expected = 2
问题:
1、找到程序中的Fault
Fault:应该将 for 循环语句中(int i = 0; i < x.length; i++)改为(int i = x.length-1;i>=0;i--),否则返回的是数组 x 中第一个 0 的索引。
2、设计一个不执行Fault的测试用例:
X = null
3、设计一个执行Fault,没有导致Error的测试用例:
X = [0,1,2]
4、设计一个导致Error,但不导致Failure的测试用例:
X = [1]
//Expected = -1
//Return = -1