白盒测试方法.ppt

上传人:石*** 文档编号:49408402 上传时间:2022-10-08 格式:PPT 页数:99 大小:7.35MB
返回 下载 相关 举报
白盒测试方法.ppt_第1页
第1页 / 共99页
白盒测试方法.ppt_第2页
第2页 / 共99页
点击查看更多>>
资源描述

《白盒测试方法.ppt》由会员分享,可在线阅读,更多相关《白盒测试方法.ppt(99页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、白盒测试方法1现在学习的是第1页,共99页第3章 白盒测试方法3.1白盒测试分类白盒测试分类3.2控制结构测试控制结构测试1.条件测试条件测试2.数据流测试数据流测试3.循环测试循环测试3.3逻辑驱动覆盖逻辑驱动覆盖3.4程序插装程序插装3.5基本路径测试基本路径测试3.6数据流测试数据流测试3.7案例研究案例研究2现在学习的是第2页,共99页良好测试用例的特征良好测试用例的特征n可以最大程度地找出软件隐藏的缺陷n可以最高效率的找出软件缺陷n可以最大程度地满足测试覆盖要求n既不过分复杂、也不能过分简单n使软件缺陷的表现可以清楚的判定n测试用例包含期望的正确的结果n待查的输出结果或文件必须尽量简

2、单明了n不包含重复的测试用例n测试用例内容清晰、格式一致、分类组织3现在学习的是第3页,共99页3.1白盒测试白盒测试白盒测试:是一种基于源程序或代码结构的逻辑,生成测白盒测试:是一种基于源程序或代码结构的逻辑,生成测试用例以尽可能多地发现并修改源程序中的错误。白盒测试用例以尽可能多地发现并修改源程序中的错误。白盒测试分为静态和动态两种类型:试分为静态和动态两种类型:1.静态分析。静态方法是指按一定步骤直接检查源代码或代码的测静态分析。静态方法是指按一定步骤直接检查源代码或代码的测试方法,包括:代码审查、桌面检查、代码走查等试方法,包括:代码审查、桌面检查、代码走查等2.动态测试。动态测试是指

3、按一定步骤生成测试用例并驱动被测动态测试。动态测试是指按一定步骤生成测试用例并驱动被测程序运行来发现错误,包括程序运行来发现错误,包括:基本路径测试、边界值测试、基本路径测试、边界值测试、逻辑驱动覆盖、循环测试、数据流测试、程序插装等逻辑驱动覆盖、循环测试、数据流测试、程序插装等4现在学习的是第4页,共99页白盒测试白盒测试n白盒测试,有时称为玻璃盒测试,是一种基于源程序或代白盒测试,有时称为玻璃盒测试,是一种基于源程序或代码的测试方法。码的测试方法。n白盒测试动态方法是使用程序设计的控制结构导出测试白盒测试动态方法是使用程序设计的控制结构导出测试用例。使用这类方法,软件工程师能够产生测试用例

4、:用例。使用这类方法,软件工程师能够产生测试用例:(1)保证一个模块中的所有独立路径至少被使用一次;保证一个模块中的所有独立路径至少被使用一次;(2)对所有逻辑值均需测试对所有逻辑值均需测试true和和false;(3)在上下边界及可操作范围内运行所有循环;在上下边界及可操作范围内运行所有循环;(4)检查内部数据结构以确保其有效性。检查内部数据结构以确保其有效性。5现在学习的是第5页,共99页为什么需要白盒测试为什么需要白盒测试n“我们应该更关注保证程序需求的实现,为什么要在逻辑细节的测试上花时间和精力呢?”n逻辑错误和不正确假设与一条程序路径被执行的可能性成反比。人们往往会忽略非主流的偶然现

5、象!n我们经常相信某逻辑路径不可能被执行,而事实上,它可能在正常的情况下被执行。程序的逻辑流有时是违反直觉的!只有路径测试才能发现这些问题!n笔误是随机的。当一个程序被翻译为程序设计语言源代码时,有可能产生某些笔误,很多错误将由语法检查机制发现,但是,其他的会在测试开始时才会被发现。n“错误潜伏在角落里,聚集在边界上”,而白盒测试更可能发现它!6现在学习的是第6页,共99页白盒测试用例设计方法白盒测试用例设计方法n白盒测试用例的设计方法白盒测试用例的设计方法n逻辑覆盖:以程序的内部逻辑结构为基础,分为语句覆盖、判定覆盖、判定-条件覆盖、条件组合覆盖等n基本路径测试:在程序控制流程的基础上,分析

6、控制构造的圈复杂性,导出基本可执行路径集合,从而设计测试用例。n白盒测试用例注意事项白盒测试用例注意事项n由于测试路径可能非常多,基于时间和资源问题,宜选出足够多合理的路径测试n由于深入到程序编码,通常开发人员协助测试人员书写白盒测试用例7现在学习的是第7页,共99页3.1白盒测试分类白盒测试分类n控制结构测试控制结构测试n条件测试条件测试n数据流测试数据流测试n循环测试循环测试n逻辑驱动覆盖测试逻辑驱动覆盖测试n语句覆盖语句覆盖n判定(分支)覆盖判定(分支)覆盖n条件覆盖条件覆盖n判定判定-条件覆盖条件覆盖n条件组合覆盖条件组合覆盖n基本路径测试基本路径测试n程序插装程序插装8现在学习的是第

7、8页,共99页条件测试条件测试目标目标:要遍历部件中每个简单要遍历部件中每个简单逻辑条件逻辑条件的的true和和false的值。的值。n逻辑条件逻辑条件简单条件简单条件:(arel-opb)这里rel-op=(可带有NOT的否),例如ab;NOT(ab);或一个布尔变量复合条件复合条件:用AND,OR连接的两个或多个简单条件,例如.,(ab)AND(c(a+b+c)n可测试的错误有(不正确/遗漏/额外):n布尔操作符n布尔变量n布尔括弧n关系操作符n算术操作符9现在学习的是第9页,共99页条件测试条件测试域测试域测试n对于表达式E1rel-opE2,进行关于E1 =E2的测试n能发现关系操作符

8、错误,如果E1和E2正确n为发现E1/E2中的错误,计算E1小于小于或大于大于E2的测试用例应使两个值之间的差别尽可能小n对于有n个变量的布尔表达式,需要2n个可能测试用例(n0)分支测试分支测试(可能是最简单的条件测试策略)对于复合条件C,测试C的true和false分支以及C中每个简单条件例如,对于C=(ab)AND(cb TRUE,FALSEcd TRUE,FALSEC TRUE,FALSETrue AND TrueT.And F.,F.And T.,F.And F.10现在学习的是第10页,共99页条件测试条件测试如果(i=result=0):maxint N iNresult=max

9、int-11truefalse10falsetrue各种条件都覆盖到了但不能保证判定覆盖 注意:条件覆盖要关注到判定覆盖:判定/条件覆盖i:=i+1;result:=result+i;(iN)and(result=maxint)result=maxintN0N:=-N;output(result);output(too large);exitstartyesnonoyesyesno11现在学习的是第11页,共99页分支测试分支测试n分支(判定)覆盖分支(判定)覆盖n执行足够测试用例,以覆盖软件中所有路径执行足够测试用例,以覆盖软件中所有路径:n-“True”和“False”都要有n-通过每条分

10、支。n例如例如nIFbTHENs1ELSEs2nCASExOF1:.2:.3:.12现在学习的是第12页,共99页分支测试分支测试-examplen1PROGRAMsom(maxint,N:INT)n2INTresult:=0;i:=0;n3IFN0n4THENN:=-N;n5WHILE(iN)AND(result=maxint)n6DOi:=i+1;n7result:=result+i;n8OD;n9IFresult=maxintn10THENOUTPUT(result)n11ELSEOUTPUT(“toolarge”)n12END.13现在学习的是第13页,共99页分支测试分支测试i:=i

11、+1;result:=result+i;(iN)and(result=maxint)result=maxintN0N:=-N;output(result);output(too large);exitstartyesnonoyesyesnoN=0)result=0 i=014现在学习的是第14页,共99页3.2.2数据流测试数据流测试n数据流分析通过对变量构造定义数据流分析通过对变量构造定义-使用对来实现。使用对来实现。n数据流测试的基本思想是:一个变量的定义,数据流测试的基本思想是:一个变量的定义,通过辗转的使用和定义,可以影响到另一个变通过辗转的使用和定义,可以影响到另一个变量的值,或影响

12、到路径的选择等,因此,可以量的值,或影响到路径的选择等,因此,可以选择一定的测试数据,使程序按照一定变量的选择一定的测试数据,使程序按照一定变量的定义定义-使用路径执行,并检查执行结果是否与预使用路径执行,并检查执行结果是否与预期的相符,从而发现代码的错误。期的相符,从而发现代码的错误。n数据流测试方法按照程序中的变量定义和使用数据流测试方法按照程序中的变量定义和使用的位置来选择程序的测试路径。的位置来选择程序的测试路径。15现在学习的是第15页,共99页数据流测试数据流测试n为了说明数据流测试方法,假设程序的每条语句都赋予了独特的语句号,而且每个函数都不改变其参数和全局变量。对于语句号为S的

13、语句,Def(S)=X语句S包含X的定义Use(S)=X语句S包含X的使用n如果存在从S到S的路径,并且该路径不含X的其他定义,则称变量X在语句S处的定义在语句S仍有效。n变量X的“du-关联”形式如【x,S,S】其中S和S是语句号,x在Def(S)和use(S)中,而且语句S定义的X在语句S有效。n右图中变量x的du-关联为【x,1,4】,其相应的du-路径为(1,2,4)和(1,3,4)n如果语句S是if或循环语句,它的Def(S)集为空,而Use(S)集取决于S的条件X=y+zW=x1234Def(1)=xUse(1)=y,zDef(4)=wUse(4)=x16现在学习的是第16页,共9

14、9页数据流测试数据流测试n一种简单的数据流测试策略是要求覆盖每个du链至少一次。我们将这种策略称为du测试策略n已经证明du测试并不能保证覆盖程序的所有分支,但是,du测试不覆盖某个分支仅仅在于如下之类的情况:nif-then-else中的then没有定义变量,而且不存在else部分。n这种情况下,if语句的else分支并不需要由du测试覆盖17现在学习的是第17页,共99页数据流测试数据流测试n数据流测试策略可用于为包含嵌套if和循环语句的程序选择测试路径,为此,考虑使用du测试为如下的PDL选择测试路径:procx1.B1;/在B1末尾处定义X2.dowhileC13.ifC24.then

15、5.ifC46.thenB4;/在B4开始处使用X,在B4末尾处定义X7.elseB5;/在B5开始处使用X,在B5末尾处定义X8.endif;9.else10.ifC311.thenB2;/在B2开始处使用X,在B2末尾处定义X12.elseB3;/在B3开始处使用X,在B3末尾处定义X13.endif;14.endif;15.enddo;16.B6;endproc;18现在学习的是第18页,共99页数据流测试数据流测试n为了用du测试选择控制流图的测试路径,需要知道PDL条件或块中的变量定义和使用。n假设变量X定义在块B1,B2,B3,B4和B5的最后一条语句之中,并在块B2,B3,B4,

16、B5和B6的第一条语句中使用。du测试策略要求执行从每个B(1i5)到Bj(1j6)的最短路径(这样的测试也覆盖了条件C1,C2,C3和C4中的变量使用)。n尽管有25条X的du链,只需5条路径覆盖这些du链。原因在于可用5条从Bi(1i5)到B6的路径覆盖X的链,而这5条链包含循环的迭代就可以覆盖其他的du链。19现在学习的是第19页,共99页数据流测试数据流测试du-路径1:1-2-16(c1不满足)du-路径2:1-2-3-4-5-6-8-14-15-16(c2满足,c4满足)du-路径3:1-2-3-4-5-7-8-14-15-16(c2满足,c4不满足)du-路径4:1-2-3-9-

17、10-11-13-14-15-16(c2不满足,c3满足)du-路径5:1-2-3-9-10-12-13-14-15-16(c2不满足,c3不满足)n由于变量的定义和使用,程序中的语句都彼此相关,所以数据流测试方法能够有效地发现错误,但是,数据流测试的覆盖率测度和路径选择比条件测试更为困难20现在学习的是第20页,共99页3.2.3循环测试循环测试n循环测试是一种特殊的路径测试,一般可把循环分为以下4种:n简单循环n嵌套循环n串接循环n不规则循环21现在学习的是第21页,共99页简单循环简单循环n下面的测试集应用于简单循环,其中下面的测试集应用于简单循环,其中n是可允是可允许通过循环的最大值:

18、许通过循环的最大值:n跳过整个循环;n只通过循环一次;n通过循环两次;n通过循环m次,其中mn;n通过循环n-1次,n次,n+1次。22现在学习的是第22页,共99页简单循环简单循环n单循环应重点测试以下方面:n循环变量的初值是否正确n循环变量的最大值是否正确n循环变量的增量是否正确n何时退出循环23现在学习的是第23页,共99页例子例子#includeVoidmain()()inti=0;intsum=0;while(i1)and(b=0)athenx:=x/ac;if(a=2)or(x1)bthenx:=x+1e;endd;30现在学习的是第30页,共99页入口入口(a1)and(b=0)

19、(a=2)or(x1)x=x/ax=x+1返回返回sabdcetftf子程序流程图子程序流程图31现在学习的是第31页,共99页被测程序段路径被测程序段路径If(a1)and(b=0)aIf(a=2)or(x1)bx=x/a;cx=x+1;e返回返回dn图中存在中存在4条不同路径:条不同路径:nL1:sacbed;即条件即条件a为t,且条件,且条件b为tnL2:sabd;即条件即条件a为f,且条件,且条件b为fnL3:sabed;即条件即条件a为f,且条件,且条件b为tnL4:sacbd;即条件即条件a为t,且条件,且条件b为fn以下以下讨论该例子的各种覆盖和例子的各种覆盖和测试用例用例设计!

20、32现在学习的是第32页,共99页语句覆盖语句覆盖n语句覆盖报告每个可执行语句是否被执行,即每行源代码是否都被执行了并且被测试了。n语句覆盖率也被称为行为覆盖率、段覆盖率或基本块覆盖率。n注意:在基本块覆盖率的计算里,被测量的代码单元是不含分支的语句序列。n语句覆盖率(至少被执行一次的语句数量)/(可执行的语句总数)n语句覆盖是最弱逻辑覆盖准则,效果有限,必须与其他方法交互使用.n其实在C语言里判定语句个数很简单,只需数分号个数就可以了!33现在学习的是第33页,共99页语句覆盖语句覆盖n语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。n在图例中,正好所有的可执行

21、语句都在路径L1上,所以选择路径 L1设计测试用例,就可以覆盖所有的可执行语句。n测试用例的设计格式如下:n【输入的(a,b,x),输出的(a,b,x)】n为图例设计满足语句覆盖的测试用例是:测试数据测试数据预期结果预期结果X=4,a=2,b=0X=334现在学习的是第34页,共99页语句覆盖的缺陷语句覆盖的缺陷n从程序中每个语句都得到执行这一点来看,语句覆盖的方法似乎能够比较全面地检验每一个语句?!n假如这一程序段中两个判定的逻辑运算有问题,例如,第一个判定的运算符“AND”错成运算符“OR”,或把第二个判定中的条件X1误写成X1b=0a=2x1T1T2T3T4取真表为取假表为1234对于第

22、二个判定:条件测试数据测试数据预期结果预期结果执行路径执行路径覆盖条件覆盖条件x=4,a=2,b=0X=3sacbeda1,b=0,a=2,x1x=1,a=1,b=1X=1sabda=1,b!=0,a!=2,x1,b=0a=2,x1x=1,a=1,b=1X=1sabdffa=1,b!=0a!=2,x1)and(b=0)中,若(a1)的测试为真,则还要测试(b=0),才能决定该表达式的值。若(a1)的测试为假,可不再测试(b=0)的值了。这样,(b=0)就没有测试到!n为彻底地检查所有条件的取值,应将上图的多重判定分解为由多个基本判定组成的流程图,这样可有效地检查所有的条件是否正确了43现在学习

23、的是第43页,共99页判定条件覆盖判定条件覆盖44现在学习的是第44页,共99页条件组合覆盖条件组合覆盖条件组合覆盖(多条件覆盖)就是设计足够的测试用例,运行被测程序,使得每个判定的所有可能的条件取值组合至少执行一次。对于上面例子,共有八种可能的条件组合,它们是:a1,b0 作 a1,b0 作 a1,b0 作 a1,b0 作 a2,x1 作 a2,x1 作 a2,x1 作 a2,x1 作45现在学习的是第45页,共99页条件组合覆盖的测试用例条件组合覆盖的测试用例测试数据测试数据预期结果预期结果执行路径执行路径判定判定a判定判定c覆盖的条件覆盖的条件x=4,a=2,b=0X=3sacbedtt

24、a1,b=0,a=2,x1x=1,a=2,b=1X=2sabedfta1,b!=0,a=2,x=1x=2,a=1,b=0X=3sabedftA1x=1,a=1,b=1X=1sabdffA=1,b!=0,a!=2,x=146现在学习的是第46页,共99页条件组合覆盖条件组合覆盖n对于C,C+和Java等具有短路操作符(shortcircuitoperators)的语言,多条件覆盖的益处是它需要一个彻底的测试。n对于VisualBasic和Pascal等不具有短路操作符的语言,多条件覆盖实际上是对于逻辑表达式的路径覆盖,和路径覆盖具有相同的优缺点。考虑下列的VisualBasic代码:IfaAnd

25、bThen.多条件覆盖需要四个测试用例,a和b分别取值true和false.和路径覆盖相同,每增加一个逻辑操作符需要加倍测试用例的数量。47现在学习的是第47页,共99页问题问题前面讨论的多种覆盖准则,有的虽提到了所走路径问题,但尚未涉及到路径的覆盖,而路径能否全面覆盖在软件测试中是个重要问题,因为程序要取得正确的结果,就必须消除遇到的各种障碍,沿着特定的路径顺利执行。如果程序中的每一条路径都得到考验,才能说程序受到了全面检验。48现在学习的是第48页,共99页路径覆盖路径覆盖n路径覆盖的含义是:选取足够多的测试数据,使程序的每条可能路径都至少执行一次!一条路径是从函数的入口到出口分支的俄一个

26、唯一序列!n从示例程序的流程图和流图中都可以看出,本例中有4条可能的路径L1,L2,L3,L4。n路径覆盖率(至少被执行到一次的路径数)/(总的路径数)n路径覆盖的一个好处是进行非常彻底的测试。但有两个缺点:一、路径是以分支数增加而指数增加,例如,一个函数包含10个if语句,就有210=1024个路径要测试。如果加入一个IF语句,路径数就达到2048。49现在学习的是第49页,共99页路径覆盖路径覆盖n二、许多路径不可能与执行的数据无关。例如if(success)statement1;statement2;if(success)statement3;路径覆盖认为以上语句包含四个路径,实际上只有

27、两个是可行的:success=false和success=true50现在学习的是第50页,共99页路径覆盖测试用例路径覆盖测试用例测试数据测试数据预期结果预期结果执行路径执行路径判定判定a判定判定cx=4,a=2,b=0X=3L1:sacbedttx=3,a=3,b=0X=1L4:sacbdtfx=2,a=1,b=0X=3L3:sabedftx=1,a=1,b=1X=1L2:sabdff51现在学习的是第51页,共99页结构覆盖测试小结结构覆盖测试小结n上面6种测试方法,每一种方法都有优点和局限性。n从实际应用来看,语句覆盖、判定覆盖和路径覆盖应用最多,往往对测试人员设计的测试用例有如下要求

28、:n语句覆盖率:100n判定覆盖率:85以上n路径覆盖率:80以上n至于其他覆盖则用得不多,只需了解一下就可!52现在学习的是第52页,共99页数据流覆盖和循环覆盖数据流覆盖和循环覆盖n数据流覆盖(DataFlowCoverage)n这是路径覆盖的一个变异。这种变异仅考虑从变量定义到其后的引用之间的子路径。数据流覆盖中的变量“定义”是指变量赋值而不是类型的定义。n循环覆盖(LoopCoverage)n这个度量报告你是否执行了每个循环体零次、只有一次还是多余一次(连续地)。对于do-while循环,循环覆盖报告是否执行了每个循环体只有一次还是一次以上(连续地)。这个度量的有价值的方面是确定是否对

29、于while循环和for循环执行了多于一次,这个信息在其它的覆盖率报告中是没有的。53现在学习的是第53页,共99页上机实习上机实习1(嵌套循环例子)(嵌套循环例子)#include该程序实现的功能如下:该程序实现的功能如下:n定义一个定义一个2维整型数组维整型数组a555行行5列列,以及两个循环变量,以及两个循环变量i和和j,然后做了一个嵌套循环,然后做了一个嵌套循环,对数组总的每个元素赋值(将元素所在的行和列加到一起),并输出。对数组总的每个元素赋值(将元素所在的行和列加到一起),并输出。n对该嵌套循环进行重点测试,以表格形式给出其测试项和预期结果。对该嵌套循环进行重点测试,以表格形式给出

30、其测试项和预期结果。nvoidmain()inti=0;intj=0;inta55;for(i=0;i5;i+)for(j=0;j=98&Total=95&Total=93&Total=89&Total=86&Total=83&Total=80&Total=75&Total=50&Total75)Perf=CanImprove;Remarks=Passed;elseif(Total=0)Perf=Poor;Remarks=Failed”;nelsenPerf=notdefined;Remarks=notdefined;System.out.println(Pleaseenterthescore

31、scorrectly!nScorescannotbegreaterthan100orlessthan0!n);59现在学习的是第59页,共99页上机实习上机实习 2n用以下总分对变量用以下总分对变量Total进行测试:进行测试:n20,60,53,88,87,92,76n按所给的测试条件计算总判定覆盖率。按所给的测试条件计算总判定覆盖率。n说出计算后的判定覆盖率应记录在哪里说出计算后的判定覆盖率应记录在哪里?n给出相应的测试报告!给出相应的测试报告!60现在学习的是第60页,共99页3.4程序插装程序插装n程序插装(程序插装(ProgramInstrumentation)是指在程序中设置)是指

32、在程序中设置断点或打印语句,在执行过程中了解程序的一些动态特性。断点或打印语句,在执行过程中了解程序的一些动态特性。n这就相当于在运行程序以后,一方面检验测试结果,另一方面借这就相当于在运行程序以后,一方面检验测试结果,另一方面借助插入语句给出的信息了解程序的动态执行特性。助插入语句给出的信息了解程序的动态执行特性。n这样,可把程序执行过程中发生的一些重要历史事件记这样,可把程序执行过程中发生的一些重要历史事件记录下来。录下来。61现在学习的是第61页,共99页上机实习上机实习3procedureexample(a,b:real;varx:real),;beginif(a1)and(b=0)t

33、henx:=x/a;if(a=2)or(x1)thenx:=x+1;end;n将上面过程改写为将上面过程改写为C+的的main函数,并通过程序插装在每函数,并通过程序插装在每个关键位置插入打印语句,进行编译和运行!个关键位置插入打印语句,进行编译和运行!n给出覆盖给出覆盖L1,L2,L3,L4四条路径的测试数据,并通过运行显示四条路径的测试数据,并通过运行显示这些路径,最后写出相应的测试报告!这些路径,最后写出相应的测试报告!62现在学习的是第62页,共99页上机实习上机实习3#include供参考的供参考的C+程序,在此基础上加入程序,在此基础上加入打印语句!打印语句!voidmain()f

34、loata,b,x;cina;cinb;cinx;if(a1)&(b=0)x=x/a;if(a=2)|(x1)x=x+1;Coutx;63现在学习的是第63页,共99页测试路径测试路径L1的结果的结果例如,输入例如,输入a=2,b=0,x=4,打印出路径打印出路径L1(sacbed)64现在学习的是第64页,共99页上机实习上机实习4n阅读下面程序,试用语句覆盖、判定覆盖、条件覆盖及路径覆盖分析技术对其进行测试,请列出所用的测试用例,并分析其覆盖率!nREADX,Y;nIFY0THENnPOW:=-Y;nELSEnPOW:=Y;nZ=1;nWHILE(POW!=0)nZ:=Z*X;POW:=P

35、OW-1;nIFY0THENnZ:=1/Z;nANSWER:=Z+1;nPRINTANSWER;65现在学习的是第65页,共99页3.5基本路径测试基本路径测试n在实际问题中,一个不太复杂的程序,特别是包含循环的程序,其路径可能非常大。因此,测试常常难以做到覆盖程序中的所有路径。n基本路径(也称独立路径)测试是Tom MaCabe首先提出的一种白盒测试技术,希望把测试的程序路径压缩到一定范围。n它是在程序控制流图的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,设计测试用例的方法。设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次。n基本路径测试是它允许测试用例设计

36、者导出一个过程设计的逻辑复杂性测度,并使用该测度作为指南来定义执行路径的基本集。66现在学习的是第66页,共99页分析程序的控制流图分析程序的控制流图n在使用基本路径方法设计时要用到流图或程序图n流图由结点和边组成,分别用圆和箭头表示。结点代表一个或多个语句。符号为控制流图的一个结点,表示一个或多个无分支的PDL语句或源程序语句。箭头为边,表示控制流的方向。n设计图中一个连续的处理框序列和一个判定框映射成流图中的一个结点。设计图中的箭头映射成流图中的一条边。n注意:设计中判定中不可包含复合条件设计中判定中不可包含复合条件!67现在学习的是第67页,共99页5种不同的控制流图种不同的控制流图68

37、现在学习的是第68页,共99页程序的控制流图程序的控制流图n在选择或多分支结构中,分支的汇聚处应有一个汇聚结点(空结点)。n边和结点圈定的区域叫做区域,当对区域计数时,图形外的结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域区域也应记为一个区域。n如下图所示,左边的结构图可改写为右边的控制流图n图中共有4个区域,分别是三个闭合区域(R1,R2,R3)和一个开放区域(R4)69现在学习的是第69页,共99页程序的控制流图程序的控制流图70现在学习的是第70页,共99页程序的控制流图程序的控制流图n如果判断中的条件表达式是由一个或多个逻辑运算符(OR,AND,.)连接的复合条件

38、表达式,则需要改为一系列只有单条件的嵌套的判断。例如下图中,左边的程序语句可以改写成右边的控制流图71现在学习的是第71页,共99页基本路径测试基本路径测试n基本路径(独立路径):是指在程序入口与出口之间的任一路径,其间不存在两条长度大于2的相同的子路径。1.阅读代码,画出相应控制流图2.计算控制流图的圈复杂度(复杂度(cyclomaticcomplexity)3.确定线性独立路径的基本集基本集。4.导出执行基本集中每条路径的测试用例测试用例。程序圈复杂度又称为程序圈复杂度又称为McCabe复杂度复杂度72现在学习的是第72页,共99页控制流图圈复杂度确定控制流图圈复杂度确定nV(G)=流图中

39、区域个数(由结点和边围起来的区域图中外部区域也是一个区域)nV(G)=边的个数-结点个数+2nV(G)=流图中(简单)判定结点个数+1圈复杂度(Cyclomaticcomplexity)(环形复杂性):是一种为程序逻辑复杂性提供定定量测度的软件度量。当该度量用于基本路径测试方法,计算所得的值给出了程序基本集的独立路径数量,这是为确保所有语句至少执行一次而必须进行测试数量的上界。可用以下3种方法之一来计算复杂性:73现在学习的是第73页,共99页例子例子Procedure:processrecords1.DoWhilerecordsremain2.Readrecord;3.Ifrecordfie

40、ld1=0Then4.storeinbuffer;5.incrementcounter;6.ElseIfrecordfield2=0Then7.resetcounter;8.Elsestoreinfile;9.EndIf10.EndIf11.EndDoEnd191011245783674现在学习的是第74页,共99页第一步:画出控制流图12,387694,51011注意:1)分支的汇聚处应有一个汇聚结点2)边和结点圈定的区域称为区域,当对区域计数时,图形外的区域应记为一个区域75现在学习的是第75页,共99页第二步第二步:计算圈复杂度计算圈复杂度V(G)=412,378694,51011区域

