收藏 分享(赏)

第4章(1)-白盒测试方法1-逻辑覆盖法.ppt

上传人:cjc2202537 文档编号:1040975 上传时间:2018-06-07 格式:PPT 页数:66 大小:936.50KB
下载 相关 举报
第4章(1)-白盒测试方法1-逻辑覆盖法.ppt_第1页
第1页 / 共66页
第4章(1)-白盒测试方法1-逻辑覆盖法.ppt_第2页
第2页 / 共66页
第4章(1)-白盒测试方法1-逻辑覆盖法.ppt_第3页
第3页 / 共66页
第4章(1)-白盒测试方法1-逻辑覆盖法.ppt_第4页
第4页 / 共66页
第4章(1)-白盒测试方法1-逻辑覆盖法.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

1、软件测试,第4章 白盒测试方法 逻辑覆盖法,目 录,知识回顾,软件测试技术分类:按面向测试对象粒度(按开发阶段)分:按测试方法分:按运行状态分:什么是测试用例?由哪些部分组成?这个程序可以用来求什么? k = i;for(j = i+1; j = n; j+) if(Aj 1) & (B=0),(A=2) | (X1),X=X/A,X=X+1,真,T,假,F,a,b,d,c,e,开始,例 子,L1: ( a c e )= (A1) and (B=0) and (A=2) or (X/A1)= (A1) and (B=0) and (A=2) or (A1) and (B=0) and (X/A

2、1)= (A=2) and (B=0) or (A1) and (B=0) and (X/A1),例 子,L2: ( a b d )= not(A1) and (B=0) and not(A=2) or (X1)= not (A1) or not (B=0) and not (A=2) and not (X1) = not (A1) and not (A=2) and not (X1) or not (B=0) and not (A=2) and not (X1),例 子,L3 :( a b e)= not (A1) and (B=0) and (A=2) or (X1)= not (A1)

3、or not (B=0) and (A=2) or (X1)= not (A1) and (A=2) or not (A1) and (X1) or not (B=0) and (A=2) or not (B=0) and (X1),例 子,L4: ( a c d )= (A1) and (B=0) and not (A=2) or (X/A1)= (A1) and (B=0) and not (A=2) and not (X/A1),语句覆盖,语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。在例图中,正好所有的可执行语句都在路径L1上,所以选择路径 L1设计测试

4、用例,就可以覆盖所有的可执行语句。,语句覆盖,测试用例的设计格式如下:【输入的(A, B, X),输出的(A, B, X)】为图例设计满足语句覆盖的测试用例是:【(2, 0, 4),(2, 0, 3)】 覆盖 a-c-e【L1】,(A=2) and (B=0) or (A1) and (B=0) and (X/A1),例,(A1) & (B=0),(A=2) | (X1),X=X/A,X=X+1,真,真,假,F,a,b,d,c,e,开始,语句覆盖,语句覆盖率已执行的可执行语句占程序中可执行语句总数的百分比复杂的程序不可能达到语句的完全覆盖语句覆盖率越高越好,语句覆盖的优点,检查所有语句结构简单

