白盒测试技术实验报告
一、实验内容
1、系统地学习和理解白盒测试的基本概念、原理,掌握白盒测试的基本技
术和方法;
2、举例进行白盒测试,使用语句覆盖、判定覆盖、条件覆盖、判定/条件覆
盖、组合覆盖、路径覆盖进行测试。
3、通过试验和应用,要逐步提高和运用白盒测试技术解决实际测试问题的
能力;
4、完成实验并认真填写实验报告
二、问题描述
输入三个整数 a、b、c,分别作为三角形的三条边,通过程序判断这三条边
是否能构成三角形?如果能构成三角形,则判断三角形的类型(等边三角形、等
腰三角形、一般三角形)。要求输入三个整数 a、b、c,必须满足以下条件:1≤a≤200;
1≤b≤200;1≤c≤200。请采用静态白盒测试方法和动态白盒测试方法设计测试用
例。
三、代码说明(复制测试的主要代码并在每行程序代码前面标上行号)
1 package rjcs;
2 import java.util.Scanner;
3 public class Rjcs {
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void main(String[] args) {
// TODO 自动生成的方法存根
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
//接受键盘输入a,b,c
System.out.println("请键盘输入a的值");
int a = sc.nextInt();
System.out.println("请键盘输入b的值");
int b = sc.nextInt();
System.out.println("请键盘输入c的值");
int c = sc.nextInt();
if(a>=1&&a<=200) {
if(b>=1&&b<=200) {
if(c>=1&&c<=200) {
test(a,b,c);
19
20
21
22
23
24
25
26
27
28
29
30
31
}
else {
System.out.println("请输入能构成三角形的整数!");
}
}
else {
System.out.println("请输入能构成三角形的整数!");
}
}
else {
System.out.println("请输入能构成三角形的整数!");
}
}
public static void test(int a,int b,int c){
boolean pd=false;
if((a==b)&&(b==c)){
System.out.println("三边构成等边三角形");
}
else if((a==b)||(b==c)||(a==c)){
System.out.println("三边构成等腰三角形");
System.out.println("三边构成一般三角形");
}
else System.out.println("请输入能构成三角形的整数!")
32//判断三角形类型
33
34
35
36
37
38
39
40
41
42
43
44
45
46}
}
}
else{
四、白盒测试分析
1.代码走读
从代码来看,main()存在多个 Scanner 语句,会导致程序的多入口,但代码
中存在多个 System.out.println 提醒语句,不易造成遗忘赋值这类情况。通过
阅读代码发现,在 if..esle if..else 结构中,a,b,c 三边所有符合规定的取值
情况均已覆盖,且每个分支均能返回一个指定的取值以用于 test()程序运行。
在 test()的 if..esle if..else 结构中,判定条件均已覆盖,且每个符合判定
条件的分支均能返回一个指定取值。
从程序结构来看,整个程序有两个判定结构,且两个判定结构为结构化设计,
便于测试,每个判定结点出的判定表达式简单,是两段简单代码。
2.静态结构分析(函数控制流图法)
如图:
从该图可以看出,该函数的结构设计特点:多出口,有两个函数出口;环复
杂度高,判定节点一次为 P1 到 P5, 无孤立的语句,无非结构化设计。
3. 对判定的测试
(1)函数流程图
(2)语句覆盖?判定翻盖?条件覆盖?条件组合覆盖?判定/条件覆盖?修正
的判定/条件覆盖(选 1-2 种覆盖方法,并说明选取的理由)
选择判定覆盖语句 ;
选择理由:基于判定覆盖指标的测试因需覆盖到每一条执行边,生成的测试用例
数量相对语句覆盖有所增加,且测试重点转向判定节点,因此一般来说具有更强
的测试覆盖能力。判定覆盖同时能够满足百分之百的语句覆盖。
(3)测试用例设计
测试用例
编号
1
2
3
4
5
6
7
8
9
10
a
1
2
3
0
2
3
6
6
2
5
输入数据
b
2
2
3
1
0
4
8
6
2
6
c
2
3
3
2
2
5
10
6
0
7
预期输出
三 边 构 成
等 腰 三 角
形
三 边 构 成
等 腰 三 角
形
三 边 构 成
等 边 三 角
形
请 输 入 能
构 成 三 角
形的整数!
请 输 入 能
构 成 三 角
形的整数!
三 边 构 成
一 般 三 角
形
三 边 构 成
一 般 三 角
形
三 边 构 成
等 边 三 角
形
请 输 入 能
构 成 三 角
形的整数!
三 边 构 成
一 般 三 角
形
覆盖的判定条件或判
定节点
P1,P2,P3,P4
P1,P2,P3,P4
P1,P2,P3,P4,P5
P1,P2,P3
P1,P2,P3
P1,P2,P3,P4,P5
P1,P2,P3,P4,P5
P1,P2,P3,P4,P5
P1,P2,P3
P1,P2,P3,P4,P5
测试结果
三 边 构 成
等 腰 三 角
形
三边构成
等腰三角
形
三边构成
等边三角
形
请输入能
构成三角
形的整数!
请输入能
构成三角
形的整数!
三边构成
一般三角
形
三边构成
一般三角
形
三边构成
等边三角
形
请输入能
构成三角
形的整数!
三边构成
一般三角
形
4.对路径的测试
(1)程序图
1 代表代码 1 到 8 行;2 代表代码 9 到 14 行;3 代表 15 行;4 代表 16 行;5 代
表 17 行;6 代表 35 到 37 行;7 代表 18 到 34 行; 8 代表 35 行;9 代表 38 行;
10 代表 36 到 37 行;11 代表 38 到 40 行;12 代表剩余行;
(2)环复杂度
由图可知判定结点数为 5。
则 V(G)=区域数=判定节点数+1=5+1=6
(3)独立路径的抽取
路径 1:1,2,3,4,5,6,9,10,12
路径 2:1,2,3,4,5,6,9,11,12
路径 3:1,2,3,4,5,6,8,12
路径 4:1,2,3,4,5,7,12
路径 5:1,2,3,4,7,12
路径 6:1,2,3,7,12
(4)不可行路径的处理
通过查看代码无不可行路径。
(5)测试用例设计
测试用例
编号
1
2
3
4
5
a
3
6
3
6
3
输入数据
b
3
6
4
5
4
c
3
6
3
6
5
预期输出
路径
测试结果
三 边 构 成
等 边 三 角
形
三 边 构 成
等 边 三 角
形
三 边 构 成
等 腰 三 角
形
三 边 构 成
等 腰 三 角
形
三 边 构 成
一 般 三 角
形
1
1
2
2
3
三 边 构 成 等 边 三
角形
三边构成等边三
角形
三边构成等腰三
角形
三边构成等腰三
角形
三边构成一般三
角形
6
7
8
5
5
0
6
0
5
5.对变量的测试
0
6
6
请 输 入 能
构 成 三 角
形的整数!
请 输 入 能
构 成 三 角
形的整数!
请 输 入 能
构 成 三 角
形的整数!
4
5
6
请输入能构成三
角形的整数!
请输入能构成三
角形的整数!
请输入能构成三
角形的整数!
(1)寻找所有变量的定义节点和使用节点
变量
定义节点
使用节点
a
b
c
pd
2
2
2
7
3,6,9
4,6,9
5,6,9
7
定义/使用节点
2
2
2
7
(2)确定各变量的定义/使用节点对,并考查每条路径
对变量 pd 分析:定义使用节点队为(7,7)是定义清除路径
对变量 a 分析:定义使用节点队为(2,3),(2,6),(2,9)是定义清除路径
对变量 b 分析:定义使用节点队为(2,4),(2,6),(2,9)是定义清除路径
对变量 c 分析:定义使用节点队为(2,5),(2,6),(2,9)是定义清除路径
6.对循环的测试(选做,分配到的代码中有循环要做对循环的测试,没有循环
就不做)
无循环