您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 5-软件测试:白盒测试方法解析
软件测试方法白盒测试方法(基于结构)本章教学要点教学目标:通过本章学习,掌握白盒测试方法,并能应用到单元测试中去。教学重点与难点:控制流图的绘制方法根据指定的覆盖率要求设计出相应的单元测试用例白盒测试的各种覆盖标准及彼此间的关系目录白盒测试概述1控制流测试方法43数据流测试方法2程序控制流图白盒测试白盒测试技术,又叫做结构化测试技术或者基于结构的测试技术,通常意义上被认为是基于代码的测试技术。白盒测试技术是通过分析组件/系统的内部结构来产生、选择测试用例技术。白盒测试依据:源代码、详细设计文档或函数说明,以此作为测试设计输入。白盒测试方法控制流测试:逻辑覆盖:以程序内部逻辑结构为基础,结合控制流图,对程序进行覆盖,分为语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖等循环的路径测试:针对带循环的程序,分析程序控制流的环路复杂性,导出测试路径集合,从而设计测试用例。包括:主路径测试、独立路径测试等。通过控制流图的建模分析过程,可以发现一些程序问题,属于静态测试过程。数据流测试:从定义到使用的程序路径上检查数据的分法,包括:所有定义覆盖、所有使用覆盖等、所有定义使用对覆盖等。白盒测试设计过程Step1:源代码转换为流图。描述程序的控制流或数据流。Step2:分析程序流图,选择合适的测试覆盖标准;Step3:确定测试数据,生成测试用例;ModelsCreatebasetestcasesSuppementwithtestdata模型覆盖填充数据Step1Step2Step3测试对象建模X0andY10X-10orY0Y=Y/XY=-(Y+X)TTFFabcde返回Y目录白盒测试概述1控制流测试方法43数据流测试方法2程序控制流图控制流图CFG控制流图是一个带有开始和结束节点的有向图控制流图由节点、边、区域组成程序语句通过节点来表示语句之间分支路径是通过边(控制流)来表示没有分支语句序列用一个节点来表示图内开始和结束节点可省略分支语句是关键if(xy){y=0;X=x+1;}y=0;X=x+1;if(xy)分支节点汇合节点基本块各种语句结构的控制流图顺序结构语句If…then…else…If…then…switch…case…whiledo…Do…untilforxtoynext将程序结构转化为控制流图CFG绘制程序流程图按语句结构将程序流程图转化为控制流图顺序结构、选择结构、循环结构对所有节点及控制流向进行编号程序结构程序流程图程序控制流图控制流图(选择结构)Dima,basintegerDimcasdoubleIf(a0andb0)thenc=c/aEndifIf(a1orc1)thenc=c+1EndifC=b+c书上P32页12354ABCDEFa0andb0c=c/ac=c+1a1orc1abcdeFFTTc=b+c⑤①②③④练习:控制流图(选择结构)q=1;b=2;c=3;if(a==2){x=x+2;}else{x=x/2;}p=q/r;if(b/c3){z=x+y;}控制流图:条件拆分a0andb0c=c/aFTb0c=c/aFTa0TF12312430013011310131112ab路径0014011410124111234ab路径如果仅仅考虑路径覆盖,转换后不等价,如果加上条件组合后则可以等价等价吗?控制流图:循环结构#includestdio.hmain()①{chars[80];②inti=0;③scanf(%s,s);④while(s[i]!='\0')⑤{if(s[i]=97)⑥s[i]=s[i]-32;i++;⑦}⑧puts(s);⑨}45761-38-9控制流图:循环结构(2)①while(true){②if(i==12){③i++;④continue;⑤}⑥if(i==20){⑦break;⑧}⑨}1253-49687程序可能有2个出口练习:控制流图(循环结构)getit(intm)①{②inti,k;③k=sqrt(m);④for(i=2;i=k;i++)⑤if(m%i==0)break;⑥if(i=k+1)⑦printf(%disaselectednumber\n,m);⑧else⑨printf(%disnotaselectednumber\n,m);⑩}10436759目录白盒测试概述1控制流测试方法43数据流测试方法2程序控制流图覆盖标准覆盖类型覆盖标准语句覆盖每个可执行语句至少被执行一次判定覆盖每个判定的真/假分支至少被执行一次条件覆盖每个判定的每个内部条件的真值和假值至少被执行一次判定-条件覆盖每个判定的真假分支至少被执行一次每个判定的内部条件真假值至少被执行一次条件组合每个判定的的内部条件的各种真假组合可能至少被执行一次路径覆盖所有可能执行路径至少执行一次独立路径覆盖所有独立路径至少执行一次示例:认识语句/判定/条件/路径a0andb0c=c/ac=c+1a1orc1abcdeFFTTc=b+c12354ABCDEF假如判定有3个条件、3个选择呢?图覆盖逻辑覆盖语句节点判定边谓词条件子句路径路径语句覆盖(StatementCoverage):设计若干个测试用例,程序每个可执行语句至少被执行一次。在保证完成要求的情况下,测试用例的数目越少越好。语句覆盖至少需要设计多少个测试用例?(图覆盖的节点覆盖)语句覆盖虽然测试了程序中每一个语句行。语句覆盖测试是最弱的逻辑覆盖方法。假如第一个判断的逻辑运算符“&&”错误写成“||”,程序仍按路径ace执行。假如第二个判断的c1误写成c0、甚至第二个判断遗漏了,该错误不能被发现。语句覆盖测试用例a,b,ca0andb0a1orc1执行路径12,1,6TrueTrue1-2-3-4-5判定覆盖(BranchCoverage)是指设计若干个测试用例,执行被测试程序时,程序每个判定的真值分支和假值分支至少被执行一遍。在保证完成要求的情况下,测试用例的数目越少越好。判定覆盖至少需要设计多少个测试用例?(图覆盖的边覆盖)(逻辑覆盖的谓词覆盖)测试用例a,b,ca0andb0a1orc1执行路径12,1,6TrueTrue1-2-42-2,1,-6Falsefalse1-3-5在满足判定覆盖的同时,还完成了语句覆盖,因此判定覆盖要比语句覆盖更强一些。但是,假如程序段中的第二个判定的c1误写成c0,该错误不能被发现。判定覆盖条件覆盖(ConditionCoverage)指设计若干个测试用例,执行被测试程序时,程序中每个判定的每个内部条件的真值和假值至少被执行一次。条件覆盖至少需要设计多少个测试用例?(逻辑覆盖的子句覆盖)第一个判定(a0andb0)各种条件取值的情况:a0为true,记为T1;a0为false,记为F1;b0为true,记为T2;b=0为false,记为F2;第二个判定(a1orc1)各种条件取值的情况:a1为true,记为T3;a=1为false,记为F3;c1为true,记为T4;c=1为false,记为F4;条件覆盖满足条件覆盖,但不一定满足判定覆盖。所以判定覆盖不是条件覆盖的子集。覆盖了4个内部条件的8种真假值情况。执行路径均是1-3-4,仅覆盖了4个真假分支中的2个。设计一种能同时满足判断覆盖和条件覆盖的覆盖测试方法,即:判断/条件覆盖测试。测试用例a,b,c覆盖条件a0andb0a1orc1执行路径12,-1,2T1,F2,T3,F4FalseTrue1-3-42-1,2,3F1,T2,F3,T4FalseTrue1-3-4条件覆盖判断/条件覆盖是指设计若干个测试用例,执行被测试程序时,程序中每个判定的真假分支至少被执行一遍,并且每个判定的内部条件的真假值也要被执行一遍。判定-条件覆盖至少需要设计多少个测试用例?(逻辑覆盖的谓词&子句覆盖)满足了判断覆盖和条件覆盖,但是没有对每个判断条件的内部判断式的所有真假值组合进行测试。对于C=A&&B中,如果A为假值,那么C就为假值,B的正确与否未测试到。测试用例a,b,c覆盖条件a0andb0a1orc1执行路径12,1,6T1,T2,T3,T4TrueTrue1-2-42-1,-2,-3F1,F2,F3,F4FalseFalse1-3-5判定-条件覆盖条件组合覆盖是指设计若干个测试用例,执行被测试程序时,程序中每个判定的内部条件的各种真假组合可能都至少被执行一遍。条件组合覆盖至少需要设计多少个测试用例?(逻辑覆盖的完全子句覆盖)每个判定各包含有两个条件,有8种可能的条件组合:(5)a1,c1,记为(T3,T4)(6)a1,c=1,记为(T3,F4)(7)a=1,c1,记为(F3,T4)(8)a=1,c=1,记为(F3,F4)条件组合覆盖条件组合是针对每个判定的条件组合,不同判定间的条件需不需要进行条件组合(1)a0,b0,记为(T1,T2)(2)a0,b=0,记为(T1,F2)(3)a=0,b0,记为(F1,T2)(4)a=0,b=0,记为(F1,F2)满足条件组合覆盖一定满足判定覆盖、条件覆盖和判定/条件覆盖。同时覆盖了全部条件组合的4个判定分支,但是却仅覆盖了3条路径,漏掉了路径1-2-5。测试用例a,b,c覆盖条件组合a0andb0a1orc1执行路径12,1,61=(T1,T2),5=(T3,T4)TrueTrue1-2-422,-1,-22=(T1,F2),6=(T3,F4)FalseTrue1-3-43-1,2,33=(F1,T2),7=(F3,T4)FalseTrue1-3-44-1,-2,-34=(F1,F2),8=(F3,F4)FalseFalse1-3-5条件组合覆盖思考:是不是所有的条件组合是必须的?MCDC方法MCDC(ModifiedConditionDecisionCoverage)A∨B∨C000001010100011101110111引起判定结果的条件有多个,具有不确定性每个判定条件的取值对结果起作用(逻辑覆盖的完全子句覆盖)对于N个条件,只需要N+1个组合,非2n个组合精简后条件组合测试用例a,b,c覆盖条件组合a0andb0a1orc1执行路径11,1,-11=(T1,T2),8=(F3,F4)TrueFalse1-2-522,-1,-22=(T1,F2),6=(T3,F4)FalseTrue1-3-43-1,2,33=(F1,T2),7=(F3,T4)FalseTrue1-3-4(1)a0,b0,记为T1,T2;(2)a0,b=0,记为T1,F2;(3)a=0,b0,记为F1,T2;(4)a=0,b=0,记为F1,F2;(5)a1,c1,记为T3,T4;(6)a1,c=1,记为T3,F4;(7)a=1,c1,记为F3,T4;(8)a=1,c=1,记为F3,F4;满足MCDC覆盖仍满足判定覆盖、条件覆盖和判定/条件覆盖。但却仅覆盖了2条路径,仍漏掉了二条路径1-2-4,1-3-5路径覆盖(PathCoverage)要求设计若干测试用例,执行被测试程序时,能够覆盖程序中所有的可能路径。路径覆盖(图覆盖的完全路径覆盖)至少需要设计多少个测试用例?覆盖了判定组合的全部4个路径但对引起路径上每个判定结果的条件没有考虑。测试用例a,b,c覆盖路径12,2,61-2-421,2,-31-2-53-1,2,31-3-44-1,2,-31-3-5路径覆盖假如判定(a0andb0)写成a0,影响结果吗?路径覆盖的覆盖率是最高吗?全覆盖:路径+条件组合测试用例a,b,c覆盖条件组合覆盖路径12,1,61=(T1,T2),5=(T3,T4)1-2-451,1,-31=(T1,T2),8=(F3,
本文标题:5-软件测试:白盒测试方法解析
链接地址:https://www.777doc.com/doc-2754957 .html