一、实验目的
- 能够掌握白盒测试的静态测试、逻辑覆盖(语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖)、基本路径测试原理
- 能够运静态白盒测试、逻辑覆盖(语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖)、基本路径测试写测试用例
二、实验任务
- 使用静态白盒测试进行代码的审视,找出代码中存在的潜在问题
- 使用逻辑覆盖的六种方法,根据相应代码进行分析,编写测试用例
- 使用基本路径测试方法,根据相应代码进行分析,编写测试用例
三、实验内容与要求
1. 使用静态白盒测试对下图中的代码进行审视,要求:找出所有的错误及错误的原因
2. 使用逻辑覆盖的六种方法(语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖),对下图中的代码进行分析并编写测试用例
要求:
①要写明分析的过程
②要画出流程图
3.使用基本路径测试方法,对下图中的代码进行分析并编写测试用例

四、静态白盒测试所发现的问题
1.输出的位数与数组的大小不吻合(超出)
2.数值计算时溢出,num三次方后数字过大
3.变量不应为空
4.除数不应为零
5.数组应从零开始遍历
6. 求值次序混乱,无论如何都会输出flag,不会输出num的值
五、语句覆盖法设计
图(太丑,略)
设计一个测试用例就可以覆盖程序中所有可执行语句
测试用例a=2,b=1,c=-1,d=2
执行路径为abdf
六、判定覆盖法设计
判断覆盖,要设计两个测试用例。
测试用例1:a=2,b=1,c=-1,d=2 执行路径为abdf
测试用例2:a=0,b=0,c=1,d=1 执行路径为aceg
七、条件覆盖法设计
a>0真值为T1假值为-T1;
b>0真值为T2假值为-T2;
a>1真值为T3假值为-T3;
c<1真值为T4假值为-T4;
c<0真值为T5假值为-T5;
d>1真值为T6假值为-T6;
要使上述8个条件可能产生的情况至少满足一 次,用例设计如下:
测试用例1:a=2,b=1,c=-1,d=2
执行路径为abdf
覆盖条件:T1,T2,T3,T4
覆盖分支:bdf
测试用例2:a=0,b=0,c=1,d=1
执行路径为aceg
覆盖条件:-T1,-T2,-T3,-T4
覆盖分支:ceg
八、判定-条件覆盖法设计
要使得测试用例能够覆盖上述四个条件可能产生的情况以及判定分支
用例设计如下:
测试用例1:a=2,b=1,c=-1,d=2
执行路径为abdf
覆盖条件:T1,T2,T3,T4
覆盖分支:bdf
测试用例2:a=0,b=0,c=1,d=1
执行路径为aceg
覆盖条件:-T1,-T2,-T3,-T4
覆盖分支:ceg
九、条件组合覆盖法设计
要使设计的测试用例能覆盖每个判定的所有可能的条件取值组合
用例设计如下:
第一个判定条件取值情况 |
第二个判定条件取值情况 |
第三个判定条件取值情况 |
1.a>0; b>0 |
5.a>1, c<1 |
9.c<0, d>1 |
2.a>0; b<=0 |
6.a>1, c>=1 |
10.c<0, d<=1 |
3.a<=0; b>0 |
7.a<=1, c<1 |
11c>=0, d>1 |
4.a<=0; b<=0 |
8.a<=1, c>=1 |
12c>=0, d<=1 |
测试用例1:a=2,b=1,c=-1,d=2
覆盖组合1,5,9
测试用例2:a=2,b=-1,c=1,d=2
覆盖组合2,6,11
测试用例3:a=0,b=1,c=-1,d=1
覆盖组合3,7,10
测试用例4:a=0,b=0,c=1,d=1
覆盖组合4,8,12
十、路径覆盖法设计
要使设计的测试用例能覆盖被测程序中所有可能的的路径。
当判定二为假时判定三必为假
测试用例1:a=2,b=1,c=-1,d=2 执行路径:abdf
测试用例2:a=2,b=1,c=-1,d=1 执行路径:abdg
测试用例3:,执行路径:abef(条件不成立)
测试用例4:a=0.5,b=1,c=1,d=2,执行路径:abeg
测试用例5:a=2,b=0,c=-1,d=2,执行路径:acdf
测试用例6:a=2,b=0,c=-1, d=1,执行路径:acdg
测试用例7:,执行路径:acef(条件不成立)
测试用例8:a=0,b=0,c=1,d=1,执行路径:aceg
十一、基本路径测试法设计
1.控制流图
2.E=10,N=8,P=3 V(G)=E-N+2=P+1=4
3.导出基本路径集
路径1:3--15
路径2:3—4—5--15
路径3:3—4—7—9—14—3--15
路径4:3—4—7—10—14—3—15
4. 设计测试用例的输入数据和预期输出
编号 |
输入数据 |
预取结果 |
实际结果 |
|||
a |
b |
c |
d |
c |
d |
|
1 |
0 |
0 |
0 |
0 |
0 |
0 |
2 |
2 |
0 |
0 |
0 |
0 |
0 |
3 |
2 |
1 |
0 |
0 |
0 |
0 |
4 |
2 |
2 |
1 |
0 |
1 |
0 |
十二、测试用例
六种覆盖
图丑,略
基本路径
十三、实验总结
通过本次实验,我逐渐了解到语句覆盖可以保证程序中每个语句都得到执行,但是不能够发现判定中录屏及运算的错误虽然确实判定覆盖比语句覆盖更强一些。
条件覆盖同时满足了判定、条件覆盖,但并不是所有的条件覆盖都能满足判定覆盖。实际上,编译器在检查含有多个条件的逻辑表达式时,某些情况下的某些条件将会被其他调暗劲所掩盖。
组合覆盖覆盖了所有的的组合,也覆盖了所有判定的真假分支,但是仍然没有覆盖到某些路径。对于较简单的小程序,实现路径覆盖是可能做到的。
如果程序中出现较多的判断和较多的循环,可能的路径数目将会急剧增长,要在测试中覆盖所有的路径是无法实现的。