• / 118
  • 下载费用:10 金币  

L-第4章 软件工程课件白盒测试用例设计方法.ppt

关 键 词:
L-第4章 软件工程课件白盒测试用例设计方法.ppt
资源描述:
1,第4章 白盒测试用例设计方法,4-2,本章内容,讨论常用的白盒测试用例设计方法,包括 基本路径测试 分支-条件测试 循环测试 其它白盒测试方法 综合运用白盒测试方法进行程序结构测试 白盒测试工具 覆盖准则 覆盖率测试工具,4-3,白盒测试,定义 基于系统或者组件的内部实现结构和逻辑寻找缺陷的测试技术 常用的白盒测试技术 基本路径测试 分支-条件测试 循环测试,4-4,,说明 一般情况,仅使用一种测试用例设计方法很难获得被测对象所需的测试用例。在实际测试中,最终的测试用例通常都是多种设计技术相结合的结果。 在使用白盒测试方法之前进行代码评审是一个非常好的工程实践,4-5,不可能进行彻底的白盒测试,结论是:41+42+43+……+410,需要14秒左右的时间 如果循环次数为20次,100次时,结果又如何? 结论是:循环20次,需要约4072小时,循环100次则大约需要6.79*1047年,左图是具有某程序的流程图,假设循环10次,请计算一下有多少条程序执行通路?假设由图中得到的所有路径都是可执行路径,执行一次循环大约需要10微秒(奔腾4 1.7G),且一年365天每天24小时不停机,请回答:如果循环次数为10的话,遍历图中所有路径需要多长时间?,4-6,基本路径测试,测试思想 根据程序的控制流图找出一个模块所需测试的基本路径,根据这些基本路径设计构造相应的测试用例. 相关概念:基本路径, 控制流图,4-7,基本路径测试,设计步骤 根据模块逻辑构造控制流图(Flow Graph) 计算控制流图的环复杂度 (Cyclomatic Complexity) 列出包含起始节点和终止节点的基本路径 检查一下列出的基本路径数目是否超过控制流图的环复杂度 设计覆盖这些基本路径的测试用例,4-8,控制流图,说明 控制流图是由节点和边组成的有向图 节点代表了代码或程序流程图中矩形框中所表示的处理,菱形表示的判断处理以及判断处理流程相交的汇合点,在图中用标有编号的圆圈表示 边表明了控制的顺序,在图中用有向箭头表示。,4-9,控制流图,三种逻辑结构的控制流图,,,,顺序,,,,,条件,,,,循环,,,,4-10,控制流图,,1,2,3,5,6,7,10,8,B,11,4,9,E,4-11,环复杂度,含义 用V(G)表示 用来衡量一个模块判定结构的复杂程度,在数量上表现为独立的路径条数,是需要测试的基本路径数目的上限。,4-12,环复杂度,计算公式 V(G) = 闭合区域的数目 由节点和边围成的封闭区域 这些封闭区域一定是不可再分的 包括周边的区域 V(G) = 二值判定节点个数 + 1. V(G) = 边的数目-节点的数目 + 2,4-13,环复杂度,环复杂度 闭合区域的数目 = 5 二值判定节点个数 + 1=4+1=5 边的数目-节点的数目 + 2 = 16-13+2=5,4-14,基本路径,实用的定义 一条路径是基本路径如果: 是一条从起始节点到终止节点的路径. 至少包含一条其它基本路径没有包含的边. (至少引入一个新处理语句或一个新判断的程序通路.) 注意:对于循环而言,基本路径应包含不执行循环和执行一次循环体。,4-15,基本路径,基本路径 1-2-11 1-2-3-4-5-6-10-2-11 1-2-3-4-5-7-10-2-11 1-2-3-8-9-10-2-11 1-2-3-8-10-2-11,4-16,基本路径示例:,void Sort ( int iRecordNum, int iType ) 1 { 2 int x=0; 3 int y=0; 4 while ( iRecordNum-- 0 ) 5 { 6 If ( iType==0 ) 7 x=y+2; 8 else 9 If ( iType==1 ) 10 x=y+10; 11 else 12 x=y+20; 13 } 14 },4-17,基本路径测试示例:,计算环形复杂度:10(条边)- 8(个节点)+ 2 = 4 基本路径:路径1:4→14路径2:4→6→7→14路径3:4→6→9→10→13→4→14路径4:4→6→9→12→13 →4→14,4-18,三角形问题,使用基本路径设计测试用例方法推导三角形问题的测试用例P67,4-19,控制流图,81-86,87,88,92,99-100,93,102,95,96,97-98,89-90,94,4-20,环复杂度,环复杂度 闭合区域的数目 = 5 二值判定节点个数 + 1=4+1=5 边的数目-节点的数目 + 2 = 15-12+2=5,4-21,基本路径和测试用例(1),基本路径和测试用例 81-86-87-88-92-93 -95-97-98-102 相应的测试用例: 测试输入 = (68,68,56) 预期结果 = 这是一个等腰三角形! 81-86-87-88-92-93 -95-96-102 相应的测试用例: 测试输入 = (68,60,56) 预期结果 = 这是一个不等边三角形!,4-22,基本路径和测试用例 81-86-87-88-92-93 -94-102 相应的测试用例: 测试输入 = (68,68,68) 预期结果= 这是一个等边三角形! 81-86-87-89-90-92-99-100-102 相应的测试用例: 测试输入 = (68,8,60) 预期结果= 这不是一个三角形!,基本路径和测试用例(2),4-23,基本路径与环复杂度,81-86-87-88-92-99-100-102 81-86-87-88-92-93-95-97-98-102 81-86-87-88-92-93-95-96-102 81-86-87-88-92-93-94-102 81-86-87-89-90-92-93-94-102,,,4-24,基本路径与环复杂度,结论 如果基本路径必须是可行的,则逻辑关系会压缩基本路径集合数量,因此环复杂度是包含起始点和终止点的基本路径数目的上限,4-25,练习,4-26,练习,15-17,19,20,21,22-23,24,25,26,27,29,30,31,32,4-27,对节点粒度的讨论,4-28,对节点粒度的讨论,1,2,3,4,5,6,7,8,9,10,11,12,13,4-29,思考,如果被误写成 if((a=b+c)&&(ba+c)&&(ca+b)), 基本路径测试的四个用例(68,68,56), (68,60,56), (68,68,68), (68,8,56)是否可以发现这个问题?,,4-30,分支-条件测试,测试思想 根据模块中的逻辑条件设计测试用例,使得被测模块中的每一个复合条件以及构成这个复合条件的每一个简单条件的真假情况至少被执行一次。,4-31,,简单条件是一个布尔变量或一个可能带有NOT(“┓”)操作符的关系表达式,关系表达式的形式如:E1<关系操作符>E2,其中E1和E2是算术表达式,而<关系操作符>是下列之一:“<”,“≤”,“=”,“≠”(“┓=”),“>”, 或“≥” 复合条件由简单条件、布尔操作符和括弧组成。假定可用于复合条件的布尔算子包括OR“|”,AND“&”和NOT“┓”,不含关系表达式的条件称为布尔表达式。,4-32,分支-条件测试,进行分支-条件测试可以发现下列缺陷 布尔变量错误 布尔括弧错误 关系操作符错误 算术表达式错误 布尔操作符错误 遗漏布尔操作符 布尔操作符多余 布尔操作符不正确,4-33,案例,使用分支-条件方法设计下面逻辑条件的测试用例,需被测试的逻辑条件 复合条件 ((ab+c) && (ba+c) && (ca+b)) 简单条件 ab+c ba+c ca+b,4-34,案例,上面的测试用例不推荐大家使用 测试用例有效性不高: t(真) && t (真) =t || t=t 同时 f && f=f || f=f ((ab+c) || (ba+c) && (ca+b)) ((ab+c) && (ba+c) ||(ca+b)) ((ab+c) || (ba+c) || (ca+b)),4-35,对分支-条件测试的讨论,这组测试用例的结果又如何? ((a=b+c) && (ba+c) && (ca+b))?,4-36,案例,使用上面的测试用例,是否可以发现下面的缺陷 ((a=b+c) && (ba+c) && (ca+b)) ((ab+c) || (ba+c) && (ca+b)) ((ab+c) && (ba+c) ||(ca+b)) ((ab+c) || (ba+c) || (ca+b)),4-37,结论,分支-条件测试可以发现但并不保证发现所有下列缺陷 布尔变量错误 布尔括弧错误 关系操作符错误 算术表达式错误 布尔操作符错误 遗漏布尔操作符 布尔操作符多余 布尔操作符不正确 因此,实际设计测试用例过程中要结合具体问题选取恰当的测试输入,4-38,推荐,为了最大限度的发现缺陷,在进行分支-条件测试时,推荐参考P73-P75设计相应被测逻辑条件的测试用例 注意 即使依据推荐方法得出的测试用例依然不能发现所有的缺陷!!,4-39,练习,指出下列代码逻辑判断条件中的复合条件和简单条件If (n Mod 400 == 0) Or ((n Mod 4 == 0) And ( n Mod 100 0) )Then MsgBox s + “是闰年!“ End If,需被测试的逻辑条件 复合条件 (n Mod 400 == 0) Or ((n Mod 4 == 0) And ( n Mod 100 0) ) ((n Mod 4 == 0) And ( n Mod 100 0) ) 简单条件 (n Mod 400 == 0) (n Mod 4 == 0) ( n Mod 100 0),4-40,循环测试,测试思想 关注循环体结构的正确性,对循环变量运用类似于边界值测试的方法以验证循环体结构的正确性。 四种不同类型的循环结构 简单循环 嵌套循环 连接循环 非结构循环,4-41,循环类型,,,简单循环,,,,,,嵌套循环,,,连接循环,,,,,非结构循环,,,,,,,4-42,测试简单循环,,,如果n 是循环次数, 那么测试用例应包括 直接跳过循环体 只执行一遍循环体 连续执行两遍循环体 如果循环次数为n,执行m( m n)遍循环体 如果循环次数为n,那么执行n -1遍循环体 如果循环次数为n,那么执行n遍循环体 如果循环次数为n,那么执行n + 1遍循环体,简单循环,,,4-43,测试嵌套循环,,,,嵌套循环,Beizer’s 的方法: 从最内层测试开始,其它层的循环变量置为最小值 按照简单循环的测试方法测试最内层的循环体,外层循环仍旧取最小值 向外扩展循环体,测试下一个循环 所有外层循环变量取最小值 其余内层嵌套的循环体取典型值 继续本步骤直到所有的循环体均测试完毕,,,4-44,测试连接循环,连接循环,如果相连接的循环体互相独立,按照简单循环测试每一个循环体 如果相连接的循环体1的循环变量的最终结果是循环体2循环变量的初始值,那么采用嵌套循环的方法来测试(靠前认为是内层循环),,,,,4-45,测试非结构循环,非结构循环,测试非结构循环是一件令人头痛的事情 最好的方法是重新设计循环体结构,,,,,,,4-46,其它白盒测试方法,数据流测试 程序插桩 符合测试,4-47,数据流测试,测试思想 根据被测模块中变量的定义和使用路径,发现代码中如引用未定义变量、对以前未曾使用的变量再次赋值等数据流异常情况。 导致这些异常情况原因是由于代码存在名字拼错、名字混淆或是语句遗漏等缺陷。 构造其定义——使用路径设计相应的测试用例。,4-48,,变量的定义节点 如果程序中某一语句i的执行能改变某程序变量V的值,则称V被语句i定义,可记作Def(V,i)。- 该语句的执行将会改变与之相关存储单元的内容。 变量的使用节点 如果某一语句j的执行引用了内存中变量V的值,则称变量V被语句j使用,可记作Use(V,j)。 例如:语句X=Y+Z; 定义了X, 使用了Y和Z.语句x = read(); print x;,4-49,指出变量X的定义节点、使用节点和定义-使用路径 定义节点:Def(x,1) 使用节点:USE(x,2), USE(x,3), USE(x,4) 定义-使用路径:1,2; 1,2,3;1,2,4;,数据流测试,变量的定义-使用路径 以变量的定义节点开始,使用节点结束的路径,fooA(){ x = read(); if (x 0)print x-1; 4 else 5 print x;},4-50,指出变量X的定义节点、使用节点和定义-使用路径 定义节点:Def(x,1),Def(x,5) 使用节点:USE(x,3), USE(x,6), USE(x,9) 定义-使用路径:1,2,3; 1,2,3,4,5,6;1,2,3,8,9;5,6;,练习,4-51,数据流的应用,,,,第一次执行循环时没有定义过,没有定义过,,没有使用过,,没有使用过,4-52,说明 借助往被测程序中插入操作来实现测试目的的方法 设计插桩需考虑的问题 探测哪些信息 在代码的什么部位设置探测点 需要设置多少个探测点 断言 是一种特殊的插桩 在程序中的特定部位插入的用以判断变量特性的语句,程序插桩,4-53,思想 用代数符号代替具体的数值作为程序的输入,如果用符号运算相应获得的结果是正确的,那么所有符合条件的输入数值产生的结果都将是正确的。 问题 分支问题 二义性问题 大程序问题,符号测试,4-54,运用白盒测试方法,,运用白盒测试技术设计下面代码的测试用例书P69,4-55,参考答案,设计步骤 构造被测代码的控制流图,运用基本路径测试方法设计相关测试用例 针对代码中的各个逻辑条件,运用分支-条件测试方法设计相关测试用例 针对代码中的循环,运用循环测试方法设计相关测试用例 合并前三步所得结果 在第四步的基础上,根据被测对象的特点增加相关测试用例,4-56,以复合条件为节点P79(方案1),4-57,以简单条件为节点P80(方案2),4-58,环复杂度(方案1),环复杂度 闭合区域的数目 = 4 二值判定节点个数 + 1=3+1=4 边的数目-节点的数目 + 2= 14-12+2=4,4-59,基本路径(方案1),基本路径和相应的测试用例 15-17-19-29-31-32 (30-32?) 测试用例: 测试输入 = ((-999),0,360) 预期结果 = -999 15-17-19-20-21-24-19-29-31-32 (30-32?) 测试用例: 测试输入 = ((-10,-999),0,360), 预期结果 = -999,4-60,基本路径(方案1),基本路径和相应的测试用例 15-17-19-20-21-22-23-25-26-27-19-29-30-32 测试用例: 测试输入 = ((180,-999),0,360), 预期结果 = 180,4-61,环复杂度(方案2),环复杂度 闭合区域的数目 = 6 二值判定节点个数 + 1=5+1=6 边的数目-节点的数目 + 2= 17-13+2=6,1,2,3,4,5,6,7,8,9,10,11,12,13,4-62,基本路径(方案2),基本路径和相应的测试用例 1-2-10-12-13(10-11?) 测试用例: 测试输入 = ((-999),0,360) 预期结果 = -999 1-2-3-10-11-13 测试用例 测试输入 = ((0100,-999),0,360), 预期结果 = 49.5,4-63,基本路径(方案2),基本路径和相应的测试用例 1-2-3-4-5-6-7-9-2-10-11-13 测试用例: 测试输入 = ((180,-999),0,360), 预期结果 = 180 1-2-3-4-5-8-2-10-12-13 测试用例: 测试输入 = ((-10,-999),0,360), 预期结果 = -999,4-64,基本路径(方案2),基本路径和相应的测试用例 1-2-3-4-5-6-8-2-10-12-13 测试用例: 测试输入 = ((380,-999),0,360), 预期结果 = -999,4-65,分支-条件测试,需测试的逻辑条件P69 Do while (( value[i]!=-999) &&(inputNumber=minimum) && (value[i] 0,4-66,分支-条件测试,分支和相应的测试用例,相应的测试用例 测试输入 = ((180,-999),0,360),预期结果 = 180 测试输入 = ((-999),0,360),预期结果 = -999 测试输入 = ((0100,-999),0,360),预期结果 = 49.5,4-67,分支-条件测试,分支和相应的测试用例,相应的测试用例 测试输入 = ((180,-999),0,360),预期结果 = 180 测试输入 = ((-10,-999),0,360),预期结果 = -999 测试输入 = ((380,,-999),0,360),预期结果 = -999,4-68,分支-条件测试,分支和相应的测试用例,相应的测试用例 测试输入 = ((180,-999),0,360),预期结果 = 180 测试输入 = ((-999),0,360),预期结果 = -999,4-69,循环测试,需测试的循环条件 Do while (( value[i]!=-999) &&(inputNumber100)) 直接跳过循环体测试用例:测试输入 = ((-999),0,360),预期结果 = -999 只执行一遍循环体测试用例:测试输入 = ((180,-999),0,360),预期结果 = 180 连续执行两遍循环体测试用例:测试输入 = ((10,20,-999),0,360),预期结果 = 15,4-70,循环测试,需测试的循环条件 Do while (( value[i]!=-999) &&(inputNumber100)) 如果循环次数为n,执行m( m n)遍循环体测试用例:测试输入 = ((049,-999),0,360),预期结果 = 24.5 如果循环次数为n,那么执行n -1遍循环体测试用例:测试输入 = ((098,-999),0,360),预期结果 = 49.0 如果循环次数为n,那么执行n遍循环体测试用例:测试输入 = ((099,-999),0,360),预期结果 = 49.5,4-71,循环测试,需测试的循环条件 Do while (( value[i]!=-999) &&(inputNumber100)) 测试用例:测试输入 = ((0100,-999),0,360),预期结果 = 50,4-72,结果合并,合并的结果 测试输入 = ((-999),0,360),预期结果 = -999 测试输入 = ((-10,-999),0,360),预期结果 = -999 测试输入 = ((180,-999),0,360),预期结果 = 180 测试输入 = ((380,-999),0,360),预期结果 = -999 测试输入 = ((0100,-999),0,360),预期结果 = 49.5 测试输入 = ((10,20,-999),0,360),预期结果 = 15 测试输入 = ((049,-999),0,360),预期结果 = 24.5,4-73,结果合并,合并的结果 测试输入 = ((098,-999),0,360),预期结果 = 49.0 测试输入 = ((099,-999),0,360),预期结果 = 49.5 测试输入 = ((0100,-999),0,360),预期结果 = 50,4-74,补充测试用例,对于if语句仅使用分支-条件测试是否可以尽可能多地发现被测代码的缺陷呢可以等于边界点上的测试用例 测试输入 = ((0,-999),0,360),预期结果 = 0 测试输入 = ((360,-999),0,360),预期结果 = 360 实际中,还可以采用 走读的方法,4-75,补充测试用例,考虑到异常输出的出现频率,利用错误猜测再次增加 测试输入 = ((a,-999),0,360),预期结果 = “输入错误” 测试输入 = ((10,-999),a,360),预期结果 = “输入错误” 测试输入 = ((10,-999),0,a),预期结果 = “输入错误”,4-76,Assert,,,《Interface》 test,,TestCase,,,TestSuite,,,TestResult,,,BaseTestRunner,,,《Interface》 TestListener,,JUnit是什么 用Java语言编写测试脚本的一个测试框架,可用于测试使用Java语言开发的各类代码 下图示例了JUnit框架的核心类。其中测试工程师最常用的类是 TestCase,JUnit Framework,4-77,使用JUnit,operationsTest,,testcase1()testcase2()testcase3()testcase4() testcase5() testcase6() testcase7() testcase8() testcase9() testcase1(),TestCase,,,每一个方法对应一个测试用例,4-78,使用JUnit对被测对象进行白盒测试可参考以下步骤: 根据被测对象的逻辑情况设计测试用例 引用JUnit测试框架,用Java语言编写测试代码实现测试用例。为了使用JUnit测试框架,编写的包含实现测试用例的类应是TestCase的子类(下称测试类)。如果用TestSuite处理实现的测试用例,则在编写时需遵循如下规定: 测试类必须是公有类并且继承于TestCase 测试类中的实现测试用例的方法必须是公有的并且声明为void 测试类中的实现测试用例的方法名必须是以test开始 测试类中的实现测试用例的方法无任何参数,使用JUnit进行测试的步骤,4-79,使用JUnit对被测对象进行白盒测试可参考以下步骤: 选择一种TestRunner运行测试代码,确定被测代码中是否存在缺陷 如果存在缺陷,定位并修改缺陷 再次运行测试代码验证缺陷是否被修改正确是否引入新问题,使用JUnit进行测试的步骤,4-80,JUnit安装 获取Junit安装包: http://sourceforge.net/projects/Junit/ 解压 junit.zip 文件到你的安装目录 在CLASSPATH中添加junit.jar ,比如:set classpath=%classpath%;INSTALL_DIR\junit\junit.jar,使用 JUnit进行测试,4-81,JUnit安装 验证安装的正确性,在Dos窗口输入如下命令 Batch TestRunner java junit.textui.TestRunner junit.samples.AllTests Graphical TestRunner java junit.awtui.TestRunner junit.samples.AllTests Swing based graphical TestRunner java junit.swingui.TestRunner junit.samples.AllTests 所有的测试用例都应该通过,这时,图形界面上的工具条变为绿色,如果工具条是红色的,说明你的程序或者测试环境有问题,使用 JUnit进行测试,4-82,使用JUnit进行测试,graphical TestRunner,Swing based graphical TestRunner,batch TestRunner,4-83,意义 Error很可能是测试环境的问题 Failure则是被测代码的问题 正确区分两者是测试异常的基础,区别Error和Failure,4-84,与如下工具或技术联合使用可以增强JUnit Ant : http://Ant.Apache.org Eclipse Maven: http://maven.apache.org/ Jetty: http://jetty.mortbay.org/jetty/index.html. Mock Objects Cactus: http://jakarta.apache.org/cactus/,扩展 JUnit,4-85,覆盖准则,说明 用于描述在测试过程中,被测对象被测试的程度,有时候也称为软件测试覆盖准则或者测试数据完备准则,可以: 作为测试停止的标准,用于衡量测试是否充分; 作为选取测试数据的依据,满足相同覆盖准则的测试数据是等价的.,4-86,,白盒测试标准是根据程序内部结构制定的覆盖标准,可以分为 基于控制流的覆盖准则 基于数据流的覆盖准则,4-87,基于控制流的覆盖准则,基于控制流的覆盖准则 可用于检查程序中的分支和循环结构的逻辑表达式.被工业界广泛采用.常用的覆盖准则包括: 语句覆盖分支覆盖条件覆盖分支-条件覆盖 多条件覆盖,4-88,测试的充分性,说明 如果说A标准的充分程度比B标准高,则意味着满足A标准的测试用例集合也满足B标准 测试的充分性,4-89,语句覆盖,定义 语句覆盖是指设计若干测试用例,使得程序中的每个可执行语句至少执行一次。 示例 下面的测试用例可以使code1满足语句覆盖测试用例1:A=2 B=0 X=3 测试用例2:A=2,B=1,X=3 不满足语句覆盖,Code1,4-90,,,,,,Test case : A=2 , B=0 , X=3.,,a,b,c,d,e,4-91,语句覆盖,语句覆盖是最弱的准则 执行测试用例1可以运行程序中的每条语句,但是如果code1被错误地实现成code2,该测试用例是否能够发现这个缺陷呢? 测试用例1:A=2 B=0 X=3,Code 2,,Code1,4-92,分支覆盖,定义 分支是一个布尔表达式。由一个或多个条件通过逻辑操作符”AND”,”OR” ,” NOT”连接而成 分支测试:指设计若干测试用例,使得程序中每个分支的真假结果至少被出现一次。分支覆盖又称为判定覆盖,Code1,4-93,每个判定的取真分支和取假分支至少执行一次。,Test cases: ①A=3 , B=0 , X=3 ②A=2 , B=1 , X=1,,,,,,,,a,c,b,e,d,4-94,分支覆盖,示例 下面的两组测试用例可以使code1满足分支覆盖: A=2 B=0 X=4;A=1 B=0 X=1A=3 B=0 X=3;A=2 B=1 X=1,Code1,4-95,讨论,下面的测试用例你会选取哪组测试用例?为什么?用例1:A=2 B=0 X=4;A=1 B=0 X=1用例2: A=2 B=0 X=4;A=1 B=1 X=1,Code1,4-96,条件覆盖,定义 条件是不可再分的布尔表达式 程序中的每条语句至少被执行一次并且构成分支中的每一个条件的结果至少出现一次,Code1,4-97,条件覆盖,判断M表达式: 设条件 a0 取真 记为 T1 假 F1条件 b0 取真记为 T2 假 F2 判断Q表达式: 设条件 a1 取真记为 T3 假 F3条件 c1 取真记为 T4 假 F4,判断M,判断Q,4-98,条件覆盖,它覆盖了判定M的N分支和判断Q的Y分支。,我们用条件覆盖设计的思想就是让测试用例能覆盖T1、T2、T3、T4、F1、F2、F3、F4,判断M,判断Q,4-99,条件覆盖,示例 下面的测试用例可以使code1满足条件覆盖: A=2 B=0 X=4;A=1 B=1 X=0 另外一组:A=1 B=0 X=3;A=2 B=1 X=1 执行该测试用例是否满足语句覆盖?分支覆盖?,Code1,4-100,分支-条件覆盖(1),定义 程序中的每条语句至少被执行一次,分支中的每个条件所有可能至少一次,每个分支本身的结果也至少出现一次,Code1,4-101,判定-条件覆盖,按照判定-条件覆盖的要求,我们设计的测试用例要满足如下条件: 所有条件可能至少执行一次取值; 所有判断的可能结果至少执行一次。,要满足T1、T2、 T3 、T4 F1、 F2 、F3、F4,4-102,判定-条件覆盖,要满足T1、T2、 T3 、T4,F1、 F2 、F3、F4,4-103,分支-条件覆盖(2),示例 下面的测试用例可以使code1满足分支-条件覆盖:A=2 B=0 X=3;(T,T,T,f)T,TA=1 B=0 X=3;(f,t,F,t)F,TA=1 B=1 X=1 (f,F,f,F) F,F 执行该测试用例程序中的每条语句至少被执行一次,分支中的每个条件所有可能至少一次,每个分支本身的结果也至少出现一次,Code1,4-104,多条件覆盖,Code1,定义 程序中的每条语句至少被执行一次,并且每个条件的所有可能结果的组合至少出现一次,4-105,多条件覆盖,Code1,示例 A1为真且B==0为真 A1为真且B==0为假 A1为假且B==0为真 A1为假且B==0为假 A==2为真且X1为真 A==2为真且X1为假 A==2为假且X1为真 A==2为假且X1为假,4-106,多条件覆盖,Code1,测试用例 A=2,B=0,X=4(t,t,t,t) A=1,B=0,X=3 (f,t,f,t) A=2,B=1,X=1 (t,f,t,f) A=1,B=1,X=1 (f,f,f,f),1,3,4,2,E,1,3,4,2,E,1,3,4,2,E,1,3,4,2,E,1,3,4,2,E,1,3,4,2,E,4-107,路径覆盖,Code1,说明 路径覆盖是指设计足够多的测试用例,使得程序中所有可能的路径至少被遍历一次。 为了遍历code1中的四条可执行路径,设计4个测试用例:“A=2,B=0,X=3”,(t,t,t,f)“A=1,B=0,X=1”, (f,t,f,f) “A=2,B=1,X=1” (t,f,t,f) “A=3,B=0,X=1”。 (t,t,f,f),4-108,注意,说明 即使对路径数很有限的程序即使作到了路径覆盖,仍然不能保证被测程序的正确性。 例如,对于代码“if(I=0)”,如果将“if(I=0)”错写成了“if(I0)”,假设设计的测试用例中I的值均大于0,这样,虽然满足了路径覆盖,但仍然发现不了这个问题。,4-109,Rational Purecoverage,Rational Purecoverage 可以帮助检查使用.NET, Java, Visual C/C++和Visual Basic开发的程序并提供代码覆盖信息 如何运行purecoverage 有3种可以运行purecoverage的方法 通过purecoverage自带的用户界面 通过IDE如Microsoft Visual Studio 6, Visual Studio .NET, 和IBM WebSphere Studio 通过命令行,4-110,File-Run…,通过自带用户界面,,,4-111,命令行 coverage [] Purecoverage 选项,通过命令行,4-112,,,命令,运行时信息,通过命令行,4-113,检查代码覆盖,通过Purecoverage自带用户界面的运行步骤 设计测试用例 使用Purecoverage运行测试用例直到所有测试用例执行完成 合并所有有效的覆盖结果到最终的代码覆盖信息文件中 下面以purecoverage自带样例文件“Hello.exe” (in “purecoverage installdir\PurifyPlus\\CoverageSamples\hello.exe”)为例介绍如何检查代码覆盖,4-114,检查代码覆盖,设计测试用例 基于程序源代码,我得到两个测试用例 点击Yes,看时间 点击No,不看时间 运行每个用例,收集覆盖信息 点击Yes,覆盖信息显示如下,,4-115,检查代码覆盖,运行每个用例,收集覆盖信息 点击No,显示覆盖信息,,4-116,检查代码覆盖,合并有效的覆盖结果,以得到最终的代码覆盖信息,点击 “Merge”工具条上的按钮,选择待合并的覆盖信息,,,4-117,检查代码覆盖,最终的覆盖信息中显示代码被100%覆盖 如果最终的覆盖信息不是100%,应该设计额外的测试用例执行未被覆盖代码,,4-118,小结,白盒测试方法基于系统或者组件的内部实现结构和逻辑寻找软件中的缺陷 常用的白盒测试方法包括基本路径测试、分支-条件测试和循环测试 覆盖准则可以作为测试停止或/和选取测试数据的标准 基于控制流的覆盖准则是被工业界广泛采用的覆盖标准之一。按照覆盖率从低到高的顺序,基于控制流的覆盖准则包括语句覆盖、分支覆盖、条件覆盖、分支-条件覆盖和多条件覆盖,
展开阅读全文
  微传网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:L-第4章 软件工程课件白盒测试用例设计方法.ppt
链接地址:https://www.weizhuannet.com/p-10905850.html
微传网是一个办公文档、学习资料下载的在线文档分享平台!

网站资源均来自网络,如有侵权,请联系客服删除!

 网站客服QQ:80879498  会员QQ群:727456886

copyright@ 2018-2028 微传网络工作室版权所有

     经营许可证编号:冀ICP备18006529号-1 ,公安局备案号:13028102000124

收起
展开