您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > Ch3-软件测试方法-STMT.
软件测试方法和技术第2版第3章软件测试的方法谢谦第3章软件测试的方法3.1白盒测试方法3.2黑盒测试方法3.3静态测试和动态测试3.4主动测试和被动测试3.5形式化测试方法3.6基于风险的测试3.7模糊测试方法3.8ALAC测试和随机测试方法方法论和具体方法从方法论看,更多体现了一种哲学的思想,例如辩证统一的方法,在测试中有许多对立统一体,如静态测试和动态测试、白盒测试和黑盒测试、自动化测试和手工测试等。软件测试的方法论来源于软件工程的方法论,例如有面向对象的开发方法,就有面向对象的测试方法;有敏捷方法,就有和敏捷方法对应的测试方法。静态的和动态的主持人作者记录员列席人员内审员技术专业人员用户代表不正式正式互审走读审查会议运行程序自动测试和手工测试手工模拟用户操作通过维恩图考察测试功能测试和结构测试功能测试结构测试两者之间的关系3.1白盒测试方法3.1.1语句覆盖3.1.2判定覆盖3.1.3条件覆盖3.1.4判定条件覆盖3.1.5条件组合覆盖3.1.6路径覆盖3.1.7基本路径测试法白盒测试方法逻辑覆盖:以程序的内部逻辑结构为基础,分为语句覆盖、判定覆盖、判定-条件覆盖、条件组合覆盖等基本路径测试:在程序控制流程的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。3.1.1语句覆盖语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次如果是顺序结构,就是让测试从头执行到尾如果有分支、条件和循环,需要分析程序执行路径,设计足够的测试覆盖全部语句3.1.2判定覆盖判定覆盖法的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。一个判定往往代表着程序的一个分支,所以判定覆盖也被称为分支覆盖。分支覆盖-example1PROGRAMsum(maxint,N:INT)2INTresult:=0;i:=0;3IFN04THENN:=-N;5WHILE(iN)AND(result=maxint)6DOi:=i+1;7result:=result+i;8OD;9IFresult=maxint10THENOUTPUT(result)11ELSEOUTPUT(“toolarge”)12END.分支覆盖-continuedi:=i+1;result:=result+i;(iN)and(result=maxint)result=maxintN0N:=-N;output(result);output(toolarge);exitstartyesnonoyesyesnoN0测试覆盖全部语句:maxintN10-10-1但没有覆盖所有分支;用例采取:maxintN1030-1则覆盖全部分支(N=0)result=0i=03.1.3条件覆盖条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。(iN)and(result=maxint)TrueFalseresult=maxintiNTrueFalse条件覆盖目标:保证测试到每个逻辑条件取值为true和false简单条件:(arel-opb)whererel-op={,≤,=,≠,≥,}(和NOT连用),即a≤b;NOT(a≤b)组合条件:由AND,OR连接的多个简单条件,即(ab)AND(cd)关系表达式:(E1rel-opE2)其中E1和E2是算术表达式,即((a*b+c)(a+b+c))测试发现的错误:布尔操作符–关系操作符布尔变量–算术表达式布尔括弧条件覆盖(2)域测试表达式E1rel-opE2,测试E1≧≦=≠E2如果E1和E2正确,发现rel-op的错误发现E1或E2的错误,全面分析它们的不同分支测试组合条件C,测试C为true和false分支、以及每个条件例如C=(ab)AND(cd)测试:abTRUE,FALSEcdTRUE,FALSECTRUE,FALSETrueANDTrueT.AndF.,F.AndT.,F.AndF.条件覆盖的示例(i=result=0):maxintNiNresult=maxint-11truefalse10falsetrue测试了所有条件但没有覆盖判定(decision)条件覆盖不等于判定覆盖i:=i+1;result:=result+i;(iN)and(result=maxint)result=maxintN0N:=-N;output(result);output(toolarge);exitstartyesnonoyesyesno3.1.4判定条件覆盖判定-条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次测试用例取值条件具体取值条件判定条件通过路径输入:a=2,b=1,c=6输出:a=2,b=1,c=5T1,T2,T3,T4a0,b0,a1,c1M=.T.N=.T.P1(1-2-4)输入:a=-1,b=-2,c=-3输出:a=-1,b=-2,c=-5F1,F2,F3,F4a=0,b=0,a=1,c=1M=.F.N=.F.P4(1-3-5)3.1.5条件组合测试条件组合覆盖的基本思想是设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。它与条件覆盖的差别是它不是简单地要求每个条件都出现“真”与“假”两种结果,而是要求让这些结果的所有可能组合都至少出现一次示例(1)组合编号覆盖条件取值判定条件取值判定-条件组合1T1,T2M=.T.a0,b0,M取真2T1,F2M=.F.a0,b=0,M取假3F1,T2M=.F.a=0,b0,M取假4F1,F2M=.F.a=0,b=0,M取假5T3,T4N=.T.a1,c1,N取真6T3,F4N=.T.a1,c=1,N取真7F3,T4N=.T.a=1,c1,N取真8F3,F4N=.F.a=1,c=1,N取假示例(2)测试用例覆盖条件覆盖路径覆盖组合输入:a=2,b=1,c=6输出:a=2,b=1,c=5T1,T2,T3,T4P1(1-2-4)1,5输入:a=2,b=-1,c=-2输出:a=2,b=-1,c=-2T1,F2,T3,F4P3(1-3-4)2,6输入:a=-1,b=2,c=3输出:a=-1,b=2,c=6F1,T2,F3,T4P3(1-3-4)3,7输入:a=-1,b=-2,c=-3输出:a=-1,b=-2,c=-5F1,F2,F3,F4P4(1-3-5)4,8覆盖了所有组合,但覆盖路径有限,1-2-5没被覆盖3.1.6路径测试顾名思义,路径覆盖就是设计所有的测试用例,来覆盖程序中的所有可能的执行路径。测试用例覆盖路径覆盖条件覆盖组合输入:a=2,b=1,c=6输出:a=2,b=1,c=5P1(1-2-4)T1,T2,T3,T41,5输入:a=1,b=1,c=-3输出:a=1,b=1,c=-2P2(1-2-5)T1,T2,F3,F41,8输入:a=2,b=-1,c=-2输出:a=2,b=-1,c=-2P3(1-3-4)T1,F2,T3,F42,6输入:a=-1,b=2,c=3输出:a=-1,b=2,c=6P3(1-3-4)F1,T2,F3,T43,7输入:a=-1,b=-2,c=-3输出:a=-1,b=-2,c=-5P4(1-3-5)F1,F2,F3,F44,83.1.7基本路径测试1.依据代码绘制流程图2.确定流程图的圈复杂度(cyclomaticcomplexity)3.确定线性独立路径的基本集合(basisset)4.设计测试用例覆盖每条基本路径示例–源代码Procedure:processrecords1.DoWhilerecordsremain2.Readrecord;3.Ifrecordfield1=0Then4.storeinbuffer;5.incrementcounter;6.ElseIfrecordfield2=0Then7.resetcounter;8.Elsestoreinfile;9.EndIf10.EndIf11.EndDoEnd示例–流程图1910112457836V(G)=4基本路径测试:流程图简化12,387694,51011流程图的圈复杂度V(G)=区域数量(由节点、连线包围的区域,包括图形外部区域)V(G)=连线数量-节点数量+2V(G)=判定节点数量+1圈复杂度(Cyclomaticcomplexity):代码逻辑复杂度的度量,提供了被测代码的路径数量。复杂度越高,出错的概率越大流程图复杂度-例子V(G)=412,378694,51011Region1Region2Region3Region4确定线性独立的路径集合•独立路径:至少引入一系列新的处理语句或条件的任何路径•基本集:由独立路径构成的集合•由基本集导出的测试用例,保证每行代码语句至少被执行一次•基本集合不一定唯一Path1:1-2-3-6-7-9-10-1-11示例:基本路径测试用例Path2:1-2-3-6-8-9-10-1-11Path3:1-2-3-4-5-10-1-11Path4:1-111910112458736测试用例覆盖集合中每条路径基本路径测试并不是测试所有路径的组合,仅仅保证每条基本路径被执行一次•最好每个单元都进行基本路径测试,对关键组件则是必要的完整测试用例及使用•前面所谓的“测试用例”,仅仅是设计测试用例的输入部分,提供了设计思路•完整的测试用例应包含输入对应的“结果”,并有具体的用例执行方法(自动或手动)•白盒测试方法多用于单元测试,一般没有手工输入接口,应编程自动执行用例并评判结果•具体使用例子:求最大公约数的算法例:求最大公约数staticintcommonDivisor(inta,intb){if(a=0||b=0){b=-1;}elsewhile(a!=b){if(ab)a-=b;elseb-=a;}returnb;}例:求最大公约数例:求最大公约数例:求最大公约数•基本路径覆盖的“测试用例”思路•(-1,0),(3,3),(1,2),(2,1)•实际的测试用例:加上预期结果•用例执行:手工和自动执行•进一步探讨:•逻辑覆盖方法在本例中的应用:要考虑语句执行•发现判定表达式中的错误:条件组合+边界值基本路径不同白盒测试方法的用例包含关系语句判定条件判定-条件条件组合路径目标:在循环内部及边界上执行测试循环测试-11.简单循环(迭代次数n)•完全跳过循环•只经过循环一次•经过循环两次•经过循环m(mn)次•分别经过循环n-1,n,n+1次循环测试-22.嵌套(Nested)循环•在最里面的循环完成前面所述的简单循环测试,同时设定外部循环的最小迭代次数•逐步向外循环进行•直到所有循环被测试循环测试-34.其它非结构循环重新设计!3.串行连接的循环独立循环可以分别看作简单循环测试依赖性循环可以看作嵌套循环3.2黑盒测试方法3.2.1等价类划分法3.2.2边界值分析法3.2.3判定表方法3.2.4因果图法3.2.5正交试验法3.2.6功能图法3.2.7错误推测法3.2.1等价类划分方法将程序可能的输入数据分成若干个子集,从每个子集选取一个代表性的数据作为测试用例,等价类是某个输入域的子集,在该子集中每个输入数据的作用是等效的分为有效等价类和无效等价类。有效等价类是有意义的、合理的输入数据,可检查程序是否实现了规格说明中所规定的功能和性能。无效等价类与有效等价类的意义相反在分析需求规格说明的基础上划分等价类,列出等价类表设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验。经过正反的测试才能确保软件具有更高的可靠性。allinputsi1i4i
本文标题:Ch3-软件测试方法-STMT.
链接地址:https://www.777doc.com/doc-2904903 .html