当前位置:文档之家› 软件测试第3章 白盒测试 教学PPT

软件测试第3章 白盒测试 教学PPT


3.1.2 判定覆盖
判定覆盖的作用是使真假分支 均被执行,虽然判定覆盖比语 句覆盖测试能力强,但仍然具 有和语句覆盖一样的单一性。
3.1.2 判定覆盖
以3.1.1节程序为例,设计判定覆盖测试用例。
测试用例 x y z 执行语句路径
test1
2 -1 1
acd
test2
-3 1 -1
abd
test3
3.1.1 语句覆盖
语句覆盖的目的是测试程序中的代码 是否被执行,它只测试代码中的执行 语句,这里的执行语句不包括头文件、 注释、空行等。
3.1.1 语句覆盖
语句覆盖在多分支的程序中,只能覆 盖某一条路径,使得该路径中的每一 个语句至少被执行一次,但不会考虑 各种分支组合情况。
3.1.1 语句覆盖
3.1.1 语句覆盖
语句覆盖无需详细考虑每个判断表达式, 可以直观地从源程序中有效测试执行语 句是否全部被覆盖,由于程序在设计时, 语句之间存在许多内部逻辑关系,而语 句覆盖不能发现其中存在的缺陷,因此 语句覆盖并不能满足白盒测试的测试所 有逻辑语句的基本需求。
3.1.2 判定覆盖
判定覆盖(Decision Coverage) 又称为分支覆盖,其原则是设 计足够多的测试用例,在测试 过程中保证每个判定至少有一 次为真值,有一次为假值。
3.1.3 条件覆盖
以图3.1.1节程序为例,设计条件覆盖测试用例,在该程序中,有2个判 定语句,每个判定语句有2个逻辑条件,共有4个逻辑条件,使用标识 符标识各个逻辑条件取真值与取假值的情况,如下表。
条件1 x>0 x<0 y<0 y>0
条件标记 S1 -S1 S2 -S2
条件2 x>2 x<2 z>0 z<0
3.1.1 语句覆盖
语句覆盖虽然可以测试 执行语句是否被执行到, 但却无法测试程序中存 在的逻辑错误。
例如,如果上述程序中的逻辑判断符 号“AND”误写了“OR”,使用测 试用例Test1同样可以覆盖acd路径上 的全部执行语句,但却无法发现错误。 同样,如果将x>0误写成x>=0,使 用同样的测试用例Test1也可以执行 acd路径上的全部执行语句,但却无 法发现x>=0的错误。
3 -1 5
ace
test4
3 1 -1
abe
3.1.2 判定覆盖
上述4个测试用例覆盖了acd、abd、ace、abe四条路径,使 得每个判定语句的取值都满足了各有一次“真”与“假”。 相比于语句覆盖,判定覆盖的覆盖范围更广泛。判定覆盖虽 然保证了每个判定至少有一次为真值,有一次为假值。
3.1.2 判定覆盖
ace
3.1.3 条件覆盖
从条件覆盖的测试用例可知,使用3个测试用例就达到了使每个逻辑条 件取真值与取假值都至少出现了一次,但从测试用例的执行路径来看, 条件分支覆盖的状态下仍旧不能满足判定覆盖,即没有覆盖acd路径。 相比于语句覆盖与判定覆盖,条件覆盖达到了逻辑条件的最大覆盖率, 但却不能保证判定覆盖,仍旧不能满足白盒测试覆盖所有分支的需求。
第3章 白盒测试
· 逻辑覆盖法 · 插桩法
3.1 逻辑覆盖法
逻辑覆盖法是最常用的白盒测试方法,它包括以下5种方法: ● 语句覆盖 ● 判定覆盖 ● 条件覆盖 ● 判定-条件覆盖 ● 条件组合覆盖
3.1.1 语句覆盖
语句覆盖(Statement Coverage)又称行覆盖、段 覆盖、基本块覆盖,它是最 常见的覆盖方式。
判定覆盖并没有考虑到程序内部取值的情况。 例如,测试用例test4,没有将x>2作为条件 进行判断,仅仅判断了z>0的条件。 此外,若将判定条件z>0误写成z<0,test2 测试用例路径将执行abe测试路径语句而不 会执行abd路径的语句。
3.1.2 判定覆盖
结论
判定覆盖语句一般是由多个逻辑条件 组成,如果仅仅判断测试程序执行的 最终结果而忽略每个条件的取值,必 然会遗漏部分测试路径,因此,判定 覆盖也属于弱覆盖。
3.1.4 判定-条件覆盖
条件标记 S3 -S3 S4 -S4
3.1.3 条件覆盖
使用S1标记x>0取真值(即x>0成立)的情况,-S1标记x>0取假值 (即x>0不成立)的情况。同理,使用S2、S3、S4标记y<0、x>2、 z>0取真值,使用-S2、-S3、-S4标记y<0、x>2、z>0取假值,最后 得到执行条件判断语句的8种状态
3.1.3 条件覆盖
设计测试用例时,要保证每种状态都至少出现一次。设计测试用例的原 则是尽量以最少的测试用例达到最大的覆盖率。
测试用例 x y z
条件标记
Test1
3 1 5 S1、-S2、S3、S4
执行路径 abe
Test2 -3 1 -1 -S1、-S2、-S3、-S4
abd
Test3
3 -1 1 S1、S2、S3、-S4
示例代码
IF x>0 AND y<0 //条件1 z=z-(x-y)
IF x>2 OR z>0 //条件2 z=z+(x+y)
在代码中,AND表示逻辑运算&&, OR表示逻辑运算||,第1~2行代码 表示如果x>0成立并且y<0成立, 则执;0成立, 则执行z=z+(x+y)语句。
3.1.3 条件覆盖
条件覆盖(Condition Coverage)指的是设计足够多 的测试用例,使判定语句中的 每个逻辑条件取真值与取假值 至少出现一次。
例如,对于判定语句if(a>1 OR c<0)中存在a>1、c<0两 个逻辑条件,设计条件覆盖测 试用例时,要保证a>1、c<0 的“真”、“假”值至少出现 一次。
3.1.1 语句覆盖
a
N x>0&&y<0
Y
b
z=z-(x-y) c
N d
x>2||z>0
Y z=z+(x+y) e
在代码运行流程图中,a、 b、c、d、e表示程序执行 分支。在语句覆盖测试用 例中,使程序中每个可执 行语句至少被执行一次。
3.1.1 语句覆盖
设计测试用例:Test1:x=1 y=-1 z=2 执行测试用例,程序运行路径为acd。可以看出程序中acd路径 上的每个语句都能被执行。 但是语句覆盖对多分支的逻辑无法全面反映,仅仅执行一次不 能进行全面覆盖,因此,语句覆盖是弱覆盖方法。
相关主题