




已阅读5页,还剩131页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,白盒测试,2,白盒测试,白盒测试概念测试覆盖标准逻辑驱动测试基本路径测试控制结构测试的变种面向对象的白盒测试,3,白盒测试概念,为什么要进行白盒测试?如果所有软件错误的根源都可以追溯到某个唯一原因,那么问题就简单了。然而,事实上一个bug常常是由多个因素共同导致的,如下图所示。,假设此时开发工作已结束,程序送交到测试组,没有人知道代码中有一个潜在的被0除的错误。若测试组采用的测试用例的执行路径没有同时经过x=0和y=5/x进行测试,显然测试工作似乎非常完善,测试用例覆盖了所有执行语句,也没有被0除的错误发生。,4,白盒测试概念,白盒测试也称结构测试或逻辑驱动测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。(测试用例由测试输入数据以及与之对应的输出结果组成。测试用例设计的好坏直接决定了测试的效果和结果。所以说在软件测试活动中最关键的步骤就是设计有效的测试用例。)白盒测试使用被测单元内部如何工作的信息,允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑路径进行测试。基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。,白盒测试概念,5,白盒测试的主要目的:,保证一个模块中的所有独立路径至少被执行一次;对所有的逻辑值均需要测试真、假两个分支;在上下边界及可操作范围内运行所有循环;检查内部数据结构以确保其有效性。,白盒测试概念,6,测试覆盖标准,白盒法特点:以程序的内部逻辑为基础设计测试用例,所以又称为逻辑覆盖法。应用白盒法时,手头必须有程序的规格说明以及程序清单。白盒法考虑的是测试用例对程序内部逻辑的覆盖程度。最彻底的白盒法是覆盖程序中的每一条路径,但是由于程序中一般含有循环,所以路径的数目极大,要执行每一条路径是不可能的,只能希望覆盖的程度尽可能高些。,7,测试覆盖标准,8,测试覆盖标准,上页小程序的流程图,其中包括了一个执行达20次的循环。那么它所包含的不同执行路径数高达520(1013)条,若要对它进行穷举测试,覆盖所有的路径。假使测试程序对每一条路径进行测试需要1毫秒,同样假定一天工作24小时,一年工作365天,那么要想把如图所示的小程序的所有路径测试完,则需要3170年。上页小程序即使每条路径都测试过了,仍然可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序。穷举路径测试不可能查出程序因为遗漏路径而出错。穷举路径测试发现不了一些与数据相关的错误。,9,测试覆盖标准,为了衡量测试的覆盖程度,需要建立一些标准。测试覆盖率可以表示出测试的充分性,在测试分析报告中可以作为量化指标的依据,测试覆盖率越高效果越好。测试覆盖率:用于确定测试所执行到的覆盖项的百分比。测试覆盖率包括功能点覆盖率和逻辑覆盖率:功能点覆盖率大致用于表示软件已经实现的功能与软件需要实现的功能之间的比例关系。逻辑覆盖率指程序逻辑的覆盖率,可分为语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。,10,测试覆盖标准,覆盖标准从低到高分别是:语句覆盖:是一个比较弱的测试标准,它的含义是:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。它是最弱的逻辑覆盖,效果有限,必须与其它方法交互使用。判定覆盖(也称为分支覆盖):执行足够的测试用例,使得程序中的每一个分支至少都通过一次。判定覆盖只比语句覆盖稍强一些,但实际效果表明,只是判定覆盖,还不能保证一定能查出在判断的条件中存在的错误。因此,还需要更强的逻辑覆盖准则去检验判断内部条件。条件覆盖:执行足够的测试用例,使程序中每个判断的每个条件的每个可能取值至少执行一次;条件覆盖深入到判定中的每个条件,但可能不能满足判定覆盖的要求。,11,测试覆盖标准,判定/条件覆盖:执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。判定/条件覆盖有缺陷。从表面上来看,它测试了所有条件的取值。但是事实并非如此。往往某些条件掩盖了另一些条件。会遗漏某些条件取值错误的情况。为彻底地检查所有条件的取值,需要将判定语句中给出的复合条件表达式进行分解,形成由多个基本判定嵌套的流程图。这样就可以有效地检查所有的条件是否正确了。条件组合覆盖:执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。这是一种相当强的覆盖准则,可以有效地检查各种可能的条件取值的组合是否正确。它不但可覆盖所有条件的可能取值的组合,还可覆盖所有判断的可取分支,但可能有的路径会遗漏掉。测试还不完全。路径覆盖:设计足够多的测试用例,要求覆盖程序中所有可能的路径。,12,测试覆盖标准,13,逻辑驱动测试,概述语句覆盖判定覆盖(分支覆盖)条件覆盖判定/条件覆盖条件组合覆盖综合举例,逻辑驱动测试,14,白盒测试的主要方法:,逻辑驱动测试语句覆盖:语句覆盖就是设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次;判定覆盖(也称为分支覆盖):设计若干个测试用例,运行所测程序,使程序中每个判断的取真分支和取假分支至少执行一次;条件覆盖:设计足够多的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次;判定/条件覆盖:设计足够多的测试用例,运行所测程序,使程序中每个判断的每个条件的所有可能取值至少执行一次,并且每个可能的判断结果也至少执行一次,换句话说,即是要求各个判断的所有可能的条件取值组合至少执行一次;条件组合覆盖:设计足够多的测试用例,运行所测程序,使程序中每个判断的所有可能的条件取值组合至少执行一次;基本路径测试设计足够多的测试用例,运行所测程序,要覆盖程序中所有可能的路径。这是最强的覆盖准则。但在路径数目很大时,真正做到完全覆盖是很困难的,必须把覆盖路径数目压缩到一定限度。,逻辑驱动测试,15,语句覆盖,语句覆盖”是一个比较弱的测试标准,它的含义是:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。如,例1:PROCEDUREM(VARA,B,X:REAL);BEGINIF(A1)AND(B=0)THENX:=X/A;IF(A=2)OR(X1)THENX:=X+1;END.,逻辑驱动测试,16,语句覆盖,为使程序中每个语句至少执行一次,只需设计一个能通过路径ace的例子就可以了,例如选择输入数据为:A=2,B=0,X=3就可达到“语句覆盖”标准。,语句覆盖,逻辑驱动测试,17,语句覆盖,从上例可看出,语句覆盖实际上是很弱的,发现不了判定中逻辑运算的错误,即它并不是一种充分的检验方法。例如:1)如果第一个条件语句中的AND错误地编写成OR,上面的测试用例是不能发现这个错误的;2)如第三个条件语句中X1误写成X0,这个测试用例也不能暴露它;3)沿着路径abd执行时,X的值应该保持不变,如果这一方面有错误,上述测试数据也不能发现它们。,逻辑驱动测试,18,语句覆盖,例2:voidDoWork(intx,inty,intz)intk=0,j=0;if(x3)/语句块3,逻辑驱动测试,19,语句覆盖,为了测试语句覆盖率只要设计一个测试用例就可以把三个执行语句块中的语句覆盖了。测试用例输入为:x=4、y=5、z=5程序执行的路径是:abd,逻辑驱动测试,20,语句覆盖,该测试用例虽然覆盖了可执行语句,但并不能检查判断逻辑是否有问题,例如在第一个判断中把12FORK:=1TOESIZEDO13IF(EMPTAB.DEPT(K)=DEPTTAB.DEFT(J))14THEN15BEGINFOUND:=TRUE;16IF(SALARY(K)15000.00)17OR(JOB(K)=“M”)18THENSALARY(K):=SALARY(K)+100.0019ELSESALARY(K):=SALARY(K)+200.0020END;21IF(NOTFOUND)THENERRCODE:=222END23END24END.,逻辑驱动测试,47,白盒法测试举例-工资管理程序测试,现用白盒法设计测试用例。首先列出程序中的判定,考虑所有的条件句和循环句。本例中只要输入表格不空,循环句总会经历进入循环体和跳过循环体这两种情况(因为循环终值都大于等于循环初值),所以就不必专门考虑了,需要分析的只是六个条件语句中的判定。2IF(ESIZE0)OR(DSIZE0)6IF(SALES(I)MAXSALES)9IF(SALES(J)=MAXSALES)13IF(EMPTAB.DEPT(K)=DEPTTAB.DEFT(J)16IF(SALARY(K)15000.00)OR(JOB(K)=“M”)21IF(NOTFOUND),逻辑驱动测试,48,白盒法测试举例-工资管理程序测试,1.采用“判定覆盖”标准,使得上述6个判定都取到两种结果,这就需要以下12种情况出现。,49,白盒法测试举例-工资管理程序测试,设计下面的两个测试用例可以满足“判定覆盖”(图中“职务”一栏,“E”表示是一般职员,“M”表示是经理)。,ESIZE=DSIZE=3EMPTABDEPTTAB,ERRCODE=2ESIZE,DSIZE,DEPTTAB不变EMPTAB,ESIZE=DSIZE=3EMPTABDEPTTAB,ERRCODE=2ESIZE,DSIZE,DEPTTAB不变EMPTAB,逻辑驱动测试,50,白盒法测试举例-工资管理程序测试,虽然这两个例子满足“判定覆盖”标准,但是它们不能发现程序中许多其他可能的错误,例如没有检查ERRCODE为0、职员是经理、部门表为“空”等情况。,逻辑驱动测试,51,白盒法测试举例-工资管理程序测试,2.采用“条件覆盖”标准,则必须使判定中的每一个条件取到两种可能的值,这就需要以下16种情况出现。,逻辑驱动测试,52,白盒法测试举例-工资管理程序测试,53,白盒法测试举例-工资管理程序测试,设计下面的两个测试用例可以满足“条件覆盖”。,逻辑驱动测试,54,白盒法测试举例-工资管理程序测试,尽管上面的测试用例满足“条件覆盖”标准,但是它们可能比满足“判定覆盖”标准的测试用例差,因为它们不能执行每一个语句(如语句19),而且它们起的作用也不比满足“判定覆盖”的测试用例多许多,如未能使ERRCODE=0,如果语句2误写成(ESIZE=O)AND(DSIZE=0),这个错误也不能被发现。,逻辑驱动测试,55,白盒法测试举例-工资管理程序测试,3.采用“判定条件覆盖”标准,就可克服“条件覆盖”中例子的弱点,我们需要提供足够的测试用例使得所有判定和条件都取到两个不同的值,这里只需使“条件覆盖”测试用例中的职员JONES为经理,而使LORIN不是经理,则判定16就可取到两种结果,语句19因而得以执行。,逻辑驱动测试,56,白盒法测试举例-工资管理程序测试,问题:如果所用的编译系统将含有“OR”的表达式处理成:遇到第一项为“真”就不再检查后面的项,则这样的两个测试用例并不能检查到JOB(K)=“M”这一部分。,逻辑驱动测试,57,白盒法测试举例-工资管理程序测试,4.最后考虑“条件组合覆盖”标准,它需要足够的例子,使得每个判定中条件的各种组合情况都出现一次。本例中判定6、9、13和21各有两种组合,判定2和16各有4种组合。可以先选一个测试用例使其包含尽可能多的组合情况。再选另一测试用例使其包含尽可能多的余下的组合情况,直至得到一组测试用例能包含所有的组合情况。下面是满足“条件组合覆盖”标准的一组测试用例,它比前面几组测试用例都全面。,逻辑驱动测试,58,白盒法测试举例-工资管理程序测试,逻辑驱动测试,59,白盒法测试举例-工资管理程序测试,可以看出:即使是满足“条件组合覆盖”标准的例子仍不能发现BONUS中许多其他的错误。例如:没有检查ERRCODE0的情况,所以如果语句1中的ERRORCODE:=0;被遗漏了就查不出;如语句16中15000.00误写成15000.01也是发现不了的,如SALARY(K)=15000误写成SALARY(K)15000也是发现不了的;如果BONUS程序没有对部门表或职员表的最后一行进行处理,这个错误也不一定能发现。,逻辑驱动测试,60,白盒法测试举例-工资管理程序测试,通过前面例子的讨论,可以得到两点结论:“条件组合覆盖”标准比其他标准优越。即使达到任何一种覆盖标准,其测试效果仍然是不彻底的,我们还需要用其他的测试方法作补充。下面来讨论一下用黑盒法补充测试用例:,逻辑驱动测试,61,综合策略-黑盒法补充测试用例,白盒法和黑盒法各有长处和短处,每种方法都可提供一组有用的测试用例,这组测试用例容易发现某种类型的错误,但不易发现其他类型的错误,然而没有一种方法能提供一组“完整的”测试用例。因此,实际软件测试方案设计是不同方法的综合应用。一个参考的黑盒法补充策略是:1)在任何情况下都需使用边界值分析(这个方法应包括对输入和输出的边界值进行分析)。2)必要的话,再用等价分类法补充一些测试用例。3)再用错误推测法附加测试用例。4)检查上述例子的逻辑覆盖程度,如果未能满足某些覆盖标准,则再增加足够的测试用例。5)如果功能说明中含有输入条件的组合情况,则一开始就可先用因果图(判定表)法。以工资管理为例:(用黑盒法补充测试用例)该例不必检查输入条件的组合情况,所以不需要用因果图(判定表)法,这里我们先用边界值分析法,该程序中输入的边界情况有:,逻辑驱动测试,62,黑盒法补充测试用例-工资管理程序测试,1)EMPTAB具有1个记录。2)EMPTAB具有最大个数的记录(如65535个记录)。3)EMPTAB具有零个记录。4)DEPTAB具有1个记录。5)DEPTTAB具有65535个记录。6)DEPTTAB具有零个记录,7)销售量最大的部门有1个职员。8)销售量最大的部门有65535个职员。9)销售量最大的部门没有职员。10)所有部门的销售量相等。11)DEPTTAB中,第一个部门的销售量最大。12)DEPTTAB中,最后一个部门的销售量最大。13)EMPTAB中,第一个职员在销售量最大的部门工作。14)EMPTAB中,最后一个职员在销售量最大的部门工作。15)销售量最大的部门中有一个职员是经理。16)销售量最大的部门中有一个职员不是经理。17)销售量最大的部门中有一个职员(不是经理)的工资是14999.99。18)销售量最大的部门中有一个职员(不是经理)的工资是15000.00。19)销售量最大的部门中有一个职员(不是经理)的工资是15000.01。,逻辑驱动测试,63,黑盒法补充测试用例-工资管理程序测试,输出的边缘情况是:20)ERRCODE=0。21)ERRCODE=1。22)ERRCODE=2。23)增加后的工资为99999.99(即数据项SALARY的最大允许值)。再用错误推测法还可增加一个测试用例。24)DEPTTAB中,在销售量最大但没有职员的部门之后,有一个销售量最大但有职员的部门(检查程序在产生ERRCODE2后是否会错误地终止对输入文件的处理)。上述24种情况中,看来第2)、5)、8)种情况是不会发生的,所以可以不考虑,再将用白盒法设计的测试用例与余下的21种情况作比较,可以看出许多情况巳包括在这4个测试用例中了,尚未包括的情况是1)、4)、7)、10)、14)、17)、18)、19)、20)、23)和24)等11种。因此再增加的测试用例如下:,逻辑驱动测试,64,黑盒法补充测试用例-工资管理程序测试,逻辑驱动测试,65,习题,为以下流程图所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖。,66,路径覆盖测试,前面提到的5种逻辑覆盖都未涉及到路径的覆盖。事实上,只有当程序中的每一条路径都受到了检验,才能使程序受到全面检验。路径覆盖的目的就是要使设计的测试用例能覆盖被测程序中所有可能的路径。,67,路径测试,路径测试就是设计足够多的测试用例,覆盖被测试对象中的所有可能路径。对于例1,下面的测试用例则可对程序进行全部的路径覆盖。,68,对于例2,下面的测试用例则可对程序进行全部的路径覆盖。,69,路径覆盖,分析:虽然前面一组测试用例满足了路径覆盖,但并没有覆盖程序中所有的条件组合(丢失了组合3和7:-T1、T2、-T3、T4),即满足路径覆盖的测试用例并不一定满足组合覆盖。,70,基本路径测试,例1、例2都是很简单的程序函数,只有四条路径。但在实践中,一个不太复杂的程序,其路径都是一个庞大的数字,要在测试中覆盖所有的路径是不现实的。为了解决这一难题,只得把覆盖的路径数压缩到一定限度内,例如,程序中的循环体只执行一次。下面介绍的基本路径测试就是这样一种测试方法,它在程序控制图的基础上,通过分析控制构造的环行复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每一个可执行语句至少执行一次。,基本路径测试,71,基本路径测试,基本路径测试方法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。包括以下4个步骤和一个工具方法:程序的控制流图:描述程序控制流的一种图示方法。程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。准备测试用例:确保基本路径集中的每一条路径的执行。工具方法:图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。,基本路径测试,72,控制流图的符号,在介绍基本路径方法之前,必须先介绍一种简单的控制流表示方法,即流图。流图是对待测试程序过程处理的一种表示,对程序流程图进行简化后得到的,它可以更加突出的表示程序控制流的结构。流图使用下面的符号描述逻辑控制流,每一种结构化构成元素有一个相应的流图符号。,73,控制流图,流图只有二种图形符号图中的每一个圆称为流图的结点,代表一条或多条语句,一个处理框序列和一个条件判定框(假设不包含复合条件)。流图中的箭头称为边或连接,代表控制流。任何过程设计都要被翻译成控制流图。,基本路径测试,74,控制流图,在将程序流程图简化成控制流图时,应注意:包含条件或多分支的节点被称为判定节点(也叫谓词节点),在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。如下页图所示,基本路径测试,75,控制流图,76,控制流图,如果判断中的条件表达式是由一个或多个逻辑运算符(OR,AND,NAND,NOR)连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。例如:1ifaorb2x3else4y对应的逻辑为:,基本路径测试,77,独立路径,独立路径:至少沿一条新的边移动的路径,1,7,6,2,3,8,9,10,11,4,5,路径1:1-11路径2:1-2-3-4-5-10-1-11路径3:1-2-3-6-8-9-10-1-11路径4:1-2-3-6-7-9-10-1-11,对以上路径的遍历,就是至少一次地执行了程序中的所有语句。,基本路径测试,78,基本路径测试,第一步:画出控制流图流程图用来描述程序控制结构。可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。在流图中,每一个圆,称为流图的结点,代表一个或多个语句。一个处理方框序列和一个菱形决测框可被映射为一个结点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使该结点并不代表任何语句(例如:if-else-then结构)。由边和结点限定的范围称为区域。计算区域时应包括图外部的范围。,基本路径测试,79,基本路径测试,例4:有下面的C函数,用基本路径测试法进行测试voidSort(intiRecordNum,intiType)intx=0;inty=0;while(iRecordNum-0)if(0=iType)x=y+2;break;elseif(1=iType)x=y+10;elsex=y+20;,基本路径测试,80,基本路径测试,画出其程序流程图和对应的控制流图如下,81,基本路径测试-计算圈复杂度,第二步:计算圈复杂度圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。独立路径必须包含一条在定义之前不曾用到的边。有以下三种方法计算圈复杂度:流图中区域的数量对应于环型的复杂性;给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。(包含条件的节点被称为判定节点,也叫谓词节点),基本路径测试,82,基本路径测试-计算圈复杂度,对应上面图中的圈复杂度,计算如下:流图中有四个区域;V(G)=10条边-8结点+2=4;V(G)=3个判定结点+1=4。,基本路径测试,83,基本路径测试-导出测试用例,第三步:导出测试用例根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。)路径1:4-14路径2:4-6-7-14路径3:4-6-9-10-13-4-14路径4:4-6-9-12-13-4-14根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。,基本路径测试,84,基本路径测试-准备测试用例,第四步:准备测试用例为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:,基本路径测试,85,基本路径测试-准备测试用例,路径1:4-14输入数据:iRecordNum=0,或者取iRecordNum0)if(0=iType)x=y+2;break;elseif(1=iType)x=y+10;elsex=y+20;,基本路径测试,86,基本路径测试-三角形问题,例6三角形问题(1)由过程描述导出程序图1/三角形问题2#include3#definebooleanint4#definetrue15#definefalse06main()7inta,b,e;8booleanIsATri;9printf(“输入三条边:”);10scanf(“%d%d%d”,基本路径测试,87,基本路径测试-三角形问题,11if(ab+c21,基本路径测试,88,基本路径测试-三角形问题,基本路径测试,89,基本路径测试-三角形问题,(2)计算程序图的环路复杂性V(G)=en+2=2421+2=5(3)独立基本路径不仿,假定我们从结点10开始算起:P1:10-11-12-14-15-17-18-21不等边三角形P2:10-11-13-14-15-17-18-21不可行P3:10-11-12-14-20-21不可行P4:10-11-12-14-15-16-21等边三角形P5:10-11-12-14-15-17-19-21等腰三角形,基本路径测试,90,基本路径测试-三角形问题,如果走过路径P2和P3会发现两条路径都是不可行的。路径P2不可行,因为通过结点13,意味着这些边不构成三角形,因此结点14的判断结果一定是结点20,而不可能是结点15。类似地,在P3中,通过结点12意味着这些边确实会构成三角形,因此结点20不会经过。由此看来,这里存在着矛盾的语义信赖关系,拓扑结构上可行的路径在逻辑上有可能不可行。为了找出逻辑依赖性的原因,这里可以举出两条规则:如果经过结点12,则必须经过结点15;如果经过结点13,则必须经过结点20。将这两条规则与McCabe的基线方法结合在一起,可得到以下基本路径集合:P1:10-11-12-14-15-17-18-21不等边三角形P6:10-11-13-14-20-21非三角形P4:10-11-12-14-15-16-21等边三角形P5:10-11-12-14-15-17-19-21等腰三角形,基本路径测试,91,基本路径测试-三角形问题,(4)准备测试用例P1:输入数据:a=100,b=10,c=106预期结果:打印“不等边三角形”P6:输入数据:a=200,b=100,c=1预期结果:打印“非三角形”P4:输入数据:a=10,b=10,c=10预期结果:打印“等边三角形”P5:输入数据:a=120,b=120,c=100预期结果:打印“等腰三角形”,基本路径测试,92,基本路径测试再举例,例6:下例程序流程图描述了最多输入50个值(以1作为输入结束标志),计算其中有效的学生分数(0100)的个数、总分数和平均值。,基本路径测试,93,94,步骤1:导出过程的流图。,95,步骤2:确定环形复杂性度量V(G):1)V(G)=6(个区域)2)V(G)=EN+2=1612+2=6其中E为流图中的边数,N为结点数;3)V(G)=P+1=5+1=6其中P为谓词结点的个数。在流图中,结点2、3、5、6、9是谓词结点。,基本路径测试再举例,基本路径测试,96,基本路径测试再举例,步骤3:确定基本路径集合(即独立路径集合)。于是可确定6条独立的路径:路径1:1-2-9-10-12路径2:1-2-9-11-12路径3:1-2-3-9-10-12路径4:1-2-3-4-5-8-2路径5:1-2-3-4-5-6-8-2路径6:1-2-3-4-5-6-7-8-2,基本路径测试,97,步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。1)路径1(1-2-9-10-12)的测试用例:scorek=有效分数值,当ki;scorei=1,2i50;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。,98,基本路径测试再举例,2)路径2(1-2-9-11-12)的测试用例:score1=1;期望的结果:average=1,其他量保持初值。3)路径3(1-2-3-9-10-12)的测试用例:输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数;期望结果:n1=50、且算出正确的总分和平均分。,基本路径测试,99,基本路径测试再举例,4)路径4(1-2-3-4-5-8-2)的测试用例:scorei=有效分数,当i100,k、=、。,114,条件测试,作为简单的例子,考虑条件C1B1B2其中B1和B2是布尔变量。C1的输出约束为(D1,D2),其中D1和D2是“T”或“F”,值(T,F)是C1可能的一个约束,覆盖此约束的测试(一次运行)将令B1为t,B2为f。BRO测试策略要求约束集(t,t),(f,t),(t,f),(f,f)由C1的执行所覆盖。如果布尔运算符有错,这四组测试用例的运行结果必有一组导致C1失败。,115,条件测试,作为第二个例子,考虑C2B1(E3=E4)其中B1是布尔表达式,而E3和E4是算术表达式。C2的条件约束形式如(D1,D2),其中D1是“T”或“F”,D2是,=或。除了C2的第二个简单条件是关系表达式以外,C2和C1相同,所以可以修改C1的约束集(T,T),(F,T),(T,F),(F,F),得到C2的约束集,注意(E3=E4)的“T”意味着“=”,而(E3=E4)的“F”意味着“”或“”。分别用(T,=)和(F,=)替换(T,T)和(F,T),并用(T,)和(T,)替换(T,F),用(F,)和(F,)替换(F,F),就得到C2的约束集:(T,=),(F,=),(T,),(T,),(F,),(F,)。上述条件约束集的覆盖率将保证检测C2的布尔和关系算子的错误。,116,条件测试,作为第三个例子,考虑C3(E1E2)(E3=E4)其中E1、E2、E3和E4是算术表达式。C3的条件约束形式如(D1,D2),其中D1和D2是、=或。除了C3的第一个简单条件是关系表达式以外,C3和C2相同,所以可以修改C2的约束集得到C3的约束集,结果为(,=),(=,=),(,=),(,),(,),(,),(=,),(,),(,),(=,),(,)去掉重复,结果为:(,=),(=,=),(,=),(,),(,),(=,),(,),(=,),(,)上述条件约束集能够保证检测C3的关系操作符的错误。,117,数据流测试,数据流测试方法按照程序中的变量定义和使用的位置来选择程序的测试路径。为了说明数据流测试方法,假设程序的每条语句都赋予了独特的语句号,而且每个函数都不改变其参数和全局变量。对于语句号为S的语句,DEF(S)=X语句S包含X的定义USE(S)=X语句S包含X的使用如果语句S是if或循环语句,它的DEF集为空,而USE集取决于S的条件。如果存在从S到S的路径,并且该路径不含X的其他定义,则称变量X在语句S处的定义在语句S仍有效。,118,数据流测试,变量X的定义使用链(或称DU链)形式如X,S,S,其中S和S是语句号,X在DEF(S)和USE(S)中,而且语句S定义的X在语句S有效。一种简单的数据流测试策略是要求覆盖每个DU链至少一次。我们将这种策略称为DU测试策略。已经证明DU测试并不能保证覆盖程序的所有分支,但是,DU测试不覆盖某个分支仅仅在于如下之类的情况:if-then-else中的then没有定义变量,而且不存在else部分。这种情况下,if语句的else分支并不需要由DU测试覆盖。数据流测试策略可用于为包含嵌套if和循环语句的程序选择测试路径,为此,考虑使用DU测试为如下的伪程序片段选择测试路径:,119,数据流测试,procxB1;dowhileC1ifC2thenifC4thenB4;elseB5;endif;elseifC3thenB2;elseB3;endif;endif;enddo;B6;endproc;,120,数据流测试,为了用DU测试选择控制流图的测试路径,需要知道程序中条件或块中的变量定义和使用。假设变量X定义在块B1,B2,B3,B4和B5的最后一条语句之中,并在块B2,B3,B4,B5和B6的第一条语句中使用。DU测试策略要求执行从每个Bi(0i5)到Bj(0j6)的最短路径(这样的测试也覆盖了条件C1,C2,C3和C4中的变量使用)。尽管有25条X的DU链,只需5条路径覆盖这些DU链。原因在于可用5条从Bi(0i5)到B6的路径覆盖X的链,而这5条链包含循环的迭代就可以覆盖其他的DU链。,121,数据流测试,注意如果要用分支测试策略为上述的程序选择测试路径,并不需要另外的信息。为了选择BRO测试的路径,只需知道每个条件和块的结构。(选择程序的路径之后,需要决定该路径是否实用于该程序,即是否存在执行该路径的至少一个输入)。由于变量的定义和使用,程序中的语句都彼此相关,所以数据流测试方法能够有效地发现错误,但是,数据流测试的覆盖率测度和路径选择比条件测试更为困难。,122,循环测试,循环测试是一种白盒测试技术,注重于循环构造的有效性。有四种循环:简单循环,串接(连锁)循环,嵌套循环和不规则循环。,123,循环测试,124,循环测试-简单循环,对于简单循环,测试应包括以下几种,其中的n表示循环允许的最大次数。(1)零次循环:从循环入口直接跳到循环出口。(2)一次循环:查找循环初始值方面的错误。(3)二次循环:检查在多次循环时才能暴露的错误。(4)m次循环:此时的mn,也是检查在多次循环时才能暴露的错误。(5)n(最大)次数循环、n+1(比最大次数多一)次的循环、n-1(比最大次数少一)次的循环。,125,循环测试-嵌套循环,对于嵌套循环,不能将简单循环的测试方法简单地扩大到嵌套循环,因为可能的测试数目将随嵌套层次的增加呈几何倍数增长。这可能导致一个天文数字的测试数目。下面是一种有助于减少测试数目的测试方法。从最内层循环开始,设置所有其他层的循环为最小值;对最内层循环做简单循环的全部测试。测试时保持所有外层循环的循环变量为最小值。另外,对越界值和非法值做类似的测试。逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取“典型”值。反复进行,直到所有各层循环测试完毕。对全部各层循环同时取最小循环次数,或者同时取最大循环次数。对于后一种测试,由于测试量太大,需人为指定最大循环次数。,126,循环测试-串接循环,对于串接循环,要区别两种情况。如果各个循环互相独立,则串接循环可以用与简单循环相同的方法进行测试。如果有两个循环处于串接状态,而前一个循环的循环变量的值是后一个循环的初值。则这几个循环不是互相独立的,则需要使用测试嵌套循环的办法来处理。,127,循环测试-非结构循环,对于非结构循环,不能测试,应重新设计循环结构,使之成为其它循环方式,然后再进行测试。,128,其他程序结构的测试方法,域测试针对域错误,对输入空间进行分析,选择适当的测试点,检验输入空间中的每个输入是否产生正确的结果。假设限制过多,难以运用到实际中。符号测试另辟途径解决测试用例选择问题。基于代数运算执行测试,是测试和验证的折衷方法,129,其他程序结构的测试方法,程序插装借助往被测程序中插入操作来实现测试目的的方法。程序变异是一种错误驱动测试,针对某类特定程序错误实现测试。程序强变异程序弱变异(可参考郑人杰:计算机软件测试技术清华大学出版社),130,面向对象的白盒测试,对OO软件的类测试相当于传统软件的单元测试。和传统软件的单元测试不同,他往往关注模块的算法细节和模块接口间流动的数据,OO软件的类测试是由封装在类中的操作和类的状态行为所驱动的。OO软件测试的特点:因为属性和操作是被封装的,对类之外操作的测试通常是徒劳的。封装使对对象的状态快照难于获得。继承也
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 共同建工合同协议书
- 店铺员工 合同协议书
- 证书聘用合同 协议书
- 6人合同协议书
- 学校搬运合同协议书
- 物流合同变更协议书
- 怎样手写合同协议书
- 快递合伙合同协议书
- 大楼施工合同协议书
- 门窗回收合同协议书
- 战略管理(南昌大学)知到智慧树章节测试课后答案2024年秋南昌大学
- 急诊一病一品
- 实验室溢洒处置考试评分表
- 学前教育法培训
- 中药材质量追溯管理制度
- 公司员工手册(最完整)
- 2025年发展对象考试题库含答案
- 3D数字游戏艺术-3-测量分评分表-展开UV与贴图绘制-15分
- 雅马哈便携式扩声系统STAGEPAS 600i使用说明书
- 2024年广东省高考化学试题(含答案解析)
- 文艺学名著导读学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论