基本概念
白盒测试(white-box testing,又称逻辑驱动测试,结构测试)是把测试对象看作一个打开
的盒子。利用白盒测试法进行动态测试时,需要测试软件产品的内部结果和处理过程,不需
要测试软件产品的功能。
方法分类
设计方法
示例代码
下面我将以这段代码为例(咱们先不管这个举例是否特别合适,能达到目的即可),带领大
家一起体验白盒测试的各种方法。如果对 java 不太了解的童鞋,可以简单的理解为一个条
件判断语句:如果满足条件 A,c=x/y,否则满足条件 B,c=c+1,最后条件都不满足的话,
c=y+c。
建议:如果想使得测试思路更加清晰的话,可以自己在脑海里画一个二维坐标,x 对应横轴,
y 对应纵轴。
1.语句覆盖
语句覆盖法的基本思想是设计若干测试用例,执行被测程序,使得每个可执行语句至少被执
行一次。
如果是顺序结构,就让程序从头执行到尾
如果有分支,条件和循环,利用如下方法,执行足够的测试覆盖全部语句
设计用例
设计一条用例即可达到语句覆盖
x = 2, y = 3
为什么? 因为整个方法体内,代码全部都被覆盖到了。想想是不是?
优缺点
优点:可以直观的从源代码得到测试用例,无需细分每条判定表达式。
缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏条件是无法测试
到的。比如在多分支的逻辑运算中无法全面的考虑。语句覆盖是最弱的逻辑覆盖。
2.判定覆盖
判定覆盖的基本思想是设计若干测试用例,运行被测程序,使得程序每个判断的取真分支和
取假分支至少执行一次,即判断真假值均被满足。
一个判定往往代表程序的一个分支,所以判定覆盖也称为分支覆盖。
设计用例
根据定义,我们将条件 M 的 yes 分支和 no 分支,条件 N 的 yes 分支和 no 分支覆盖到即可
达到覆盖所有判定的真假分支。
优缺点
优点:判定覆盖具有与语句覆盖更强的测试能力。同样判定覆盖具有和语句覆盖一样的简单
性,无需细分每个判定就可以得到测试用例。
缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含 AND、OR、
CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路
径。
3.条件覆盖
条件覆盖要求设计足够多的测试用例,使得判定中的每个条件获得各种可能的结果,即每个
条件至少有一次为真值,有一次为假值。
比如:x > 0 && y > 0
需要设计用例覆盖到 x>0 为真/假 和 y>0 为真/假的情况。
设计用例
我们现在需要做的是,用例覆盖到 T1,T2,T3,T4,F1,F2,F3,F4
优缺点
优点:显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。
缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆
盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。
4.判定-条件覆盖
它是判定覆盖和条件覆盖的交集,需要设计足够多的测试用例,使得判定中每个条件的所有
可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。
设计用例
设计的用例满足:
覆盖 T1-T4 ,F1-F4
覆盖 M 为真/假,N 为真/假
优缺点
优点:判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。
缺点:判定/条件覆盖准则的缺点是未考虑条件的组合情况。
5.条件组合覆盖
要求设计足够多的测试用例,使得每个判定中条件结果的所有可能组合至少出现一次。
设计用例
按照条件组合覆盖的基本思想,对于前面的例子,我们把每个判断中的所有条件进行组合,
设计组合条件如表所示,而我们设计的测试用例就要包括所有的组合条件、
可以看出实际上 1-2-5 是未被覆盖到的。下一个方法会提到。
优缺点
优点:多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。更改的判定/条件
覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个
判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。
缺点:线性地增加了测试用例的数量。
6.路径覆盖
设计所有的测试用例,用来覆盖程序中的所有可能的执行路径。
设计用例
请结合上一种方法进行分析:
优缺点
优点:可以对程序进行彻底的测试,比前面五种的覆盖面都广
缺点:需要设计大量,复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组
合都覆盖。