taigutest 发表于 2009-4-29 22:51:02

怎样理解白盒覆盖用例的设计

白盒的覆盖测试有:语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,条件组合覆盖,路径覆盖,但我都没彻底弄明白这些覆盖是怎么回事,以下是我作的一道题,麻烦大家帮我看下,哪些地方我理解错了,麻烦大家帮我指正下,谢谢大家了,我都搞糊涂了(程序的流程图,我用附件传上来)
If(x>=80 and y>=80)
{
T=1;
}else{
If(x+y>=140 and (x>=90 or y>=90) )
{
T=2;
}else{
T=3;
}
}
分别按语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,条件组合覆盖,路径覆盖设计最小测试覆盖数据
语句覆盖(即使得程序中每条语句至少被执行一次)我设计的用例是:x=90,y=90;x=50,y=50;x=50,y=90;

判定覆盖(即使得程序中每个判定至少有一次为真值,有一次为假值,即:程序中的每个分支至少执行一次。每个判断的取真、取假至少执行一次。)我的理解就是让2个if判断分别都取一次真值和假值,所以我设计用例是:x=90,y=90;x=50,y=50

条件覆盖(即使得判定中的每个条件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值)我的理解是即:让X的取值根据2个if中的条件“x>=80和x>=90”都各取一次真值和假值,同样Y的取值也根据2个if中的条件“x>=80和y>=90”各取一次真值和假值,所以我设计的用例是:x=90,y=90;x=50,y=50;另外还有个条件”x+y>=140”这个条件也分别取真和取假,所以x=70,y=70;x=70,y=50;。
所以条件覆盖设计的总的用例是:x=90,y=90;x=50,y=50; x=70,y=70;x=70,y=50;

判定/条件覆盖(即:使得判定中每个条件的所有可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。),我的理解就是前面判定覆盖和条件覆盖用例的和:
x=90,y=90(OAE);x=50,y=50;x=70,y=70;x=70,y=50;

组合条件覆盖(使得每个判定中条件结果的所有可能组合至少出现一次。
)我的理解就是2个if语句中 “and“2边的x和y取值要满足ture和false的组合,组合的可能有:ture and tureture and falsefalse and turefalse and false这4种组合,所以我设计的用例是:
      x=90,y=90;(满足2个if语句ture and ture的组合)(OAE)
   x=80,y=80;(满足第一个if语句ture and ture 的组合;满足第二个if语句ture and false的组合)(OAE)
   x=50,y=90;(满足第一个if语句false and ture 的组合;满足第二个if语句false and ture的组合)(OBCE)
   x=90,y=30;(满足第一个if语句false and false 的组合;满足第二个if语句false and ture的组合)(OBDE)
   x=50,y=50;(满足2个if语句false and false的组合)(OBCE)

路径覆盖(设计足够的测试用例,覆盖程序中所有可能的路径)
x=80,y=80(OAE); x=90,y=50(OBCE);x=50,y=50(OBDE)
注:括号里的字母表示的是所覆盖的路径,大家看附件中的流程图就明白了

以下是这道题的参考答案:
语句覆盖:x=90,y=90(OAE);x=50,y=50(OBDE);x=90,y=70(OBCE)
判定覆盖:x=90,y=90(OAE);x=50,y=50(OBDE);x=90,y=70(OBCE)
条件覆盖:x=90,y=70(OBC);x=50,y=50(OBD)
判定/条件覆盖:x=90,y=90(OAE);x=50,y=50(OBDE);x=90,y=70(OBCE);x=70,y=90(OBCE)
条件组合覆盖:x=90,y=90(OAE);x=90,y=70(OBCE);x=90,y=30(OBDE);x=70,y=90(OBCE);x=30,y=90(OBDE);x=70,y=70(OBDE);x=50,y=50(OBDE)
路径覆盖:x=90,y=90(OAE);x=50,y=50(OBDE);x=90,y=70(OBCE);x=70,y=90(OBCE);

[ 本帖最后由 taigutest 于 2009-5-5 20:59 编辑 ]

june.diny 发表于 2009-5-1 08:49:58

这个东西好复杂,简单看了下...
判定覆盖,第二个判定语句的true的取值未执行到,要补一个用例x=50,y=90
条件覆盖,只要每个条件的真假值都能取到就可以了,x=90,y=90;x=50,y=50; 两个用例使得x、y>=80(90)和x+y>=140都能取真假值,两个就OK了。
判定/条件覆盖,不能直接用判定覆盖和条件覆盖用例和相加。

条件组合的覆盖我也没搞明白,哪位大侠指教啊,有点晕~:Q

june.diny 发表于 2009-5-1 09:50:05

刚看了个关于条件组合覆盖的帖子http://www.51testing.com/?uid-3733-action-viewspace-itemid-98999

这个例子里共有5个条件,依据你的用例分析:
        依次对应               x>=80          y>=80                                x+y>=140, x>=90,   y>=90
   x=90,y=90;        (满足第一个if语句tureand ture 的组合; 满足第二个if语句ture and ture and ture的组合)(OAE)
   x=80,y=80;        (满足第一个if语句tureand ture 的组合; 满足第二个if语句ture and false and false的组合)(OAE)
   x=50,y=90;        (满足第一个if语句false and ture 的组合; 满足第二个if语句true and false and ture的组合)(OBCE)
   x=90,y=30;        (满足第一个if语句false and false 的组合;满足第二个if语句false and ture and false的组合)(OBDE)
   x=50,y=50;        (满足第一个if语句false and false 的组合;满足第二个if语句false and false and false的组合)(OBCE)
