收藏 分享(赏)

Ch3-软件测试方法3.4.pptx

上传人:sjmd695 文档编号:9583734 上传时间:2019-08-16 格式:PPTX 页数:56 大小:540.52KB
下载 相关 举报
Ch3-软件测试方法3.4.pptx_第1页
第1页 / 共56页
Ch3-软件测试方法3.4.pptx_第2页
第2页 / 共56页
Ch3-软件测试方法3.4.pptx_第3页
第3页 / 共56页
Ch3-软件测试方法3.4.pptx_第4页
第4页 / 共56页
Ch3-软件测试方法3.4.pptx_第5页
第5页 / 共56页
点击查看更多>>
资源描述

1、3.4 基于逻辑覆盖的方法,3.4.0 语句覆盖 3.4.1 判定覆盖 3.4.2 条件覆盖 3.4.3 判定-条件覆盖 3.4.4 条件组合覆盖 3.4.5 基本路径覆盖,逻辑覆盖 vs. 路径覆盖,逻辑覆盖:以程序或系统的内部逻辑结构为基础,分为语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖等。 基本路径覆盖:在程序或业务控制流程的基础上,分析控制构造的环路复杂度,导出基本可执行路径集合,从而设计测试用例。,3.4.0 语句覆盖,语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次 如果是顺序结构,就是让测试从头执行到尾 如果有分支、条件

2、和循环,需要利用下面的方法,执行足够的测试覆盖全部语句,程序源代码: 1. dim a, b as integer dim c as double if (a 0 and b 0) thenc = c / a end if if (a 1 or c 1) thenc = c + 1 end if c = b + c,示例:语句覆盖可发现的问题,(a, b ,c)= (1, 1, 2),程序控制流图:,覆盖路径:abdefhi,程序源代码: 1. dim a, b as integer dim c as double if (a 0 or b 0) thenc = c / a end if if

3、 (a 1 or c 1) thenc = c + 1 end if c = b + c,(a, b ,c)= (1, 1, 2),and,程序控制流图:,覆盖路径:abdefhi,示例:语句覆盖不能发现的问题,优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式 缺点:语句覆盖常是“最弱的覆盖”,不考虑各种分支的组合,不能发现其中的逻辑错误。 假如只要求达到语句覆盖,那么换来的确实测试效果不明显,很难更多地发现代码中的问题。,语句覆盖的优缺点,3.4.1 判定覆盖,判定覆盖的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被

4、满足。 一个判定代表着程序的一个分支,所以判定覆盖也被称为分支覆盖。,示例,测试用例:a=2,b=1,c=6a=-2,b=-1,c=-3,或 测试用例:a=1,b=1,c=0a=2,b=-1,c=6,判定覆盖的优缺点,优点:判定覆盖具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。缺点:往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是弱的逻辑覆盖。,9,3.4.2 条件覆盖,条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件

5、的可能取值至少满足一次。,(a0 and b0),a0b0,示例,判断M表达式:条件 a0 取真 记为 T1 条件 a0 取假 记为 F1条件 b0 取真 记为 T2 条件 b0 取假 记为 F2判断N表达式:条件 a1 取真 记为 T3 条件 a1 取假 记为 F3条件 c1 取真 记为 T4 条件 c1取 假 记为 F4,M,N,它覆盖了判定M的F分支和判断N的T分支。,示例,M,N,优点:增加了对条件判定情况的测试。缺点:条件覆盖不一定包含判定覆盖。例如,上面设计的用例就没有覆盖判断M的T分支和判断N的F分支。条件覆盖只能保证每个条件至少有一次为真或假,而不考虑所有的判定结果。,条件覆盖

6、的优缺点,3.4.3 判定-条件覆盖,判定-条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次。,判定条件覆盖,按照判定条件覆盖的要求,设计的测试用例要满足如下条件: (1)所有条件可能至少执行一次取值; (2)所有判断的可能结果至少执行一次。,M,N,示例,M,N,判定-条件覆盖的优缺点,优点 :能同时满足判定、条件两种覆盖标准。缺点 :未考虑条件的组合情况。,3.4.4 条件组合覆盖,条件组合覆盖的基本思想是通过执行足够的测试用例,使得程序中每个判定的所有可能的条件取值组合都至少出现一次。,示例,

