忙碌,但不盲目

软件测试中的语句覆盖,分支覆盖,条件覆盖以及路径覆盖

上一篇 / 下一篇  2011-05-16 15:49:36 / 个人分类:项目技能总结

我举一个简单的例子来解释一下语句覆盖,分支覆盖,条件覆盖以及路径覆盖的相关知识,如果有不对的地方,恳请各位同行指正:

举例说明

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=true
   A=false, B=true, C=false, D=true
2. A=true, B=true, C=true, D=false
   A=false, B=true, C=false, D=true
3. A=true, B=true, C=true, D=true
   A=false, B=true, C=false, D=true
4. A=true, B=true, C=false, D=true
   A=true, B=false, C=false, D=true
5. A=true, B=true, C=true, D=false
   A=true, B=false, C=false, D=true
6. A=true, B=true, C=true, D=true
   A=true, B=false, C=false, D=true
7. A=true, B=true, C=false, D=true
   A=false, B=false, C=false, D=true
8. A=true, B=true, C=true, D=false
   A=false, B=false, C=false, D=true
9. A=true, B=true, C=true, D=true
   A=false, B=false, C=false, D=true
14 23组合
10. A=false, B=true, C=false, D=true
    A=true, B=true, C=false, D=false
11. A=true, B=false, C=false, D=true
    A=true, B=true, C=false, D=false
12. A=false, B=false, C=false, D=true
    A=true, B=true, C=false, D=false
13. A=false, B=true, C=true, D=false
    A=true, B=true, C=false, D=false
14. A=true, B=false, C=true, D=false
    A=true, B=true, C=false, D=false
15. A=false, B=false, C=true, D=false
    A=true, B=true, C=false, D=false
16. A=false, B=true, C=true, D=true
    A=true, B=true, C=false, D=false
17. A=true, B=false, C=true, D=true
    A=true, B=true, C=false, D=false
18. A=false, B=false, C=true, D=true
    A=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全面覆盖率例子,如果有兴趣的朋友可以继续写下去。





TAG:

ATTITODE的个人空间 引用 删除 ATTITODE   /   2011-05-19 18:01:32
楼主
双目运算||,第一个数为真,第二个数还要不要判断 啊???
ATTITODE的个人空间 引用 删除 ATTITODE   /   2011-05-19 18:01:11
1
引用 删除 ivan19871001   /   2011-05-16 22:35:22
相当不错,学习了!加油
引用 删除 ivan19871001   /   2011-05-16 22:35:12
5
 

评分:0

我来说两句

Open Toolbar