显然,第一个if语句缺少ture and false的组合,
第二个if语句缺少 ture and ture and false;false and false and ture;false and ture and ture;
挺烦的,不知道理解的对不对,共同学习...

ljonathan 发表于 2009-5-1 20:51:50

这是好贴哦,有技术含量
需要耐心
留名学习

taigutest 发表于 2009-5-4 17:49:18

june.diny 你说的“条件组合覆盖”中缺少的那几种组合,我也考虑过,但觉得有点多余,如果针对你说的那几种组合所设计的用例最后所覆盖的路径跟我已经设计的那些用例用例所覆盖的路径重复(即:OAE,OBCE,OBDE)

难得没懂的人来指点下吗??

june.diny 发表于 2009-5-5 20:57:31

回复 5# 的帖子

"如果针对你说的那几种组合所设计的用例最后所覆盖的路径跟我已经设计的那些用例用例所覆盖的路径重复(即:OAE,OBCE,OBDE)"

这里补充的用例是针对条件组合覆盖,而不是路径哦。如果按你的说法,那么显然你已给出的两条(如下)也重复了,不是吗?条件组合覆盖和路径覆盖,要求覆盖的对象是不同的,一个是所有判定中各条件的所有可能组合,一个是程式中的所有可能路径。
x=50,y=90;      (满足第一个if语句false and ture 的组合; 满足第二个if语句true and false and ture的组合)(OBCE)
   x=50,y=50;      (满足第一个if语句false and false 的组合;满足第二个if语句false and false and false的组合)(OBCE)

taigutest 发表于 2009-5-5 21:50:38

我想你是对的june.diny,其实我当时认为对于and这样的逻辑运算来说,ture and false 和 false and ture结果都是为假,这就好比1+2和2+1不一样的只是1和2的位置不一样,但结果都是一样的,后来我把参考答案关于条件组合覆盖的用例列成一张表后我一下就明白了
参考答案的条件组合覆盖用例:
                         x>=90 and y>=90          x+y>=140 and (x>=90 or x>=90)
x=90,y=90(OAE)      tureand ture            tureand ( ture or ture)
x=90,y=70(OBCE)       tureand false            tureand ( ture or false)
x=90,y=30(OBDE)       tureand false            false and ( ture or false)
x=70,y=90(OBCE)       false and ture             tureand ( false or ture)
x=30,y=90(OBDE)       false and ture             false and ( false or ture)
x=70,y=70(OBDE)       false and false             tureand ( false or false)
x=50,y=50(OBDE)       false and false             false and ( false or false)

就如条件组合覆盖的概念所说:“使得每个判定中条件结果的所有可能组合至少出现了一次”!接着我用同样的方法来看判定覆盖时,
参考答案判定覆盖用例:
                         x>=90 and y>=90          x+y>=140 and (x>=90 or x>=90)
x=90,y=90(OAE)   真: tureand ture      真:tureand ( ture or ture)   
x=50,y=50(OBDE)假: false and false      假:false and ( false or false)
x=90,y=70(OBCE)真: ture and ture         真:tureand ( ture or false)
同样按“判定覆盖” 的概念来理解“即使得程序中每个判定至少有一次为真值,有一次为假值,即:程序中的每个分支至少执行一次。每个判断的取真、取假至少执行一次。”

我发现当把这些用列表的形式列出来的时候,理解起来就容易多了,我现在算是基本上明白这几种覆盖用例怎么来设计了,其实很简单,就是把这几种覆盖的概念记住,然后像上面那样列成表,按概念所描述的那样按照相应的组合填上去用例也就出来了,呵呵~~

zhuxia 发表于 2009-5-15 17:41:57

照楼上                        x>=90 and y>=90          x+y>=140 and (x>=90 or x>=90)
x=90,y=90(OAE)   真: tureand ture      真:tureand ( ture or ture)   
x=50,y=50(OBDE)假: false and false      假:false and ( false or false)
x=90,y=70(OBCE)真: ture and ture         真:tureand ( ture or false)
这样设计出来的用例会有重复吧,或者是我没看懂,2个真假,组合起来也就4个,真假,假真,真真,假假。4个用例就搞定了啊,我看这个图,我的理解你想设计了6个用例吧

窗边的小豆豆 发表于 2009-6-3 15:26:00

@taigutest
应该是:
                     x>=80 and y>=80            x+y>=140 and (x>=90 or x>=90)
x=90,y=90(OAE)      真: trueand true            --
x=50,y=50(OBDE)   假: false and false         假:false and ( false or false)
x=90,y=70(OBCE)   假: true and false            真:trueand ( true or false)

第一个测试用例中,第一个判定表达式为true后,直接走入了流程图中左边的分支,没有机会进行第二个判定表达式的判断。

[ 本帖最后由 窗边的小豆豆 于 2009-6-3 15:30 编辑 ]

gforg 发表于 2009-6-4 10:45:25

留名以后看

carlli213 发表于 2009-10-7 11:11:27

学习

有这么好相互学习和交流的机会,不能错过,我主要是说,在白盒测试中,最关键是要掌握什么
我个人举得如何对于程序能够绘制出程序控制图就基本上能书写测试用例的一半了,不知道这样的理解是否能得到大家的共鸣?
页: [1]
查看完整版本: 怎样理解白盒覆盖用例的设计