一种联合差异性随机测试方法

文档序号:6365677阅读:235来源:国知局
专利名称:一种联合差异性随机测试方法
技术领域
本发明属于软件测试领域尤其是自动化测试领域,涉及联合差异性随机测试技术CAT (Co-diversified rAndom Testing),用于高效率的生成测试用例集,从而实现对程序的有效测试,为一种联合程序白盒和黑盒信息差异性的联合差异性随机测试方法。
背景技术
随机测试RT是一个简单的自动化黑盒测试用例生成技术,容易实现,广泛应用于源代码和规格说明缺失的情景。RT产生测试用例由于完全随机缺少目的性,只保证了测试的效率(Efficiency)而无法保证有效性(Effectiveness)。在众多对RT的提高或改进的方法中,比较著名的是由T. Y. Chen等在2004年提出了的自适应随机测试ART。同样是黑盒测试技术,ART引入测试用例在输入域上的欧几里得距离来衡量测试用例间的差异性,并通过这个差异性挑选随机生成的测试用例来构造整个测试用例集,以增强随机测试的有效性。符号执行是由自J.C.King在1976年提出的,其基本思想就是使用符号值而不是真实值来作为程序的输入。符号执行中一个基本的概念就是路径条件PC(PathCondition),路径条件PC是一系列谓词的析取(conjunction),输入变量只有满足一条路径的PC条件,才能通过这条路径。其中,构建PC非常具有挑战性,即使一个分支语句只包含一个复杂的数据结构。而谓词表达PI (Predicate Interpretation, PI)是一个PC的子表达式,一个分支的PI可以跳过其他分支语句简单的获得。

