白盒测试:又称为结构测试。可以把程序看成装在一个透明盒子里,测试者(一般为编程者)完全知道程序的结构和处理算法。按照程序内部逻辑设计测试用例,检测程序中的主要执行通路是否能按预定要求正常工作。白盒测试多用于单元测试阶段。逻辑覆盖是主要的白盒测试技术。白盒测试时,确定测试数据应根据程序的内部逻辑和指定的覆盖方式。
采用以下几种逻辑覆盖标准:
语句覆盖。设计测试用例,让程序的每个语句至少执行一次。
判定覆盖。又称分支覆盖,不仅每个语句至少执行一次,而且每个判定的每种可能的结果(分支)都至少执行一次。
图 1 判定图
如图 1.21所示,判定表达式为a>1 or b>1。
设a=5,则a>1 or b>1表达式值为真,覆盖了yes分支,由于存在短路运算,不用考虑b的值。
设a=1且b=1,则a>1 or b>1表达式值为假,覆盖了No分支。
以上两个测试用例便实现了判定(分支)覆盖,不用去考虑其他数据了。
条件覆盖。不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含条件覆盖。
针对图 1,条件有两个,分别是a>1和b>1,它们的值都分别是真和假。
设a=5,条件a>1值为真。
设a=1,条件a>1值为假。
设b=5,条件b>1值为真。
设b=1,条件b>1值为假。
以上的4个用例即实现了对条件a>1和b>1的逻辑值覆盖,并未考虑a>1 or b>1的真和假。
判定/条件覆盖。同时满足判定覆盖和条件覆盖成为判定/条件覆盖。选择足够多的测试用例,使得判定表达式中每个条件的所有可能结果至少出现一次,而且每个判定本身的所有可能结果也至少出现一次。
通过之前分析,当a=5且a=1时,实现了判定覆盖,而a=5、a=1且b=5、b=1时实现了条件覆盖,综合两者,a=5、a=1且b=5、b=1时实现了判定/条件覆盖。
条件组合覆盖。设计测试用例,使得条件结果的所有可能组合结果至少出现一次。满足条件组合覆盖的测试用例,一定满足判定/条件覆盖。因此,条件组合覆盖式上述五种覆盖标准中最强的一种。然而,条件组合覆盖还不能保证程序所有可能的路径都至少经过一次。
图 1.21中两条件a>1和b>1的逻辑组合及测试用例数据如下:
真or真:a=5、b=5可实现覆盖。
真or假:a=5、b=1可实现覆盖。
假or真:a=1、b=5可实现覆盖。
假or假:a=1、b=1可实现覆盖。
路径覆盖。使得程序的每条可能执行到的路径都至少经过一次(如果程序中有环路,则要求每条环路径至少经过一次)。
上述逻辑覆盖标准中,语句覆盖是逻辑覆盖最弱的一种,而路径覆盖是覆盖逻辑最强的。