41、1区域2区域区域 3区域 476现在学习的是第76页,共99页路径路径1:1-2-3-6-7-9-10-1-11基本路径测试例子路径路径2:1-2-3-6-8-9-10-1-11路径路径3:1-2-3-4-5-10-1-11路径路径4:1-11191011245873677现在学习的是第77页,共99页第三步:导出测试用例V(G)=4,有四条独立路径路径1:1-2-3-6-7-9-10-1-11路径2:1-2-3-6-8-9-10-1-11路径3:1-2-3-4-5-10-1-11路径4:1-11但路径但路径1-2-3-4-5-10-1-2-3-6-8-9-10-1-11不是独不是独立路径,因

42、为子序列立路径,因为子序列1-2-3出现两次,不满足独出现两次,不满足独立路径的定义!立路径的定义!78现在学习的是第78页,共99页第四步:准备测试用例路径路径输入数据输入数据预期结果预期结果路径1:1-2-3-6-7-9-10-1-11Field1=1,Field2=0Count=0,File为空路径2:1-2-3-6-8-9-10-1-11Field1=1,Field2=1File非空,buffer为空路径3:1-2-3-4-5-10-1-11Field1=0,Count=1,File为空,buffer非空路径4:1-11recods为空Count=0,recods为空79现在学习的是第

