//不保证完全正确
实验二 白盒测试实验
一、 实验目的
(1) 掌握静态白盒测试的技术和原理。
(2) 掌握逻辑覆盖测试的方法和原理。
(3) 掌握基本路径测试的方法和原理。
二、要求
(1) 按照实验题目要求, 完成相关的白盒测试工作, 并写出详细的测试步骤和测试结果。
(2) 实验完成后, 按照要求编写实验报告
一、实验内容:
1、 逻辑覆盖测试
【例题2】 某程序中有如下函数, 请编写测试用例完成逻辑覆盖测试。
(1)画出程序流程图。
(2)设计测试用例如下
1)语句覆盖: 本程序中共5个可执行语句块, 故设计测试用例如下:
2)分支覆盖: 本程序共2个分支, 故设计测试用例。
3)条件覆盖: 本程序共3个条件,故设计测试用例如下:
4) 分支/条件覆盖: 本程序共2个分支和3个条件, 故设计测试例如下:
5) 条件组合覆盖: 本程序中有3个条件, 其中后2个条件可以组合:
6)路径覆盖: 本程序中共有a,b,c,d,e,f六条路径, 设计用例如下:
(3)进行测试运行程序, 并输入相关用例完成测试, 并编写测试报告。
2、 基本路径测试
【例题3】 某软件中包含如下函数, 请设计测试用例完成基本路径测试。 函数代码为:
(1)根据程序画出程序控制流图, 如图2所示
(2)计算控制流图的环路复杂度, 计算方法如下:
V(G)=11个条边-9个节点+2=4
V(G)=3个判定节点+1=4
V(G)=4个区域=4
故该图环路复杂度为4。(3)导出基本路径
A. 3-4-24
B. 3-4-6-8-24
C. 3-4-6-13-15-22-4-24
D. 3-4-6-13-19-22-4-24(4)设计测试用例如下
(5)运行程序, 输入相关用例完成测试, 并编写测试报告
五、 实验内容
【题目】 编写函数getGCD,求两个1-100内的整数的最大公约数(通过参数传入两个整数),并编写测试用例完成逻辑覆盖测试和基本路径测试, 并编写测试报告。 参考代码如下:
要求: 完成程序开发工作(使用Java语言) ;
使用对该程序进行静态白盒测试;
设计相关用例完成逻辑覆盖测试和基本路径测试;
完成测试报告的编写。
- 实验过程及结果记录
编写函数getGCD,求两个1-100内的整数的最大公约数(通过参数传入两个整数),并编写测试用例完成逻辑覆盖测试和基本路径测试, 并编写测试报告。
代码如下:
import java.util.Scanner;
public class GCDCalculator {
public int getGCD(int x, int y) {
if (x < 1 || x > 100) {
System.out.println("参数不正确!x应在1到100之间");//语句块1
return -1;
}
if (y < 1 || y > 100) {
System.out.println("参数不正确!y应在1到100之间");//语句块2
return -1;
}
int max, min, result = 1;
if (x >= y) {//语句块3
max = x;
min = y;
} else {//语句块4
max = y;
min = x;
}
//语句块5
for (int n = 1; n <= min; n++) {
if (min % n == 0 && max % n == 0) {
if (n > result) {
result = n;
}
}
}
//语句块6
System.out.println("最大公约数为:" + result);
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
GCDCalculator calculator = new GCDCalculator();
while (true) {
System.out.println("请输入第一个整数(1 - 100,输入0退出):");
int num1 = scanner.nextInt();
if (num1 == 0) {
System.out.println("程序退出");
break;
}
System.out.println("请输入第二个整数(1 - 100):");
int num2 = scanner.nextInt();
calculator.getGCD(num1, num2);
}
scanner.close();
}
}一、静态白盒测试
对代码进行代码审查,检查代码结构、命名规范、算法逻辑等。发现代码中Scanner资源未及时关闭可能导致资源泄漏,在while循环结束后添加scanner.close()关闭资源。
代码审查:参数范围检查逻辑正确(1-100),无效输入返回 - 1,循环从 1 到较小数遍历,逐次判断公约数,逻辑清晰,变量命名规范(minNum、gcd),流程无冗余代码。
二、逻辑覆盖测试
(1)画出程序流程图。
![]()
(2)设计测试用例如下
1)语句覆盖: 本程序中6个可执行语句块, 故设计测试用例如下:
测试用例
覆盖语句
所走路径
(-5,1)
1
a,c
(1,-5)
2
b,d
(50,10)
3,5,6
a,b,e,f,h,i,j
(10,50)
4,5,6
a,b,e,g,h,i
2)分支覆盖: 本程序共3个分支, 故设计测试用例。
测试用例
x < 1 || x > 100
y < 1 || y > 100
x>=y
所走路径
(-5,1)
T
F
F
a,c
(1,-5)
F
T
T
b,d
(50,10)
F
F
T
a,b,e,f,h,i,j
(10,50)
F
F
F
a,b,e,g,h,i
(101,50)
T
F
T
a,c
(50,101)
F
T
F
b,d
(17,17)
F
F
T
a,b,e,f,h,i,j
3)条件覆盖: 本程序共6个条件,故设计测试用例如下:
测试用例
x < 1
x > 100
y < 1
y > 100
x>y
x=y
所走路径
(-5,1)
T
F
F
F
F
F
a,c
(1,-5)
F
F
T
F
T
F
b,d
(50,10)
F
F
F
F
T
F
a,b,e,f,h,i,j
(10,50)
F
F
F
F
F
F
a,b,e,g,h,i
(101,50)
F
T
F
F
T
F
a,c
(50,101)
F
F
F
T
F
F
b,d
(17,17)
F
F
F
F
F
T
a,b,e,f,h,i,j
4) 分支/条件覆盖: 本程序共3个分支和6个条件, 故设计测试例如下:
测试用例
x < 1 || x > 100
y < 1 || y > 100
x>=y
x < 1
x > 100
y < 1
y > 100
x>y
x=y
所走路径
(-5,1)
T
F
T
T
F
F
F
F
F
a,c
(1,-5)
F
T
F
F
F
T
F
T
F
b,d
(50,10)
F
F
T
F
F
F
F
T
F
a,b,e,f,h,i,j
(15,50)
F
F
F
F
F
F
F
F
F
a,b,e,g,h,i
(101,50)
T
F
T
F
T
F
F
T
F
a,c
(50,101)
F
F
F
F
F
F
T
F
F
b,d
(17,17)
F
F
T
F
F
F
F
F
T
a,b,e,f,h,i,j
5) 条件组合覆盖: 本程序中有6个条件, 其中后2个条件可以组合:
测试用例
x < 1
x > 100
y < 1
y > 100
x>y
x=y
所走路径
(-5,1)
T
F
F
F
F
F
a,c
(1,-5)
F
F
T
F
T
F
b,d
(50,10)
F
F
F
F
T
F
a,b,e,f,h,i,j
(10,50)
F
F
F
F
F
F
a,b,e,g,h,i
(101,50)
F
T
F
F
T
F
a,c
(50,101)
F
F
F
T
F
F
b,d
(17,17)
F
F
F
F
F
T
a,b,e,f,h,i,j
(1,100)
F
F
F
F
F
F
a,b,e,g,h,i
(100,1)
F
F
F
F
T
F
a,b,e,f,h,i,j
(0,0)
T
F
T
F
F
T
a,c
6)路径覆盖: 本程序中共有a,b,c,d,e,f,g,h,i,j十条路径, 设计用例如下:
测试用例
所走路径
(-5,1)
a,c
(1,-5)
b,d
(50,10)
a,b,e,f,h,i,j
(10,50)
a,b,e,g,h,i
(101,50)
a,c
(50,101)
b,d
(17,17)
a,b,e,f,h,i,j
(1,100)
a,b,e,g,h,i
(100,1)
a,b,e,f,h,i,j
(0,10)
a,c
(100,100)
a,b,e,f,h,i,j
2、 基本路径测试
![]()
- 计算控制流图的环路复杂度, 计算方法如下:
方法一:边数 - 节点数 + 2
假设控制流图边数为e,节点数为n,经分析V(G) = 2 - 1 + 2 = 3
方法二:判定节点数 + 1 ,判定节点数为 2,V(G)=2 + 1 = 3
方法三:区域数 ,V(G)=3个区域= 3
故环路复杂度为 3。
(3)导出基本路径
路径A:1-2-9
路径B:1-2-3-9
路径C:1-2-3-4-5-6-7-9
路径D:1-2-3-4-8-6-7-9
- 设计测试用例如下
测试用例
覆盖基本路径
(-5,1)
A
(5,-5)
B
(60,20)
C
(20,80)
D
三、实 验 小 结
在本次白盒测试实验中,我围绕求最大公约数程序,系统实践了静态白盒测试、逻辑覆盖测试与基本路径测试,收获颇丰,同时也深刻认识到自身不足。
实验过程中,我通过代码审查修复了Scanner资源泄漏问题,理解了静态测试对保障代码质量的重要性。在逻辑覆盖测试中,从语句覆盖到条件组合覆盖的逐步深入,让我掌握了不同覆盖标准的差异与适用场景。例如,语句覆盖仅能保证代码执行,而条件组合覆盖则能全面检测条件的各种组合情况,使我意识到测试用例设计需兼顾全面性与效率。基本路径测试中,通过绘制控制流图、计算环路复杂度、导出基本路径,我学会了如何从程序结构出发设计测试用例,有效覆盖程序的不同执行路径,进一步提升了对程序逻辑的分析能力。
然而,实验也暴露出我的不足之处。在计算环路复杂度时,因对控制流图的节点和边分析不细致,导致初次计算错误;设计测试用例时,对复杂条件组合的考虑不够周全,出现部分组合遗漏的情况。这些问题反映出我对理论知识的掌握还不够扎实,实践经验也较为欠缺。
通过本次实验,我不仅加深了对软件测试理论的理解,更提升了实际操作能力,认识到测试在软件开发中的关键作用。未来,我将加强理论学习,多进行实践练习,注重细节和逻辑分析,以提高测试用例设计的准确性和有效性,更好地保障软件质量 。