chap 3 软件测试技术-白盒测试技术(含其他)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 3.条件覆盖
ຫໍສະໝຸດ Baidu
• •
在设计程序中,一个判定语句是由多 个条件组合而成的复合判定。 条件覆盖的含义是:构造一组测试用 例,使得每一判定语句中每个逻辑条件 的可能值至少满足一次。
• 4.条件判定组合覆盖
•
条件判定组合覆盖的含义是:设计足够 的测试用例,使得判定中每个条件的所有 可能(真/假)至少出现一次,并且每个判 定本身的判定结果(真/假)也至少出现一 次。
– 3.2.3 程序插桩
•
在软件动态测试中,程序插桩是一种 基本的测试手段,有着广泛的应用。
• 1.方法简介
•
程序插桩方法是借助往被测程序中插 入操作,来实现测试目的的方法。
• 设计插桩程序时需要考虑的问题包括: • ① 探测哪些信息; • ② 在程序的什么部位设置探测点; • ③ 需要设置多少个探测点。
图 3 5 计 算 非 负 数 之 商 的 迭 代 程 序 -
procedure DIVIDE(NUM,DEN,E,Q) *E is the accuracy required.E≥0.Q is both * * the result at exit and at any interim stage. * *A.B and W are the other elements of the program vector.* Q:=0 A:=0 B:=DEN/2 W:=1 @ K:=0 until W<E loop @ assert W=1/2**K @ assert A=DEN*Q @ assert B=DEN*W/2 @ assert NUM/DEN −W<Q and Q⁊NUM/DEN if(NUM − A −B)≥0 then Q:=Q+W/2 A:=A+B endif B:=B/2 W:=W/2 @ K:=K+1 endloop @ assert NUM/DEN −W<Q and Q⁊NUM/DEN end
白盒测试方法
• • • • • • • 程序控制流分析(Program control-flow ) 数据流分析(Data-flow coverage) 逻辑覆盖 域测试 符号测试 路径分析 程序插装
1.程序的控制流图
• 控制流图是描述程序控制流的一种图 示方式。其中基本的控制结构对应的 图形符号如图3-8所示。在图3-8所示 的图形符号中,圆圈称为控制流图的 一个结点,它表示一个或多个无分支 的语句或源程序语句。
•
如果我们想要了解一个程序在某次 运行中所有可执行语句被覆盖的情况, 或是每个语句的实际执行次数,最好的 办法是利用插桩技术。这里仅以计算整 数X和整数Y的最大公约数程序为例,说 明插桩方法的要点。图3-3给出了这一程 序的流程图。
图
入口 C(1)=C(1)+1
Q=X
R=Y
C(2)=C(2)+1
1 2 6 3 7 7 4
判定覆盖的优缺点
• 优点:判定覆盖比语句覆盖要多几乎一倍 优点: 的测试路径,当然也就具有比语句覆盖更 强的测试能力。同样判定覆盖也具有和语 句覆盖一样的简单性,无须细分每个判定 就可以得到测试用例。 • 缺点:往往大部分的判定语句是由多个逻 缺点: 辑条件组合而成(如,判定语句中包含 AND、OR、CASE),若仅仅判断其整个 最终结果,而忽略每个条件的取值情况, 必然会遗漏部分测试路径。
语句覆盖 Statement coverage
• 语句覆盖就是设计若干个测试用例,运行被测 语句覆盖就是设计若干个测试用例, 程序,使得每一可执行语句至少执行一次。 程序,使得每一可执行语句至少执行一次。这 种覆盖又称为点覆盖, 种覆盖又称为点覆盖,它使得程序中每个可执 行语句都得到执行,但它是最弱的逻辑覆盖准, 行语句都得到执行,但它是最弱的逻辑覆盖准, 效果有限,必须与其它方法交互使用。 效果有限,必须与其它方法交互使用。
Q≠R C(4)=C(4)+1 C(3)=C(3)+1
Q≠R C(5)=C(5)+1 C(6)=C(6)+1
口
Q=Q–R
R=R–Q
3 3 插 桩 后 求 最 大 公 约 数 程 序 的 流 程 图
-
• 2.断言语句
•
在程序中特定部位插入某些用以判断 变量特性的语句,使得程序执行中这些 语句得以证实,从而使程序的运行特性 得到证实。我们把插入的这些语句称为 断言。这一做法是程序正确性证明的基 本步骤,尽管算不上严格的证明,但方 法本身仍然是很实用的。下面以求两个 非负数NUM和DEN之商的Wensley迭代 算法为例,对断言语句的作用做一简要 说明。
• 7.测试覆盖准则
– (1)Foster的ESTCA覆盖准则
•
前面所介绍的逻辑覆盖其出发点似 乎是合理的。所谓“覆盖”,就是想要 做到全面而无遗漏。但是,事实表明, 它并不能真的做到无遗漏。 • K.A.Foster从测试工作实践的教训 出发,吸收了计算机硬件的测试原理, 提出了一种经验型的测试覆盖准则。
图 3 6 插 入 断 言 后 的 迭 代 程 序 -
点覆盖 Node Coverage
• 如果连通图 G 的子图 ´是连通的,而且包 的子图G´是连通的, 的所有节点, 的点覆盖。 含G的所有节点,则称 ´是G的点覆盖。 的所有节点 则称G´ 的点覆盖 • 与语句覆盖标准相同。 与语句覆盖标准相同。
白盒测试技术
• 白盒测试应该根据程序的控制结构设计测试用例, 白盒测试应该根据程序的控制结构设计测试用例, 原则是: 原则是: 保证模块中每一独立的路径至少执行一次; ① 保证模块中每一独立的路径至少执行一次; 保证所有判断的每一分枝至少执行一次; ② 保证所有判断的每一分枝至少执行一次; ③ 保证每一循环都在边界条件和一般条件下至 少各执行一次; 少各执行一次; 验证所有内部数据结构的有效性。 ④ 验证所有内部数据结构的有效性。
– – – – – – 语句覆盖 判定覆盖 条件覆盖 判定/条件覆盖 判定 条件覆盖 条件组合覆盖 路径覆盖
开始
图 3 7 参 考 例 子 流 程 图 -
x=0
T
(a) AND (b OR c)
F
x=1
结束
• • • • • • • •
int function1(bool a,bool b,bool c) { int x; x=0; if(a&&(b||c)) x=1; return x; }
(A>1)and (B=0) 为一 ) 个判定 A>1 为一个条件 为一个条件
s a F 2 b
(A=2) or (X>1)
1 T 4 c
(A>1) and (B=0)
每个语句至少执行一次! 每个语句至少执行一次! 每个判定的每种可能都至少执 行一次! 行一次! 即每个判定的真假分支都至少 执行一次! 执行一次!
4
9 10 R4
1 (a)程序流程图
11 (b)控制流图
逻辑覆盖
• 逻辑覆盖是以程序内部的逻辑结构为基础的设计 逻辑覆盖是以程序内部的逻辑结构为基础 程序内部的逻辑结构为基础的设计 测试用例的技术。 测试用例的技术。这一方法要求测试人员对程序 的逻辑结构有清楚的了解, 的逻辑结构有清楚的了解,甚至要能掌握源程序 的所有细节。 的所有细节。 • 由于覆盖测试的目标不同,逻辑覆盖又可分为: 由于覆盖测试的目标不同,逻辑覆盖又可分为:
判定覆盖 Decision Coverage
• 判定覆盖就是设计若干个测试用例,运行被测 判定覆盖就是设计若干个测试用例, 程序,使得程序中每个判断的取真分支 取真分支和 程序,使得程序中每个判断的取真分支和取假 分支至少经历一次 至少经历一次, 分支至少经历一次,即程序中的每个分支至少 判定覆盖又称为分支覆盖 分支覆盖(Branch 执行一次 。判定覆盖又称为分支覆盖 coverage)。 。 • 判定覆盖只比语句覆盖稍强一些,实际效果表 判定覆盖只比语句覆盖稍强一些, 只是判定覆盖, 明,只是判定覆盖,还不能保证一定能查出在 判断的条件中存在的错误。因此, 判断的条件中存在的错误。因此,还需要更强 的逻辑覆盖准则去检验判断内部条件。 的逻辑覆盖准则去检验判断内部条件。 To be continue…
To be continue…
PROCEDURE Example(A,B:real; X:real );
s a F 2 b
(A=2) or (X>1)
Begin
1 T 4 c
IF (A>1) AND (B=0) THEN X:= X / A; IF ( A=2 ) OR (X>1) THEN X:=X+1 END;
(A>1) and (B=0)
X= X /A
5 T 6
X=X+1
I. A=2, B= 0, X=4 ---- sacbed e 语句覆盖 所有的语句至少执行一次! 所有的语句至少执行一次! 最弱的逻辑覆盖 是最弱的逻辑覆盖
F 3
d
7
语句覆盖优缺点
• 优点:可以很直观地从源代码得到测试用 例,无须细分每条判定表达式。 • 缺点:由于这种测试方法仅仅针对程序逻 辑中显式存在的语句,但对于隐藏的条件 和可能到达的隐式逻辑分支,是无法测试 的。 • 例如:IF (A>1) AND (B=0) THEN, “null else”, 用例不需要考虑迫使 A<1的出错情况。
X= X /A
I: A=3, B=0,X=1: sacbd
5 T 6
X=X+1
II: A=2, B=1,X=1: sabed
F 3
d
e
满足判 定覆盖
7
满足判定覆盖的测试用例一定 满足语句覆盖: 满足语句覆盖:判定覆盖比语 句覆盖强。 句覆盖强。但仍是弱的逻辑覆 盖。
边覆盖 Edge Coverage
WHILE 循环结构
顺序结构
IF 选择结构
CASE 多分支结构 UNTIL 循环结构
图3-8 控制流图的图形符号
•
图3-9(a)所示的是一个程序的流程 图,它可以映射成图(b)所示的控制流 1 图。 结点
边 1
2
图 3 9 程 序 流 程 图 和 对 应 的 控 制 流 图 -
区域
2 6 3 6 7 8 4 5 7 R3 8 R1 R2
• 如果连通图 G 的子图 ´是连通的,而且包 的子图G´是连通的, 的所有边, 的边覆盖。 含G的所有边,则称 ´是G的边覆盖。 的所有边 则称G´ 的边覆盖 • 通常与判定覆盖标准相同。 通常与判定覆盖标准相同。
Ⅰ: A=3,B=0,X=3 (1-4-5-3); Ⅱ: A=2,B=1,X=1 (1-2-6-7) Ⅲ: A=1,B=1,X=1 (1-2-3); Ⅳ: A=2,B=0,X=4 (1-4-5-6-7)
• 1.语句覆盖
•
为了暴露程序中的错误,程序中的每 条语句至少应该执行一次。所以,语句 覆盖的含义是:选择足够多的测试数据, 使被测程序中每条语句至少执行一次。
• 2.判定覆盖
•
比语句覆盖稍强的覆盖标准是判定覆 盖。按判定覆盖准则进行测试是指,设 计若干测试用例,运行被测程序,使得 程序中每个判断的取真分支和取假分支 至少经历一次,即判断的真假值均曾被 满足。判定覆盖又称为分支覆盖。
procedure DIVIDE(NUM,DEN,E,Q) *E is the accuracy required.E≥0.Q is both * * the result at exit and at any interim stage. * *A.B and W are the other elements of the program vector.* Q:=0 A:=0 B:=DEN/2 W:=1 until W<E loop if(NUM–A–B)≥0 then Q:=Q+W/2 A:=A+B endif B:=B/2 W:=W/2 endloop end
• 5.多条件覆盖
•
多条件覆盖也称为条件组合覆盖,它 的含义是:设计足够的测试用例,使得 每个判定中条件的各种可能组合都至少 出现一次。显然满足多条件覆盖的测试 用例是一定满足判定覆盖、条件覆盖和 条件判定组合覆盖的。
• 6.修正条件判定覆盖
•
它要求满足两个条件:首先,每一个 程序模块的入口和出口点都要考虑至少 被调用一次,每个程序的判定到所有可 能的结果值要至少转换一次;其次,程 序的判定被分解为通过逻辑操作符(and、 or)连接的bool条件,每个条件对于判定 的结果值是独立的。