43、79页,共99页案例研究案例研究n要求:最多输入n个值(以-999为输入结束标志),计算落在给定范围内的那些值(称为有效输入值)的平均值、输入值个数以及有效值的个数。n该程序为主程序调用的一个求平均值的函数average(),sum为输入值个数,total为有效值的个数,后二者都为全局变量。n以下为参考程序和结点80现在学习的是第80页,共99页案例研究案例研究81现在学习的是第81页,共99页画出程序流图画出程序流图82现在学习的是第82页,共99页设计测试用例的步骤设计测试用例的步骤 确定Cyclomatic圈复杂度V(G);V(G)=6(个区域)V(G)=17(条边)13(个节点)+2=

44、6 V(G)=5(判定结点)+1=6 确定独立路径集合(6条)路径1:1-2-10-11-13 (aloq)路径2:1-2-10-12-13 (alnp)路径3:1-2-3-10-11-13(abmoq)路径4:1-2-3-4-5-8-9-2-10-12-13 (abcdfjk)路径5:1-2-3-4-5-6-8-9-2-10-12-13(abcdegjk)路径6:1-2-3-4-5-6-7-8-9-2-10-11-13(abcdehijk)83现在学习的是第83页,共99页设计测试用例的步骤设计测试用例的步骤在本例中,判定结点是结点2、3、5、6和结点10。另外要注意路径4、5、6中结点2后

