判定覆盖也被成为分支覆盖(Branch Coverage)是设计足够多的测试用例,使得程序中的每一个判断至少获得一次“真”和一次“假”,即使得程序流程图中的每一个真假分支至少被执行一次。使设计的测试用例保证程序中每个判断的每个取值分支(ture or false)至少经历一次。
使用此准则测试小程序,只需要涵盖路径ace和abd,或涵盖路径acd和abe,就可以使得两个判定为“真”和为“假”的分支都执行一次。如果选择后一种情况,生成的用例及其遍历的路径如下:
用例1:A=3,B=0,X=3 acd
执行用例1 ,判定(A > 1 and B == 0)为真 ,执行X = X / A ,X =3/3=1;
判定(A == 2 or X > 1)为假,不执行X = X 1 ; 覆盖路径acd,序结束
用例2:A=2,B=1,X=1 abe
执行用例2 ,判定(A > 1 and B == 0)为假,不执行X = X / A ;
判定(A == 2 or X > 1)为真,执行X = X 1,x=1 1=2 ; 覆盖路径abe,程序结束
我们仅有50%的可能性遍历到X值未发生改变的路径,即,只有我们选择涵盖路径ace和abd的情况,而不是涵盖路径acd和abe时。对应的测试用例如下:
用例1:A=2,B=0,X=2 ace
执行用例1 ,判定(A > 1 and B == 0)为真 ,执行X = X / A ,X =2/2=1;
判定(A == 2 or X > 1)为真,执行X = X 1 ,x=2 1=3; 覆盖路径ace,程序结束
用例2:A=3,B=1,X=1 abd
执行用例1 ,判定(A > 1 and B == 0)为假 ,不执行X = X / A ;
判定(A == 2 or X > 1)为假,不执行X = X 1 ; 覆盖路径abd,程序结束
【优点】:分支(判定)覆盖具有比语句覆盖更强的测试能力。同样分支(判定)覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。
【缺点】:往往大部分的分支(判定)语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是弱的逻辑覆盖。