白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。今天我们主要研究逻辑覆盖,逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
下图是一个普通的程序流程图,其中有两个判定语句和两个复制语句,以及四条路径L1:ace,L2:abd,L3:abe,L4:acd。
1.语句覆盖每条语句至少执行一次。
我们可以创建一个测试用例(2,0,4)使得覆盖图中所有的语句(包括判定语句和赋值语句),也就是走L1路径,它并没有覆盖所有的路径,因此语句覆盖的覆盖程度最低。
2.判定覆盖又称分支覆盖,它不仅每个语句执行一次,而且每个判定的每种可能都执行一次。
为了达到上图的判定覆盖,我们可以创建(2,0,4)(1,1,1)两个测试用例,使得图中两个判定中每个判定的真假情况都执行一遍。这两个测试用例也只能覆盖L1,L2两条路径,因此判定覆盖覆盖强度高于语句覆盖,但对逻辑覆盖的轻度仍然不是很高。
3.条件覆盖每个判定的每个条件应取到各种可能的值。
这里就要说明条件跟判定的区别,上图中共有两个判定,每个判定中又都有两个条件即A>1、B=0分别是一个条件,两个条件组合成了一个判定。条件判定覆盖既要将每个判定中的每个条件的每一种可能情况都覆盖一遍。同样测试用例(2,0,4)(1,1,1)可以满足条件覆盖,大家可能看到了这两个测试用例满足于判定覆盖,又满足了条件覆盖,那么这两中覆盖之间是什么关系呢?可以说他们两个之间没有确切的关系,也并不是说满足条件覆盖的就一定满足判定覆盖,或者满足判定覆盖的就一次能够满足条件覆盖。只是条件覆盖的情况更复杂一些,而测试用例只需要覆盖所有的条件即可,本实例中只是恰好这两个测试用例同时满足了判定覆盖和条件覆盖,希望大家不要被误导。
4.判定/条件覆盖同时满足判定覆盖条件覆盖。
从这一种逻辑覆盖中就可以看出条件覆盖和判定覆盖之间并没有包含关系,因为如果他们其中之一包含了另一个的话就不用同时满足两个覆盖才称之为判定/条件覆盖。因为测试用例(2,0,4)(1,1,1)同时满足条件覆盖和判定覆盖,所以这两个测试用例肯定满足判定/条件覆盖,但是判定/条件覆盖也能覆盖所有的路径。
5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
上图中的条件取值组合以及测试用例如下:
可以看出来即使条件组合覆盖比较复杂,但是还没有覆盖所有的路径,因此我们需要覆盖强度更高的逻辑覆盖。
6.路径覆盖使程序中每一条可能的路径至少执行一次。
六种覆盖中只有路径覆盖将所有的路径都执行一遍,但是无论哪种覆盖,都不能保证程序的正确性,测试的目的就是发现程序存在的问题,而不是证明程序没有问题,以上几种逻辑覆盖只是自己学习的一些整理,有不足之处希望大家批评指正。