45、面的省略号表示随后的部分已无关紧要。设计测试用例,强制执行独立路径集中的每一条路径。测试人员可选择数据以在测试每条路径时适当设置判定结点的条件。84现在学习的是第84页,共99页对应路径的测试用例对应路径的测试用例n路径1的测试用例:n Value(k)=有效输入,其中,ki;Value(i)=-999,其中2i100n 期望结果:基于k的正确平均值的总数n 注意:路径1必须作为路径4、5、6测试的一部分,它无法独立测试。n路径2的测试用例:n Value(1)=-999;期望结果:average=-999,其它保持初值n路径3的测试用例:n试图处理101个或更多的值,前100个值应该有效。期

46、望结果与测试用例1相同85现在学习的是第85页,共99页对应路径的测试用例对应路径的测试用例n路径4的测试用例:n Value(i)=有效输入,其中,i100;Value(k)最小值,其中kin 期望结果:根据有效输入值的个数和总数正确算出平均值n路径5的测试用例:nValue(i)=有效输入,其中,i100;Value(k)最大值,其中kin 期望结果:根据有效输入值的个数和总数正确算出平均值 n路径6的测试用例:nValue(i)=有效输入,其中,i100,n 期望结果:根据有效输入值的个数和总数正确算出平均值86现在学习的是第86页,共99页测试用例数据测试用例数据覆盖路径测试数据预期结

