我举一个简单的例子来解释一下语句覆盖,分支覆盖,条件覆盖以及路径覆盖的相关知识,如果有不对的地方,恳请各位同行指正:
举例说明:
if A=true and B=true then Action1
if C=true or D=true then Action2
这是一个很简单的例子,也就是,当A和B都为真的情况下,执行Action1,Action1执行好以后再次判断,只要A或者B有一个为真,那么就执行Action2,当Action2执行完成后,整个程序算是执行完成了:分析见图
(pic 01)
语句覆盖:顾名思义,让程序中的每个语句都cover到。在这个例子中,也就是要符合两个Positive条件:
1. A = true and B = true
2. C = true or B = true
根据上图所示,符合有两个条件的,都可以实现语句覆盖:
比如:A = true, B = true, C = true, D =true就可以实现最大的语句覆盖了
看到图,我们可以知道,实际上A和B有一种情况,C和D有三种情况,1*3=3,所以,语句覆盖的例子除了有上面提示的一个例子外还可以有以下两个,罗列如下:
2. A = true, B = true, C = true, D = false
3. A = true, B = true, C = false, D = true
这个例子中,选择任何一个(比如1),都可以覆盖整个语句,实现最大的语句覆盖率
分支覆盖(判定覆盖):把程序中所有判定的分支尽可能得到体验。这句话说白了,就是两个条件的真真假假都得考虑到,也就是以下四种情况在case中都需要cover到:
1. A = true and B = true 真positive (见图pic 01:1种情况)
2. A = true and B = true 假negative (见图pic 01:3种情况)
3. C = true or B = true 真positive (见图pic 01:3种情况)
4. C = true or B = true 假negative (见图pic 01:1种情况)
典型的两个例子如:
A=true, B=true, C=false, D=true
A=false, B=true, C=false, D=true
当然,我们如果再深入考虑下去,其实不只这一对case可以覆盖所有的条件,还有很多对的case可以覆盖,其实就是符合上述1234的条件就行,很容易就可以看出:13 24组合,14 23组合
完全覆盖到了,算下来(1×3)*(3*1)+(1*1)*(3*3)=18:
13 24组合
1. A=true, B=true, C=false, D=trueA=false, B=true, C=false, D=true2. A=true, B=true, C=true, D=falseA=false, B=true, C=false, D=true3. A=true, B=true, C=true, D=trueA=false, B=true, C=false, D=true4. A=true, B=true, C=false, D=trueA=true, B=false, C=false, D=true5. A=true, B=true, C=true, D=falseA=true, B=false, C=false, D=true6. A=true, B=true, C=true, D=trueA=true, B=false, C=false, D=true7. A=true, B=true, C=false, D=trueA=false, B=false, C=false, D=true8. A=true, B=true, C=true, D=falseA=false, B=false, C=false, D=true9. A=true, B=true, C=true, D=trueA=false, B=false, C=false, D=true
14 23组合
10. A=false, B=true, C=false, D=trueA=true, B=true, C=false, D=false11. A=true, B=false, C=false, D=trueA=true, B=true, C=false, D=false12. A=false, B=false, C=false, D=trueA=true, B=true, C=false, D=false13. A=false, B=true, C=true, D=falseA=true, B=true, C=false, D=false14. A=true, B=false, C=true, D=falseA=true, B=true, C=false, D=false15. A=false, B=false, C=true, D=falseA=true, B=true, C=false, D=false16. A=false, B=true, C=true, D=trueA=true, B=true, C=false, D=false17. A=true, B=false, C=true, D=trueA=true, B=true, C=false, D=false18. A=false, B=false, C=true, D=trueA=true, B=true, C=false, D=false
条件覆盖:每个判断中的每个条件的可能取值至少满足一次. 说条件覆盖的时候不要看上面的两幅图了。这里的条件参数有四个A,B,C,D,也就是说A,B,C,D可能的条件至少要满足一次:
1. A = false, B = false, C = false, D = false
2. A = true, B = true, C =true, D = true
这两个用例已经覆盖了条件测试的所有的条件,当然,你同样可以展开来:2*2*2*2 = 16,可以设计出16对上面所列的测试用例
这里就不一一列出来了
1. A = true, B = false, C = false, D = false
A = false, B = true, C =true, D = true
2. A = false, B = true, C = false, D = false
A = true, B = false, C =true, D = true
3. A = false, B = false, C = true, D = false
A = true, B = true, C =false, D = true
……………………
路径覆盖:要求覆盖程序中的所有可能路径,见如下图:
(Pic 02)
如上图所示,所有的路径包括:13,14,23,24
示例1:
A=false, B=true, C=false, D=false (1,3)
A=false, B=true, C=false, D=true (1,4)
A=true, B=true, C=false, D=false (2,3)
A=true, B=true, C=false, D=true (2,4)
和前面的条件覆盖,分支覆盖一样,这仅仅是其中一组cover全面覆盖率例子,如果有兴趣的朋友可以继续写下去。