软件测试基础与实践
实验报告
实验名称: 白盒测试实验一
实验地点: 软件学院机房
实验日期: 2014.10.30
学生姓名: 王苏振
学生学号: 71112128
东南大学 软件学院 制
1
一、实验目的
(1)巩固白盒测试知识,对于给定的待测程序,能熟练应用基本控制流覆盖方法设计测试用例;
(2)基于严谨的精神,学习测试用例的设计和分析。
二、实验内容
(一)题目 1: 控制流测试技术实验
1.题目内容
运用基于控制流的动态白盒测试方法,对WeekA 程序中的方法getWeekday()进行测试。设计测试
用例时,尽可能设计最少的测试用例数,同时保证每种覆盖方法的覆盖率尽可能达到100%。
2. 给出 GETWEEKDAY()的流程图,这是进行基于控制流动态白盒测试的基础。
getWeekday()流程图如下:
2
3
3. 分别以语句覆盖、判定覆盖、条件覆盖、判定条件覆盖和条件组合覆盖方法设计测试用例,
并写出每个测试
(1)语句覆盖
编号
执行路径
输入
期望
输出
实际
输出
x
2014
10001
2014
2014
2014
y
-10
5
13
5
11
001
002
003
004
005
z
6
8
7
33
2
0
-1
-2
-3
7
0
-1
-2
-3
7
abdeC
abdfgC
abdfhiC
abdfhjkC
abcdfhjlmn[o|p]qmrst(u(v))wxsyzABC
[]表示循环中两路径选一,()表示该路径循环在某种条件时经过
说明:事实上,用上面五个测试用例就完成了全部的语句覆盖,但是,有一些显而易见的 BUG
却没有找出来,比如,当我输入 MONTH 为 0 时,便直接报错,当我输入 DAY 为零时,竟然可以计算
出日期,之所以没有找到 BUG,在于测试用例的不够,而这也是语句覆盖的薄弱之处,通过其他
的覆盖测试可以解决这一问题。
(2)判定覆盖
编
号
输入
x
y
z
预期
输出
实际
输出
执行路径
判定
b d
f h
j m
n
s
001
2014
002 12014
003
004
005
2014
2014
0
-5
10
15
10
5
006
2014
0
0
-1
-2
25
31
20
-3
33
1 报错
0
-1
-2
-3
3
15 报错 程序
执行
中断
abdeC
abdfgC
abdfhC
F T
-
F F T
-
-
F F F T
-
-
-
abdfhjkC
F F F F T
-
-
-
-
abcdfhjlmrst(u(v))ws
F F F F F F
yzBC
-
-
-
-
-
-
-
-
-
t
-
-
-
-
u
z
-
-
-
-
-
-
-
-
*
*
*
F
adfhjlmn[o|p]qmrsy
F F F F F *
* F
-
-
-
中断
007
2012
7
29
7
7
abcdfhjlmn[o|p]qmrs
T F F F F *
*
*
*
* T
t(u(v))wxsyzABC
注:[]表示循环中两路径选一,()表示该路径循环在某种条件时经过;*表示判断取 T 或 F,-
表示未取到
通过 005,006 对循环的判定覆盖发现当年、月、日各自取 0 时程序均未给出相应处理方式。
4
(3)条件覆盖
编
号
输入
x
y
z
001
-10
10 1
002
2100
-5
1
预
期
输
出
0
0
实
际
输
出
0
0
路径
条件
b
b
b
d
d
d
f h j m n
n
n
s t u
u
u
z
1
2
3
1
2
3
1
2
3
1
2
3
abdeC
abdeC
F - F T - - - - - - -
- - - - -
T F F F T - - - - - -
- - - - -
-
-
-
-
-
-
003
2400
5
-1 0
0
abcdeC
T F T F F T - - - - -
- - - - -
-
-
-
004
10001
5
1
-1
-1
abdfgC
F - F F F F T - - - -
- - - - -
-
-
-
005
2012
13 1
006
2014
1
007
2012
1
3
3
1
-2
-3
-2
-3
abcdfhiC T T -
F F F F T - - -
- - - - -
abdfhjkC F F F F F F F F T - -
- - - - -
-
-
-
-
-
-
7
7
abcdfhjl
T T -
F F F F F F * * * * * * * * * T
mn[o|p]q
mrst(u(v
))wxsyz
ABC
008
2012
1
2
1
1
abcdfhjl
T T -
F F F F F F * * * * * * * * * F
mn[o|p]q
mrst(u(v
))wxsyz
BC
t
-
-
-
-
-
-
u z
-
-
-
-
-
-
-
-
-
-
-
-
判定
b d
F T
F T
T T
f
-
-
-
F F T
-
-
-
-
-
-
-
-
-
h
j m n s
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
T F F T
F F F F T
T F F F F * * * * * T
T F F F F * * * * * F
注:[]表示循环中两路径选一,()表示该路径循环在某种条件时经过;*表示判断取 T 或 F,-
表示未取到
(4)判定条件覆盖
编 输入
预 实 路径
条件
5
号
x
y
z 期
输
出
001
-10
10 1
002
2100
-5
1
0
0
际
输
出
0
0
b
b
b
d
d
d
f h j m n
n
n
s t u
u
u
z
1
2
3
1
2
3
1
2
3
1
2
3
abdeC
abdeC
F - F T - - - - - - -
- - - - -
T F F F T - - - - - -
- - - - -
-
-
-
-
-
-
003
2400
5
-1 0
0
abcdeC
T F T F F T - - - - -
- - - - -
-
-
-
004
10001
5
1
-1
-1
abdfgC
F - F F F F T - - - -
- - - - -
-
-
-
005
2012
13 1
006
2014
1
007
2012
1
3
3
1
-2
-3
-2
-3
abcdfhiC T T -
F F F F T - - -
- - - - -
abdfhjkC F F F F F F F F T - -
- - - - -
-
-
-
-
-
-
7
7
abcdfhjl
T T -
F F F F F F * * * * * * * * * T
mn[o|p]q
mrst(u(v
))wxsyz
ABC
008
2012
1
2
1
1
abcdfhjl
T T -
F F F F F F * * * * * * * * * F
mn[o|p]q
mrst(u(v
))wxsyz
BC
t
-
-
-
-
-
-
u z
-
-
-
-
-
-
-
-
-
-
-
-
判定
b d
F T
F T
T T
f
-
-
-
F F T
-
-
-
-
-
-
-
-
-
h
j m n s
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
T F F T
F F F F T
T F F F F * * * * * T
T F F F F * * * * * F
注:[]表示循环中两路径选一,()表示该路径循环在某种条件时经过;*表示判断取 T 或 F,-
表示未取到
说明:原来的条件覆盖的测试用例可以全部用来作为判定条件覆盖的测试用例,因为根据观察,
该测试用例完全符合判定条件覆盖的要求。
6
(5)条件组合覆盖
编
号
输入
x
y
z
001
-10
10 1
002
2100
-5
1
预
期
输
出
0
0
实
际
输
出
0
0
路径
条件
b
b
b
d
d
d
f h j m n
n
n
s t u
u
u
z
1
2
3
1
2
3
1
2
3
1
2
3
abdeC
abdeC
F - F T - - - - - - -
- - - - -
T F F F T - - - - - -
- - - - -
-
-
-
-
-
-
003
2400
5
-1 0
0
abcdeC
T F T F F T - - - - -
- - - - -
-
-
-
004
10001
5
1
-1
-1
abdfgC
F - F F F F T - - - -
- - - - -
-
-
-
005
2012
13 1
006
2014
1
007
2012
1
3
3
1
-2
-3
-2
-3
abcdfhiC T T -
F F F F T - - -
- - - - -
abdfhjkC F F F F F F F F T - -
- - - - -
-
-
-
-
-
-
7
7
abcdfhjl
T T -
F F F F F F * * * * * * * * * T
mn[o|p]q
mrst(u(v
))wxsyz
ABC
008
2012
1
2
1
1
abcdfhjl
T T -
F F F F F F * * * * * * * * * F
mn[o|p]q
mrst(u(v
))wxsyz
BC
t
-
-
-
-
-
-
u z
-
-
-
-
-
-
-
-
-
-
-
-
判定
b d
F T
F T
T T
f
-
-
-
F F T
-
-
-
-
-
-
-
-
-
h
j m n s
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
T F F T
F F F F T
T F F F F * * * * * T
T F F F F * * * * * F
注:[]表示循环中两路径选一,()表示该路径循环在某种条件时经过;*表示判断取 T 或 F,-
表示未取到
说明:原来的条件覆盖的测试用例可以全部用来作为条件组合覆盖的测试用例,因为根据观察,
该测试用例完全符合条件组合覆盖的要求。但我们会发现,对 b1,b2,b3 的条件组合 F_-_T,未实
现覆盖,经过分析可知,该条件组合不可达。
7
4. 如果要进一步用路径覆盖准则来测试GETWEEKDAY(),在正确处理循环的基础上,请基于程
序流程图来估算其中可能的路径条共有多少条?依照你设计测试用例的速度,完成所有路径的
测试需要多少时间?
处理循环:借用 Z 路径覆盖方法,将循环看成执行 0 次和 1 次,即不考虑循环内部的分支情况。
则可能的路径为:2*1+2*1*1+2*1*1*1+2*1*1*1*1+2*1*1*1*1*1*2*2*2=24
我每条测试用例大概需要 1~2 分钟,完成这些测试用例大概需要 24~48 分钟。
5. 给出MC/DC(修订的判定条件覆盖)方法的测试用例,并写出执行路径。
1) 分析 b1,b2,b3 (b1&&b2)|b3
1
2
3
4
5
集成判定条件为:
1
3
4
5
b1
F
F
T
T
T
b1
F
T
T
T
2)分析 d1,d2,d3 d1|d2|d3
1
2
3
4
d1
F
T
F
F
b2
-
-
T
F
F
b2
-
T
F
F
d2
F
-
T
F
b3
F
T
-
F
T
b3
F
-
F
T
d3
F
-
-
T
b
F
T
T
F
T
b
F
T
F
T
d
F
T
T
T
可知,上述测试用例已为最简判定条件
3)下列判定只含有一个条件,不做单独分析
4)
编
号
路径
输入
x
y
z
条件
预
期
输
出
实
际
输
出
b
b
b
d
d
d
f h j m n
n
n
s t u
u
u
z
1
2
3
1
2
3
1
2
3
1
2
3
001
-10
10 1
002
2100
-5
1
0
0
0
0
abdeC
abdeC
F - F T - - - - - - -
- - - - -
T F F F T - - - - - -
- - - - -
-
-
-
-
-
-
003
2400
5
-1 0
0
abcdeC
T F T F F T - - - - -
- - - - -
-
-
-
8