您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 基于组合设计的测试生成技术--软件测试第四章.
第四章基于组合设计的测试生成技术第四章基于组合设计的测试生成技术4.1组合设计4.2组合测试设计过程4.3故障模型4.4拉丁方阵4.5相互正交的拉丁方阵4.6对偶设计:二值参数4.7对偶设计:多值参数4.8正交矩阵4.9覆盖矩阵与混合取值覆4.1组合设计大多数软件往往设计成能在多种环境下工作。多种参数(比如操作系统、网络连接及硬件平台)的组合导致了环境的多样化。在每种环境中,各参数各自对应一个特定的值,这些特定值的集合就被称为测试配置。例如:操作系统——WindowsXP网络连接——拨号连接硬件平台——内存为512MB的PC为保证在预定环境下的高可靠性,必须在尽可能多的测试配置或者环境下对软件进行测试。测试配置的数量可能极其庞大,不可能对软件测试进行彻底的测试时,怎么办?本章描述了几种在可能的测试配置、输入域以及划分的子域数目庞大且复杂的情况下,生成较小测试配置和测试集的技术。这些技术主要有:①试验设计②组合设计③正交设计④交互测试⑤对偶测试……4.1.1测试配置和测试集在本章中,交替地使用测试配置和测试集这两个术语,但这两个术语在软件测试中实际上是有不同含义的。本章描述的技术同时适用于测试配置和测试集的生成。测试配置通常是对相关参数的静态选择,例如:硬件平台或操作系统,这样的选择通常在测试开始前完成。测试集是在测试过程中用作输入的测试用例的集合。4.1.2输入空间与配置空间建模程序P的输入空间由在程序执行过程中可作为P的输入值的k元组组成。P的配置空间由P的环境变量的所有可能的取值组成,P可在这些环境变量下使用。我们称这样一组值为一个参数组合,其中每个值对应一个参数。例如:假设程序P有两个输入变量x及y。在P的执行过程中,x、y可以分别从{a,b,c},{d,e,f}中取值。这样就有两个参数,且每个参数有3个值,共有=9种参数组合。即(a,d),(a,e),(a,f),(b,d),(b,e),(b,f),(c,d),(c,e)及(c,f)若有k个参数,且每个参数有n个可能的取值,参数组合总数即为。23kn有一些特殊的组合设计技术允许从参数组合的完全集中选择一个较小的子集。这种采样技术旨在发现因参数组合而引起的故障。我们来看一个说明其有效性的例子。例4.1以一个在线比萨外卖服务(PDS)系统的输入空间为例。该系统在线接受订单,核对其有效性并安排比萨送货。在线订单要求用户指明以下4项内容:比萨饼的尺寸、比萨配料、投送地址及家庭电话号码。分别用S、T、A及P表示这4个参数。假设尺寸有大、中、小3种选择。配料方案有6种可供选择,此外顾客还可以自定义配料。投送地址由顾客姓名、住址、城市及邮政编码组成。电话号码是一个可能包含短划线“-”的数字串。4.2组合测试设计过程输入空间建模测试环境建模产生组合设计生成测试集生成测试配置参数和值参数和值组合对象测试集测试配置图1采用组合设计生成测试集和测试配置的过程步骤一:如果需要生成测试用例,该过程由输入空间开始;如果要生成测试配置,则由软件环境建模开始。无论哪种情况,模型都由一组参数及其对应的值组成。输入空间或环境的建模并不是互斥的,根据被测程序,可同时对两者或其中之一进行建模。步骤二:该模型被输入到一个组合设计规程中,以产生一个N×k的由参数和值的矩阵构成的组合对象,其中N行中的每一行对应至少一次测试运行,k列中的每一列对应一个参数。步骤三:生成的组合对象用来设计测试集或测试配置。组合对象是参数组合的一个矩阵。每个参数组合可以产生一个或多个测试用例,每个测试用例由输入变量的值及其预期的输出组成。下面来看个例子说明参数组合是如何产生测试用例的(包括可行和不可行的测试用例)例4.2参数值FileNewOpenSaveCloseEditCutCopyPasteSelectTypesetLaTexBibTexPlainTexMakeIndex根据上述表格生成下面两个测试用例:t1:File=Open,Edit=Paste,Typeset=MakeIndex----可行的测试用例t2:File=New,Edit=Cut,Typeset=LaTex----不可行的测试用例注:假定File、Edit和Typeset的值是按上面列出的顺序定义的软件T的图形用户界面由3个菜单组成,分别是File、Edit和Typeset。每个菜单包含下列几个菜单项。4.3故障模型组合设计过程的目的在于,其生成的测试输入和测试配置能暴露被测程序中某些类型故障。我们称这种故障为组合错误。当某些包含个输入值的输入组合引起蕴藏故障的程序进入无效状态时,就称该输入组合触发了组合错误。由某一个输入变量的值触发的故障称之为简单故障,即t=1时,不管其他输入变量的值是多少都会触发故障。对于t=2时触发的故障,称之为二元组合错误。以此类推,当t为任意自然数时,称之为t元组合错误/t元参数故障。1t下面举例说明组合错误——二元组合错误例4.3考虑以下包含x,y,z三个输入的程序。变量x,y,z分别从{x1,x2,x3},{y1,y2,y3}和{z1,z2,z3}中取值。x=x1且y=y2时,程序输出f(x,y,z);x=x2且y=y1时,程序输出g(x,y);x=x1且y=y1时,程序输出f(x,y,z)-g(x,y);x=x2且y=y2时,程序输出f(x,y,z)+g(x,y).程序P4.1=============================================================1begin2intx,y,z;3input(x,y,z);4if(x==x1andy==y2)5output(f(x,y,z));6elseif(x==x2andy==y1)7output(g(x,y));8else9output(f(x,y,z)+g(x,y));该语句错误,条件缺失10end=============================================================下面举例说明组合错误——三元组合错误例4.4以下程序变量x,y,z的取值范围如下:x,y{-1,1},z{0,1}程序P4.2=============================================================1begin2intx,y,z,p;3input(x,y,z);4p=(x+y)*z;该语句应该为p=(x-y)*z5if(p=0)6output(f(x,y,z));7else8output(g(x,y));9end=============================================================上述程序包含的三元组合错误由所有满足x+yx–y且z0的输入触发。因为对这些输入,程序计算了一个错误的p值,从而进入错误状态。然而,在8种可能的输入组合中,故障仅由以下2种组合暴露出来:x=-1,y=1,z=1x=-1,y=-1,z=1故障向量如前面所述,一旦对全部k个参数中的tk个参数进行恰当赋值,就能触发t元故障。给定一组参数f1,f2,…,fk,其取值个数分别为qi(),参数值向量V表示为l1,l2,…,lk,其中li()是fi的一个特定取值。向量V也被成为一次运行。如果对P执行由V导出的测试用例时触发了P中的故障,就称V是程序P的一个故障向量;如果需要V的任何tk个元素以触发P的故障,则V被认为是一个t元故障向量。给定k个参数,则t元故障向量中有k–t个不需要关注的参数。我们用星号(*)表示无需关注的参数。例如:二元故障向量(2,3,*)表明二元组合错误在第一个参数取值2,第二个参数取值3时触发,第三个参数是无需关注的参数。ki1ki1例4.5程序P4.2的输入域由3个参数x,y,z组成,每个参数都有两个取值。总共有8个组合,即8次运行,(1,1,1)和(-1,-1,0)是两次运行。在这8次运行中,(-1,1,1)和(-1,-1,1)是触发程序P4.2中三元故障的三元向量。结论:一个故障向量是一次运行,但一次运行不一定是一个故障向量。本章所描述的测试生成技术的目标是生成足够数量的运行(即输入组合),以便从这些运行中生成的测试用例能够发现程序中所有t元故障。在许多实际情况中,t被设定为2,因此生成的测试用例用来发现二元组合错误。当然,在生成t路运行时,也可能生成一些t+1,t+2,…,k元运行。因此二元故障向量也可能发现一些多元组合错误。4.4拉丁方阵前面几节说明了:①如何确定软件中的参数和值,②如何由参数组合生成测试用例。拉丁方阵及相互正交拉丁方阵(MOLS)被认为是从参数组合完全集中选择子集的传统而有效的方法。本节将介绍比前面提到的蛮力用例生成技术生成更少数量参数组合的拉丁方阵。设S为包含n个符号的有限集,一个n阶拉丁方阵是一个在行和列中不会重复出现任何符号的n×n矩阵。例4.6给定S={A,B},有以下两个2阶拉丁方阵。ABBABAAB给定S={1,2,3},有以下三个3阶拉丁方阵。123231213231123321312312132其它的3阶拉丁方阵可以通过以下方法来构造:①置换行、列;②交换符号,例如:把现有拉丁方阵中所有的符号“2”和“3”互换等。【1】更大的n阶拉丁方阵的构造过程如下:①首先产生第一行,包含n个不同的符号;②其它行通过变换第一行中符号的顺序来构造。1234234134124123如果两个拉丁方阵M1和M2中的一个可以通过行列轮换与符号互换从另一个得到,则认为这两个拉丁方阵是同构的。然而,给定一个n阶拉丁方阵,并非所有的n阶拉丁方阵都可以使用行列互换或符号重命名得到。例如,以下通过轮换第一行并相继轮换随后各行,构造出了一个4阶拉丁方阵M。例4.7考虑以下4阶拉丁方阵M11234214334124321M1的特点:含有3个包含符号“1”的2×2拉丁方阵,而M中没有这样的方阵。拉丁方阵M1的构造方法?构造步骤:①构造一个4×4的2位二进制字符串的模2加法表;②把表格中的每个元素用其相等的十进制数加上1来替换。0001101100000110110101001110101011000111111001001234214334124321【2】n2阶拉丁方阵还可以通过模运算构造出来如下4阶拉丁方阵就是通过M(i,j)=(i+j)mod4构造出来的,其中1(i,j)4。123412301230123012341230①一个包含整数0,1,…,n的拉丁方阵,如果其最上面首行和最左边首列元素是按升序排列的,则被称为标准形式的拉丁方阵;②一个包含字母A,B,…的标准拉丁方阵中,首行和首列元素是按字母顺序排列的。4.5相互正交的拉丁方阵设M1和M2为两个n阶拉丁方阵,用M1(i,j)和M2(i,j)分别表示M1、M2的第i行、第j列的元素。我们现在从M1和M2来创建一个n×n矩阵M,其元素M(i,j)为M1(i,j)M2(i,j),也就是简单地并置M1和M2的对应元素。如果M的每个元素是唯一的,也就是每个元素在M中都只出现一次,则称M1、M2为n阶MOLS。例4.8如下两个3阶拉丁方阵:M1=123M2=231231123312312要检测M1和M2是否相互正交,将其对应元素并列得到以下矩阵:M=122331213213331122由于M的每个元素都只出现了一次,M1和M2是相互正交的。结论:MOLS(n)表示n阶MOLS的集合。众所周知,当n是质数或质数的幂时,MOLS(n)包含n-1个MOLS。这样的MOLS集合被称为是完备的。n阶MOLS的数量用N(n)。因此,当n是质数或质数的幂时,N(n)=n-1。当n=2或n=6时,不存在MOLS。下面的例子说明当n是质数时构造MOLS(n)的简单过程M1=1234523451345124512351234M2=123453451251234234514
本文标题:基于组合设计的测试生成技术--软件测试第四章.
链接地址:https://www.777doc.com/doc-2537161 .html