7、设计组合条件如表所示:,示例,条件组合覆盖的测试用例,N,条件组合覆盖的优缺点,优点 :条件组合覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。缺点 :线性地增加了测试用例的数量;不能保证所有的路径被执行。,3.4.5 基本路径覆盖,路径覆盖的基本思想:设计足够多的测试用例,要求覆盖程序中所有可能的路径。,示例,M,N,路径覆盖的优缺点,优点 :这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。 缺点 :需要设计大量、复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组合都覆盖。,从前面的例子我们可以看到,采用任何一种覆盖方法都不能满足我们的要求,所以,在实际的测试用例

8、设计过程中,可以根据需要将不同的覆盖方法组合起来使用,以实现最佳的测试用例设计 。,条件组合覆盖结合路径覆盖,基本路径覆盖,基本路径覆盖,在测试中覆盖所有的路径是不现实的。 基本路径覆盖的思想是把覆盖的路径数压缩到一定限度内。例如:程序中的循环体最多只执行一次。 基本路径覆盖是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出独立可执行路径集合,设计测试用例的方法。,基本路径覆盖法的步骤,导出程序流程图的控制流图 计算控制流图G的环路复杂度V(G) 确定只包含独立路径的基本路径集 设计测试用例,控制流图,控制流图即程序流程控制图、程序流图,是对程序流程图进行简化后得到的,它可以更加突出

9、地表示程序控制流的结构。 控制流图中包括两种图形符号:结点和控制流线。 结点由带标号的圆圈表示,可代表一个或多个语句、一个处理框序列和一个条件判定框(假设不包含复合条件)。 控制流线由带箭头的弧或线表示,可称为边。它代表程序中的控制流。,31,常见结构的控制流图,其中,包含条件的结点被称为判定结点,由判定结点发出的边必须终止于某一个结点,由边和结点所限定的范围被称为区域。,控制流图的画法,如果判断中的条件表达式是由一个或多个逻辑运算符连接的复合条件表达式,则需要改为一系列只有单个条件的嵌套的判断。,控制流图的画法,环路复杂度,环路复杂度也称为圈复杂度,它是一种为程序逻辑复杂度提供定量尺度的软件

10、度量。 从程序的环路复杂度可导出基本路径集合中独立路径条数。独立路径是指程序中至少引入了一个新的处理语句集合或一个新条件的程序通路。采用流图的术语,即独立路径必须至少包含一条在本次定义路径之前不曾用过的边。,计算环路复杂度的方法,环路复杂度以图论为基础,为我们提供了非常有用的软件度量。可用如下三种方法之一来计算环路复杂度: 控制流图中区域的数量=环路复杂度。 给定控制流图G的环路复杂度V(G),定义为V(G) = E-N+2其中,E是控制流图中边的数量,N是控制流图中的节点数量。 给定控制流图G的环路复杂度V(G),也可定义为 V(G) = P+1其中,P是控制流图G中判定节点的数量。,例如,

11、在图示的控制流图中,一组独立的路径是 path1:1 - 11 path2:1 - 2 - 3 - 4 - 5 - 10 - 1 - 11 path3:1 - 2 - 3 - 6 - 8 - 9 - 10 - 1 - 11 path4:1 - 2 - 3 - 6 - 7 - 9 - 10 - 1 - 11,路径 path1,path2,path3,path4组成了控制流图的一个基本路径集。,void Sort ( int iRecordNum, int iType ) 1 2 int x=0; 3 int y=0; 4 while ( iRecordNum- 0 ) 5 6 If ( iTyp

12、e=0 ) 7 x=y+2; 8 else 9 If ( iType=1 ) 10 x=y+10; 11 else 12 x=y+20; 13 14 ,(1)画出控制流图 (2)计算环路复杂度 (3)导出独立路径(用语句编号表示) (4)设计测试用例,例题,(1)画出控制流图: (2)计算环路复杂度:10(条边)- 8(个节点)+ 2 = 4 (3)导出独立路径(用语句编号表示)路径1:414路径2:46713 414路径3:4691013414路径4:4691213414,例题解答,(4)设计测试用例:,例题解答,习题1,Int IsLeap(int year) if (year % 4 =

13、 0) 1 if (year % 100 = 0) 2 if (year % 400 =0) 3 leap = 1; 4 else leap = 0; 5 else leap = 1; 6 else leap = 0; 7 return leap; 8 ,(1)画出控制流图 (2)请计算环行复杂度V(G) (3)导出基本路径(4)设计测试用例,41,习题1解答,(1)控制流图(见右)(2)环行复杂度V(G):V(G)=10-8+2=4(3)基本路径集:1-7-81-2-6-81-2-3-4-81-2-3-5-8,42,(4)设计测试用例:测试用例4个: 1001:满足不被4整除的路径 1996