5、的代码的测试效果较好容易实现自动测试代码覆盖率高 如果是程序块覆盖,则不涉及程序块中的源代码,语句覆盖不能检查出的错误,逻辑运算(&、|)错误 判定的第一个运算符“&”错写成“|”,或第二个运算符“|”错写成“&”,这时使用上述的测试用例仍然可以达到100%的语句覆盖.循环语句错误循环次数错误跳出循环条件错误,语句覆盖不能检查出的错误,循环语句例子for(i=0;i3) statement;,for(i=0;i3,语句覆盖率的问题,能达到很高的语句覆盖率语句覆盖率看似很高,却有严重缺陷: if(x!=1) statements; ; else statement; ,99句,1句,测试用例:x

6、 = 2语句覆盖率99%50%的分支没有达到,【优点】 :可以很直观地从源代码得到测试用例,无须细分每条判定表达式。【缺点】 :由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件是无法测试的。如在多分支的逻辑运算中无法全面的考虑。语句覆盖是最弱的逻辑覆盖。,语句覆盖总结,判定覆盖 Decision Coverage,判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。判定覆盖又称为分支覆盖。对于图例,如果选择路径L1和L2,就可得满足要求的测试用例:,例,(A1) & (B=0),(A=2) | (X1),X=X/A,X=X+1,真

7、,T,假,F,a,b,d,c,e,开始,判定覆盖,【(2, 0, 4),(2, 0, 3)】覆盖 ace【L1】【(1, 1, 1),(1, 1, 1)】覆盖 abd【L2】,(A=2) and (B=0) or (A1) and (B=0) and (X/A1),判定覆盖,not (A1) and not (A=2) and not (X1) or not (B=0) and not (A=2) and not (X1),判定覆盖,如果选择路径L3和L4,还可得另一组可用的测试用例:【(2, 1, 1),(2, 1, 2)】覆盖 abe【L3】【(3, 0, 3),(3, 1, 1)】覆盖

8、acd【L4】,not (A1) and (X1) or not (B=0) and (A=2) or not (B=0) and (X1),(A1) and (B=0) and not (A=2) and not (X/A1),判定覆盖,说明:以上仅考虑了两出口的判断,我们还应把判定覆盖准则扩充到多出口判断(如Case语句)的情况。因此,判定覆盖更为广泛的含义应该是使得每一个判定获得每一种可能的结果至少一次。,判定覆盖,【优点】:判定覆盖具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。【缺点】:往往大部分的判定语句是由多个逻辑条件组

9、合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是弱的逻辑覆盖。,条件覆盖Condition Coverage,在设计程序中,一个判定语句是由多个条件组合而成的复合判定,判定(a)&(b|c)包含了三个条件:a,b和c。为了更彻底的实现逻辑覆盖,可以采用条件覆盖。,条件覆盖Condition Coverage,条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。在图例中,我们事先可对所有条件的取值加以标记。,条件覆盖Condition Coverage,例如:对于第一个判断, 条件 A1 取真为 ,取假

10、为 条件 B0 取真为 ,取假为,对于第二个判断: 条件A2 取真为 ,取假为 条件X1 取真为 ,取假为,例,(A1) & (B=0),(A=2) | (X1),X=X/A,X=X+1,真,T,假,F,a,b,d,c,e,开始,条件覆盖Condition Coverage,测试用例 覆盖分支 条件取值【(2, 0, 4),(2, 0, 3)】 L1(c, e) 【(1, 0, 1),(1, 0, 1)】 L2(b, d) 【(2, 1, 1),(2, 1, 2)】 L3(b, e),条件覆盖,或 测 试 用 例 覆盖分支 条件取值【(1, 0, 3),(1, 0, 4)】 L3(b, e)

11、【(2, 1, 1),(2, 1, 2)】 L3(b, e),条件覆盖,【优点】:增加了对条件判定情况的测试,增加了测试路径。【缺点】:条件覆盖不一定包含判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。,判定条件覆盖CDC,判定/条件覆盖实际上是将判定覆盖和条件覆盖结合起来的一种方法,就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判定的可能结果也至少出现一次。设计测试用例覆盖4个条件的8种取值以及4个判定分支。,例,(A1) & (B=0),(A=2) | (X1),X=X/A,X=X+1,真,T,假,F,a,b,d,c,e,开始,判定

12、条件覆盖CDC,测 试 用 例 覆盖分支 条件取值【(2, 0, 4),(2, 0, 3)】L1(c, e)【(1, 1, 1),(1, 1, 1)】L2(b, d),(A=2) and (B=0) or (A1) and (B=0) and (X/A1),not (A1) and not (A=2) and not (X1) or not (B=0) and not (A=2) and not (X1),分析:从表面上看,判定/条件覆盖测试了各个判定中的所有条件的取值,但实际上,编译器在检查含有多个条件的逻辑表达式时,某些情况下的某些条件将会被其它条件所掩盖。因此,判定/条件覆盖也不一定能够

13、完全检查出逻辑表达式中的错误。,判定条件覆盖CDC,判定条件覆盖CDC,例如:对于第一个判定(A1)&(B=0)来说,必须A1和B=0这两个条件同时满足才能确定该判定为真。如果A1为假,则编译器将不再检查B=0这个条件,那么即使这个条件有错也无法被发现。对于第二个判定(A=2)|(X1)来说,若条件A=2满足,就认为该判定为真,这时将不会再检查X1,那么同样也无法发现这个条件中的错误。,判定条件覆盖,【优点】 :能同时满足判定、条件两种覆盖标准。【缺点】 :判定/条件覆盖准则的缺点是未考虑条件的组合情况。,条件组合覆盖,条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的

14、条件取值组合至少执行一次。,条件组合覆盖,记 A1, B0 作 A1, B0 作 A1, B0 作 A1, B0 作 A2, X1 作 A2, X1 作 A2, X1 作 A2, X1 作,例,(A1) & (B=0),(A=2) | (X1),X=X/A,X=X+1,真,T,假,F,a,b,d,c,e,开始,条件组合覆盖,测 试 用 例 覆盖条件 覆盖组合【(2, 0, 4), (2, 0, 3)】(L1) , 【(2, 1, 1), (2, 1, 2)】(L3) , 【(1, 0, 3), (1, 0, 4)】(L3) , 【(1, 1, 1), (1, 1, 1)】(L2) , ,分析:

15、上面这组测试用例覆盖了所有8种条件取值的组合,覆盖了所有判定的真假分支,但是却丢失了一条路径L4。,条件组合覆盖,【优点】 :条件组合覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。【缺点】 :线性地增加了测试用例的数量。,各种方法的逻辑覆盖程度,路径覆盖,路径覆盖就是设计足够的测试用例,覆盖程序中所有可能的路径。,测 试 用 例 通过路径 覆盖条件【(2, 0, 4), (2, 0, 3)】 ace (L1) 【(1, 1, 1), (1, 1, 1)】 abd (L2) 【(1, 1, 2), (1, 1, 3)】 abe (L3) 【(3, 0, 3), (3, 0, 1)】 acd

16、 (L4),路径覆盖,分析:虽然前面一组测试用例满足了路径覆盖,但并没有覆盖程序中所有的条件组合,即满足路径覆盖的测试用例并不一定满足组合覆盖。,路径覆盖,说明:对于比较简单的小程序,实现路径覆盖是可能做到的。但如果程序中出现较多判断和较多循环,可能的路径数目将会急剧增长,要在测试中覆盖所有的路径是无法实现的。为了解决这个难题,只有把覆盖路径数量压缩到一定的限度内,如程序中的循环体只执行一次。,路径覆盖,在实际测试中,即使对于路径数很有限的程序已经做到路径覆盖,仍然不能保证被测试程序的正确性,还需要采用其他测试方法进行补充。,总结,从前面的例子我们可以看到,采用任何一种覆盖方法都不能满足我们的要求,所以,在实际的测试用例设计过程中,可以根据需要将不同的覆盖方法组合起来使用,以实现最佳的测试用例设计 。,练习题,void DoWork(int x,int y,int z) int k=0,j=0; if(x3) /语句块3,设计测试用例,实现语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,条件组合覆盖,路径覆盖.,流程图,作业题,作业题,试做出左边三角形问题的语句覆盖,条件覆盖,判定覆盖,判定条件覆盖、组合条件覆盖的测试用例.并注明满足覆盖的条件.注意:具体格式参照课本格式。,Thank You !,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报