




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
黑盒测试动态测试无论是白盒测试还是黑盒测试,有一个共同的特点:就是对被测软件S,设S的输入空间为D,测试就是选取或产生D的一个子集CD,C称为测试数据。所不同的是选择C的方式不同。对一般的软件来讲,D都是非常大的,以至穷举测试是不可能的,否则,是可以验证一个软件的正确性的。黑盒测试是根据程序的外部特性、也就是说程序的功能产生测试用例的。理论上讲,采用黑盒测试技术并不需要提供程序的源代码,在有些情况下,由于用户不能或者不愿意提供源代码的情况下,黑盒测试是必须的方法。黑盒测试方法包括等价类划分法、因果图法、正交实验设计法、边值分析法、判定表驱动法等。这些方法大都来源于其它不同的学科理论和工程实践,并不是软件测试技术所独有的,但在软件测试技术中却能发挥很好的效果。3.1等价类划分法1.等价类的概念定义3.1:等价类。所谓等价类是指ED,对eE,若用e作为测试用例测试程序发现不了某类功能上明显的错误(例如,对没有实现的功能等),那么对e’E,若用e’作为测试用例测试程序也发现不了这种错误。也就是说,E中所有的元素对揭露此类错误而言是等价的。等价类测试实际上是将D划分成n个子集E1,E2,…,En,那么,测试时只需在每个Ei中随机的选择一个测试用例即可。定义3.2:有效等价类。有效等价类是指程序规格说明书中规定的数据的集合。定义3.3:无效等价类。无效等价类是指超出程序规格说明书中规定的数据的集合。有效等价类是可以理解的,而无效等价类虽然不是规格说明中所规定的数据,但又是实际使用时可能碰到的。例如,一个程序的输入空间为[1,10],如果仅对该数据进行测试,而当输入11或0时就出现错误,这显然不是用户或编程者所希望的,这种软件也无法使用。因为用户在使用软件时,有意或无意输入非法的数据是经常的事情。但是要注意,无效等价类也不是没有限制的,一般来讲,无效等价类和有效等价类应用相同的数据类型。否则,无法对无效等价类进行确定。当然用户使用软件时输入的数据可以是五花八门的,输入一个不相同数据类型的数据也不是什么罕见的事情,但这里是不可能考虑这些问题的。2.如何确定等价类一般来讲,等价类划分首先要分析所有可能的输入情况,然后,按照下列规则对其进行划分。(1)如果输入条件中规定了取值的范围,则可以确定一个有效等价类和两个无效等价类。例如,输入条件中规定了x是1到10的整数,则有效等价类是[1,10],而无效等价类是x0的整数和x11的整数。(2)如果输入条件中规定了输入值的集合或者规定了“必须如何”的情况下,则可以确定一个有效等价类即该集合本身;一个无效等价类即该集合的非。例如,一般的语言都规定:标识符是以字母开头。则有效等价类是以字母开头的元素的集合,而无效等价类是以非字母开头的元素的集合。(3)如果输入条件是一个BOOLEAN变量,则可以确定一个有效等价类和一个无效等价类。(4)如果规定了输入数据是一组值(假设n个),并且程序要对每一个输入值分别处理的情况下,可确定n个有效等价类和一个无效等价类。(5)如果规定了输入数据必须遵守规则的前提下,可确立一个等价类和若干个无效等价类(从不同的角度违反规则)。(6)在确知已划分的等价类中各元素在程序处理中的方式是不同的,则应将等价类进一步划分成更小的等价类。。例如,假设有效等价类是:以字母开头的元素的集合,而在该集合中,有些是程序规定的关键字,如:int、float、long、char,等,则此时可将该等价类划分成两个等价类,等价类1是关键字集合{int、float、long、char,…},等价类2是以字母开头的、且不在等价类1的元素的集合。3.如何确定测试用例(1)设计一个测试用例,使其尽可能多的覆盖尚未覆盖的有效等价类。重复这一步骤,直到所有的等价类都被覆盖为止。(2)设计一个无效等价类,使其只覆盖一个无效等价类。重复这一步骤,直到所有的无效等价类都被覆盖为止。每次覆盖尽可能多的有效等价类,是因为每个有效等价类中的元素对错误检测的效果是一样的,越少越省事,但效果是相同的。而每次只覆盖一个无效等价类,是因为如果一个测试用例可以检测多个错误,则如果是覆盖多个无效等价类,则有可能只检测一个而忽略其它的错误。例如等价类1是{科技书的集合},等价类2是{10x50},则无效等价类1是{非科技书的集合}、无效等价类2是{x10}、无效等价类2是{50x},如果选择的覆盖无效等价类的测试用例是小说5,则可能只发现书类型的错误而忽略了册数错误。4.应用举例【例3.1】对【例2.19】给出的判断三角形类型的程序,根据题意,设计的有效等价类和无效等价类如表3.1所示。表3.1【例3.1】的等价类有效等价类编号无效等价类编号输入条件输入三个数整数1一边为非整数a为非整数b为非整数c为非整数12131415161718两边为非整数a,b为非整数b,c为非整数c,a为非整数三边为非整数a,b,c为非整数三个数2只给一边只给a只给b只给c19202122232425只给两边只给a,b只给b,c只给c,a给出三边以上非零数3一边为0a=0b=0c=0262728两边为0a=b=0b=c=0c=a=0293031三边为0a=b=c=032正数4一边<0a<0b<0c<033343536373839两边<0a<0,b<0b<0,c<0c<0,a<0三边<0a<0,b<0,c<0输出条件构成一般三角形a+b>cb+c>aa+c>b5a+b<ca+b=c4041424344456b+c<ab+c=a7c+c<ba+c=b构成等腰三角形a=b且a+b>cb=c且b+c>ac=a且a+c>b8910构成等边三角形a=b=c11(1)覆盖有效等价类的测试用例。如表3.2所示。表3.2覆盖有效等价类的测试用例abc覆盖的等价类号码3454454555444441717,817,917,1017,11(2)覆盖无效等价类的测试用例。如表3.3所示。表3.3覆盖无效等价类的测试用例abc覆盖的等价类号码abc覆盖的等价类号码2.54534.55344.5121314005300040000293031323.54.5534.55.53.545.55.54.55.515161718-3453-4534-5333435345192021-3-45-34-53-4-5-3-4-5363738394455345622232425315325311321404142430453053402627281423414445【例3.2】对一元二次方程ax2+bx+c=0的求根程序,应用等价类划分技术进行测试。根据题意,设计的有效等价类和无效等价类如表3.4所示。表3.4【例3.2】的等价类有效等价类编号无效等价类编号输入条件输入三个数实数1一个为非实数a为非实数b为非实数c为非实数891011121314两个为非实数a,b为非实数b,c为非实数c,a为非实数三个为非实数a,b,c为非实数三个数2只给一个只给a只给b只给c15161718192021只给两个只给a,b只给b,c只给c,a给出三个以上一个不给22输出条件两个实根b2-4ac>03一个实根b2-4ac=0a=0,b045两个虚根b2-4ac<067无根a=0,b=0(1)覆盖有效等价类的测试用例。如表3.5所示。表3.5覆盖有效等价类的测试用例abc覆盖的等价类号码2652420550041312,412,512,6(2)覆盖无效等价类的测试用例(x是一个字符),如表3.6所示。表3.6覆盖无效等价类的测试用例 abc覆盖的等价类号码abc覆盖的等价类号码x453x534x8910456151617xx5x4x4xxxxx111213145566456718192021225.常见的等价类测试形式上述给出的等价类测试方法是最一般的形式。在实际使用等价类方法测试时,要考虑等价类测试的程度,不同的程度测试的效果是不同的。究竟选取那一种要根据具体的问题而定。弱等价类:是指选取的测试用例要覆盖每一个有效等价类。强等价类:是指每个有效等价类要选择至少一个测试用例。(3)弱健壮等价类:是指选取的测试用例要覆盖每一个有效等价类和无效等价类,但不能同时覆盖两个无效等价类。强健壮等价类:每个有效等价类和无效等价类都至少要选择一个测试用例。【例3.3】假设ax1d,划分三个等价类区间:[a,b),[b,c),[c,d]。ex2g,划分两个等价类区间:[e,f],[f,g]。则用弱等价类选取测试用例如图3.1所示(表示在此区域内选择测试用例)。用强等价类选取测试用例如图3.2所示。用弱健壮等价类选取测试用例如图3.3所示。用强健壮等价类选取测试用例如图3.4所示。6.等价类测试的指导方针使用等价类划分测试时,应注意下列几个问题:(1)如果实现的语言是强类型语言(无效值输入会引起系统运行时出错),则没有必要使用健壮等价类测试。(2)如果错误输入检查非常重要,则应进行强健壮等价类测试。(3)如果输入数据以离散区间或集合的形式定义,则等价类测试是合适的,当然也适用于变量值越界会造成故障的系统。(4)在发现合适的等价关系之前,可能需要多次尝试。如果不能肯定存在明显或自然的等价关系,最好对任何合理的实现进行再次预测。【例3.4】作者参与鉴定的两个大型工程应用软件采用等价类测试的效果。(1)软件=1\*ROMANI包括两个子系统,每个子系统包括四模块,软件交付后,由于使用过程中出现问题,该软件交付第三方测试。根据软件的特点,测试过程中分别采用等价类测试技术,共产生169个测试用例,共检测出23个严重和比较严重的错误,纠正了这些错误之后,软件执行了三次重大任务尚没出现问题。(2)软件=2\*ROMANII包括五个子系统,软件在交付用户前由第三方实施测试,根据该软件的特点采用等价类测试技术。每个子系统的测试结果为:子系统1:设计测试用例52个,测试发现12个错误。子系统2:设计测试用例37个,测试发现13个错误。子系统3:设计测试用例128个,测试发现8个错误。子系统4:设计测试用例84个,测试发现14个错误。子系统5:设计测试用例118个,测试发现3个错误。在修改了发现的错误后,该系统多次应用于重大任务,尚无发现问题。3.2因果图法如果程序的输入之间没有什么关系,采用等价类划分法是一种比较有效的方法。但如果输入之间有关系,例如约束关系、组合关系等,则采用等价类划分法是难以描述的,测试效果也难以保障。因果图法正是在此背景下提出来的。1.因果图的概念(1)原因—结果图:这是描述输入输出之间关系的因果图,共有四类图形,如图3.5所示。图中输入状态ci表示原因,输出状态ei表示结果。ci和ei均可取值0或1,0表示状态不出现,1表示状态出现。(2)约束图:在实际问题中,输入状态之间还可能存在某些依赖关系,称之为约束。例如,某些输入条件不可能同时出现。这些关系,对测试来说是非常重要的。多个输出之间可能有强制的约束关系,如图3.6所示。各个符号的意义为:E(Exclusive,异或):表示只能1个为1;I(Inclusive,包含):表示至少1个为1;O(OneandOnly,唯一):只有一个为1;R(Require,包含):表示a是1,则b必须是1;M(Masks,屏蔽):表示a是1,则b必须是0。2.测试用例的生成步骤根据SRS,把程序划分成可以工作的片段;确定规格中的原因和结果;分析规格,以确定原因和结果之间的逻辑关系,并用因果图的方式表示出来;确定因果图中的各个约束;将因果图转化为判定表;从判定表中产生测试用例。3.应用举例【例3.5】某个软件规格说明书中规定:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不正确,则给出信息M。原因:1——第一列字符是A;2——第一列字符是B;3——第二列字符是一数字。结果:21——修改文件;22——给出信息L;23——给出信息M。分析可知,输入的三个状态只有六种取值。因为状态1和2不能同时为1,为此,可以形成表如3.7所示:表3.7判定表及测试用例123456原因111000020011003101010结果210000112210100023010101测试用例A3AMB5BNC2DYA5A7B4B!X6P;上述给出的表格也称判定表,在本章中将有详细介绍。从本例中可以看出,通过因果图和判定表,可以非常容易的找出测试用例。【例3.6】FORTRAN语言的语法规定是非常严格的。在一个程序行中,第15列是标号区,第6列是续行区。如果前6列是空白,则执行动作A。如果15列有标号且是正确的标号,则执行动作B后再执行动作A,反之,若是错误的标号,则执行动作C。如果第6列不是空白且是字母C,则执行动作D后再执行A,反之,执行动作C。原因:1——前6列是空白;2——前6列不是空白;3——15列是正确的标号;4——第6列是字母C。结果:A——正确执行;B——处理标号;C——错误处理;D——处理续行。根据图3.8,可以列出表3.8。表3.8判定表及测试用例134原因110030104001结果A111B010C011D001测试用例15列第6列15列第6列15列第6列空白空白xyz123空白空白空白空白C?3.3判定表法判定表的作用在上一节中已经介绍,实际上,判定表并不是因果图法的一个辅助工具,在一个程序中,如果输入输出比较多,输入之间、输出之间相互制约的条件比较多,在这种情况下应用判定表是更合适的,它可以更清楚的表达它们之间的各种复杂关系。1.判定表的概念判定表是把作为条件的所有输入的各种组合值以及对应输出值都罗列出来形成的表格称为判定表。【例3.7】可以把本书的阅读指南形成一个判定表。条件:会编程序吗?熟悉软件工程吗?对书中的内容感兴趣吗?能看懂吗?动作:学习C语言;学习软件工程;继续阅读;放弃学习。这里,输入有4个,共有24=16种组合。在表的条件中,用Y表示肯定、N否定,用-表示无关项。在动作中,用表示完成相应的动作,用空白表示没有动作。如表3.9所示。表3.9【例3.7】的判定表12345678910111213141516条件会编程序吗?NNNNNNNNYYYYYYYY熟悉软件工程吗?NNNNYYYYNNNNYYYY对书中的内容感兴趣吗?NNYYNNYYNNYYNNYY能看懂吗?NYNYNYNYNYNYNYNY动作学习C语言学习软件工程继续阅读放弃学习2.判定表的化简对于n个条件的判定表,对应的状态有2n个,但n比较大时,这是非常繁琐的。实际上,正如表3.9所给出的,有些项是可以简化的。判定表的化简包括下列两个方面:(1)合并:如果一个条件项(表中一列中的条件值)和另外一个条件项所产生的动作是相同的、且两个条件项对应的每一行的值只有一个是不同的,则可以将其合并。合并的项除了不同值变成无关项外,其余的保持不变。(2)包含:如果两个条件项的动作是相同的,对任意条件1中任意一个值和条件2中对应的值,如果满足:1)如果条件1的值是Y,则条件2中的值也是Y。如果条件1的值是N,则条件2中的值也是N。2)如果条件1的值是-,则条件2中的值是Y、N、-。则称条件1包含条件2。此时,条件2可以散去。重复1)和2)即可得到精简的判定表。实际上。判定表的化简和BOOLEAN表达式的化简是基本是一样的。【例3.8】在表3.9中,经合并化简后如表3.10所示。表3.10【例3.7】的化简判定表123456789包括原来的列152436878911101213141516条件会编程序吗?NNNNNYYYY熟悉软件工程吗?-NNYYNNYY对书中的内容感兴趣吗?N-Y-Y--NY能看懂吗?NYNY-NY--动作学习C语言学习软件工程继续阅读放弃学习3.选择测试用例这部分工作是十分简单的,在简化的或最后的判定表给出之后,只要选择适当的输入,使判定表每一列的输入条件值都得到满足亦可。4.方法评述(1)对于没有实现的功能、或功能上有明显错误的程序,用等价类、因果图和判定表等测试方法是比较有效的。例如在【例3.2】中,如果程序中没有对a=0这种情况进行处理,用该方法是很容易检测出来的。因此,该技术可用于软件的验收测试之中。(2)如果程序比较大,或涉及的变量、或功能比较多,用这种方法需要花费大量的人工时间。上述例子可以看出,这种方法是难以自动化的,完全是靠人的智慧。因此,它也要求测试人员必须具备相当的水平。(3)黑盒测试共同的特点是对程序的一些“小”错误,例如关系运算符漂移:变成、变成、或反之等,此类;此类错误的检测是比较困难的。3.4边界值测试方法任何一个程序都可以看作是一个函数,程序的输入构成函数的定义域,程序的输出构成函数的值域。人们从长期的测试工作经验得知,大量的软件故障往往发生在定义域或输出域的边界上,而不是在其内部。美国陆军(CECCOM)对其软件进行了研究,惊奇地发现,大量缺陷都是和边界有关的缺陷。边界条件边界条件是一些特殊情况。一般来说,在条件C下,软件执行一种操作,对给任意小的值,C+就会执行另外的操作,则C就是一个边界。对给定的软件,有显式给出边界的,也有隐式给出的。但对任何软件来说,根据软件的SRS或根据源代码,都可以给出该软件的边界。边界值分析测试为便于理解,这里讨论一个有两个变量x1和x2的程序P。假设输入变量x1和x2的在下列范围内取值。ax1b,cx2d。程序P的输入空间如图3.9所示。边界值测试的基本原理是故障往往出现在输入变量的边界值附近。例如“”错写成“<”,计数器少记一次等。边界值分析基于在可靠性理论中称为“单故障”的假设,也就是说,软件的失效是由单故障引起的。边界值分析利用输入变量的最小值(min)、稍大于最小值(min+)、域内任意值(nom)、稍小于最小值(max-)、最大值(max)来设计测试用例。图3.9给出的例子的边界值分析测试用例为:{<x1nom,x2min>,<x1nom,x2min+>,<x1nom,x2nom>,<x1nom,x2max>,<x1nom,x2max->,<x1min,x2nom>,<x1min,x2nom>,<x1max,x2nom>,<x1max-,x2nom>}对于一个含有n个变量的程序,保留其中一个变量,让其余变量取正常值,这个被保留的变量依次取值min,min+,nom,max-和max,对每个变量重复进行,则边界值分析会产生4n+1个测试用例。边界值分析的健壮性测试健壮性测试是边界值分析测试的一种扩展,变量除了考虑min,min+,nom,max-和max外,还要考虑min-和max+,如图3.11所示。【例3.9】三角形问题的边界值分析测试用例设计。假设边长为整数,边长下界为1,上界为100。表3.11给出了其边界值分析测试用例。表3.11边界值分析测试用例测试用例abc预期输出Test1Test2Test3Test4Test550505050505050505050135099100等腰三角形等腰三角形等腰三角形等腰三角形非三角形Test6Test7Test8Test950505050129910050505050等腰三角形等腰三角形等腰三角形非三角形Test10Test11Test12Test1312991005050505050505050等腰三角形等腰三角形等腰三角形非三角形【例3.10】某人事管理系统包括的内容是:姓名、性别、籍贯、出生日期、学历、身高、德才表现等。采用边值测试技术如表3.12所示。表3.12边界值分析测试用例输入项描述边值姓名20个字符0个字符、1个字符、20个字符、21个字符性别1个字符0个字符、1个字符、2个字符籍贯20个字符0个字符、1个字符、20个字符、21个字符出生日期年4位数0位数、1位数、4位数、5位数月120、1、12、13日310、1、31、32学历2个字符0个字符、1个字符、2个字符、3个字符身高三位数0位数、1位数、3位数、4位数德才表现2000个字符0个字符、1个字符、2000个字符、2001个字符根据边值的分析,可以很容易的产生测试用例。读者可以自行练习。3.5正交实验设计法利用等价类划分法、因果图法和判定表法对软件进行测试时,即使对中小规模的软件,给出的等价类、因果图、判定表可能都比较庞大,测试用例的数目惊人,给软件测试工作带来沉重的负担。为有效合理地减少测试的代价,可以利用在生产活动中行之有效的正交实验设计法进行测试用例的设计。所谓正交实验设计法,是从大量的实验点中挑选适量的、有代表性的点,应用伽罗瓦(Galois)理论导出的“正交表”,合理地安排实验的一种科学的实验设计方法。利用这种方法,可使所有的因子和水平在实验中均匀地分配与搭配,有规律的变化。在正交实验设计法中,通常把判断实验结果优劣的标准叫做实验的指标,把有可能影响实验指标的条件称为因子,而影响实验因子的称为因子的水平(或状态)。在进行实验优化设计时,为了完成明确的实验目的,必须有合理的实验指标,加上合理的基准来挑选实验因子及相应的水平。提取软件的因子和水平的方法利用正交实验设计法来设计软件的测试用例时,首先要从软件的规格说明书找出其影响其功能实现的操作对象和外部因素,把它们当作因子,而把各个因子的取值当作状态,据此可以造出二元的因素分析表。然后,利用正交表进行各因子的状态组合,构造出有效的测试用例,这样得出的测试用例集中,测试用例的数目会大大减少。提取因子的方法是:需要对软件规格说明书中的功能进行划分,把整体概要性的功能进行层层分解,形成具体的、相对独立的基本功能集、或因子集,同时要确定各个因子的权值。然后,由用户会同测试人员根据软件规格说明书,确定各个因子的取值,即因子的状态。由于有些因子的取值范围较广,必须进行采样取值,在各个不同的取值区间上取典型值与边界值,并重点选取某些有特定意义的取值点。因素分析表的生成设S是被测软件,{F1,F2,…,Fn}是S提取的功能因子,由前趣的分析可知,如果n比较大,生成的测试数目会太多。由于每个因子及其状态在S中所起的作用可能大不一样,因此必须对众多的因子及其状态加以选择。方法是:可根据各个因子及其状态作用的大小、出现频率的大小以及测试的需要,确定权值的大小。必要时,可以删除一部分权值较小,或者说重要性较小的因子或状态,使最后生成的测试用例的数目控制在允许的范围之内。在不同测试阶段,对因子及状态的权值会有不同的要求。例如,初次测试时,可以根据被测模块的大小,确定是否有必要进行加权,在进行子系统测试时,由于被测对象的规模肯定要发生变化,因此因子及状态也要随着发生变化。在确定了各个因子及状态的权值之后,可按下列方法进行加权筛选。设Fi的权值为i,令i是Fi在总因子中所占的比例,则:接着选择筛选标准。可以采用作为权值标准。当时,则删掉该因子或状态,否则予以保留。如果剩余的因子或状态仍然很多,则可以对剩余的因子或状态重新选择筛选标准,并重复上述步骤,直到满足要求为止。【例3.11】对某个数据库管理系统,其因子——状态表如表3.13所示。表3.13【例3.11】的因子——状态表因子状态ABCDEF系统管理数据编辑数据管理数据统计报表窗口管理123456权限设置系统维护插入记录更新记录删除记录插入字段更新字段删除字段数据备份数据校验查询求和求均值求方差总体报表部分报表最大化最少化恢复多窗口经过加权筛选,得到精简的因子——状态表如表3.14所示。表3.14【例3.11】精简的因子——状态表因子状态ABCD系统管理数据编辑数据管理数据统计123权限设置系统维护插入记录删除记录删除字段数据备份数据校验查询求和3.构造正交表正交表的推导过程是依据近世代数中的伽罗瓦理论,可以从一般的数理统计书中查到表3.15的正交表。表中的每一列表示一个因子,每一行表示一个项目,正交表的生成规律是:1)项目数=2因子数。2)设因子数为m:当m=2i-1时,项目数为2i-1(i2);当2i-1-1<m2i-1时,项目数是2i;表3.15正交表示例因子项目123456789101112131415…T1T2T3T4T5T6T7T8T9T10T11T12T13T14T15T16…0000000000000001010011010101010110101001100111100110011001100001111000011111011100010110100111010001111001101001011010010000000111111111010011101010100110101110011001100110100110010001111111100001011100101001010111010110000111101001100101103)正交表的生成是有规律的,大小不一的正交表都可以从一个二行一列的子表中推导出来。设已有一个子表Ai-1,并且满足1)和2),则按下列方式由它可推导出Ai:例如:,则:【例3.12】对【例3.11】43的精简表,由于m=4,所以项目数为8。因子项目1234T1T2T3T4T5T6T7T8000010100110110000011011011111014.利用正交表构造测试数据一般情况下,上述构造的正交表的各个因子的状态数几乎不可能出现均匀分布的情况,为此,必须利用逻辑命令来组合各个因子的状态,做出BOOLEAN图,然后再考虑正交表在BOOLEAN图中各个结点上的应用。将因素分析表中各因子的状态作为输入,结果作为输出,用逻辑命令把输入与输出结合在一起,画出BOOLEAN图。假设图中最左部并列的结点是各个因子的所有可能的状态,把它们按因子分组,某组是某个因子的所有状态,组内各个状态是逻辑或(OR)的关系,如果一个因子的状态数超过2,还要增加中间结果结点,以保证所有中间结点都是两个输入端。图的最右边是结果,它的输入个数等于因子个数,结果的所有输入之间是逻辑与(AND)的关系。【例3.13】对【例3.11】,其对应的BOOLEAN图如图3.12所示。当输出结点11为1时,要求所有的输入结点21、22、23、24都为1,为保证它们为1,则这几个结点的输入必须是:(01)或者是(10),这里排除(11)的情况,因为同一个因子的所有状态不可能在一次测试中同时出现。把结点21、22、23和24当作因子,则它的输入可以当作状态,这时就可以使用正交表了。正交表中的0和1分别代表两种不同的状态,故可以把状态为0的替换成(01)结点的输入值,把状态为1的替换成(10)结点的输入值,如表3.16所示。对中间结点31,可做同样的工作,如表3.17所示,最后得到的测试数据如表3.18所示。利用这些数据,构造因果图,可以得到实际的测试用例。表3.16替换中的正交表结点组合号21222324A1A231B3C1C2D1D212345678001100110011001010010110100101001011010010110010101001010101表3.17替换中的正交表结点组合号31B1B212001表3.18测试输入数据集因子测试组号ABCD123456789101112A1A1A2A2A1A2A1A1A2A2A1A2B1B2B1B2B3B3B1B2B1B2B3B3C1C1C2C2C2C1C1C1C2C2C2C1D1D1D1D1D1D1D2D2D2D2D2D23.6功能测试功能测试是解决模块测试问题的一个重要方法。事实上,本章前几节讨论的几种方法都是功能测试的范围。功能测试的方法是根据软件的规格说明书,选取测试用例,以检验输入输出信息是否完全符合规格说明书中有关功能需求的规定。实际上,模块功能测试就是要验证模块的每个功能是否能正确的实现。模块功能测试的一般方法为叙述简单,假设M是一个数字计算模块,可以将M的功能看作是一组变量到另一组变量的影射,即:假设xi的定义域是Di,yi的值域是Vi,定义域和值域空间可分别表示为:所谓功能测试,实际上就是根据软件的规格说明书,选择D中有代表性的点D’D,V中有代表性的点V’V,使得这些有代表性的点都被验证。xi是简单独立的数字变量假设:则至少应选择5个点,即:mini-,mini,x[mini,maxi],maxi,maxi+(2)xi和xj是相关联的数字变量:对于相关的两个输入,要具体问题具体分析。【例3.14】假设Di=[0,],Dj=[0,xi]。测试用例的选取方法为:xi=-1;xi=0,xj=0;xi>0,xj=0;xi>0,xj=0;xi>0,0<xj<xi;xi>0,xj=xi;xi>0,xj>xi;xi=0,xj>0.(3)对yi的各类取值都要至少验证一次【例3.15】假设模块root(a,b,c,x1,x2)是一元二次方程求根函数,a,b,c是输入变量,x1,x2是输出变量。其规格说明书中规定:Da=Db=Dc=Dx1=Dx2=-,),方程的解分别为两个不等实根、一个实根、两个相等的实根、两个虚根、无根。根据规格说明书,Vi={两个不等实根、一个实根、两个相等的实根、两个虚根、无根}可以给出下列测试用例:a=1,b=-3,c=1:两个不等实根a=0,b=-3,c=1:一个实根a=1,b=-2,c=1:两个相等实根a=3,b=-2,c=1:两个虚根a=0,b=0,c0:无根(4)xi是数字型数组变量:一个n维数组可以分解为n个一维数组,对于长度为m的一维数组,可以分解为m个变量,对于单个数组变量,可以采用上面介绍的几种方法来测试。而对于一个一维数组array[min,max]本身而言,至少要取三个测试点,即array[min]、array[max]array[min<x<max]。(5)xi是非数字型变量:对非数字型变量,一般的做法是可将该变量的定义域影射成一个数字型的定义域,在此基础上,可按数字型变量进行测试。由于非数字型变量的情况比较复杂,具体问题要具体分析。特别是要对一些特殊的情况进行检验。【例3.16】函数Open(filename)是一个打开文件的函数,filename是输入的文件名。该函数的功能是对正确的文件名且已存在的文件进行打开操作,对不正确的文件名给出错误信息,对不存在的文件给出提示信息。假设文件名的长度是由1n个英文字母和数字组成。假设A={英文字符、数字},B={所有可能字符}-A。从A中选择任意选择一个字符;从A中产生长度为n的字符串;从A中产生长度为n+1的字符串;从B中选择任意选择一个字符;从A和B中产生长度为n的字符串;从A和B中产生长度为n+1的字符串。2.模块功能测试的分解测试当一个模块比较大时,该模块常常包括许多子功能,其输入变量和输出变量也可能比较多。一个子功能可能对应其中的一个或几个输入输出变量,而另一个子功能可能对应另外一组输入输出变量。在此情况下,对模块的功能进行分解是必要的,这样测试可能更为彻底。W.E.Howden称一个模块或函数的子功能为设计函数。设计函数可以分为下列三类:(1)平行设计函数:此类函数最简单的例子就是几个设计函数顺序的组成一个函数。其程序结构如FunctionA(x)所示,其对应的关系结构如图3.13所示。FunctionA(x){casex1:…;break;//设计函数1casex2:…;break;//设计函数2…casexn:…;break;//设计函数n1}(2)顺序设计函数:此类设计函数比较常见的是程序被分解成有独立意义的多段代码,每一段代码就是一个设计函数,程序顺序的执行诸段代码。其程序结构如FunctionB(x)所示,其对应的关系结构如图3.14所示。FunctionB(){计算支出;//设计函数1计算收入;//设计函数2计算余额;//设计函数3}(3)控制设计函数:此类设计函数主要是用于控制设计函数的执行顺序,或者循环和递归的起始,并不用于实际的计算。其对应的关系结构如图3.15所示。如FunctionC(x)所表示的控制结构,FunctionC(i,j){if(i>j)thenT=TRUE;elseT=FALSE;whileTdo{i=i-1;j=j+1;if(i<=j)thenT=FALSE;}}W.E.Howden曾对某些程序进行了测试,给出了下列实验数据,如表3.19所示。表3.19:W.E.Howden给出的实验数据测试方法实际故障数目被检测的故障数目普通功能测试1420粗略计算设计函数的功能测试79详细设计函数的功能测试79控制设计函数的功能测试35分支覆盖测试1013路径覆盖测试33.7随机测试随机测试是测试理论的重要组成部分,在VLSI测试、软件测试中有广泛的应用。一般情况下,在被测系统比较复杂、其它测试方法测试效率不高的情况下,随机测试都得到了广泛的应用。采用随机测试技术,可以有效的对系统的可靠性进行综合评估。随机测试并不是黑盒测试所独有的,也可以用于白盒测试之中。就随机功能测试而言,由于随机测试并不需要源代码,且本文在这里引入随机测试的目的是想和前面所介绍的各种黑盒测试方法相比较。3.7.1随机测试的概念定义3.4:随机测试。对给定的被测系统和系统的定义域,按照定义域中样本取值的概率,随机的选择其样本并作为其测试数据的过程称为随机测试。根据定义3.4,随机测试涉及三个概念:一是定义域,二是定义域中数据取值的概率分布,三是样本选择。就软件测试而言,定义域可以从规格说明书中提出,定义域中数据取值的概率分布是软件可靠性评估的一个重要概念,将第八章中叙述,这里不做详细论述。目前常用的分布有:用户实际使用的概率分布,均匀分布、正态分布等。按照样本选择数据的方式不同,有可以有下列几种随机测试技术。定义3.5:可替代的随机测试技术。后面的样本可以和前面的样本相同,称为可替代的随机测试技术,简称随机测试技术。定义3.6:不可替代的随机测试技术。后面的样本必须和前面的样本不同,称为不可替代的随机测试技术,简称伪随机测试技术。定义3.7:反随机测试技术。第一个数据是随机给出的,后面新增加的数据要和前面已存在数据的笛卡儿(Cartesian)距离、或汉明(Hamming)距离最大,这种产生数据的过程称为反随机测试技术。定义3.8:汉明距离(HD):两个二进制向量ti=(a0,a1,…,aN),tj=(b0,b1,…,bN),它们的HD被定义为:定义3.9:笛卡儿距离(CD):两个二进制向量ti=(a0,a1,…,aN),tj=(b0,b1,…,bN),它们的CD被定义为:若ti、tj是实数空间的向量,则它们的CD被定义为:定义3.10:总汉明距离(THD):对任一向量ti,则ti和已存在的向量为t1,t2,…,ti-1总的汉明距离为:定义3.11:总笛卡儿距离(CHD):对任一向量ti,则ti和已存在的向量为t1,t2,…,ti-1总的笛卡儿距离为:定义3.12:非随机测试的最大距离序列(MDATS),MDATS是一个测试序列{ti},每个ti和t1,t2,…,ti-1的THD和CHD最大。即:反随机测试是这几年出现的一个新概念,目前对其测试效果在理论上缺乏评估模型,应用缺乏大量实验数据的支持。不过,直观上看,反随机测试技术一般不会比随机测试和伪随机测试的效果要差。如果测试数据比较多,伪随机测试和随机测试在理论上并没有本质的差别。因此,在下面的论述中,主要集中在随机测试技术的理论与应用上。图3.16是随机测试效果的一个非常典型的曲线,虽然上述给出的数据是偶然的,但这个曲线却具有一般性。也就是说,对一般的系统,用比较少的测试数据可以很快检测40%~70%(当然这个数字随具体的系统而定)左右的错误,再往上增加覆盖率,测试长度会大幅度的增加。这个结论也可以从理论上推倒出来。3.7.2随机测试与划分测试的比较严格的说,前面给出的等价类划分法、因果图法、边值分析法等黑盒测试技术都是划分测试,它们共同的特点是将定义域划分成多个子域,并从每个子域中选择一个或多个测试用例。因此,从这种意义讲,功能测试或者黑盒测试都是划分测试。下面论述划分测试和随机测试的效果比较。1.一般模型(1)随机测试的模型:设D是被测软件S的定义域,||D||=d。m是D中使S产生错误输出的输入个数,称为引起错误的输入。c是D中使S产生正确输出的输入个数,显然:0cd,0md,c=d-mn是随机测试时所选择的测试用例的数目。定义是错误率,是样本率,即:(2)划分测试的模型:将D划分划分成k(k2)个子域D1,D2,…,Dk,即:D=D1D2…Dk||Di||=d。mi是Di中使S产生错误输出的输入个数,称为引起错误的输入。ci是Di中使S产生正确输出的输入个数,显然:0cidi,0midi,ci=di-mini是测试时在Di中所选择的测试用例的数目。定义i是Di的错误率,i是Di的样本率,即:为便于比较,总是假设N=n。定义3.13:划分测试。如果k个子域是互不相交的,即满足下列条件的称为划分测试。定义3.14:子域测试。如果存在两个子域的交集不为空,则称为子域测试。(3)测试标准定义3.15:P—测量。n次测试中至少检测一个错误的概率称为P—测量。对D的随机测试,有:对子域测试,有:定义3.16:E—测量。n次测试中期望的检测错误的数目称为E—测量。对D的随机测试,有:对子域测试,有:对于不相交的子域,用Pp和Ep代表P—测量和E—测量。P—测量和E—测量是评价测试效果的两个重要的度量标准,目前被广泛的使用。2.子域测试效果分析最好的划分测试是这样的情形,浪费的测试用例数目最少。也就是说,一些子域不包含任何错误,而另外的子域则包含的全是错误。定理3.1:对不相交的k个子域,满足dini1,则划分测试最好的测试效果是:假设N>m,如果所有包含错误的子域满足:mi=di=ni,则Ep取得极大值,即:Ep=m。证明:因为dini1,所以有:2)假设Nm<d,Ep在下列的划分与测试用例的选择方式中取得极大值。即一个子域Di包含的全部是引起错误的输入,即mi=di=ni。而其它的子域则可能包含的可能全部是正确的输入、或者既包含正确的输入也包含引起错误的输入,在此情况下:证明:如图3.17所示。最好的情况是:D1中包含的全部是引起错误的输入,并且输入个数是N-1,而从D2~Dk可能包含引起错误的输入,也可能全部是正确的输入。在此情况下,对D1来说,EPD1=N-1,而对D2~Dk来说:所以:定理3.2:对不相交的k个子域,则划分测试最坏的测试效果是:1)假设Nk2,dk,0md-k+1,也就是说,至少有k-1个正确的输入。如果nk=1,d1=d2=…=dk-1=1,dk=d-k+1,即所有m个引起错误的输入都在Dk中,则EP取得下列最少值:2)假设Nk2,dk,0md-N+1,也就是说,至少有N-1个正确的输入。nidi(1ik)如果nk=1,dk=d-N+1,di=ni(1ik-1),则EP取得下列最少值:1)和2)的证明是简单的,读者不妨自己试一试。定理3.3:对相交不为空的子域,如m>0,当一个子域仅仅包含正确的输入,此时仅在此子域中选择一个测试用例,而其它的子域包含的全部是引起错误的输入,则ES取得下列极大值:证明:包含全部是引起错误的输入的子域为E,则:EE=N-1,而其它的子域中包含的正确的输入数目是d-m,则其它子域期望的错误数目是:所以,在此情况下期望错误数目的最大值是:定理3.4:对相交不为空的子域,如m<d,当一个子域仅仅包含正确的错误的输入,此时仅在此子域中选择一个测试用例,而其它的子域包含的全部是正确的输入,则ES取得下列极小值:3.划分测试和随机测试的比较定理3.5:对不相交的子域,如果1=2=…=k则Ep=Er证明:定理3.6:如果D和Di的样本率是相同的,则子域测试要好于随机测试。即:但是定理3.6对P——测量是不成立的。【例3.17】考虑软件的定义域D,假设d=1200,m=181,n=12,所以=12/1200=0.01。将D划分成两个子域,分别是:d1=1100,m1=91,n1=11,所以1=11/1100=0.01,1=91/1100。d2=1100,m2=91,n2=11,所以2=11/1100=0.01,2=91/1100。因此:因此,有:1=2=0.01=,Es>Er,Ps<Pr。定理3.7:假设至少有两个子域的交集是非空的,N=n,1=2=…=k<,则:证明:定理3.8:对不相交的子域,如果1=2=…=k则Ep=Er证明:定理3.9:设k=2,D1D2=。如果(1-2)(1-2)0,则EpEr证明:D1D2=,n=n1+n2,m1=m1+m2,d=d1+d2定理3.10:将D划分成k+1个互不相交的子域,D1,D2,…,Dk,Dk+1,让’和’分别是D’的错误率和样本率,如果ik+1,ik+1,则(’-k+1)(’-k+1)0。证明:m’是D’的错误个数,d’=||D’||,定理3.11:对不相交的子域,如果(i-j)(i-j)0,这里i,j=1,2,…,k,则EpEr。可以应用数学归纳法证明之,步骤从略。推理3.1:对不相交的子域,如果存在和,使ni=mi+di,i=1,2,…,k,则EpEr。推理3.2:对不相交的子域,如果每个子域中测试的数量正比于该域中包含的错误数目,则:EpEr。定理3.12:对不相交的子域,如果(i-j)(i-j)0,这里i,j=1,2,…,k,则EpEr。【例3.18】考虑软件的定义域D,将D划分成两个子域D1和D2,d=250,d1=200,d2=100,设共有25个错误全部在D2中,则:1=0,2=25/100=0.25,=25/250=0.1若n=24,n1=15,n2=9,Er=2.4,Es=2.25<Er。若假设25个缺陷全部在D1D2中,则:1=25/200,2=25/1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《对话大国工匠 致敬劳动模范》(中国劳动关系学院)章节测试答案
- 学习任务群视域下的高中语文古诗词教学设计与实施
- 8 《世说新语》二则2024-2025学年新教材七年级上册语文新教学设计(统编版2024)
- 健康管理与生物科技的结合实践
- 二年级下册心理健康教育表格式教案-第11课分一分 记得快 长春版
- 商务礼仪师考试交际能力试题及答案
- 2025年中国底片扫描仪市场调查研究报告
- 2025年中国平纹不锈钢网市场调查研究报告
- 2025年中国干湿喂食器数据监测研究报告
- 2025年中国带柄涡轮滚刀市场调查研究报告
- 关于新能源汽车的论文10000字
- 停车场建设工程监理规划
- 口腔检查-口腔一般检查方法(口腔科课件)
- 中型水力发电厂电气部分初步设计
- 2023山西焦煤集团有限责任公司井下操作工招聘2000人笔试模拟试题及答案解析
- 分红险、万能险销售资质考试真题模拟汇编(共763题)
- 鱼台工程运河杯汇报材料
- 简单的劳务合同协议书
- 财务英语词典-财务术语中英文对照
- GA/T 1028.1-2022机动车驾驶人考试系统通用技术条件第1部分:总则
- GB/T 16895.25-2022低压电气装置第7-711部分:特殊装置或场所的要求展览、展示及展区
评论
0/150
提交评论