47、果路径路径1Value=90,-999,0,0,0Aver=90,Nputnum=1Total=1路径路径2Value=-999,0,0,0,0Aver=-999,Nputnum=0Total=0路径路径3Value=-1,90,70,-1,80Aver=80,Nputnum=5Total=3路径路径4Value=-1,-2,-3,-4,-999Aver=999,Nputnum=4Total=0路径路径5Value=120,110,101,-999,0Aver=-999,Nputnum=3Total=0路径路径6Value=95,90,70,65,-999Aver=80,Nputnum=4To

48、tal=4这里,假定:这里,假定:n=4;minimum=0;maximum=10087现在学习的是第87页,共99页上机实习上机实习 5n参考上面参考程序和结点,将它改写为相应的C/C+语言的被测程序和主程序,并编译和运行此程序。n用覆盖6条路径的测试数据输入(value),观察其输出:平均值、输入值个数以及有效值个数n给出相应的测试报告,包括测试输入数据、输出数据和预期结果。n测试报告模板参考Excel模板88现在学习的是第88页,共99页图矩阵法图矩阵法 n导出流图和决定基本测试路径的过程均需要机械化,为了开发辅助基本路径测试的软件工具,称为图矩阵(graphmatrix)的数据结构很有

49、用n图矩阵是一个正方形矩阵,其大小(即列数和行数)等于流图的节点数。每列和每行都对应于标识的节点,矩阵项对应于节点间的连接(边),下图显示了一个简单的流图及其对应的图矩阵89现在学习的是第89页,共99页图矩阵法图矩阵法13425aefdbcg1234512345adbcfge90现在学习的是第90页,共99页图矩阵法图矩阵法上图所示的图矩阵重画为右。字母替换为1,表示存在边(为清晰起见,没有画出0),这种形式的图矩阵称为连接矩阵(linkmatrix)。图中含两个或两个以上项的行表示判定节点,所以,右图的环形复杂度为:3+1=41234512345111111191现在学习的是第91页,共9

50、9页上机实习上机实习 6n下面提供一个白盒测试示例。这个例子基本保证了每条路径至少被执行一次。n示例中程序是按收入(Income)和供养人数(nDependance)来计算赋税金额的程序n它的输入是:Income和nDependancen它的输出是:总税金(TaxTotal)92现在学习的是第92页,共99页上机实习上机实习 6n#includenintmain(void)nintnDependents,Exemption;nfloatIncome,TaxSubTotal,TaxTotal;ncoutIncome;n/firstifcheckincomenif(Income0)ncoutyou

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