购买

¥ 30.0

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 2019-一章白盒测试-文档资料

2019-一章白盒测试-文档资料.ppt

2019-一章白盒测试-文档资料

精品课件库
2019-06-20 0人阅读 举报 0 0 暂无简介

简介:本文档为《2019-一章白盒测试-文档资料ppt》,可适用于职业岗位领域

白盒测试白盒测试白盒测试概念测试覆盖标准逻辑驱动测试基本路径测试白盒测试概念白盒测试也称结构测试或逻辑驱动测试是一种测试用例设计方法它从程序的控制结构导出测试用例。(测试用例由测试输入数据以及与之对应的输出结果组成。测试用例设计的好坏直接决定了测试的效果和结果。所以说在软件测试活动中最关键的步骤就是设计有效的测试用例。)白盒测试使用被测单元内部如何工作的信息允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例对程序的逻辑路径进行测试。基于一个应用代码的内部逻辑知识测试是基于覆盖全部代码、分支、路径、条件。白盒测试的主要目的:保证一个模块中的所有独立路径至少被执行一次对所有的逻辑值均需要测试真、假两个分支在上下边界及可操作范围内运行所有循环检查内部数据结构以确保其有效性。测试覆盖标准白盒法特点:以程序的内部逻辑为基础设计测试用例所以又称为逻辑覆盖法。应用白盒法时手头必须有程序的规格说明以及程序清单。白盒法考虑的是测试用例对程序内部逻辑的覆盖程度。最彻底的白盒法是覆盖程序中的每一条路径但是由于程序中一般含有循环所以路径的数目极大要执行每一条路径是不可能的只能希望覆盖的程度尽可能高些。测试覆盖标准测试覆盖标准上页小程序的流程图其中包括了一个执行达次的循环。那么它所包含的不同执行路径数高达(=)条若要对它进行穷举测试覆盖所有的路径。假使测试程序对每一条路径进行测试需要毫秒同样假定一天工作小时一年工作天那么要想把如图所示的小程序的所有路径测试完则需要年。测试覆盖标准为了衡量测试的覆盖程度需要建立一些标准目前常用的一些覆盖标准从低到高分别是:语句覆盖:是一个比较弱的测试标准它的含义是:选择足够的测试用例使得程序中每个语句至少都能被执行一次。它是最弱的逻辑覆盖效果有限必须与其它方法交互使用。判定覆盖(也称为分支覆盖):执行足够的测试用例使得程序中的每一个分支至少都通过一次。判定覆盖只比语句覆盖稍强一些但实际效果表明只是判定覆盖还不能保证一定能查出在判断的条件中存在的错误。因此还需要更强的逻辑覆盖准则去检验判断内部条件。条件覆盖:执行足够的测试用例使程序中每个判断的每个条件的每个可能取值至少执行一次条件覆盖深入到判定中的每个条件但可能不能满足判定覆盖的要求。测试覆盖标准判定条件覆盖:执行足够的测试用例使得判定中每个条件取到各种可能的值并使每个判定取到各种可能的结果。判定条件覆盖有缺陷。从表面上来看它测试了所有条件的取值。但是事实并非如此。往往某些条件掩盖了另一些条件。会遗漏某些条件取值错误的情况。为彻底地检查所有条件的取值需要将判定语句中给出的复合条件表达式进行分解形成由多个基本判定嵌套的流程图。这样就可以有效地检查所有的条件是否正确了。条件组合覆盖:执行足够的例子使得每个判定中条件的各种可能组合都至少出现一次。这是一种相当强的覆盖准则可以有效地检查各种可能的条件取值的组合是否正确。它不但可覆盖所有条件的可能取值的组合还可覆盖所有判断的可取分支但可能有的路径会遗漏掉。测试还不完全。白盒测试的主要方法:逻辑驱动测试语句覆盖:语句覆盖就是设计若干个测试用例运行被测试程序使得每一条可执行语句至少执行一次判定覆盖(也称为分支覆盖):设计若干个测试用例运行所测程序使程序中每个判断的取真分支和取假分支至少执行一次条件覆盖:设计足够多的测试用例运行所测程序使程序中每个判断的每个条件的每个可能取值至少执行一次判定条件覆盖:设计足够多的测试用例运行所测程序使程序中每个判断的每个条件的所有可能取值至少执行一次并且每个可能的判断结果也至少执行一次换句话说即是要求各个判断的所有可能的条件取值组合至少执行一次条件组合覆盖:设计足够多的测试用例运行所测程序使程序中每个判断的所有可能的条件取值组合至少执行一次基本路径测试设计足够多的测试用例运行所测程序要覆盖程序中所有可能的路径。这是最强的覆盖准则。但在路径数目很大时真正做到完全覆盖是很困难的必须把覆盖路径数目压缩到一定限度。语句覆盖语句覆盖”是一个比较弱的测试标准它的含义是:选择足够的测试用例使得程序中每个语句至少都能被执行一次。如例:PROCEDURE  M(VARABX:REAL)  BEGINIF(A>)AND(B=) THENX:=XAIF(A=)OR(X>) THENX:=XEND语句覆盖为使程序中每个语句至少执行一次只需设计一个能通过路径ace的例子就可以了例如选择输入数据为:A=B=X=就可达到“语句覆盖”标准。语句覆盖语句覆盖从上例可看出语句覆盖实际上是很弱的如果第一个条件语句中的AND错误地编写成OR上面的测试用例是不能发现这个错误的又如第三个条件语句中X>误写成X>这个测试用例也不能暴露它此外沿着路径abd执行时X的值应该保持不变如果这一方面有错误上述测试数据也不能发现它们。语句覆盖例:voidDoWork(intx,inty,intz){intk=,j=if((x>)(z<)){k=x*y语句块j=sqrt(k)}if((x==)||(y>)){j=x*y语句块}j=j语句块}语句覆盖为了测试语句覆盖率只要设计一个测试用例就可以把三个执行语句块中的语句覆盖了。测试用例输入为:x=、y=、z=程序执行的路径是:abd语句覆盖该测试用例虽然覆盖了可执行语句但并不能检查判断逻辑是否有问题例如在第一个判断中把错误的写成了||则上面的测试用例仍可以覆盖所有的执行语句。一般认为“语句覆盖”是很不充分的一种标准是最弱的逻辑覆盖准则。分支覆盖比“语句覆盖”稍强的覆盖标准是“分支覆盖”(判定覆盖)标准。含义是:执行足够的测试用例使得程序中的每一个分支至少都通过一次。即对于每个判定到少使其获得一次真值和一次假值。分支覆盖对例的程序如果设计两个例子使它们能通过路径ace和abd或者通过路径acd和abe就可达到“判定覆盖”标准为此可以选择输入数据为:①A=B=X=(沿路径acd执行)  ②A=B=X=(沿路径abe执行)      分支覆盖判定覆盖判定覆盖A=B=X=(沿路径acd执行)  A=B=X=(沿路径abe执行)分支覆盖对于例的程序如果设计两个测试用例则可以满足条件覆盖的要求。测试用例的输入为:x=、y=、z=x=、y=、z=上面的两个测试用例虽然能够满足条件覆盖的要求但是也不能对判断条件进行检查例如把第二个条件y>错误的写成y<,、上面的测试用例同样满足了分支覆盖。分支覆盖程序中含有判定的语句包括IFTHENELSE、DOWHILE等除了双值的判定语句外还有多值的判定语句如CASE语句等。所以“分支覆盖”更一般的含义是:使得每一个分支获得每一种可能的结果。“分支覆盖”比“语句覆盖”严格因为如果每个分支都执行过了则每个语句也就执行过了。但是“分支覆盖”还是很不够的例如例两个测试用例未能检查沿着路径abd执行时X的值是否保持不变。条件覆盖一个判定中往往包含了若干个条件如例的程序中判定(A>)AND(B=)包含了两个条件:A>以及B=所以可引进一个更强的覆盖标准“条件覆盖”。“条件覆盖”的含义是:执行足够的测试用例使得判定中的每个条件获得各种可能的结果。条件覆盖例的程序有四个条件:        A>、B=、A=、X>为了达到“条件覆盖”标准需要执行足够的测试用例使得在a点有:        A>、A≤、B=、B≠等各种结果出现以及在b点有:      A=、A≠、X>、X≤等各种结果出现。现在只需设计以下两个测试用例就可满足这一标准:①A=B=X=  (沿路径ace执行)②A=B=X=  (沿路径abd执行)。  条件覆盖条件覆盖条件覆盖A=B=X=  (沿路径ace执行)A=B=X= (沿路径abd执行)条件覆盖对例中的所有条件取值加以标记。对于第一个判断:条件x>取真值为T取假值为T条件z<取真值为T取假值为T对于第二个判断:条件x=取真值为T取假值为T条件y>取真值为T取假值为T条件覆盖则可以设计测试用例如下上面的测试用例不但覆盖了所有分支的真假两个分支而且覆盖了判断中的所有条件的可能值。条件覆盖“条件覆盖”通常比“分支覆盖”强因为它使一个判定中的每一个条件都取到了两个不同的结果而判定覆盖则不保证这一点。“条件覆盖”并不包含“分支覆盖”和“语句覆盖”如对语句IF(AANDB)THENS设计测试用例使其满足"条件覆盖",即使A为真并使B为假,以及使A为假而且B为真,但是它们都未能使语句S得以执行。条件覆盖如对例设计了下面的测试用例则虽然满足了条件覆盖但只覆盖了第一个条件的取假分支和第二个条件的取真分支不满足分支覆盖的要求。分支条件覆盖针对上面的问题引出了另一种覆盖标准“分支/条件覆盖”它的含义是:执行足够的测试用例使得分支中每个条件取到各种可能的值并使每个分支取到各种可能的结果。对例的程序前面的两个例子①A=B=X=(沿ace路)                      ②A=B=X=(沿abd路径)  是满足这一标准的。分支条件覆盖对例根据定义只需设计以下两个测试用例便可以覆盖个条件值以及个判断分支。分支条件覆盖分支条件覆盖从表面来看它测试了所有条件的取值但是实际上某些条件掩盖了另一些条件。例如对于条件表达式(x>)(z<)来说必须两个条件都满足才能确定表达式为真。如果(x>)为假则一般的编译器不在判断是否z<了。对于第二个表达式(x==)||(y>)来说若x==测试结果为真就认为表达式的结果为真这时不再检查(y>)条件了。因此采用分支条件覆盖逻辑表达式中的错误不一定能够查出来了。条件组合覆盖针对上述问题又提出了另一种标准“条件组合覆盖”。它的含义是:执行足够的例子使得每个判定中条件的各种可能组合都至少出现一次。显然满足“条件组合覆盖”的测试用例是一定满足“分支覆盖”、“条件覆盖”和“分支条件覆盖”的。条件组合覆盖再看例的程序我们需要选择适当的例子使得下面种条件组合都能够出现:)A>,B=   ) A>,B≠) A≤,B=)A≤,B≠)A=,X>)A=,X≤)A≠,X>)A≠,X≤)、)、)、)四种情况是第二个IF语句的条件组合而X的值在该语句之前是要经过计算的所以还必须根据程序的逻辑推算出在程序的入口点X的输入值应是什么。条件组合覆盖下面设计的四个例子可以使上述种条件组合至少出现一次:①A=B=X=使)、)两种情况出现②A=B=X=使)、)两种情况出现③A=B=X=使)、)两种情况出现④A=B=X=使)、)两种情况出现。条件组合覆盖上面四个例子虽然满足条件组合覆盖但并不能覆盖程序中的每一条路径例如路径acd就没有执行因此条件组合覆盖标准仍然是不彻底。条件组合覆盖现对例中的各个判断的条件取值组合加以标记如下:、x>,z<记做TT第一个判断的取真分支、x>,z>=记做TT第一个判断的取假分支、x<=,z<记做TT第一个判断的取假分支、x<=,z>=记做TT第一个判断的取假分支、x=,y>记做TT第二个判断的取真分支、x=,y<=记做TT第二个判断的取真分支、x!=,y>记做TT第二个判断的取真分支、x!=,y<=记做TT第二个判断的取假分支根据定义取个测试用例就可以覆盖上面种条件取值的组合。测试用例如下表:上面的测试用例覆盖了所有条件的可能取值的组合覆盖了所有判断的可取分支但是却丢失了一条路径abe。条件组合覆盖部分覆盖准则间的关系白盒法测试举例工资管理程序测试例:工资管理程序BONUS的输入数据是职员表(EmployeeTable)和部门表(DepartmentTable)(如图)。职员表由姓名(Name)、职务(JobCode)、部门(Dept)和工资(Salary)四项组成部门表由部门(Dept)和销售量(Sales)两项组成。白盒法测试举例工资管理程序测试程序的功能是“为销售量最大的部门中每一个职员增加元工资但是如果某个职员的原有工资已达元或者他的职务是经理则只给他增加元如果程序能正常地完成则输出出错码如果输入表格中没有任何条目则输出出错码如果没有职员在部门表中销售量最大的部门中工作则输出出错码”。白盒法测试举例工资管理程序测试下面是BONUS的源程序参数表中EMPTAB、DEPTTAB分别是职员表和部门表ESIZE、DSIZE分别是两个表的长度ERRCODE是出错码。PROCEDUREBONUS(EMPTABDEPTTAB:TABLEESIZEDSIZEERRCODE:                          INTEGER)……   BEGINMAXSALERS:=ERRCODE:=         IF  (ESIZE≤)OR(DSIZE≤)       THENERRCODE:=         ELSE            BEGINFORI:=TODSIZEDO                 IFSALES(I)>MAXSALES                 THENMAXSALES:=SALES(I)        FORJ:=TODSIZEDO              IFSALES(J):=MAXSALES          THEN           BEGINFOUND:=FALSE                     FORK:=TOESIZEDO                              IF(EMPTABDEPT(K)=DEPTTABDEFT(J))                                            THEN                                             BEGINFOUND:=TRUE                                                    IF(SALARY(K)≥)                                                          OR(JOB(K)=“M”)                                                  THENSALARY(K):=SALARY(K)                                                  ELSESALARY(K):=SALARY(K)                                             END                                             IF(NOTFOUND)THENERRCODE:=                             END            END   END白盒法测试举例工资管理程序测试现用白盒法设计测试用例。首先列出程序中的判定考虑所有的条件句和循环句。本例中只要输入表格不空循环句总会经历进入循环体和跳过循环体这两种情况(因为循环终值都大于等于循环初值)所以就不必专门考虑了需要分析的只是六个条件语句中的判定。         IF(ESIZE≤)OR(DSIZE≤)        IF(SALES(I)>MAXSALES)        IF(SALES(J)=MAXSALES)        IF(EMPTABDEPT(K)=DEPTTABDEFT(J))        IF(SALARY(K)≥)OR(JOB(K)=“M”)        IF(NOTFOUND)白盒法测试举例工资管理程序测试采用“判定覆盖”标准使得上述个判定都取到两种结果这就需要以下种情况出现。白盒法测试举例工资管理程序测试设计下面的两个测试用例可以满足“判定覆盖”(图中“职务”一栏“E”表示是一般职员“M”表示是经理)。ESIZE=DSIZE= EMPTAB                    DEPTTABERRCODE=ESIZE,DSIZE,DEPTTAB不变EMPTABESIZE=DSIZE= EMPTAB                    DEPTTABERRCODE=ESIZE,DSIZE,DEPTTAB不变EMPTAB白盒法测试举例工资管理程序测试虽然这两个例子满足“判定覆盖”标准但是它们不能发现程序中许多其他可能的错误例如没有检查ERRCODE为、职员是经理、部门表为“空”等情况。白盒法测试举例工资管理程序测试采用“条件覆盖”标准则必须使判定中的每一个条件取到两种可能的值这就需要以下种情况出现。白盒法测试举例工资管理程序测试白盒法测试举例工资管理程序测试设计下面的两个测试用例可以满足“条件覆盖”。ESIZE=DSIZE= EMPTAB                    DEPTTABERRCODE=ESIZE,DSIZE,DEPTTAB不变EMPTABESIZE=DSIZE= EMPTAB                    DEPTTABERRCODE=ESIZE,DSIZE,DEPTTAB不变EMPTAB白盒法测试举例工资管理程序测试尽管上面的测试用例满足“条件覆盖”标准但是它们可能比满足“判定覆盖”标准的测试用例差因为它们不能执行每一个语句(如语句)而且它们起的作用也不比满足“判定覆盖”的测试用例多许多如未能使ERRCODE=如果语句误写成(ESIZE=O)AND(DSIZE=)这个错误也不能被发现。白盒法测试举例工资管理程序测试采用“判定/条件覆盖”标准就可克服“条件覆盖”中例子的弱点我们需要提供足够的测试用例使得所有判定和条件都取到两个不同的值这里只需使“条件覆盖”测试用例中的职员JONES为经理而使LORIN不是经理则判定就可取到两种结果语句因而得以执行。白盒法测试举例工资管理程序测试问题:如果所用的编译系统将含有“OR”的表达式处理成:遇到第一项为“真”就不再检查后面的项则这样的两个测试用例并不能检查到JOB(K)=“M”这一部分。白盒法测试举例工资管理程序测试最后考虑“条件组合覆盖”标准它需要足够的例子使得每个判定中条件的各种组合情况都出现一次。本例中判定、、和各有两种组合判定和各有种组合。可以先选一个测试用例使其包含尽可能多的组合情况。再选另一测试用例使其包含尽可能多的余下的组合情况...直至得到一组测试用例能包含所有的组合情况。下面是满足“条件组合覆盖”标准的一组测试用例它比前面几组测试用例都全面。白盒法测试举例工资管理程序测试白盒法测试举例工资管理程序测试可以看出:即使是满足“条件组合覆盖”标准的例子仍不能发现BONUS中许多其他的错误。例如:没有检查ERRCODE=的情况所以如果语句中的ERRORCODE:=被遗漏了就查不出如语句中误写成也是发现不了的如SALARY(K)>=误写成SALARY(K)>也是发现不了的白盒法测试举例工资管理程序测试通过前面例子的讨论可以得到两点结论:“条件组合覆盖”标准比其他标准优越。即使达到任何一种覆盖标准其测试效果仍然是不彻底的我们还需要用其他的测试方法作补充。综合策略黑盒法补充测试用例白盒法和黑盒法各有长处和短处每种方法都可提供一组有用的测试用例这组测试用例容易发现某种类型的错误但不易发现其他类型的错误然而没有一种方法能提供一组“完整的”测试用例。因此实际软件测试方案设计是不同方法的综合应用。一个参考的黑盒法补充策略是:)在任何情况下都需使用边界值分析(这个方法应包括对输入和输出的边界值进行分析)。)必要的话再用等价分类法补充一些测试用例。)再用错误推测法附加测试用例。)检查上述例子的逻辑覆盖程度如果未能满足某些覆盖标准则再增加足够的测试用例。)如果功能说明中含有输入条件的组合情况则一开始就可先用因果图(判定表)法。习题为以下流程图所示的程序段设计一组测试用例要求分别满足语句覆盖、判定覆盖、条件覆盖、判定条件覆盖和条件组合覆盖。路径测试路径测试就是设计足够多的测试用例覆盖被测试对象中的所有可能路径。对于例下面的测试用例则可对程序进行全部的路径覆盖。对于例下面的测试用例则可对程序进行全部的路径覆盖。测试用例通过路径覆盖条件x=、y=、z=abdT、T、T、Tx=、y=、z=acdT、T、T、Tx=、y=、z=aceT、T、T、Tx=、y=、z=abeT、T、T、T基本路径测试例、例都是很简单的程序函数只有四条路径。但在实践中一个不太复杂的程序其路径都是一个庞大的数字要在测试中覆盖所有的路径是不现实的。为了解决这一难题只得把覆盖的路径数压缩到一定限度内例如程序中的循环体只执行一次。下面介绍的基本路径测试就是这样一种测试方法它在程序控制图的基础上通过分析控制构造的环行复杂性导出基本可执行路径集合从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每一个可执行语句至少执行一次。基本路径测试前提条件测试进入的前提条件是在测试人员已经对被测试对象有了一定的了解基本上明确了被测试软件的逻辑结构。测试过程过程是通过针对程序逻辑结构设计和加载测试用例驱动程序执行以对程序路径进行测试。测试结果是分析实际的测试结果与预期的结果是否一致。基本路径测试在程序控制流图的基础上通过分析控制构造的环路复杂性导出基本可执行路径集合从而设计测试用例。包括以下个步骤和一个工具方法:程序的控制流图:描述程序控制流的一种图示方法。程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。准备测试用例:确保基本路径集中的每一条路径的执行。工具方法:图形矩阵:是在基本路径测试中起辅助作用的软件工具利用它可以实现自动地确定一个基本路径集。控制流图的符号在介绍基本路径方法之前必须先介绍一种简单的控制流表示方法即流图。流图是对待测试程序过程处理的一种表示。流图使用下面的符号描述逻辑控制流每一种结构化构成元素有一个相应的流图符号。控制流图流图只有二种图形符号图中的每一个圆称为流图的结点代表一条或多条语句。流图中的箭头称为边或连接代表控制流。任何过程设计都要被翻译成控制流图。控制流图在将程序流程图简化成控制流图时应注意:在选择或多分支结构中分支的汇聚处应有一个汇聚结点。边和结点圈定的区域叫做区域当对区域计数时图形外的区域也应记为一个区域。如下页图所示控制流图控制流图如果判断中的条件表达式是由一个或多个逻辑运算符(OR,AND,NAND,NOR)连接的复合条件表达式则需要改为一系列只有单条件的嵌套的判断。例如:ifaorbxelsey对应的逻辑为:独立路径独立路径:至少沿一条新的边移动的路径,,路径:路径:路径:路径:对以上路径的遍历就是至少一次地执行了程序中的所有语句。基本路径测试第一步:画出控制流图流程图用来描述程序控制结构。可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。在流图中每一个圆称为流图的结点代表一个或多个语句。一个处理方框序列和一个菱形决策框可被映射为一个结点流图中的箭头称为边或连接代表控制流类似于流程图中的箭头。一条边必须终止于一个结点即使该结点并不代表任何语句(例如:ifelsethen结构)。由边和结点限定的范围称为区域。计算区域时应包括图外部的范围。基本路径测试例:有下面的C函数用基本路径测试法进行测试voidSort(intiRecordNum,intiType){intx=inty=while(iRecordNum>){if(==iType){x=ybreak}elseif(==iType)x=yelsex=y}}基本路径测试画出其程序流程图和对应的控制流图如下基本路径测试计算圈复杂度第二步:计算圈复杂度圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量将该度量用于计算程序的基本的独立路径数目为确保所有语句至少执行一次的测试数量的上界。独立路径必须包含一条在定义之前不曾用到的边。有以下三种方法计算圈复杂度:流图中区域的数量对应于环型的复杂性给定流图G的圈复杂度V(G)定义为V(G)=ENE是流图中边的数量N是流图中结点的数量给定流图G的圈复杂度V(G)定义为V(G)=PP是流图G中判定结点的数量。基本路径测试计算圈复杂度对应上面图中的圈复杂度计算如下:流图中有四个区域V(G)=条边结点=V(G)=个判定结点=。基本路径测试导出测试用例第三步:导出测试用例根据上面的计算方法可得出四个独立的路径。(一条独立路径是指和其他的独立路径相比至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。)路径:路径:路径:路径:根据上面的独立路径去设计输入数据使程序分别执行到上面四条路径。基本路径测试准备测试用例第四步:准备测试用例为了确保基本路径集中的每一条路径的执行根据判断结点给出的条件选择适当的数据以保证某一条路径可以被测试到满足上面例子基本路径集的测试用例是:基本路径测试准备测试用例路径:输入数据:iRecordNum=或者取iRecordNum<的某一个值预期结果:x=路径:输入数据:iRecordNum=,iType=预期结果:x=路径:输入数据:iRecordNum=,iType=预期结果:x=路径:输入数据:iRecordNum=,iType=预期结果:x=voidSort(intiRecordNum,intiType){intx=inty=while(iRecordNum>){if(==iType){x=ybreak}elseif(==iType)x=yelsex=y}}基本路径测试再举例例:下例程序流程图描述了最多输入个值(以–作为输入结束标志)计算其中有效的学生分数的个数、总分数和平均值。步骤:导出过程的流图。步骤:确定环形复杂性度量V(G):)V(G)=(个区域))V(G)=E–N=–=其中E为流图中的边数N为结点数)V(G)=P==其中P为谓词结点的个数。在流图中结点、、、、是谓词结点。基本路径测试再举例基本路径测试再举例步骤:确定基本路径集合(即独立路径集合)。于是可确定条独立的路径:路径:路径:路径:路径:…路径:…路径:…基本路径测试再举例步骤:为每一条独立路径各设计一组测试用例以便强迫程序沿着该路径至少执行一次。)路径()的测试用例:scorek=有效分数值当k<iscorei=–,≤i≤期望结果:根据输入的有效分数算出正确的分数个数n、总分sum和平均分average。基本路径测试再举例)路径()的测试用例:score=–期望的结果:average=–其他量保持初值。)路径()的测试用例:输入多于个有效分数即试图处理个分数要求前个为有效分数期望结果:n=、且算出正确的总分和平均分。基本路径测试再举例)路径(…)的测试用例:scorei=有效分数当i<scorek<k<i期望结果:根据输入的有效分数算出正确的分数个数n、总分sum和平均分average。)路径的测试用例:scorei=有效分数当i<scorek>k<i期望结果:根据输入的有效分数算出正确的分数个数n、总分sum和平均分average。基本路径测试再举例)路径(…)的测试用例:scorei=有效分数当i<期望结果:根据输入的有效分数算出正确的分数个数n、总分sum和平均分average。基本路径测试必须注意一些独立的路径往往不是完全孤立的有时它是程序正常的控制流的一部分这时这些路径的测试可以是另一条路径测试的一部分。工具方法:图形矩阵导出控制流图和决定基本测试路径的过程均需要机械化为了开发辅助基本路径测试的软件工具称为图形矩阵(graphmatrix)的数据结构很有用。利用图形矩阵可以实现自动地确定一个基本路径集。一个图形矩阵是一个方阵其行列数控制流图中的结点数每行和每列依次对应到一个被标识的结点矩阵元素对应到结点间的连接(即边)。在图中控制流图的每一个结点都用数字加以标识每一条边都用字母加以标识。如果在控制流图中第i个结点到第j个结点有一个名为x的边相连接则在对应的图形矩阵中第i行第j列有一个非空的元素x。工具方法:图形矩阵对每个矩阵项加入连接权值(linkweight)图矩阵就可以用于在测试中评估程序的控制结构连接权值为控制流提供了另外的信息。最简单情况下连接权值是(存在连接)或(不存在连接)但是连接权值可以赋予更有趣的属性:执行连接(边)的概率。穿越连接的处理时间。穿越连接时所需的内存。穿越连接时所需的资源。工具方法:图形矩阵根据上面的方法对例画出图形矩阵如下:工具方法:图形矩阵连接权为“”表示存在一个连接在图中如果一行有两个或更多的元素“”则这行所代表的结点一定是一个判定结点通过连接矩阵中有两个以上(包括两个)元素为“”的个数就可以得到确定该图圈复杂度的另一种算法。其他程序结构的测试方法程序插装借助往被测程序中插入操作来实现测试目的的方法。程序变异是一种错误驱动测试针对某类特定程序错误实现测试。程序强变异程序弱变异程序强变异的基本思想:对于给定的程序P先假定程序中存在一些小错误每假设一个错误程序P就变成P′如果假设了n个错误:ee…en则对应有n个不同的程序:PP…Pn这里Pi称为P的变异因子。理论上如果P是正确的则Pi肯定是错误的。即存在测试数据Ci使得P和Pi的输出结果是不同的。因此根据程序P和每个变异的程序可以求得PP…Pn的测试数据集C={CC…Cn}。运行C如果对每一个CiP都是正确的而Pi都是错误的这说明P的正确性较高。如果对某个CiP是错误的而Pi是正确的这说明P存在错误而错误就是ei。程序强变异的优缺点:优点:发现错误能力较强并且测试人员可以有选择地使用变异算子的一个子集来完成不同层次的测试分析增加了灵活性缺点:需要大量的计算机资源完成测试充分性分析运行大量的变异因子也导致了时间上巨大的开销。程序弱变异测试的基本思想:设P是一个程序C是P的简单组成部分若有一变异变换作用于C而生成C‘如果P’是含有C’的P的变异因子则在弱变异方法中要求存在测试数据当P在此测试数据下运行时C被执行且至少在一次执行中使C的产生值与C’不同。优点:开销小效率较高。白盒测试工具:静态:软件需要文档、设计文档、程序结构ViewLog公司LogiScope分析工具动态:功能确认、接口测试、覆盖率分析IBM公司的RationalPurify课堂练习voidSort(inti,intj){intm,n,km=n=k=while(i<){if(j<)melseif(j<)nelsek}printf(“d,d,d”m,n,k)}

VIP尊享8折文档

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/97

2019-一章白盒测试-文档资料

¥30.0

会员价¥24.0

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利