发明内容
本发明所要解决的技术问题是现有的测试用例生成方法中黑盒测试方法具有很高的效率,但是不能保证测试用例的有效性;白盒测试方法虽然能生成有效的测试用例,但是由于复杂性问题无法保证测试用例生成的效率。因此需要一种兼顾高效率和高有效性的测试用例生成技术。本发明的技术方案为一种联合差异性随机测试方法,对待测试程序,随机生成测试用例,在其中挑选测试用例,得到最终测试用例集,包括以下步骤I)随机生成初始测试用例集Tu = {t0};2)获得待测程序的谓词表达集合PI {Pl,P2,…,pn}首先使用开源工具Soot生成中间代码的数据流图,并使用反向数据流分析计算谓词表达集合PI,即从数据流图的出口沿数据流边反向依次分析各个基本块或每个语句,PI初始为空集,在分析过程中根据每个语句的传递函数fs增加或修改谓词表达集合PI,对应处理如下a)如果语句s不是赋值语句也不是条件语句,则fs为单元函数,谓词表达集合PI不变;b)如果语句s是一条条件语句,则将其中的谓词语句加入到谓词表达集合PI中fs (χ) = X U gens,其中gens表示这个条件语句中的谓词集合,X表示原谓词表达集合PI ;c)如果语句s是对变量V的赋值语句V = g(y1;y2,…),那么用V的表达式替换谓词集合中的所有变量V fs(pi (V)) = pi (g(y1;y2,…)),其中赋值语句v = g(y1;y2,…)
将变量V赋予关于变量Yi (i = 1,2,......)的表达式,g是关于变量Yi (i = 1,2,......)的
任意一个函数,pi (V)表示关于V的谓词表达式,pi (g(y1 I2,…))表示将V替换为g(yp12,…)后的谓词表达式;3)若没有达到预先定义的测试标准,则继续步骤4),否则结束,Tu就是最终的测试用例集,所述测试标准为测试人员根据测试要求预先设定的覆盖程度,用百分比表示;4)随机生成k个候选测试用例t1 t2, ···, tk,组成候选测试用例集Tr, Tr = It1,t2, ···, tk},对每一个候选测试用例& e Tr, i = 1,2,…k,计算bdi = min{B(ti, t」)}以及edi = miniEUytj)},其中t」e Tiubdi表示测试用例h到Tu中各个测试用例分支距离的最小值,edi表示测试用例\到Tu中各个测试用例的最小欧几里得距离;5)根据候选测试用例\到测试用例集Tu的分支距离和欧几里得距离,从候选测试用例集Tr中挑选一个测试用例用作为新的测试用例加入到测试用例集Tu中,具体为首先计算各个候选测试用例\与测试用例集Tu中测试用例的最小分支距离bdp优先选择最小分支距离最大的测试用例,即若测试用例集Tu中不包含最小分支距离bdi最大的测试用例,则选用该用例,若测试用例集Tu中已包含,则选择最小分支距离bdi第二大的测试用例,以此类推;若具有最小分支距离bdi最大值的测试用例有两个以上,则判断最小欧几里得距离θφ,优先选择最小欧几里得距离edi最大的候选测试用例ti;若测试用例集Tu中已包含此测试用例,则选择最小分支距离bdi第二大的测试用例,以此类推;将选择的测试用例加入Tu中,回到步骤3),依此不断选择新的测试用例,直到满足测试标准。步骤5)中,测试用例\到Tu中各个测试用例分支距离的最小值bdi的计算如下将候选测试用例\带入谓词表达集合PI中的每一个谓词表达式,若其结果为真,则为1,否则为0,每一个测试用例得到一个长度为谓词表达集合PI的元素数目的01序列;对测试用例集Tu中的每一个测试用例做同样计算,得到测试用例集Tu中各测试用例的01序列,两个不同测试用例之间的分支距离B(ti; tj)为其01序列的汉明距离,由此计算bdi ;测试用例\到Tu中各个测试用例的最小欧几里得距离喊的计算如下设测试用例\ = (v1; V2,…,vq), V,对应待测程序的第q个函数参数,测试用例集Tu中的测试用例\ = (B1, a2,…,aq),aq对应待测程序的第q个函数参数,则两个测试用例的欧几里德距离为-.EitiJ) = ^(ν,-α,)2,由此计算edi。本发明通过PI识别随机生成的测试用例之间在程序内部结构上的差异性,通过测试用例间的欧几里得距离来识别测试用例在输入域上的差异性,然后联合这二者的差异,从而高效率地生成有效的测试用例集。对于一个随机生成的测试用例集Tr,对任意的ti e Tr,与每一个\ e Tu进行比较,计算每一个PI的值,以及由此得到的B(ti; tj);此外计算E(ti; tp,联合B(ti; tj)和E(ti; tj)衡量测试用例\与已使用的测试用例间的差别,从而挑选更加有效的测试用例。 本发明为一种联合差异性随机测试技术CAT,与现有的随机测试技术相比,在选择测试用例时加入了程序的谓词信息,从而在随机生成的大量测试用例中挑选更加有效的测试用例,避免了盲目选择。此外本发明的处理计算简单,虽然加入了程序谓词信息,但没有加入所有的程序信息,避免了白盒测试中对程序的大量分析,如符号执行中路径约束的计算,从而提高了生成测试用例的效率。综上所述,本发明在避免大量计算的情况下,高效率的选择高有效性的随机测试用例,综合了黑盒测试与白盒测试的优点,为现有的测试技术提供了新的思路。


图I为本发明的流程示意图。
具体实施例方式
如图I,本发明的步骤如下I)随机生成初始测试用例集Tu = {t0};2)获得程序的谓词表达集合PI {Pl,P2,…,pn}首先使用开源工具Soot (http://www. sable, mcgill. ca/soot/)生成中间代码的数据流图,并使用后向数据流分析计算谓词表达集合PI,即从数据流图的出口沿数据流边反向依次分析各个基本块或每个语句。程序中,每条语句的传递函数描述了这个语句的作用,每条语句的传递函数仁,谓词表达集合PI初始为空集,在分析过程中根据每个语句的传递函数fs增加或修改谓词表达集合PI,对应处理如下a)如果语句s不是赋值语句也不是条件语句,则fs为单元函数,谓词表达集合PI不变;b)如果语句s是一条条件语句,则将其中的谓词语句加入到谓词表达集合PI中fs (χ) = X U gens,其中gens表示这个条件语句中的谓词集合,χ表示原谓词表达集合PI ;c)如果语句s是对变量V的赋值语句V = g(y1;y2,…),那么用V的表达式替换谓词集合中的所有变量V fs(pi (V)) = pi (g(y1;y2,…)),其中赋值语句v = g(y1;y2,…)
将变量V赋予关于变量Yi (i = 1,2,......)的表达式,g是关于变量Yi (i = 1,2,......)的
任意一个函数,pi (V)表示关于V的谓词表达式,pi (g(y1 I2,…))表示将V替换为g(yp12,…)后的谓词表达式;3)若没有达到预先定义的测试标准,则继续步骤4),否则结束,Tu就是最终的测试用例集,所述测试标准为测试人员根据测试要求预先设定的覆盖程度,用百分比表示,如50%路径覆盖或50%条件覆盖等;4)随机生成k个候选测试用例t1; t2, ···, tk,组成候选测试用例集Tr, Tr = It1,t2, ···, tk},对每一个候选测试用例& e Tr, i = 1,2,…k,计算bdi = min{B(ti, t」)}以及edi = min{E(ti, t」)},其中t」e Tu, bdi表示测试用例h到Tu中各个测试用例分支距离的最小值,edi表示测试用例t到Tu中各个测试用例的最小欧几里得距离;计算方法如下将每一个候选测试用例t带入谓词表达集合PI中的每一个谓词表达式,若其结果为真,则为1,否则为0,每一个测试用例得到一个长度为谓词表达集合PI元素数值的01序列;同理,Tu中的每一个测试用例也具有这样的01序列;两个不同测试用例之间的分支距离为其01序列的汉明距离,欧几里得距离的大小通过下面的公式计算设测试用例h = (V1, V2, ···, vq) , Vq对应待测程序的第q个函数参数,另一测试用例tj = (B1, a2,…,aq),aq对应待测程序的第q个函数参数,则两个测试用例的欧几里德距离为
权利要求
1.一种联合差异性随机测试方法,其特征是对待测试程序,随机生成测试用例,在其中挑选测试用例,得到最终测试用例集,包括以下步骤 1)随机生成初始测试用例集Tu= {t0}; 2)获得待测程序的谓词表达集合PI:{P1,P2,...,pj 首先使用开源工具Soot生成中间代码的数据流图,并使用反向数据流分析计算谓词表达集合PI,即从数据流图的出口沿数据流边反向依次分析各个基本块或每个语句,PI初始为空集,在分析过程中根据每个语句的传递函数fs增加或修改谓词表达集合PI,对应处理如下 a)如果语句s不是赋值语句也不是条件语句,则fs为单元函数,谓词表达集合PI不变; b)如果语句s是一条条件语句,则将其中的谓词语句加入到谓词表达集合PI中fs(x)=X U gens,其中gens表示这个条件语句中的谓词集合,x表示原谓词表达集合PI ; c)如果语句s是对变量V的赋值语句V= g(y17y2,…),那么用v的表达式替换谓词集合中的所有变量V :fs(pi (V)) = pi (g(y1 I2, ···)),其中赋值语句V = g(y1; y2,…)将变量V赋予关于变量Yi (i = 1,2,......)的表达式,g是关于变量yji = 1,2,......)的任意一个函数,pi (V)表示关于V的谓词表达式,pi (g(y1 I2,…))表示将V替换为g(yp12,…)后的谓词表达式; 3)若没有达到预先定义的测试标准,则继续步骤4),否则结束,Tu就是最终的测试用例集,所述测试标准为测试人员根据测试要求预先设定的覆盖程度,用百分比表示; 4)随机生成k个候选测试用例Lt2,"^tk,组成候选测试用例集Tr,Tr = Itpt2,…,tk},对每一个候选测试用例h e Tr, i = 1,2,…k,计算bdi =以及θφ =min{E(ti, tj)},其中t」e Tu, bdi表示测试用例h到Tu中各个测试用例分支距离的最小值,ed,表示测试用例\到Tu中各个测试用例的最小欧几里得距离; 5)根据候选测试用例ti到测试用例集Tu的分支距离和欧几里得距离,从候选测试用例集Tr中挑选一个测试用例用作为新的测试用例加入到测试用例集Tu中,具体为首先计算各个候选测试用例\与测试用例集Tu中测试用例的最小分支距离bdp优先选择最小分支距离最大的测试用例,即若测试用例集Tu中不包含最小分支距离bdi最大的测试用例,则选用该用例,若测试用例集Tu中已包含,则选择最小分支距离bdi第二大的测试用例,以此类推;若具有最小分支距离bdi最大值的测试用例有两个以上,则判断最小欧几里得距离edp优先选择最小欧几里得距离edi最大的候选测试用例ti;若测试用例集Tu中已包含此测试用例,则选择最小分支距离bdi第二大的测试用例,以此类推;将选择的测试用例加入Tu中,回到步骤3),依此不断选择新的测试用例,直到满足测试标准。
2.根据权利要求I所述的一种联合差异性随机测试方法,其特征是步骤5)中,测试用例\到Tu中各个测试用例分支距离的最小值bdi的计算如下 将候选测试用例\带入谓词表达集合PI中的每一个谓词表达式,若其结果为真,则为、1,否则为0,每一个测试用例得到一个长度为谓词表达集合PI的元素数目的01序列;对测试用例集Tu中的每一个测试用例做同样计算,得到测试用例集Tu中各测试用例的01序列,两个不同测试用例之间的分支距离B(ti; tj)为其01序列的汉明距离,由此计算bdi ; 测试用例\到Tu中各个测试用例的最小欧几里得距离edi的计算如下设测试用例ti= (v1; V2,…,V,),V,对应待测程序的第q个函数参数,测试用例集Tu中的测试用例h= (a1;a2,…,a,),a,对应待测程序的第q个函数参数, 则两个测试用例的欧几里德距离为
全文摘要
一种联合差异性随机测试方法,通过PI识别随机生成的测试用例之间在程序内部结构上的差异性,通过测试用例间的欧几里得距离来识别测试用例在输入域上的差异性,然后联合这二者的差异,高效率地生成有效的测试用例集,为一种结合黑盒测试技术和白盒测试技术的自动化随机测试技术,本发明既改善了ART忽略程序结构所导致的测试用例冗余问题,也缓解了符号执行中的PC路径的复杂性问题,兼顾了软件测试中测试用例生成的高效率和高有效性。
文档编号G06F11/36GK102629229SQ20121005269
公开日2012年8月8日 申请日期2012年3月2日 优先权日2012年3月2日
发明者张智轶, 徐宝文, 时清凯, 陈振宇 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1