您好,欢迎访问三七文档
白盒测试了解白盒测试的定义掌握白盒测试的常用方法教学目标:教学重点:教学难点:教学方法:多媒体教学课时:6课时白盒测试的覆盖测试法和路径测试法白盒测试案例应用白盒测试什么是白盒测试白盒测试的常用方法白盒测试案例运用一、什么是白盒测试1、白盒测试的定义白盒测试(White-boxTesting)也称作结构测试或逻辑驱动测试,它是知道产品的内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行。按照程序内部的结构测试程序,检验程序中的每条通路是否都能按预定要求正确工作,而不顾它的功能。白盒测试的主要方法有逻辑覆盖、基本路径测试等,主要用于软件验证。一、什么是白盒测试2、为什么不采用穷举路径测试法穷举路径测试法无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序。穷举路径测试不能查出程序因为遗漏路径而出错。穷举路径测试发现不了一些与数据相关的错误。一、什么是白盒测试3、白盒测试方法遵循的原则确保一个模块中的所有独立路径至少被测试一次。所有逻辑值均需测试真(true)和假(false)两种情况。检查程序的内部数据结构,保证其结构的有效性。在取值上、下边界即可操作范围内运行所有循环。一、什么是白盒测试4、控制流图白盒测试是针对软件产品内部逻辑结构进行测试的,测试人员必须对测试中的软件有深入的理解,包括其内部结构、各单元部分及之间的内在联系,还有程序运行原理等等。因而这是一项庞大并且复杂的工作。为了更加突出程序的内部结构,便于测试人员理解源代码,可以对程序流程图进行简化,生成控制流图(ControlFlowGraph)。简化后的控制流图是由节点和控制边组成的。一、什么是白盒测试4、控制流图控制流图的特点:具有唯一入口节点,即源节点,表示程序段的开始语句;具有唯一出口节点,即汇节点,表示程序段的结束语句;节点由带有标号的圆圈表示,表示一个或多个无分支的源程序语句;控制边由带箭头的直线或弧表示,代表控制流的方向。常见的控制流图如图3-1所示。包含条件的节点被称为判断节点(也称谓词结点),由判断节点发出的边必须终止于某一个节点。由边和结点所限定的范围称为区域。图3-1常见的控制流图一、什么是白盒测试4、控制流图将一个典型的程序流程图转换成控制流图一、什么是白盒测试4、控制流图图3-2控制流图示例对于复合条件,可将其分解为多个单个条件,并映射成控制流图。一、什么是白盒测试4、控制流图控制流图的矩阵表示形式,其维数等于流图的结点数,矩阵元素对应于结点的边。若矩阵记为M,则M(4,1)=“d”。一、什么是白盒测试5、图矩阵流图对应的矩阵图结点12341a2b3c4d二、白盒测试的常用方法1、覆盖率测试白盒测试技术的常见方法之一就是覆盖测试,它是利用程序的逻辑结构设计相应的测试用例。测试人员要深入了解被测程序的逻辑结构特点,完全掌握源代码的流程,才能设计出恰当的用例。根据不同的测试要求,覆盖测试可以分为语句覆盖、判断覆盖、条件覆盖、判断/条件覆盖、条件组合覆盖和路径覆盖。二、白盒测试的常用方法1、覆盖率测试下面是一段简单的C语言程序,作为公共程序段来说明五种覆盖测试的各自特点。程序3-1:1If(A1&&B==0)then2X=X/A3If(A2||X1)then4X=X+1逻辑运算符“&&”表示“与”的关系,逻辑运算符“||”表示“或”的关系。其程序控制流图如图3-3所示。二、白盒测试的常用方法1、覆盖率测试图3-3示例程序流程图及流图二、白盒测试的常用方法2、语句覆盖语句覆盖(StatementCoverage)是指设计若干个测试用例,程序运行时每个可执行语句至少被执行一次。在保证完成要求的情况下,测试用例的数目越少越好。以下是针对公共程序段设计的测试用例:测试用例A,B,X(A1)and(B=0)(A=2)or(X1)执行路径TestCase12,0,3TrueTrueace(BCEF)程序按路径a,c,e(流图上的路径BCEF或1-2-3-4-5)顺序执行,程序中的4个语句都被执行一次,符合语句覆盖的要求。二、白盒测试的常用方法2、语句覆盖从表面上看,语句覆盖用例测试了程序中的每一个语句行,好像对程序覆盖得很全面,但实际上语句覆盖测试是最弱的逻辑覆盖方法。例如,第一个判断的逻辑运算符“&&”错误写成“||”,或者第二个判断的逻辑运算符“||”错误地写成“&&”,这时如果仍采用TestCase1测试用例则程序仍按流程图上的路径ace执行;当第二个条件语句中X1误写成X0时,上述的测试用例也不能发现这一错误。根据上述分析可知,语句覆盖测试只是表面上的覆盖程序流程,没有针对源程序各个语句间的内在关系,设计更为细致的测试用例。二、白盒测试的常用方法3、判断覆盖判断覆盖(BranchCoverage)是指设计若干个测试用例,执行被测试程序时,程序中每个判断条件的真值分支和假值分支至少被执行一遍。在保证完成要求的情况下,测试用例的数目越少越好。判断覆盖又称为分支覆盖。对上述示例程序段,设计两个测试用例,使它们能通过路径ace和abd或通过路径acd及ade,即可达到“判定覆盖”的标准。二、白盒测试的常用方法3、判断覆盖测试用例A,B,X(A1)and(B=0)(A=2)or(X1)执行路径TestCase12,0,3TrueTrueaceTestCase21,0,1FalseFalseabd采用这一组测试用例,公共程序段的4个判断分支b,c,d,e都被覆盖到了。二、白盒测试的常用方法3、判断覆盖测试用例A,B,X(A1)and(B=0)(A=2)or(X1)执行路径TestCase33,0,1TrueFalseacdTestCase42,1,3FalseTrueabe采用这一组测试用例,公共程序段的4个判断分支b,c,d,e也都被覆盖到了。需要注意的是,上述两组测试用例在满足判定覆盖的同时,还完成了语句覆盖,因此判定覆盖要比语句覆盖更强一些。但是,此时如果程序段中的第二个判定条件X1误写成X1,执行上述测试用例,原路径abe执行而不影响结果。二、白盒测试的常用方法4、条件覆盖在实际程序代码中,一个判定中通常都包含了若干个条件,如上述示例程序段,判定(A1)and(B=0)包含了两个条件(A1)和(B=0),此时,一个更强的覆盖标准是条件覆盖。条件覆盖(ConditionCoverage)是指设计若干个测试用例,执行被测试程序时,程序中每个判断条件中的每个判断式的真值和假值至少被执行一遍。二、白盒测试的常用方法4、条件覆盖因此,在第一个判定(A1)AND(B=0)中应考虑到各种条件取值的情况:A1为true,记为T1;A1为false,记为-T1;B=0为true,记为T2;B=0为false,记为-T2;同样,对于第二个判定(A=2)OR(X1)应考虑到:A=2为true,记为T3;A=2为false,记为-T3;X1为true,记为T4;X1为false,记为-t4;二、白盒测试的常用方法4、条件覆盖这两个测试用例不但覆盖了4个条件的全部8种情况,而且将两个判定的4个分支b、c、d、e也同时覆盖了,即同时达到了条件覆盖和判定覆盖。测试用例A,B,X执行路径覆盖条件TestCase12,0,3aceT1,T2,T3,T4TestCase51,1,1abd-T1,-T2,-T3,-T4二、白盒测试的常用方法4、条件覆盖但是并不可以说判断覆盖是条件覆盖的子集。上表中虽然覆盖了4个内部判断式的8种真假值情况。但是这组测试用例的执行路径是abe,仅是覆盖了判断条件的4个真假分支中的2个。所以,需要设计一种能同时满足判断覆盖和条件覆盖的覆盖测试方法,即判断/条件覆盖测试。测试用例A,B,X执行路径覆盖条件TestCase61,0,3abe-T1,T2,-T3,T4TestCase41,1,1abeT1,-T2,T3,-T4二、白盒测试的常用方法5、判定/条件覆盖判断/条件覆盖是指设计若干个测试用例,执行被测试程序时,程序中每个判断条件的真假值分支至少被执行一遍,并且每个判断条件的内部判断式的真假值分支也要被执行一遍。上表虽然满足了判断覆盖和条件覆盖,但是没有对每个判断条件的内部判断式的所有真假值组合进行测试。条件组合判断是必要的,因为条件判断语句中的“与”和“或”,即“&&”和“||”,会使内部判断式之间产生抑制作用。例如,C=A&&B中,如果A为假值,那么C就为假值,测试程序就不检测B了,B的正确与否就无法测试了。同样,C=A||B中,如果A为真值,那么C就为真值,测试程序也不检测B了,B的正确与否也就无法测试了。测试用例A,B,X执行路径覆盖条件(A1)and(B=0)(A=2)or(X1)TestCase12,0,3ace-T1,T2,-T3,T4TrueTrueTestCase51,1,1abdT1,-T2,T3,-T4FalseFalse二、白盒测试的常用方法6、组合覆盖条件组合覆盖是指设计若干个测试用例,执行被测试程序时,程序中每个判断条件的的内部判断式的各种真假组合可能都至少被执行一遍。可见,满足条件组合覆盖的测试用例组一定满足判断覆盖、条件覆盖和判断/条件覆盖。在上述示例程序段中,每个判定各包含有两个条件,这两个条件在判定中有8种可能的组合:A1,B=0,记为T1,T2;A1,B0,记为T1,-T2;A=1,B=0,记为-T1,T2;A=1,B0,记为-T1,-T2;A=2,X1,记为T3,T4;A=2,X=1,记为T3,-T4;A2,X1,记为-T3,T4;A2,X=1,记为-T3,-T4;二、白盒测试的常用方法6、组合覆盖上述测试用例虽然同时覆盖了全部条件组合的4个分支,但是却仅覆盖了3条路径,漏掉了路径acd。测试用例A,B,X执行路径覆盖条件覆盖组合号TestCase12,0,3aceT1,T2,T3,T41,5TestCase42,1,1abeT1,-T2,T3,-T42,6TestCase51,1,1abd-T1,-T2,-T3,-T44,8TestCase61,0,3abe-T1,T2,-T3,T43,7二、白盒测试的常用方法7、路径覆盖路径覆盖(PathCoverage)要求设计若干测试用例,执行被测试程序时,能够覆盖程序中所有的可能路径。从流程图和流图中都可以看出,本例有4条可能的路径。路径1:ace记为L1路径2:abd记为L2路径3:abe记为L3路径4:acd记为L4二、白盒测试的常用方法7、路径覆盖实际问题中,一个不太复杂的程序,其路径都是一个庞大的数字,要在测试中覆盖这样多的路径是无法实现的。所以,路径覆盖测试是相对的,要尽可能把路径数压缩到一个可承受范围。当然,即便对某个简短的程序段做到了路径覆盖测试,也不能保证源代码不存在其他软件问题了。其他的软件测试手段也必要的,它们之间是相辅相成的。没有一个测试方法能够找尽所有软件缺陷,只能说是尽可能多地查找软件缺陷。测试用例A,B,X执行路径TestCase12,0,3ace(L1)TestCase21,0,1abd(L2)TestCase32,1,1abe(L3)TestCase43,0,3acd(L4)二、白盒测试的常用方法8、基本路径测试方法从上几节中可知,对于一个较为复杂的程序要做到完全的路径覆盖测试是不可能实现的。既然路径覆盖测试无法达到,那么可以对某个程序的所有独立路径进行测试,也就是说检验了程序的每一条语句,从而达到语句覆盖,这种测试方法就是独立路径测试方法。某一程序的独立路径是指从入口到程序出口的多次执行中,每次至少有一个语句集(包括运算、赋值、输入/输出或判断)是新的和未被重复的。从控制流图来看,一条独立路径是至少包含有一条在其它独立路径中从未有过的边的路径。路径
本文标题:74白盒测试
链接地址:https://www.777doc.com/doc-3613326 .html