白盒测试的条件覆盖标准强于判定覆盖为什么不对?什么是逻辑覆盖?覆盖强弱关系?判定覆盖与条件覆盖有什么不同?
题目:白盒测试的条件覆盖标准强于判定覆盖(X)
tips:原因详见本文 8.小栗子(2)
1.分析
条件覆盖和判定覆盖都属于白盒测试中的逻辑覆盖
2.什么是逻辑覆盖法
逻辑覆盖法:按照程序内部逻辑结构设计测试用例的方法。目的:测试程序中的判定和条件。
3.覆盖强弱关系(一般情况)
语句覆盖(最弱逻辑覆盖)—>判定覆盖—>条件覆盖—>条件判定覆盖—>条件组合覆盖—>路径覆盖
4.手动滑稽
按照上面的覆盖强弱关系,条件覆盖的确强于判定覆盖,因为它使一个判定中的每一个条件都取到了两个不同的结果,而判定覆盖不能保证这一点。那为啥是错的呢?(手动滑稽doge)详见本文 8.小栗子(2)
5.什么是条件覆盖?什么是判定覆盖?
条件覆盖:每个条件的所有可能结果至少执行一次。(每个复合判定表达式的每个简单判定的取真和取假情况至少执行一次)
【我自己的理解 】:这个地方的“条件”是由多个条件组合成的条件,所以顾名思义,条件覆盖 就是构成整体的每个部分的真和假都要覆盖
判定覆盖:每个判定的所有可能结果至少出现一次。(又称分支覆盖,其含义是保证程序中每个判定节点的取真和取假至少执行一次)
【我自己的理解 】:整体(判别式)的判断结果的真和假都要覆盖。
6.条件覆盖与判定覆盖的区别
【小总结 】
判定覆盖只关心判定表达式的值(是真是假),
条件覆盖涉及到判定表达式的每个条件的值(是真是假).
7.小栗子(1)
判定表达式:p= x>2 || y >2
以判定覆盖设计的测试用例:
x=3 [判定表达式p为"真"]
x=1 [判定表达式p为"假"]
从这里开始就不需要再去管 y 的取值,就已经满足判定覆盖的条件了。
以条件覆盖设计的测试用例:
x=3 [条件x>2的值为"真"]
x=1 [条件x>2的值为"假"]
y=3 [条件y>2的值为"真"]
y=1 [条件y>2的值为"假"]
这里不需要去考虑这个判定表达式p的取值,就已经满足条件覆盖的要求了,但需要把x>2 和 y >2这两个条件的真假取值考虑周全。
8.小栗子(2)
判定表达式:q= m>2 || n >2
以条件覆盖设计的测试用例:
m=3,n=1 [m为真,n为假,总的判定式q为真]
m=1,n=3 [m为假,n为真,总的判定式q为真]
根据小栗子(1)的总结,上述两组测试用例满足了条件覆盖的要求(要取到每个简单判定条件的真价值)但最终整个判定表达式都是真的,满足不了判定覆盖的要求( 整体(判别式)的判断结果的真和假都要覆盖。)
到这里,原因就显而易见辽。上述这两组测试用例就只满足了条件覆盖标准而并不满足判定覆盖标准。
所以“白盒测试的条件覆盖标准强于判定覆盖”这句话是不全面的,条件覆盖标准不一定强于判定覆盖。
<撒花><撒花>