白盒测试&黑盒测试
白盒测试
白盒测试用例设计的一个很重要的评估标准就是对代码的覆盖度。
白盒测试中常见的覆盖有六种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。
一、语句覆盖(Statement Coverage)
语句覆盖,顾名思义就是针对代码语句。它的含义是我们设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。。通常语句覆盖被认为是“最弱的覆盖”,原因是它仅仅考虑对代码中的执行语句进行覆盖而没有考虑各种条件和分支,因此在实际运用中语句覆盖很难发现代码中的问题。举例:
if (A>1) and (B=0)
then x=x/A
end if
if (A=2) or (x>1)
then x=x+1
end if
在图例中,正好所有的可执行语句都在路径L1上,所以选择路径 L1设计测试用例,就可以覆盖所有的可执行语句
测试数据不止一种情况,只是满足这个要求的判定
二、判定(分支)覆盖(Decision Coverage)
判定覆盖也被成为分支覆盖(Branch Coverage),即要设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。用上面的例子,选择的路径:
判定覆盖比语句覆盖强一些,能发现一些语句覆盖无法发现的问题。但是往往一些判定条件都是由多个逻辑条件组合而成的,进行分支判断时相当于对整个组合的最终结果进行判断,这样就会忽略每个条件的取值情况,导致遗漏部分测试路径。
三、条件覆盖(Condition Coverage)
条件覆盖与分支覆盖不同,条件覆盖设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次
判定覆盖是每个判断都取真取假,条件覆盖是每个判定的条件都取真取假。
满足条件覆盖一定满足语句覆盖。
满足条件覆盖不一定满足判定覆盖,此两种之间不怎么相互交叉,条件覆盖通常比判定强
使用上述例子:
通常而言条件覆盖比判定覆盖强,因为条件覆盖使得判定中的每一个条件都取到了不同的结果,这一点判定覆盖则无法保证。但条件覆盖也有缺陷,因为它只能保证每个条件都取到了不同结果,但没有考虑到判定结果,因此有时候条件覆盖并不能保证判定覆盖
四、判定条件覆盖(Decision/Condition Coverage)
判定条件覆盖,说白了就是我们设计的测试用例可以使得判断中每个条件所有的可能取值至少执行一次(条件覆盖),同时每个判断本身所有的结果也要至少执行一次(判定覆盖)。不难发现判定条件覆盖同时满足判定覆盖和条件覆盖,弥补了两者各自的不足,但是判定条件覆盖并未考虑条件的组合情况。
五、组合覆盖(Branch Condition Combination Coverage)
组合覆盖也叫做条件组合覆盖。设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。显然,满足条件组合覆盖的测试用例一定是满足判定覆盖、条件覆盖和判定条件覆盖的。
条件组合覆盖能够同时满足判定、条件和判定条件覆盖,覆盖度较高,但是组合覆盖的测试用例数量相对来说也是比较多的。
六、路径覆盖
路径覆盖,意思是说我们设计的测试用例可以覆盖程序中所有可能的执行路径。这种覆盖方法可以对程序进行彻底的测试用例覆盖,比前面讲的五种方法覆盖度都要高。那么这种方法是不是就一定最好呢?当然不能讲得这么绝对,它的缺点也是显而易见的:由于需要对所有可能的路径全部进行覆盖,那么我们需要设计数量非常巨大的而且较为复杂的测试用例,用例数量将呈现指数级的增长。所以理论上来讲路径覆盖是最彻底的测试用例覆盖,但实际上很多时候路径覆盖的可操作性不强。
黑盒测试
测试对象看做一个盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的,功能说明。又叫做功能测试或数据驱动测试
等价类划分
基本思想:
把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据作为测试用例。
等价类:某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。
- 有效等价类:对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合
- 无效等价类:对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。
等价类划分5个原则
- 原则1: 如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类和两个无效等价类
- 原则2:如果输入条件规定了输入值的集合,或者规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类。
- 如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类
- 如果规定了输入数据的一组值,而且要对每个输入值分别进行处理。可为每一个输入值确立一个有效等价类,所有不允许的输入值集合为一个无效类
- 原则5:如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)
等价类划分步骤
- 确定等价类
- 建立等价类表,列出所有划分出的等价类
- 为每一个等价类规定一个唯一编号;
- 设计一个新的测试用例,尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;
- 设计一个新的测试用例,仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到
所有的无效等价类都被覆盖为止
例
边界值分析
选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据做为测试数据。
相当于输入、输出等价类而言,稍高、低于其边界值的一些特定情况