14、:满足能被4不能被100整除的路径 2000:满足能被400整除的路径 1800:满足不能被400整除的路径,下面是选择排序的程序,其中datalist是数据表,它有两个数据成员:一是元素类型为Element的数组V,另一个是数组大小n。算法中用到交换两数组元素内容的操作Swap( ):void SelectSort ( datalist list ) /对表list.V0到list.Vn-1进行排序, n是表当前长度。for ( int i = 0; i list.n-1; i+ ) int k = i; /在list中找具有最小关键码的对象for ( int j = i+1; j list

15、.n; j+)if ( list.Vj list.Vk ) k = j; /当前具最小关键码的对象if ( k != i ) Swap ( list.Vi, list.Vk ); /交换 ,习题2,(1)路径1,3 (2)路径1,2,4,6 (3)路径1,2,4,7 (4)路径1,2,5,8,3 (5)路径1,2,5,9,3,习题2解答,补充一:循环测试,目标: 在循环内部及边界上执行测试,(1)简单循环(2)嵌套循环(3)串接循环(4)不规则循环,补充一:循环测试,1. 简单循环(迭代次数n)完全跳过循环只经过循环一次经过循环两次经过循环m( m n )次分别经过循环n-1, n, n+1

16、次,补充一:循环测试,2. 嵌套循环 在最里面的循环完成前面所述的简单循环测试,同时设定外部循环的最小迭代次数逐步向外循环进行直到所有循环被测试,补充一:循环测试,嵌套循环测试时各层循环控制变量的取值,补充一:循环测试,3. 串行连接循环 独立循环可以分别看作简单循环测试 依赖性循环可以看作是嵌套循环4. 其它非循环结构 重新设计!,补充二:程序插桩,在软件动态测试中,程序插桩是一种基本的测试手段,有着广泛的应用。程序插桩方法是借助往被测程序中插入操作,来实现测试目的。即向源程序中添加一些语句,实现对程序语句的执行、变量的变化等情况进行检查。,补充二:程序插桩,例:求取两个整数X和Y的最大公约

17、数程序如下:int gsd (int X, int Y) int Q=X;int R=Y;while(Q!=R) if(QR)Q=Q-R;else R=R-Q;return Q;,程序插桩技术,在程序入口处插入对计数器C(i)的初始化语句,在程序出口处加入打印语句,为记录该程序中语句的执行次数,使用插桩技术插入语句:C(i)=C(i)+1 其中:i=1,2,6插桩之后的流程图如右图。,程序插桩技术,如果我们在程序的入口处还插入了对计数器C(i)初始化的语句,在出口处插入了打印这些计数器的语句,就构成了完整的插桩程序。它就能记录并输出在各程序点上语句的实际执行次数。 右图为插桩之后的程序,箭头所

18、指为插入的语句。源程序的语句已略去。,设计插桩程序时需要考虑的问题包括: 探测哪些信息; 在程序的什么部位设置探测点; 需要设置多少个探测点; 程序中特定部位插入某些用以判断变量特性的语句。,第1个问题:具体问题具体分析。 第2个问题:在实际测试通常在下面一些部位设置探测点:程序块的第1个可执行语句之前for,do ,do-while,do until 等循环语句处。 if, else if, else及end if等条件语句各分支处。 输入/输出语句之后。 函数、过程、子程序调用语句之后。 return语句之后 goto语句之后,第3个问题:需要考虑如何设置最少探测点方案。 第4个问题:是如何在程序中特定部位插入断言语句。在应用程序插桩技术时,可在程序中特定部位插入某些用以判断变量特性的语句,使得程序执行中这些语句得以证实。,

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

当前位置:首页 > 企业管理 > 管理学资料

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


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

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

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