实验一 白盒测试
班级: B15532 学号: 2015405A610 姓名: 秦倩倩
一. 实验目的
1.掌握白盒测试用例设计方法;
2.综合运用所学的白盒测试方法设计进行测试用例设计;
3.掌握测试用例的编写方法。
二. 实验内容及要求
1.使用逻辑覆盖法测试以下 JAVA 语言程序段。(必做)
public static int add(int x,int y){
1.
2.
3.
4.
5.
6.
7.
8.
int sum=-9999;
if(x>=99 || x<=-99)
System.out.println("输入的参数值必须大于-100同时小于100");
else if(y>=99 || y<=-99)
System.out.println("输入的参数值必须大于-100同时小于100");
else
sum=x+y;
return sum;
}
说明:程序段中每行开头的数字是对每条语句的编号。
要求:
(1) 分别以语句覆盖、判定覆盖、条件覆盖、条件组合覆盖设计测试用例,并执行测试。
(2) 画出程序的控制流图(用题中给出的语句编号表示),根据控制流图计算程序的环路复
杂度,导出基本路径集合并根据基本路径集合设计测试用例。
2.使用逻辑覆盖法测试以下 JAVA 语言程序段。(选做)
1. public class Triangle
2. {
3. protected long lborderA = 0;
4. protected long lborderB = 0;
5. protected long lborderC = 0;
6. // Constructor
7. public Triangle(long lborderA, long lborderB, long lborderC)
8. {
9. this.lborderA = lborderA;
10. this.lborderB = lborderB;
11. this.lborderC = lborderC;
12. }
13. /*check if it is a triangle,return true for triangle and false not*/
14. public boolean isTriangle(Triangle triangle)
15. {
16. boolean isTriangle = false;
17. // check boundary
18. if ((triangle.lborderA > 0 && triangle.lborderA <= Long.MAX_VALUE)
19. && (triangle.lborderB > 0 && triangle.lborderB <= Long.MAX_VALUE)
20. && (triangle.lborderC > 0 && triangle.lborderC <= Long.MAX_VALUE))
21. {
22. // check if subtraction of two border larger than the third
23. if (diffOfBorders(triangle.lborderA, triangle.lborderB) < triangle.lborderC
24. && diffOfBorders(triangle.lborderB, triangle.lborderC) < triangle.lborderA
25. && diffOfBorders(triangle.lborderC, triangle.lborderA) < triangle.lborderB) {
26. isTriangle = true;
27. }
28. }
29. return isTriangle;
30. }
31. /*Check the type of triangle
32. Consists of "Illegal", "Regular", "Scalene", "Isosceles"
33. */
34. public String getType(Triangle triangle)
35. {
36. String strType = "Illegal";
37. if (isTriangle(triangle))
38. {
39. // Is Regular
40. if (triangle.lborderA == triangle.lborderB
41. && triangle.lborderB == triangle.lborderC)
42. {
43. strType = "Regular";
44. }
45. // If scalene
46. else if ((triangle.lborderA != triangle.lborderB)
47. && (triangle.lborderB != triangle.lborderC)
48. && (triangle.lborderA != triangle.lborderC))
49. {
50. strType = "Scalene";
51. }
52. // if isosceles
53. Else
54. {
55. strType = "Isosceles";
56. }
57. }
58. return strType;
59. }
60. /*calculate the diff between borders*/
61. public long diffOfBorders(long a, long b) {
62. return (a > b) ? (a - b) : (b - a);
63. }
64. /*get length of borders*/
65. public long[] getBorders()
66. {
67. long[] borders = new long[3];
68. borders[0] = this.lborderA;
69. borders[1] = this.lborderB;
70. borders[2] = this.lborderC;
71. return borders;
72. }
73. }
说明:程序段中每行开头的数字是对每条语句的编号。
要求:
(1) 分别以判定覆盖、条件覆盖、条件组合覆盖设计测试用例。
(2) 画出程序的控制流图(用题中给出的语句编号表示),根据控制流图计算程序的环路复
杂度,导出基本路径集合并根据基本路径集合设计测试用例。
三. 实验结果
1.
(1)
○1 语句覆盖:
编号
1
2
3
输入数据
x
100
1
1
y
1
100
1
执行语句
预期结果
实际结果
测试结果
1、2、3、8
1、2、4、5、8
-9999
-9999
1、2、4、6、7、
2
-9999
-9999
2
通过
通过
通过
8
○2 判定覆盖:
编号
1
2
3
输入数据
x
100
1
1
y
1
100
1
○3 条件覆盖:
预期结果
实际结果
-9999
-9999
2
-9999
-9999
2
测试
结果
通过
通过
通过
编号
1
2
3
4
5
输入数据
x
100
-100
1
1
1
y
1
1
100
-100
1
○4 条件组合覆盖:
编号
1
2
3
4
5
输入数据
x
100
-100
1
1
1
y
1
1
100
-100
1
(2) 控制流图:
预期结果
实际结果
-9999
-9999
-9999
-9999
2
-9999
-9999
-9999
-9999
2
预期结果
实际结果
-9999
-9999
-9999
-9999
2
-9999
-9999
-9999
-9999
2
测试
结果
通过
通过
通过
通过
通过
测试
结果
通过
通过
通过
通过
通过
环路复杂度为:V(G)=5
基本路径集合:
路径 1:1->2a->3->8
路径 2:1->2a->2b->3->8
路径 3:1->2a->2b->4a->5->8
路径 4:1->2a->2b->4a->4b->5->8
路径 5:1->2a->2b->4a->4b->6->8
测试用例表:
编号
输入数据 覆盖
路径
x
y
预期结果
实际结果 测试结果
1
2
100
-100
1
1
1
2
-9999
-9999
-9999
-9999
通过
通过
3
4
5
0
1
0
100
-100
1
3
4
5
-9999
-9999
1
-9999
-9999
1
通过
通过
通过
2.
控制流图:
四、实验总结
本次实验的实验一已完成。本次实验主要是用逻辑覆盖法和基路径测试法对程序进行测试验证,
运行程序测试之前按照老师课上讲的思路先将各种测试方法的测试用例以及预期结果写了下来,然
后对其进行上机测试,得出真实结果与预期结果进行对比。个人觉得基路径测试法的结果更加完善。