软件测试第3章 白盒测试 教学PPT
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.1.1 语句覆盖
语句覆盖的目的是测试程序中的代码 是否被执行,它只测试代码中的执行 语句,这里的执行语句不包括头文件、 注释、空行等。
3.1.1 语句覆盖
语句覆盖在多分支的程序中,只能覆 盖某一条路径,使得该路径中的每一 个语句至少被执行一次,但不会考虑 各种分支组合情况。
3.1.1 语句覆盖
ace
3.1.3 条件覆盖
从条件覆盖的测试用例可知,使用3个测试用例就达到了使每个逻辑条 件取真值与取假值都至少出现了一次,但从测试用例的执行路径来看, 条件分支覆盖的状态下仍旧不能满足判定覆盖,即没有覆盖acd路径。 相比于语句覆盖与判定覆盖,条件覆盖达到了逻辑条件的最大覆盖率, 但却不能保证判定覆盖,仍旧不能满足白盒测试覆盖所有分支的需求。
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.3 条件覆盖
条件覆盖(Condition Coverage)指的是设计足够多 的测试用例,使判定语句中的 每个逻辑条件取真值与取假值 至少出现一次。
例如,对于判定语句if(a>1 OR c<0)中存在a>1、c<0两 个逻辑条件,设计条件覆盖测 试用例时,要保证a>1、c<0 的“真”、“假”值至少出现 一次。
判定覆盖并没有考虑到程序内部取值的情况。 例如,测试用例test4,没有将x>2作为条件 进行判断,仅仅判断了z>0的条件。 此外,若将判定条件z>0误写成z<0,test2 测试用例路径将执行abe测试路径语句而不 会执行abd路径的语句。
3.1.2 判定覆盖
结论
判定覆盖语句一般是由多个逻辑条件 组成,如果仅仅判断测试程序执行的 最终结果而忽略每个条件的取值,必 然会遗漏部分测试路径,因此,判定 覆盖也属于弱覆盖。
3.1.1 语句覆盖
wenku.baidu.com
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路径 上的每个语句都能被执行。 但是语句覆盖对多分支的逻辑无法全面反映,仅仅执行一次不 能进行全面覆盖,因此,语句覆盖是弱覆盖方法。
3.1.1 语句覆盖
语句覆盖虽然可以测试 执行语句是否被执行到, 但却无法测试程序中存 在的逻辑错误。
例如,如果上述程序中的逻辑判断符 号“AND”误写了“OR”,使用测 试用例Test1同样可以覆盖acd路径上 的全部执行语句,但却无法发现错误。 同样,如果将x>0误写成x>=0,使 用同样的测试用例Test1也可以执行 acd路径上的全部执行语句,但却无 法发现x>=0的错误。
条件标记 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 5
ace
test4
3 1 -1
abe
3.1.2 判定覆盖
上述4个测试用例覆盖了acd、abd、ace、abe四条路径,使 得每个判定语句的取值都满足了各有一次“真”与“假”。 相比于语句覆盖,判定覆盖的覆盖范围更广泛。判定覆盖虽 然保证了每个判定至少有一次为真值,有一次为假值。
3.1.2 判定覆盖
第3章 白盒测试
· 逻辑覆盖法 · 插桩法
3.1 逻辑覆盖法
逻辑覆盖法是最常用的白盒测试方法,它包括以下5种方法: ● 语句覆盖 ● 判定覆盖 ● 条件覆盖 ● 判定-条件覆盖 ● 条件组合覆盖
3.1.1 语句覆盖
语句覆盖(Statement Coverage)又称行覆盖、段 覆盖、基本块覆盖,它是最 常见的覆盖方式。
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
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.4 判定-条件覆盖
示例代码
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成立, 则执行z=z-(x-y)语句;第3~4行代 码表示如果x>2成立或者z>0成立, 则执行z=z+(x+y)语句。
3.1.1 语句覆盖
语句覆盖无需详细考虑每个判断表达式, 可以直观地从源程序中有效测试执行语 句是否全部被覆盖,由于程序在设计时, 语句之间存在许多内部逻辑关系,而语 句覆盖不能发现其中存在的缺陷,因此 语句覆盖并不能满足白盒测试的测试所 有逻辑语句的基本需求。
3.1.2 判定覆盖
判定覆盖(Decision Coverage) 又称为分支覆盖,其原则是设 计足够多的测试用例,在测试 过程中保证每个判定至少有一 次为真值,有一次为假值。