第四讲 白盒测试
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
23
逻辑覆盖
⑤路径测试 就是设计足够多的测 试用例,覆盖被测试对象 中的所有可能路径。
24
逻辑覆盖
测试用例 通过 路径 x=4、 y=6、 z=5 x=4、 y=5、 z=15 x=2、 y=5、 z=15 x=5、 y=5、 z=5 abd 覆盖条件 T1、T2、T3、T4
入口 a (x>3)&&(z<10) yes b 执行语句块1 No c
Biblioteka Baidu
21
逻辑覆盖
条件取值 通 过 路 径 abd T1、T2、 x=4、y=6、 、 、 、 、 z=5 T3、T4 、 acd T1、-T2、 x=4、y=5、 、 、 、 、 z=15 T3、-T4 、 acd -T1、T2、 x=2、y=6、 、 、 、 、 z=5 -T3、T4 、 ace -T1、-T2、 、 、 x=2、y=5、 、 、 z=15 -T3、-T4 、 测试用例 覆盖组 合号
白盒测试
1
课程目标
掌握白盒测试用例的设计方法。 掌握白盒测试用例的设计方法。 可使用逻辑覆盖、基本路径测试方法设计 可使用逻辑覆盖、 测试用例。 测试用例。
2
什么是白盒测试? 什么是白盒测试?
白盒测试又称结构测试、逻辑驱动测试或基 于程序的测试(Program-based Testing)。 采用这一测试方法,测试者可以看到被测的 源程序,他可以用以分析程序的内部构造, 并且根据其内部构造设计测试用例。这时测 试者可以完全不顾程序的功能。
3
测试用例
测试用例由测试输入数据以及与 之对应的输出结果组成。 测试用例设计的好坏直接决定了 测试的效果和结果。所以说在软件测 试活动中最关键的步骤就是设计有效 的测试用例。 测试用例可以针对黑盒测试设计 用例,也可以针对白盒测试设计用例, 我们今天只讲针对白盒测试的用例设 计方法。
4
白盒测试用例的设计方法
路径 选择足够的测试用例,每个可 较强的覆盖,但 覆盖 能执行到的路径至少经过一次 是不能代替条件 覆盖和条件组合 覆盖
27
基本路径测试
在实践中,一个不太复杂的程 序,其路径可能都是一个庞大的数 字,要在测试中覆盖所有的路径是 不现实的。所以,只得把覆盖的路 径数压缩到一定限度内。 基本路径测试就是这样一种测 试方法,它在程序控制流图的基础 上,通过分析控制构造的环形复杂 性,导出基本可执行路径集合,从 而设计测试用例的方法。设计出的 测试用例要保证在测试中程序的每 一个可执行语句至少执行一次。
控制流图
为了更加突出控制流的结构,可对程序流 程图进行简化,简化后的图称为控制流图。 在控制流图中只有两种图形符号: 1)节点,用带标号的圆圈表示,代表一 个或多个语句、一个处理方框序列和一个菱形 判断框(假如不包含复合条件)都可以映射为 一个节点; 2)控制流线,用带箭头的弧或线表示, 称为边或两节点连接。它代表程序的控制流, 类似于流程图中的箭头线,控制流线通常标有 名字。
6
画出上面函数的流程图如下:
入口 a (x>3)&&(z<10) yes b 执行语句块1 No No c
(x==4)||(y>5) yes d 执行语句块2
e
执行语句块3
出口
7
逻辑覆盖
①语句覆盖 语句覆盖就是设计足够多的测试用例, 运行被测试程序,使得每一条可执行语句至 少执行一次。 该测试用例虽然覆盖了可执行语句,但 并不能检查判断逻辑是否有问题,例如在第 一个判断中把&&错误的写成了||,则上面的 测试用例仍可以覆盖所有的执行语句。可以 说语句覆盖是最弱的逻辑覆盖准则 语句覆盖是最弱的逻辑覆盖准则。 语句覆盖是最弱的逻辑覆盖准则
12
逻辑覆盖
③条件覆盖 设计足够多的测试用例,运行所测 程序,使程序中每个判断的每个条件的 每个可能取值至少执行一次。 如果使用:{x=2、y=6、z=5 } {x=4、y=5、z=5 } 这两个测试用例结果如何?
13
逻辑覆盖
对例子中的所有条件取值加以标记。例如: 对于第一个判断: 条件x>3 取真值为T1,取假值为-T1 条件z<10 取真值为T2,取假值为-T2 对于第二个判断: 条件x=4 取真值为T3,取假值为-T3 条件y>5 取真值为T4,取假值为-T4
14
逻辑覆盖
测试 x=4、y=6、 x=2、y=5、 x=4、y=5、 z=5 z=15 用例 z=5 通过 abd 路径 条件 T1、T2、 取值 T3、T4 覆盖 bd 分支 ace acd
入口 a (x>3)&&(z<10) yes b 执行语句块1 No c
-T1、T2、 T1、-T2、 -T3、-T4 T3、-T4 ce cd
条件 选择足够的测试用例,使得判定中 覆盖 的每个条件的所有可能结果至少出 现一次,但是判定表达式中的某些 可能结果并未出现 判定- 选择足够的测试用例,使得判定中 条件 的每个条件的所有可能结果至少出 覆盖 现一次,并且每个判定本身的所有 可能结果至少出现一次
由上至下逐渐 增强
26
小结
条件 选择足够的测试用例,使得判 最强的覆盖 组合 断中每个条件的所有可能结果 覆盖 的组合至少出现一次
e
执行语句块3
出口
9
逻辑覆盖
②判定覆盖: 也称为分支覆盖。 也称为分支覆盖。设计足够多的测试 用例,运行所测程序,使程序中每个判断 的取真分支和取假分支至少执行一次;
10
逻辑覆盖
入口
测试用例的输入为: { x=4、y=5、z=5} { x=2、y=5、z=5} 程序执行的路径: a-b-d a-c-e T (T&&T),T(T||F) F (F&&T),F(F||F) 将y>5写成y<5,用原 测试用例重新进行测试会 如何?
5
下面以例子进行分析讲解: 下面以例子进行分析讲解:
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 }
入口 a (x>3)&&(z<10) yes b 执行语句块1 No No c
(x==4)||(y>5)
上面的测试用例,虽然 满足了条件覆盖,但只覆 盖了第一个条件取假的分 支和第二个条件取真的分 支,不满足分支覆盖的要 求。
yes d 执行语句块2 e
执行语句块3
出口
16
逻辑覆盖
④判定-条件覆盖 设计足够多的测试用例,运行所测 程序,使程序中每个判断的每个条件的 所有可能取值至少执行一次,并且每个 可能的判断结果也至少执行一次,换句 话说,即是要求各个判断的所有可能的 条件取值组合至少执行一次。
acd
T1、-T2、T3、-T4
(x==4)||(y>5) yes d
No
ace
-T1、-T2、-T3、-T4
执行语句块2
e
abe
T1、T2、-T3、T4
执行语句块3
出口
25
语句 覆盖 判定 覆盖
选择足够的测试用例,使得每个语 句至少执行一次 选择足够的测试用例,使得所有可 能的结果至少出现一次
最弱的覆盖
(x==4)||(y>5) yes d 执行语句块2
No
e
上面的测试用例不但覆 盖了所有分支的真假两个分 支,而且覆盖了判断中的所 有条件的可能值。
执行语句块3
出口
15
逻辑覆盖
测试用例 通过 路径 条件取值 覆盖 分支 x=2、y=6、 acd z=5 x=4、y=5、 acd z=15 -T1、T2、 cd -T3、T4 T1、-T2、 cd T3、-T4
入口 a (x>3)&&(z<10) yes b No c
T12、 、 T34 -T12、 、 T34 -T12、 、 T34 -T12、 、 -T34
执行语句块1 No
(x==4)||(y>5) yes d 执行语句块2
e
执行语句块3
出口
22
上面的4个测试用例覆盖了所有条件 的可能取值的组合,覆盖了所有判断的 可取分支,但是却丢失了一条路径abe。
17
逻辑覆盖
输入测试用例: {x=4、y=6、z=5 } {x=2、y=5、z=11}
测试用例 通过 路径 条件取值 覆盖 分支
入口 a (x>3)&&(z<10) yes b 执行语句块1 No No c
(x==4)||(y>5) yes d 执行语句块2
e
x=4、y=6、 abd z=5 x=2、y=5、 ace z=11
8
逻辑覆盖
入口
测试用例输入: { x=4、y=5、z=5} 程序执行的路径是: a-b-d
a (x>3)&&(z<10) yes b 执行语句块1 No No c
这个测试用例把三 个执行语句块中的语句 都覆盖了。 把&&改为||,用原 测试用例重新测试会怎 样?
(x==4)||(y>5) yes d 执行语句块2
盖,逻辑表达式中的错误不一定能够查 出来了。 出来了。
19
逻辑覆盖
⑤条件组合覆盖 设计足够多的测试用例,运行所测程序, 使程序中每个判断的所有可能的条件取值组 合至少执行一次。
20
逻辑覆盖
现在对例子中的各个判断的条件取值组合加以标记如下: 1. x>3,z<10 记做T1 T2, 第一个判断的取真分支 2. x>3,z>=10 记做T1 -T2, 第一个判断的取假分支 3. x<=3,z<10 记做-T1 T2, 第一个判断的取假分支 4. x<=3,z>=10 记做-T1 -T2,第一个判断的取假分支 5. x=4,y>5 记做T3 T4, 第二个判断的取真分支 6. x=4,y<=5 记做T3 -T4, 第二个判断的取真分支 7. x!=4,y>5 记做-T3 T4, 第二个判断的取真分支 8. x!=4,y<=5 记做-T3 -T4,第二个判断的取假分支
a (x>3)&&(z<10) yes b 执行语句块1 No No c
(x==4)||(y>5) yes d 执行语句块2
e
执行语句块3
出口
11
上面的两个测试用例虽然能够满足条件 条件 覆盖的要求,但是也不能对判断条件进行检 覆盖 不能对判断条件进行检 查。例如把第二个条件y>5错误的写成y<5,上 面的测试用例同样满足了分支覆盖。
28
基本路径测试
步骤: 1、绘制程序控制流图 2、通过分析环形复杂性,计算圈复杂度,导 出程序基本路径集合中的独立路径条数,这是确 定程序中每个可执行语句至少执行一次所必须的 测试用例数目的上界。 3、导出测试用例:根据环形复杂性和程序结 构设计用例数据输入和预期结果。 4、准备测试用例:确保基本路径集中的每一 条路径的执行。 工具方法: 图形矩阵:是在基本路径测试中起辅助作用 的软件工具,利用它可以实现自动地确定一个 29 基本路径集。
bd T1、T2、T3、 T4 -T1、-T2、 -T3、-T4 ce
执行语句块3
出口
18
逻辑覆盖
判定-条件覆盖从表面来看,它测试了
所有条件的取值,但是实际上某些条件掩盖 了另一些条件。 例如对于条件表达式(x>3)&&(z<10)来 说,必须两个条件都满足才能确定表达式为 真。如果(x>3)为假则一般的编译器不在 判断是否z<10了。对于第二个表达式(x= =4)||(y>5)来说,若x==4测试结果为真, 就认为表达式的结果为真,这时不再检查 (y>5)条件了。因此,采用判定 条件覆 采用判定-条件覆
逻辑覆盖:主要是测试覆盖率 覆盖率,以程序内在 覆盖率 逻辑结构为基础的测试。其中比较常用的逻 辑覆盖测试方法有:语句覆盖、判定覆盖、 条件覆盖、判定-条件覆盖、条件组合覆盖、 路径覆盖。 基本路径测试:在程序控制图的基础上,通 过分析控制构造的环行复杂性,导出基本可 执行路径集合,从而设计测试用例的方法。 设计出的测试用例要保证在测试中程序的每 一个可执行语句至少执行一次。
30
控制流图
包含条件的节点被称为判定节点(也叫谓 词节点),从每一个判定节点发出两条或多条 边。一条边必须终止于一个节点,由边和节点 限定的范围称为区域。下面是常见语句和结构 的控制流图。
顺序语句
IF语句
WHILE语句
UNTIL语句
CASE多分支结构
31
控制流图
程序设计中遇到复合条件时,生成的流图 变得更为复杂。当条件语句中用到一个或多 个布尔运算符(逻辑OR,AND,NAND,NOR)时, 就出现了复合条件。例如: 1 if a or b 1a 2 x=0; 1b 3 else 4 y=0; 2 2 4 对应的逻辑为: