白盒测试-逻辑覆盖测试
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
条件组合覆盖概念
入口
• 设计足够的测试用例,运行被测试对象, 使得每一个判断的所有可能的条件取值 组合至少执行一次。
a x>3 && z<10 b 语句块1
c
x==4 || y>5
d 语句块2 语句块3 出口
21
e
标记
现在对例子中的各个判断的条件取值组合加以标 记如下:
x>3,z<10 x>3,z>=10 x<=3,z<0 x<=3,z>=10 x=4,y>5 x=4,y<=5 x!=4,y>5 x!=4,y<=5 记做T1 T2 记做T1 -T2 记做-T1 T2 记做-T1 -T2 记做T3 T4 记做T3 -T4 记做-T3 T4 记做-T3 -T4 第一个判断的取真分支 第一个判断的取假分支 第一个判断的取假分支 第一个判断的取假分支 第二个判断的取真分支 第二个判断的取真分支 第二个判断的取真分支 第二个判断的取假分支
x=2、y=5、z=15
ace
-T1、-T2、-T3、-T4
26
测试充分性
条件组合覆盖
判定-条件覆盖 判定覆盖 语句覆盖 条件覆盖
27
内容进度
• 逻辑覆盖 – 语句覆盖 – 判定(分支)覆盖 – 条件覆盖 – 判定-条件覆盖 – 条件组合覆盖 • 循环覆盖 – 简单循环 – 嵌套循环 – 串接循环
37
本章内容总结
• 逻辑覆盖测试 – 语句覆盖 – 判定覆盖 – 条件覆盖 – 判定-条件覆盖 – 条件组合覆盖 – 路径覆盖 • 循环覆盖
38
c
x==4 || y>5
d 语句块2 语句块3 出口
14
e
条件覆盖-设计用例
测试用例的输入为: { x=4、y=6、z=5} { x=2、y=5、z=5} { x=4、y=5、z=15}
程序执行的路径是:abd 程序执行的路径是:ace 程序执行的路径是:acd
入口 a x>3 && z<10 b 语句块1
3
内容进度
• 逻辑覆盖 – 语句覆盖 – 判定(分支)覆盖 – 条件覆盖 – 判定-条件覆盖 – 条件组合覆盖 • 循环语句覆盖 – 简单循环 – 嵌套循环 – 串接循环
4
白盒测试的三种覆盖标准
• 逻辑覆盖 • 基本路径覆盖 • 循环覆盖
5
逻辑覆盖测试
• • • • 针对程序的内部逻辑结构设计测试用例 通过运行测试用例达到逻辑覆盖目的 要求测试人员对程序的逻辑结构非常清楚 是最传统最经典的白盒测试技术
白盒测试
第三章、白盒测试技术-逻辑覆盖测试
上一章内容回顾
• 白盒测试技术 – 白盒测试的作用 – 白盒与黑盒测试的比较 – 白盒测试的策略 • 提高代码质量 – 软件质量度量 – 编码规范和代码检查单 – 代码度量元 – 辅助代码分析工具
2
本章学习目标
• 逻辑覆盖 – 语句覆盖 – 判定(分支)覆盖 – 条件覆盖 – 判定-条件覆盖 – 条件组合覆盖 – 路径覆盖 • 循环语句覆盖
c
x==4 || y>5
d 语句块2 语句块3 出口
15
e
测试用例(1)
则可以设计测试用例如下:
测试用例 x=4、y=6、z=5 x=2、y=5、z=5 x=4、y=5、z=15 通过路径 abd ace acd 条件取值 T1、T2、T3、T4 -T1、T2、-T3、-T4 T1、-T2、T3、-T4 覆盖分支 bd ce cd
a x>3 && z<10 b 语句块1
c
x==4 || y>5
d 语句块2 语句块3 出口
18
e
分支-条件测试-设计用例
• 根据定义只需设计以下两个测试用例便可以覆盖8个条件值以及4个 判断分支。 测试用例 x=4、y=6、z=5 x=2、y=5、z=11 通过路径 abd ace 条件取值 T1、T2、T3、T4 -T1、-T2、-T3、-T4 覆盖分支 bd ce
入口 a x>3 && z<10 b 语句块1
c
程序执行的路径是:abd
x==4 || y>5
d e
程序执行的路径是:ace
语句块2 语句块3 出口
12
条件覆盖概念
设计足够多的测试用例,运行所测程序,使程序 中每个判断的每个条件的可能取值至少执行一次;
13
条件覆盖-设计用例
入口 T1和-T1 a x>3 && z<10 b 语句块1 T3和-T3 T4和-T4 T2和-T2
16
测试用例(2)
假如根据定义设计测试用例如下:
测试用例
x=2、y=6、z=5
通过路径
acd
条件取值
-T1、T2、-T3、T4
覆盖分支
cd
x=4、y=5、z=5
abd
T1、-T2、T3、-T4
bd
17
分支-条件测试概念
入口
• 设计足够的测试用例,使得判 断中每个条件的所有可能取值 至少执行一次,同时每个判断 的真假分支至少执行一次,即 要求各个判断的所有可能的条 件取值组合至少执行一次。
丢失了一条路径abe
24
路径测试
入口
• 路径测试就是设计足够多的测试 用例,覆盖被测试对象中的所有 可能路径。
a x>3 && z<10
b 语句块1
c
x==4 || y>5 d 语句块2 语句块3 e
出口
25
测试用例
修改一个测试用例则可对程序进行全部的路径覆盖。
测试用例 x=4、y=6、z=5 x=4、y=5、z=15 x=5、y=6、z=5 通过路径 abd acd abe 覆盖条件 T1、T2、T3、T4 T1、-T2、T3、-T4 T1、T2、-T3、-T4
19
分析
• 例如对于条件表达式(x>3)&&(z<10)来说,必须两个条件都满足才能确 定表达式为真。如果(x>3)为假则一般的编译器不在判断是否z<10 了。 • 对于第二个表达式(x= =4)||(y>5)来说,若x==4测试结果为真, 就认为表达式的结果为真,这时不再检查(y>5)条件了。
20
7
辅助方法-流程图
入口 a x>3 && z<10 b 语句块1 c 发现问题 辅助设计测试用例 e
画出模块的流程图
x==4 || y>5
d 语句块2 语句块3 出口
8
语句覆盖概念
语句覆盖就是设计若干个测试用例,运行被测程 序,使得每一条可执行语句至少执行一次。
9
语句覆盖-设计用例
入口
测试用例输入: { x=4、y=5、z=5}
33
循环测试
• 不规则循环:
不能测试,尽量重新设计成结构化 的程序结构后再进行测试。
34
循环测试
• 循环次数和参数有关
int Func(int N) { ....
for(int i=0; i<N; i++) { .... } }
....
考虑设计测试用例,覆盖 N > 0 和 N <= 0,即 进入循环和不进入循环两种情
36
练习
• 例二:
if((x>4)||(z<7)) { k=x*y-1; j=5; } if((x==8)&&(y>5)){ j=7; } j=j+1; 则下列能够完成对这段代码语句覆盖的测试用例 是() A.x=2,y=6,z=5 B.x=6,y=6,z=5 C.x=8,y=6,z=4 D.x=8,y=5,z=5
6
例子代码
先看下面代码:
void DoWork(int x,int y,int z) { int k=0,j=0; if(( x>3 ) && ( z<10 )) { k=x*y-1; //语句块1 j=sqrt(k); } if(( x= =4 ) || ( y>5 )) { j=x*y+10; //语句块2 } j=j%3; //语句块3 }
35
练习
• 例一: int fun(int a,int b) { int x=0,y=0; if(a==0&&b>5) x=y+1; else x=y+10; return x; } 则下列各组测试用例中满足判定-条件覆 盖率测试的是() A.a=0,b=6 a=0,b=7 B. a=1,b=5 a=0,b=7 C. a=0,b=5 a=1,b=5 D. a=0,b=6 a=1,b=6
30
循环测试-嵌套循环
• 嵌套循环:
1. 从最内层循环开始,将其它循环 设置为最小值; 2. 对最内层循环使用简单循环,而 使外层循环的叠代参数(即循环 计数)最小,并为范围外或排除 的值增加其它测试; 3. 由内向外构造下一个循环的测试, 但其它的外层循环为最小值,并 使其它的嵌套循环为“典型”值; 4. 继续直到测试所有的循环。
22
流程图
入口 T1和-T1 a x>3 && z<10 T2和-T2 c
b 语句块1
T3和-T3 x==4 || y>5 d 语句块2 语句块3
T4和-T4
e
出口
23
设计测试用例
测试用例 x=4、y=6、z=5 x=4、y=5、z=15 x=2、y=6、z=5 x=2、y=5、z=15 通过路径 abd acd acd ace 条件取值 T1、T2、T3、T4 T1、-T2、T3、-T4 -T1、T2、-T3、T4 -T1、-T2、-T3、-T4 覆盖 组合号 1和5 2和6 3和7 4和8
31
嵌套循环举例
for(i=0; i<num; i++) { while(j>0) { j--; } }
32
循环测试
• 串接循环:
1. 如果串接循环的循环都彼此独立, 可是使用嵌套的策略测试。 2. 如果第一个循环是第二个循环的 初始值,则这两个循环并不是独 立的,则推荐使用的嵌套循环的 方法进行测试。
28
循环测试-简单循环
• 简单循环:
其中n是允许通过循环的最大次数。 1. 整个跳过循环; 2. 只有一次通过循环; 3. 两次通过循环; 4. m次通过循环,其中m<n; 5. n-1,n次通过循环。
29
简单循环举例
举例:
...... for(s=0;s<i;s++) fwrite(&prof[s],sizeof(struct ENGINEER),1,fp); ......
a x>3 && z<10 b 语句块1
c
x==4 || y>5
d e
程序执行的路径是:abd
来自百度文库
语句块2 语句块3 出口
10
分支(判定)覆盖概念
设计若干个测试用例,运行所测程序,使程序中 每个判断的真假分支至少执行一次;
11
分支(判定)覆盖-设计用例
测试用例的输入为: { x=4、y=5、z=5} { x=2、y=5、z=5}