软件测试PPT课件_第1页
软件测试PPT课件_第2页
软件测试PPT课件_第3页
软件测试PPT课件_第4页
软件测试PPT课件_第5页
已阅读5页,还剩226页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章软件测试基本技术,3.1黑盒测试与白盒测试3.2白盒测试技术3.3黑盒测试技术,通常人们把软件测试技术归结为两大类:白盒测试又可分为两种:静态测试主要包括代码检查法、静态结构分析法等;动态测试主要包括程序插桩、逻辑覆盖、基本路径测试等。黑盒测试一般可分为两大类:功能测试主要包括等价类划分、边值分析、因果图法、错误推测、功能图法等,主要用于软件确认测试;非功能测试主要包括使用强度测试、性能测试、强度测试、兼容性测试、配置测试、安全测试等。,3.1黑盒测试与白盒测试,任何工程产品都可以使用白盒测试和黑盒测试两种方法之一进行测试。1黑盒测试黑盒测试:已知产品的功能设计规格和用户手册,可以进行测试验证每个功能是否实现、每个实现了的功能是否符合要求,以及产品的性能是否满足用户的要求。黑盒测试又叫数据驱动测试。,黑盒测试主要是为了发现以下几类错误:1.是否有不正确或遗漏的功能?2.在接口上,输入是否能正确的接受?能否输出正确的结果?(如界面错误)3.是否有数据结构错误或外部信息(例如数据文件)访问错误?(如数据库访问错误)4.性能上是否能够满足要求?5.是否有初始化或终止性错误?,2白盒测试白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。白盒测试又称为结构测试或逻辑驱动测试。,白盒测试须对程序模块进行如下检查:1.保证一个模块中的所有独立路径至少被使用一次2.对所有逻辑值均测试true和false。3.在循环的边界和运行的界限内执行循环体。4.检查内部数据结构以确定其有效性。,白盒测试方法所要求的技术较高,相应的测试成本也较大。对于一个应用的系统,程序的路径数可能是一个非常大的数字,即使借助一些测试工具,也不可能进行穷举测试。即使进行了穷举路径测试,也不能查出所有程序违反了设计规范的地方,不能发现程序中已实现但不是用户所需要的功能,可能发现不了一些与数据相关的错误或用户操作行为的缺陷。,黑盒测试不考虑程序内部架构和内部特性,主要是验证软件所应该具有的功能是否实现,软件系统的性能是否满足用户的要求。所以黑盒测试方法对技术的要求较低,方法简单有效.白盒测试和黑盒测试是辨证统一的,它们相互依赖而存在,相互对立又相互补充.,3.2白盒测试技术,白盒测试对象基本上是源程序,是以程序的内部逻辑为基础的一种测试方法。既然穷举测试不可行,为了节省时间和资源,提高测试效率,就必须从数量巨大的可用测试用例中精心挑选少量的测试数据,使得采用这些测试数据就能够达到最佳的测试效果,能够高效率地把隐藏的错误揭露出来。,白盒测试方法又可分为静态测试和动态测试。静态测试是一种不通过执行程序而进行测试的技术,其关键是检查软件的表示和描述是否一致,是否存在冲突或者歧义。动态测试需要软件的执行,动态测试主要验证一个系统在检查状态下是正确还是不正确。,3.2.1静态测试最常见的静态测试是找出源代码的语法错误,这类测试可由编译器来完成。除此之外,测试人员须采用人工的方法来检验程序,有些地方存在非语法方面的错误,只能通过人工检测的方法来判断。人工检测的方法主要有代码检查法、静态结构分析法等。,1代码检查法代码检查法主要是通过桌面检查,代码审查和走查方式,对以下内容进行检查:(1)检查代码和设计的一致性;(2)代码的可读性以及对软件设计标准的遵循情况;(3)代码逻辑表达的正确性;(4)代码结构的合理性;(5)程序中不安全、不明确和模糊的部分;(6)编程风格方面的问题等。,(1)桌面检查是指程序设计人员对源程序代码进行分析、检验,并补充相关的文档,发现程序中的错误。代码检查项目(基于分析技术)通常包括以下内容:检查变量的交叉引用表检查未说明的变量,违反了类型规定的变量以及变量的引用和使用情况。检查标号的交叉引用表验证所有标号的正确性以及转向指定位置的标号是否正确。检查子程序、宏、函数验证每次调用与所调用位置是否正确,调用的子程序、宏、函数是否存在,参数是否一致,并检验调用序列中调用方式与参数顺序、个数、类型上的一致性。,等价性检查检查全部等价变量的类型的一致性。常量检查确认常量的取值和数制、数据类型,检查常量每次引用同它的取值、数制和类型的一致性。设计标准检查检查程序是否违反设计标准的问题。风格检查检查程序的设计风格方面的问题。比较控制流比较设计控制流图和实际程序生成的控制流图的差异。,选择、激活路径用这种方法激活的路径集合,应保证源程序模块的每行代码都被检查,即桌面检查应至少达到语句覆盖。对照程序的规格说明对照程序的规格说明书,仔细地阅读源代码,逐字逐句进行分析和思考,从中发现程序的问题和错误。,(2)代码审查一般由程序设计人员和测试人员组成审查小组,通过阅读、讨论,对程序进行静态分析。召开程序审查会,在会上,首先由程序员逐句讲解程序的逻辑,在讲解的过程中,程序员能发现许多原来自己没有发现的错误,而讨论和争议则促进了问题的暴露。,(3)走查一般由程序设计人员和测试人员组成审查小组,通过逻辑运行程序,发现问题。首先小组成员提前阅读设计规格书、程序文本等相关文档,然后利用测试用例,使程序逻辑运行,记录程序的踪迹,发现、讨论、解决问题。,2静态结构分析法在静态结构分析中,测试人员通常通过使用测试工具分析程序源代码的系统结构、数据结构、数据接口、内部控制逻辑等内部结构,生成函数调用关系图、模块控制流图、内部文件调用关系图等各种图形、图表,清晰地标识整个软件的组成结构。,静态结构分析法通常采用以下一些方法进行源程序的静态分析:(1)通过生成各种图表,来帮助对源程序的静态分析常用的的各种引用表主要有:标号交叉引用表列出在各模块中出现的全部标号,并标出标号的属性变量交叉引用表即变量定义与引用表。在表中应标明各变量的属性,子程序(宏、函数)引用表在表中列出各个子程序、宏和函数的属性,还要列出参数表和参数的属性。等价表等价表需要列出在等价语句或等值语句中出现的全部变量和标号。常数表需要列出全部数字常数,并指出它们在哪些语句中首先被定义。,常用的各种关系图、控制流图主要有:函数调用关系图:列出所有函数,用连线表示调用关系,通过应用程序各函数之间的调用关系展示了系统的结构。利用函数调用关系图可以做到下面几点:检查函数的调用关系是否正确,是否存在孤立的函数而没有被调用,明确函数被调用的频繁度,对调用频繁的函数可以重点检查。模块控制流图:由许多结点和连接结点的边组成的图形,其中每个结点代表一条或多条语句,边表示控制流向,可以直观地反映出一个函数的内部结构。,(2)静态错误分析静态错误分析主要用于确定在源程序中是否有某类错误或“危险”结构。类型和单位分析类型和单位分析主要为了强化对源程序中数据类型的检查,发现在数据类型上的错误和单位上的不一致性。,引用分析最广泛使用的静态错误分析方法就是发现引用异常。如果沿着程序的控制路径,变量在赋值以前被引用,或变量在赋值以后未被引用,这时就发生了引用异常。,表达式分析对表达式分析可以发现和纠正在表达式中出现的错误。表达式分析主要包括以下几方面内容。在表达式中不正确地使用了括号造成的错误。数组下标越界造成错误。除数为0造成错误。对负数开平方,或对PI求正切值造成错误。最复杂的一类表达式分析是对浮点数计算的误差进行检查,由于使用二进制数不精确地表示十进制浮点数,常常使计算结果出乎意料。,接口分析程序关于接口的静态错误分析主要检查函数过程之间接口的一致性。因此,要检查形式参数与实际参数在类型、数量、维数、顺序、使用上的一致性,检查全局变量和公共数据区在使用上的一致性。,3.2.2程序插桩技术程序插桩是一种基本的测试手段,有着广泛的应用。程序插桩是借助往被测程序中插入操作,来实现测试目的的方法,即向源程序中添加一些语句,实现对程序语句的执行、变量的变化等情况进行检查。,在调试程序时,常常要在程序中插入一些打印语句。其目的是希望在执行程序时,打印出测试人员最为关心的信息,然后进一步通过这些信息了解程序执行过程中的一些动态特性(比如,程序的实际执行路径,或是特定变量在特定时刻的取值)。程序插桩能够按用户的要求,获取程序的各种信息,成为测试工作的有效手段。,这里以计算整数X和整数Y的最大公约数程序为例,说明插桩方法的要点。图3-1给出了这一程序的流程图。1.程序流程图的画法开始和结束:环形框顺序语句:矩形框分支语句:菱形框语句直接按执行顺序用箭头表示注意循环语句的画法其中虚线框表示插桩内容,2.最大公约数的计算方法辗转相除法:始终用较大数除以较小数,然后用余数代替较大数。整除时的除数就是最大公约数。举例:222407求最大公约数:222407(407除以222余数185)222185(222除以185余数37)37185(185除以37余数0)所以最大公约数为37辗转相减法,图3-1插桩后求最大公约数程序的流程图,图中虚线框部分并不是源程序的内容,而是为了记录语句执行次数而插入的计数语句。程序从入口开始执行,到出口结束。凡经历的计数语句都能记录下该程序点的执行次数。如果我们在程序的入口处还插入了对计数器初始化的语句,在出口处还插入了打印这些计数器的语句,就构成了完整的插桩程序,它便能记录并输出在各程序点上语句的执行次数。见图3.2.,图3.2插桩程序中插入的语句,设计插桩程序时需要考虑的问题包括:探测哪些信息;在程序的什么部位设置探测点;需要设置多少个探测点;如何在程序中特定部位插入某些用以判断变量特性的语句。,其中第1个问题需要结合具体情况解决,并不能给出笼统的回答。至于第2个问题,在实际测试中通常在下面一些部位设置探测点:程序块的第1个可执行语句之前。for、do、dowhile、dountil等循环语句处。if、elseif、else及endif等条件语句各分支处。输入/输出语句之后。函数、过程、子程序调用语句之后。return语句之后。goto语句之后。,关于第3个问题,需要考虑如何设置最少探测点的方案。在一般的情况下,在没有分支的程序段中只需一个计数语句。但程序中如果出现了多种控制结构,使得整个结构十分复杂,则为了在程序中设计最少的计数语句,需要针对程序的控制结构进行具体的分析。,第4个问题是如何在程序中特定部位插入断言语句。在应用程序插桩技术时,可在程序中特定部位插入某些用以判断变量特性的语句,使得程序执行中这些语句得以证实,从而使程序的运行特性得到证实,一般把插入的这些语句称为断言语句。这一做法是程序正确性证明的基本做法,尽管算不上严格的证明,但方法本身仍然是很实用的。,3.2.3逻辑覆盖逻辑覆盖也是白盒测试主要的动态测试方法之一,是以程序内部的逻辑结构为基础的测试技术,是通过对程序逻辑结构的遍历实现程序的覆盖,这一方法要求测试人员对程序的逻辑结构有清楚的了解.,1、逻辑覆盖的类型依据覆盖源程序语句的详细程度,逻辑覆盖主要包括:语句覆盖:使得每一条可执行语句至少执行一次判定覆盖:使程序中每个判断的取真分支和取假分支至少执行一次条件覆盖:使程序中每个判断的每个条件的每个可能取值至少执行一次,判定/条件覆盖:使程序中的每个判断的取真分支和取假分支至少执行一次,同时,每个判断的每个条件的每个可能取值至少执行一次满足判定/条件覆盖的测试用例一定同时满足判定覆盖和条件覆盖。条件组合覆盖:使程序中每个判断的所有可能的条件取值组合至少执行一次。满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖和判定/条件覆盖。路径覆盖:使程序中每一条可能的路径至少执行一次。,一般做白盒测试不会直接根据源代码,而是根据流程图来设计测试用例和编写测试代码,在没有设计文档时,要根据源代码画出流程图:为便于理解,根据下面所示的2个被测试程序(用C语言书写),分别讨论几种常用的覆盖技术。程序1如下:functionjs(floatA,floatB,floatX)if(A1if(x3)/语句块3,图3-4程序2流程图,一语句覆盖1、概念语句覆盖就是使程序中每个语句至少都能被执行一次。2、测试用例程序1,A=2,B=0,X=3经过路径a-c-e,程序2,x=4、y=5、z=5经过路径a-b-d。这样,每个程序通过一个测试用例即达到了语句覆盖的标准,当然,测试用例(测试用例组)并不是唯一的。,3、测试的充分性假设第一个判断语句if(A1if(x3)j=j%3(5)j=j%3LCSAJ路径(4条):(1)-(2)-(4)(1)-(2)-(5)(1)-(3)-(4)(1)-(3)-(5),voidDoWork(intx,inty,intz)intk=0,j=0;if(x3),3.2.4基本路径测试法路径测试就是从一个程序的入口开始,执行所经历的各个语句的完整过程。完成路径测试的理想情况是做到路径覆盖,但对于复杂性大的程序要做到所有路径覆盖(测试所有可执行路径)是不可能的。在不能做到所有路径覆盖的前提下,如果某一程序的每一个独立路径都被测试过,那么可以认为程序中的每个语句都已经检验过了,即达到了语句覆盖。这种测试方法就是通常所说的基本路径测试方法。,基本路径测试是在程序控制流图的基础上,通过分析控制结构的环路复杂度,导出基本可执行路径集合,从而设计测试用例的方法。基本路径测试方法包括以下4个步骤:(1)画出程序的控制流图。(2)计算程序的环路复杂度,导出程序基本路径集中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。(3)导出基本路径集,确定程序的独立路径。(4)根据(3)中的独立路径,设计测试用例的输入数据和预期输出。,1程序的控制流图控制流图是对程序流程图进行简化后得到的,它可以更加突出的表示程序控制流的结构。控制流图中包括两种图形符号:结点和控制流线。结点由带标号的圆圈表示,可代表一个或多个语句、一个处理框序列和一个条件判定框(假设不包含复合条件)。控制流线由带箭头的弧或线表示,可称为边。它代表程序中的控制流。对于复合条件,则可将其分解为多个单个条件,并映射成控制流图。,图3-5控制流图的图形符号,图3-6(a)所示的是一个程序的流程图,它可以映射成图(b)所示的控制流图。,图3-6程序流程图和对应的控制流图,这里假定在流程图中用菱形框表示判定条件内没有复合条件,一组顺序处理框可以映射为一个单一的结点。控制流图中的箭头(边)表示了控制流的方向,类似于流程图中的流线,一条边必须终止于一个结点,在选择或者是多分支结构中分支的汇聚处,即使汇聚处没有执行语句也应该添加一个汇聚结点。边和结点圈定的部分叫区域,当对区域计数时,图形外的部分也应记为一个区域。,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符(or、and)连接的逻辑表达式,则需要改变复合条件的判断为一系列只有单个条件的嵌套的判断。例如,ifaandbthenxelsey为复合条件的判定,它的控制流图如图3-7所示。条件语句ifaandb中条件a和条件b各有一个单个条件的判断结点。,图3-7复合逻辑下的控制流程图,2基本路径测试法的步骤基本路径测试包括画出程序的控制流程图,计算程序环路复杂性,确定独立路径集合,准备测试用例,确保基本路径集中的每一条路径的执行等4个步骤。,(1)画出程序控制流图流程图用来描述程序控制结构。可将程序流程图映射出一个相应的控制流程图(假设流程图的菱形判断框中不包含复合条件)。在程序流程图中,一个处理方框序列和一个菱形判断框可被映射为一个程序控制流程图的结点,流图中的箭头称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使该结点并不代表任何语句。由边和结点限定的范围称为区域。,程序3:voidsort(intiRecordNum,intitype)intx=0;inty=0;while(iRecordNum-0)if(itype=0)x=y+2;break;elseif(itype=1)x=y+10;elsex=y+20;画出其程序流程图和对应的控制流程图。,图3-8程序控制流程图,(2)计算程序环路复杂性环路复杂度也称为圈复杂度,它是一种为程序逻辑复杂度提供定量尺度的软件度量。进行程序的基本路径测试时,程序的环路复杂性给出了程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。独立路径必须包含一条在定义之前不曾用到的边。所谓独立路径,是指包括若干未曾处理的语句或条件的一条路径,或者是至少引入一个新处理语句或一条新判断的程序通路。,基本路径集不是惟一的,对于给定的控制流图,可以得到不同的基本路径集。通常环路复杂性可用以下3种方法求得。将环路复杂性定义为控制流图中的区域数。设E为控制流图的边数,N为图的结点数,则定义环路的复杂性为V(G)=EN+2。若设P为控制流图中的判定结点数,则有V(G)=P+1。,如在程序3.3控制流程图中:有4个区域,其环路复杂性为4;V(G)=EN+2=10(条边)-8(个结点)+2=4V(G)=P+1=3(个判定结点)+1=4其中,4是构成基本路径集的独立路径数的上界,可以据此得到应该设计的测试用例的数目。,(3)确定独立路径集合根据上面的计算方法,可得出4条独立的路径。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根据上面的独立路径,设计输入数据,使程序分别执行到上面4条路径。,(4)根据确定的独立路径集合,设计测试用例,注意:一些独立的路径往往不是完全孤立的,有时它们是程序正常的控制流的一部分,这时,这些路径的测试可以是另一条路径测试的一部分。,例3.1有一段计算学生人数、学生分数的总分数和平均值的被测试程序,该程序运行时最多输入50个值(以-1作为输入结束标志),其程序流程图如图3.10所示,试设计基本路径测试法的测试用例。解:设计基本路径测试法的测试用例步骤如下:,(1)导出下面程序的控制流程图1inti=1,n1=n2=0,sum=0;2,3while(scorei!=-1,1inti=1,n1=n2=0,sum=0;2,3while(scorei!=-1,(2)确定环路复杂性量度V(G)V(G)=6(个区域)V(G)=EN+2=16-12+2=6V(G)=P+1=5+1=6(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.,(4)为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。路径1:1-2-9-10-12的测试用例:scorek=有效分数值,当ki;scorei=-1,2=i=50;期望结果:根据输入的有效分数算出正确的学生人数n1,总分sum和平均分average路径2:1-2-9-11-12的测试用例:score1=-1;期望结果:average=-1,其他值保持初值。,1inti=1,n1=n2=0,sum=0;2,3while(scorei!=-1,路径3:1-2-3-9-10-12的测试用例:输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数;期望结果:n1=50,且算出正确的总分和平均分。路径4:1-2-3-4-5-8-2.的测试用例:scorei=有效分数,当i50;scorek0,ki;期望结果:根据输入的有效分数算出正确的学生人数n1、总分sum和评价分average,1inti=1,n1=n2=0,sum=0;2,3while(scorei!=-1,路径5:1-2-3-4-5-6-8-2.的测试用例:scorei=有效分数,当i100,k0,C0,且A+BC,B+CA,A+CB;如果是等腰的,还要判断A=B,或B=C,或A=C;如果是等边的,则需要判断是否A=B,且B=C,且A=C;这个程序要打印出信息,说明这个三角形是不等边的、是等腰的、还是等边的等。列出等价类表如表5.4所示:,先根据程序规格说明书中输入条件得到第一个有效等价类和对应无效等价类;然后根据不同输入域输出方式不同,再次划分有效等价类。,测试用例,等价分配的目标是把可能的测试用例组合缩减到仍然足以满足软件测试需求为止。这里的答案不是唯一的,测试同一个复杂程序的两个软件测试员,可能会制订出不同的等价区间,只要审查认为它们足以覆盖测试对象就可以了。,常见等价类划分测试形式,针对是否对无效数据进行测试,可以将等价类测试分为标准等价类测试和健壮等价类测试。标准等价类测试不考虑无效数据值,测试用例使用每个等价类中的一个值。健壮等价类测试主要的出发点是考虑了无效等价类。对有效输入,测试用例从每个有效等价类中取一个值;对无效输入,一个测试用例有一个无效值,其他值均取有效值。健壮等价类测试存在两个问题:(1)需要花费精力定义无效测试用例的期望输出(2)对强类型的语言没有必要考虑无效的输入,2.边界值分析法边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。为什么使用边界值分析法?无数的测试实践表明,大量的故障往往发生在输入定义域或输出值域的边界上,而不是在其内部。因此,针对各种边界情况设计测试用例,通常会取得很好的测试效果。,怎样用边界值分析法设计测试用例?(1)首先确定边界情况。通常输入或输出等价类的边界就是应该着重测试的边界情况。(2)选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值。,使用边界值分析方法的典型测试数据如下:对于循环结构,第0次、最后1次、第1次和倒数第2次是边界。对于16位整型数据,32767和-32768是边界。数组的第一个和最后一个下标元素是边界。报表的第一行和最后一行是边界。,边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。例:测试计算平方根的函数输入:实数输出:实数规格说明:当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息“平方根非法-输入值小于0”并返回0;库函数Print-Line可以用来输出错误信息。,等价类划分:可以考虑作出如下划分:输入(i)=0输出(a)=0和(b)Error测试用例有两个:输入4,输出2。对应于(ii)和(a)。输入-10,输出0和错误提示。对应于(i)和(b)。边界值分析:划分(ii)的边界为0和最大正实数;划分(i)的边界为最小负实数和0。由此得到以下测试用例:输入最小负实数输入绝对值很小的负数输入0输入绝对值很小的正数输入最大正实数,边界值分析,通常情况下,软件测试所包含的边界检验有几种类型:数字、字符、位置、质量、大小、速度、方位、尺寸、空间等相应地,以上类型的边界值应该在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、最短/最长、空/满等情况下,举例利用边界值作为测试数据,基于边界值分析方法选择测试用例的原则如下:如果输入条件规定了值的范围,则应该取刚达到这个范围的边界值,以及刚刚超过这个范围边界的值作为测试输入数据。如果输入条件规定了值的个数,则用最大个数、最小个数、比最大个数多1个、比最小个数少1个的数作为测试数据。根据规格说明的每一个输出条件,使用规则。根据规格说明的每一个输出条件,使用规则,如果程序的规格说明给出的输入域或输出域是有序集合(如有序表、顺序文件等),则应选取集合的第一个和最后一个元素作为测试用例。如果程序用了一个内部结构,应该选取这个内部数据结构的边界值作为测试用例。分析规格说明,找出其他可能的边界条件。,采用边界值分析测试的基本思想是:故障往往出现在输入变量的边界值附近。因此,边界值分析法利用输入变量的最小值(min)、略大于最小值(min+)、输入值域内的任意值(nom)、略小于最大值(max-)和最大值(max)来设计测试用例。边界值分析法是基于可靠性理论中称为“单故障”的假设,即有两个或两个以上故障同时出现而导致软件失效的情况很少,也就是说,软件失效基本上是由单故障引起的。因此,在边界值分析法中获取测试用例的方法是:(1)每次保留程序中一个变量,让其余的变量取正常值,被保留的变量依次取min、min+、nom、max-和max。(2)对程序中的每个变量重复(1)。,例1:有两个输入变量x1(ax1b)和x2(cx2d)的程序F的边界值分析测试用例如下:,例2:有二元函数f(x,y),其中x1,12,y1,31。则采用边界值分析法设计的测试用例是:,推论:对于一个含有n个变量的程序,采用边界值分析法测试程序会产生4n+1个测试用例。,练习:有函数f(x,y,x),其中x1900,2100,y1,12,z1,31的。请写出该函数采用边界值分析法设计的测试用例。,健壮性测试,健壮性测试是作为边界值分析的一个简单的扩充,它除了对变量的5个边界值分析取值外,还需要增加一个略大于最大值(max+)以及略小于最小值(min-)的取值,检查超过极限值时系统的情况。因此,对于有n个变量的函数采用健壮性测试需要6n+1个测试用例。前面例1中的程序F的健壮性测试如下图所示:,练习:请为例2中的函数f(x,y)写出相应的健壮性测试用例。,NextDate函数的边界值分析测试用例在NextDate函数中,隐含规定了变量month和变量day的取值范围为1month12和1day31,并设定变量year的取值范围为1912year2050。,3.错误推测法基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法,这就是错误推测法。错误推测法的基本想法是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。在设计输入测试数据时,如果软件要求输入数字,就输入字母;如果软件只接收正数,就输入负数。,例3.4:测试一个对线性表(比如数组)进行排序的程序,应用错误推测法推测出需要特别测试的情况。解:根据经验,对排序程序,下面一些情况可能使软件发生错误或容易发生错误,需要特别测试。输入的线性表为空表;表中只含有1个元素;输入表中所有元素已排好序;输入表已按逆序排好;输入表中部分或全部元素相同。,4.因果图法因果图法产生的背景:等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)。,因果图法的定义:是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。,采用因果图法设计测试用例的步骤:(1)根据程序规格说明书描述,分析并确定因(输入条件)和果(输出结果或程序状态的改变),画出因果图。(2)将得到的因果图转换为判定表。(3)为判定表中每一列所表示的情况设计一个测试用例。通常在因果图中,用Ci表示原因,Ei表示结果,其基本符号如图3-15所示。,图3-15因果图的基本符号,其中,各结点表示状态,可取值0(状态不出现)或1(某状态出现)恒等:若原因出现,则结果出现;若原因不出现,则结果不出现非():若原因出现,则结果不出现;若原因不出现,则结果出现或(V):若几个原因中有一个出现,则结果出现;若几个原因都不出现,则结果不出现;与():若几个原因都出现,结果才出现;若其中有一个原因不出现,则结果不出现,为了表示原因与原因之间,结果与结果之间可能存在的约束条件,在因果图中可以附加一些表示约束条件的符号。,因果图的约束符号,从输入(原因)考虑四种约束:E(互斥):表示a,b两个原因不会同时成立,两个中最多有一个可能成立I(包含):表示a,b,c三个原因中至少有一个必须成立O(惟一):表示a和b两个原因中必须有一个,且仅有一个成立R(要求):表示两个原因,a出现时,b也必须出现,也就是说a出现时b不可能不出现从输出(结果)考虑一种约束:M(屏蔽):两个结果,a为1时,b必须是0,当a为0时,b值不定,利用因果图生成测试用例的基本步骤如下:分析软件规格说明的描述中哪些是原因,哪些是结果。原因是输入条件或输入条件的等价类,结果是输出条件。分析软件规格说明描述中的语义,找出原因与结果之间、原因与原因之间对应的关系,根据这些关系,画出因果图。标明约束条件。由于语法或环境的限制,有些原因和结果的组合情况是不可能出现的。为表明这些特定的情况,在因果图上使用若干标准的符号标明约束条件。,把因果图转换成判定表。为判定表中的每一列设计测试用例。,使用因果图法的优点:考虑到了输入情况的各种组合以及各个输入情况之间的相互制约关系。,例3.5某软件规格说明书包含这样的要求:第1列字符必须是A或B,第2列字符必须是1个数字,在此种情况下对文件进行修改,但如果第1列字符不正确,则给出信息L;如果第2列字符不是数字,则给出信息M。解题步骤:(1)分析程序的规格说明,列出原因和结果。(2)找出原因与结果之间的因果关系、原因与原因之间的约束关系,画出因果图。(3)将因果图转换成判定表。(4)根据(3)中的判定表,设计测试用例的输入数据和预期输出。,(1)分析程序规格说明中的原因和结果:(2)画出因果图(编号为11的中间结点是导出结果的进一步原因):,(3)根据因果图建立判定表如表所示:,(4)根据判定表中的每一列设计测试用例:,习题,某软件的一个模块的需求规格说明书中描述:(1)年薪制员工:严重过失,扣年终风险金的4%;过失,扣年终风险金的2%。(2)非年薪制员工:严重过失,扣当月薪资的8%;过失,扣当月薪资的4%。请绘制出因果图和判定表,并给出相应的测试用例。,5.场景法现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。,用例场景用来描述用例执行的路径,从用例开始到结束遍历这条路径上所有基本流和备选流。1基本流和备选流如图3-17所示,图中经过用例的每条路径都用基本流和备选流来表示,基本流:采用直黑线表示,是经过用例的最简单的路径。备选流:用不同的色彩表示,一个备选流可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中(如备选流1和3);也可能起源于另一个备选流(如备选流2),或者终止用例而不再重新加入到某个流(如备选流2和4)。,图3-17基本流和备选流,根据上图所示的每个经过用例的路径,可以确定以下不同的用例场景。场景1:基本流;场景2:基本流、备选流1;场景3:基本流、备选流1、备选流2;场景4:基本流、备选流3;场景5:基本流、备选流3、备选流1;场景6:基本流、备选流3、备选流1、备选流2;场景7:基本流、备选流4;场景8:基本流、备选流3、备选流4;,2场景法设计步骤根据说明,描述出程序的基本流及各项备选流;根据基本流和各项备选流生成不同的场景;对每一个场景生成相应的测试用例;对生成的所有测试用例重新复审,去掉多余的测试用例,测试用例确定后,对每一个测试用例确定测试数据值,6.判定表驱动法(1)判定表驱动法概述在所有的黑盒测试方法中,基于判定表(也称决策表)的测试是最为严格、最具有逻辑性的测试方法。判定表的概念:判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。判定表的优点:能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。判定表很适合于处理这类问题。,规则,选项,“阅读指南”决策表,判定表通常由四个部分组成,如图所示。条件桩:列出了问题的所有条件(通常认为列出得条件的次序无关紧要)动作桩:列出了问题规定可能采取的操作(这些操作的排列顺序没有约束)条件项:针对条件桩给出的条件列出所有可能的取值。动作项:列出在条件项的各种取值情况下应该采取的动作。,将任何一个条件组合的特定取值及相应要执行的动作称为一条规则。在决策表中贯穿条件项和动作项的一列就是一条规则。,生成判定表的规则如下:规则:任何一个条件组合的特定取值及其相应要执行的操作称为规则。在判定表中贯穿条件项和动作项的一列就是一条规则。显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列。化简:就是把有两条或多条具有相同的动作,并且其条件项之间存在着极为相似的关系的规则合并。,(2)判定表的建立步骤:确定规则的个数。有n个条件的决策表有2n个规则(每个条件取真、假值)。列出所有的条件桩和动作桩。填入条件项。填入动作项,得到初始决策表。简化决策表,合并相似规则。若表中有两条以上规则具有相同的动作,并且在条件项之间存在极为相似的关系,便可以合并。合并后的条件项用符号“-”表示,说明执行的动作与该条件的取值无关,称为无关条件。,例3.6一个软件的规格说明指出:当条件1和条件2满足,并且条件3和条件4不满足,或者当条件1、条件3和条件4满足时,要执行操作1;在任一条件都不满足时,要执行操作2;在条件1不满足,而条件4被满足时,要执行操作3。试根据规格说明建立判定表。,上面判定表只给出了16种规则中的8种。事实上,除了这4种以外的一些规则是指当不能满足指定的条件,执行这些条件时,要执行1个默许的操作。在无必要时,判定表通常可略去这些规则。但如果用判定表来设计测试用例。就必须列出这些默许规则。,默许的操作,判定表的优点是它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏。其缺点是不能表达重复执行的动作,例如循环结构。,适合使用判定表设计测试用例的条件:规格说明以判定表形式给出,或很容易转换成判定表。条件的排列顺序不会也不影响执行哪些操作。规则的排列顺序不会也不影响执行哪些操作。每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则。如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要。,给出这5个必要条件的目的是为了使操作的执行完全依赖于条件的组合。其实对于某些不满足这几个条件的判定表,同样也可以应用它来设计测试用例,只不过还需要增加其他的测试用例。,7.正交试验法利用因果图来设计测试用例时,由于因果关系一般非常庞大,以至于据此因果图而得到的测试用例数目非常大,给软件测试带来沉重的负担。为了有效地、合理地减少测试的工时与费用,可利用正交试验法进行测试用例的设计。正交实验设计方法:是依据伽罗瓦理论,从大量的(实验)数据(测试用例)中挑选适量的,有代表性的点(用例),从而合理地安排试验(测试)的一种科学实验设计方法。类似的方法有:聚类分析方法,因子方法等。,正交试验法常使用下面2个术语:因子:影响试验指标的条件称为因子。因子的状态(或水平):影响实现因子的条件。,利用正交试验设计测试用例的步骤:提取功能说明,构造因子-状态表根据被测试软件的规格说明书找到影响其功能实现的操作对象和外部因素,把它们当做因子,而把各个因子的取值当做状态。加权筛选,生成因素分析表对因子与状态的选择可按其重要程度分别加权。利用正交表构造测试数据集正交表的推导依据伽罗瓦理论,正交表的构成行数(Runs):正交表中的行的个数,即试验的次数,也是我们通过正交实验法设计的测试用例的个数。因子数(Factors):正交表中列的个数,即我们要测试的功能点。水平数(Levels):任何单个因素能够取得的值的最大个数。正交表中的包含的值为从0到“水平数-1”或从1到“水平数”。即要测试功能点的输入条件。正交表的形式:L行数(水平数因子数)如:L8(27),举例1.为了提高某化学产品的转化率,选择了三个有关因素进行条件试验,反应温度(),反应时间(),用碱量(),并确定了它们的试验范围如下:;:分钟;:。解:试验目的是搞清楚因子A、B、C对转化率有什么影响,哪些是主要的,哪些是次要的,从而确定最适生产条件,即温度、时间及用碱量各为多少才能使转化率高。试制定试验方案。这里,对因子A,在试验范围内选了三个水平;因子B和C也都取三个水平:A:Al80,A285,A3=90B:Bl90分,B2120分,B3=150分C:Cl5,C26%,C37%,正交试验法优点节省测试工时可控制生成的测试用例的数量测试用例具有一定的覆盖率,8.功能图法功能图法是用功能图形象地表示程序的功能说明,并机械地生成功能图的测试用例,功能图方法是一种黑盒白盒混合用例设计方法。(1)程序功能说明的组成程序功能说明包括动态说明和静态说明。动态说明:描述输入数据的次序或转移次序。静态说明:描述输入条件和输出条件之间的对应关系。,(2)功能图、状态迁移图及逻辑功能模型功能图:功能图模型由状态迁移图和逻辑功能模型构成。状态迁移图用状态和迁移来表示。一个状态指出数据输入的位置(或时间),一个迁移指明状态的改变,同时要依靠判定表或因果图表示的逻辑功能。状态迁移图:用于表示输入数据序列以及相应的输出数据;由输入数据和当前状态决定输出数据和后续状态。逻辑功能模型:用于表示在状态中输入条件和输出条件的对应关系。由输入数据决定输出数据。此模型只适用于描述静态说明。,(3)基于功能图法生成测试用例功能图测试用例由测试中经过的一系列状态和在每个状态中必须依靠输入/输出数据满足的一对条件组成。生成测试用例的方法是:从状态迁移图中选取测试用例,用节点代替状态,用弧线代替迁移,状态图就可转化成一个程序的控制流程图形式。测试用例生成规则是:为了把状态迁移(测试路径)的测试用例与逻辑模型(局部测试用例)的测试用例组合起来,从功能图生成实用的测试用例,在一个结构化的状态迁移(SST)中,定义3种形式的循环:顺序,选择和重复。,功能图生成测试用例步骤如下:生成局部测试用例:在每个状态中,从因果图生成局部测试用例;测试路径生成:利用上面的规则生成从初始状态到最后状态的测试路径;测试用例合成:合成测试路径与功能图中每个状态的局部测试用例。结果是初始状态到最后状态的一个状态序列,以及每个状态中输入数据与对应输出数据的组合;采用条件构造树测试用例的合成算法。,3.3.2非功能测试1.强度测试强度测试是验证软件的性能在各种极端的周边环境和系统条件下是否能正常工作,也就是验证软件的性能在各种极端的周边环境和系统条件下的承受能力。这里所谓“强度”包括了两项:一项是超载运行测试,另一项是容量测试。,超(满)载运行测试:是对软件在单位时间内所能承受的荷载的极限进行验证。例如,一个提供文档下载的网站服务器软件,规定同时登录下载的用户不得超过10人。所谓满载测试就是10个用户在同一时间内登录,超载测试就是10个以上的用户在同一时间内登录。容量测试:是对软件系统处理大量数据的能力进行检验。以文字编辑软件为例,用户打开一个文件,存入大量的文字或数据,然后尝试将文件存储。当文字或数据的量达到一定程度的时候,或者说这个容量已经接近系统处理能力的极限时,软件会有什么样的表现?测试的目的在于观察分析软件在这些情况出现时的表现,最起码的要求是软件在这种条件下不至于崩溃。,2.性能测试性能测试通常是验证软件的性能在正常环境和系统条件下重复使用时是否还能满足性能指标,软件的性能测试是系统测试中难度较大的测试。软件系统的性能测试包括:系统反应时间、用户反应时间、软件界面反应时间、中央处理器的利用率、检查系统记忆容量在运行程序时有没有流失现象(或称内存泄露,)等。进行软件系统性能测试,必须先设计测试的模式,这个模式就是根据软件设计说明或用户手册里标明的硬件规格和软件指标而设计的。这个性能测试的模式一旦建立,以后每次的性能测试都应该尽可能在相同的设置下进行,只有这样,测试的结果才可以对照。,软件测试性能测试受周边各种因素的影响很大。因而测试的结果只是在一定范围内有效。由于性能测试操作及设定比较复杂,一般软件公司都使用专门的性能测试软件进行测试。,3.安全测试软件安

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论