白盒测试多用于单元测试阶段。逻辑覆盖是主要的白盒测试技术。白盒测试时,确定测试数据应根据程序的内部逻辑和指定的覆盖方式。采用以下几种逻辑覆盖标准:
语句覆盖。 设计测试用例,让程序的每个语句至少执行一次。
判定覆盖。 又称分支覆盖,不仅每个语句至少执行一次,而且每个判定的每种可能的结果(分支)都至少执行一次。
条件覆盖。 不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含条件覆盖。 其与判定覆盖的区别是判定覆盖只关心表达式的值(真/假),而条件覆盖涉及到判定表达式的每个条件的值(真/假)。
判定/条件覆盖。 同时满足判定覆盖和条件覆盖成为判定/条件覆盖。选择足够多的测试用例,使得判定表达式中每个条件的所有可能结果至少出现一次,而且每个判定本身的所有可能结果也至少出现一次。
条件组合覆盖。 设计测试用例,使得条件结果的所有可能组合结果至少出现一次。满足条件组合覆盖的测试用例,一定满足判定/条件覆盖。因此,条件组合覆盖式上述五种覆盖标准中最强的一种。然而,条件组合覆盖还不能保证程序所有可能的路径都至少经过一次。
路径覆盖。 使得程序的每条可能执行到的路径都至少经过一次(如果程序中有环路,则要求每条环路径至少经过一次)。
上述逻辑覆盖标准中,语句覆盖是逻辑覆盖最弱的一种,而路径覆盖是覆盖逻辑最强的。
假设判定表达式为: a>1 or b>1, 判定覆盖、 条件覆盖、 判定/条件覆盖及条件组合覆盖区别如下:用判定覆盖设计的测试用例: a=5(判定表达式 a>1 or b>1 的值为真), a=0(判定表达式 a>1 or b>1 的值为假),不用考虑 b 的值就已经满足判定覆盖的要求了。
用条件覆盖设计的测试用例:a=5(条件 a>1 的值为真), a=0(条件 a>1 的值为假); b=5(条件 b>1 的值为真), b=0(条件 b>1 的值为假)。这里只考虑两个条件 a>1 和 b>1 的真和假,而不用去考虑整个判定表达式 a>1 or b>1 的真和假。
容易发现, a=5(条件 a>1 的值为真), a=0(条件 a>1 的值为假); b=5(条件 b>1 的值为真), b=0(条件 b>1 的值为假) 几个测试用例即实现了条件覆盖,同时也满足了判定覆盖的要求,故也属于判定/条件覆盖。
两个条件 a>1 和 b>1 的组合为“真|真”、 “ 假|真” 、 “ 真|假” 、 “ 假|假” , 测试用例可分别设计为: (a=5,b=5)、(a=0,b=5)、 (a=5,b=0)、 (a=0,b=0)。 这样实现了条件组合覆盖覆盖。