CN107590073A - 基于路径覆盖软件测试的测试用例自动生成方法 - Google Patents
基于路径覆盖软件测试的测试用例自动生成方法 Download PDFInfo
- Publication number
- CN107590073A CN107590073A CN201710766422.3A CN201710766422A CN107590073A CN 107590073 A CN107590073 A CN 107590073A CN 201710766422 A CN201710766422 A CN 201710766422A CN 107590073 A CN107590073 A CN 107590073A
- Authority
- CN
- China
- Prior art keywords
- path
- test case
- test
- program
- algorithm
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种基于路径覆盖软件测试的测试用例自动生成方法,首先对被测试程序的代码进行分析,然后得到程序的控制流图(CFG)以及程序存在的路径,然后根据上一步得到的控制流图以及设定的基于分支距离的方法,得到计算对应一组测试用例的适应值函数,接着通过差分进化算法以及收敛速度控制器来对随机初始化的种群,使用上述的适应值函数进行迭代更新,接着将覆盖程序对应路径的第一个测试用例记录下来,直到所有的路径的测试用例都已经得到或者算法的迭代次数超过限制才停止,输出就是覆盖程序对应路径的测试用例集合。本方法能够有效地利用被测试程序基于路径覆盖测试用例的启发式信息,可以应用于实际的软件测试工作环境。
Description
技术领域
本发明一般涉及计算机软件工程的软件测试领域,具体涉及生成基于路径覆盖的软件测试用例的自动化生成方法。
背景技术
随着社会的蓬勃发展,IT技术水平的不断提高,软件产品在我们生活中越来越普及,扮演着不可替代的角色。软件产品的质量成为人们日益关注的焦点,生产一款质量有保证的软件产品,是生产者们的重要目标之一,也是企业应对市场竞争的重要砝码。软件测试是软件开发生命中的重要过程之一,用来确保软件产品的质量。软件测试花费了软件开发中至少50%的成本。软件测试有手工和自动化两种方式,自动化测试在现实生活中还未真正普及,测试大多数是以手动为主。然而技术的发展程度决定了软件的复杂程度,测试的难度和工作量随之增大而人的精力却是有限的,这种局面亟待改变;另外在软件测试中存在着大量技术含量低且经常重复的工作,若使用机器来完成将可以大大地减少人力的消耗;因此,以自动化的方式对软件进行测试是解决当前问题的最佳方案。一个优秀的自动化测试方案,可以节约大量的人力、物力和财力,减少资源消耗,同时提高企业效益。
为了得到零缺陷质量的软件,需要生成无穷多个测试用例来对它进行测量。无论一个程序的规模有多大,对其输入进行穷举在现实世界中都是不可行的,所以在测试过程中需要找到一种优化方法,在不对质量妥协的情况下,减少资源(如时间、成本、人力资源、***部件等等)的消耗。优化的目标是用尽可能少的时间和成本生成一些能够覆盖被测试***中有效的测试用例。
现有的方法中使用的动态的方法大都是具体基于语句覆盖或者是分支覆盖,而在软件测试所有的覆盖类型中,路径覆盖是最强的覆盖,有更强的纠错能力,能更有效地检查出软件的瑕疵和错误。本发明中采用的基于路径覆盖的软件覆盖准则,使用差分进化算法和自适应的适应值函数。差分进化算法具有很强的能力,而自动化生成基于路径覆盖的测试用例就是一种难度很高的搜索问题,问题本身很适合使用差分进化算法。另一方面,现有的方法使用的静态的方法多为使用符号执行的来生成测试用例,这种方法对于拥有多分支结构的测试程序来说计算太过复杂。本发明采用合理的自适应的适应值函数,该函数帮助差分进化算法的搜索结合得到的已覆盖和未覆盖的路径信息,得到覆盖测试程序路径的测试用例集合,效率很高。
发明内容
本发明针对现有的软件测试测试用例生成软件***的不足,提供了基于路径覆盖的软件测试测试用例自动生成方法。本发明的目的在于设计一种合理的基于路径覆盖的测试用例自动生成方法,帮助软件测试人员能够快速的获得覆盖被测试程序所有路径的测试用例,从而利用这些测试用例更好地检测出测试程序可能存在的BUG,用于修复程序漏洞。
基于路径覆盖软件测试的测试用例自动生成方法,包括以下步骤:
(a)分析被测试程序,得到程序的控制流图(CFG),对存在的路径进行编码;
(b)根据测试问题,确定被测试程序的编码;
(c)通过对步骤(a)中得到了控制流图(CFG)和步骤(b)中根据具体测试问题输入输入确定的问题编码,以及我们预设的计算分支距离的方法得到计算一个测试用例适应值的适应值函数;
(d)在测试用例的取值范围内,使用均匀分布的方式随机初始化种群;
(e)以步骤(d)中得到的种群,使用差分进化算法(DE)和针对测试用例生成问题的收敛速度控制器(CSC)以及步骤(c)中得到的适应值函数更新迭代种群;
(f)将步骤(d)(e)中种群个体里,覆盖被测试程序目前未被覆盖路径的测试用例记录下来;
(g)检测是否满足差分进化算法的迭代终止条件:如果不满足条件,则跳回步骤(e)继续执行;如果满足条件,则输出记录的覆盖对应路径的测试用例集合。
上述基于路径覆盖软件测试的测试用例自动生成方法的步骤(a)中对于每个输入的、输出以及判断、循环分支进行分析,以这些信息为基准,画出被测试功能单元的控制流图(CFG)。得到控制流图之后,根据控制流图的圈复杂度得到被测试程序存在的独立路径数目,其中计算公式为:V(G)=e-n+2p,其中,e表示控制流图中的边的数量,n表示控制流图中节点的数量,p表示图的连接组件数目,由于控制流图都是连通的,所以p=1,之后的步骤中可以依据控制流图和路径数目信息找出所有的独立路径。根据该路径数对所有需要覆盖的路径进行编码,对所有的判断、循环分支进行编号1~N,那么一个路径用N位字符串表示,第k位为“1”表示在第i个节点走No方向,“0”表示第i位走Yes的方向,对于是case语句的分支,这时可能有2个以上的分支,我们将这些分支对应的值为“0”,“1”,…,“m‐1”(m为该case情况的分支数量),如果路径没有经过第j个分支,那么该路径的第j位的值可以设置为字符“N”。
上述基于路径覆盖软件测试的测试用例自动生成方法的步骤(b)中确定被测试程序的具体编码,需要对被测试程序的输入、输出数据类型和范围进行分析,具体地处理包括:对于数值类型的变量,首先需要确定变量是整数还是浮点数,并且设定其取值范围;如果变量是字符类型,我们会使用范围[0,255]的整数表示一个ASCII码符号,对应的一个长度为m的字符串就可以使用m个[0,255]范围的整数表示;如果变量是枚举类型,其中枚举选择的数量是k,我们使用[1,k]中的整数来表示一个输入的测试用例。对于输入、输出是上述类型的组合的情况,我们只需要组合上述输入、输出的类型,就可以得到一个测试用例。总之对于不同的类型的变量,我们都是默认将问题转换成更加容易处理的数值搜索问题,这种编码适合之后会使用的差分进化算法的搜索。
上述基于路径覆盖软件测试的测试用例自动生成方法的步骤(c)中,计算适应值函数BenchMarkfunction()的计算方法为,确定输入的测试用例X经过了步骤(a)中生成的控制流图(CFG)的哪些节点,形成的路径称为PX,该测试用例在经过路径PX上第j个分支节点的分支距离评估值记为f(PX,j),在f(PX,j)的计算过程中使用了两个策略保证适应值函数的效果,第一个策略是对于已覆盖路径分支的f(PX,j)值会被设置为0,第二个策略是对于未覆盖的路径PX上的第j个节点节点 其中ε是一个数值很小的常数,为了防止分母为零,这里我们设置为0.001,则代表着测试用例X在节点上的分值距离,其计算规则如表1。通过计算出测试用例X在路径PX上的各个分支节点的f(PX,j)值之后,累加得到测试用例X的适应值:(其中k表示测试用例X经过的分支数目)。
表1测试用例在分支的成本函数计算规则
*K是一个常数,我们设置值为10
策略一和策略二保证了被测试程序能够使得覆盖已经被覆盖了的路径的测试用例适应值很小,而成功覆盖未被覆盖路径的测试用例的适应值很大,更好的帮助算法得到目标测试用例集合。
上述基于路径覆盖软件测试的测试用例自动生成方法的步骤(d)中,针对测试程序不同的输入值选择合适的输入范围[lb,ub],其中lb是取值范围下界,ub是取值范围上界,然后在这些范围内使用均匀分布的方式随机初始化种群,使用这种方法是基于测试人员对被测试的程序还不是很充分了解的情况,这时候在变量的取值范围内使用均匀随机分布的方式可以使得测试用例的分布比较均匀,帮助算法搜索未知的整个搜索空间。实际应用场景下,如果测试人员对被测试程序比较了解,可以人工初始化一些比较好的初始输入值,使得算法依据这些较好的初始解,更快的找到覆盖测试问题所有路径的测试用例。
上述基于路径覆盖软件测试的测试用例自动生成方法的步骤(e)中,选取差分进化算法(DE)和一种收敛速度控制器(CSC)来迭代种群,根据我们的实验结果,种群大小为50时算法的效率相对最高,差分进化算法迭代公式为:vi=yi+F*(yj-yk),其中vi是得到的新测试用例,而yi是差分进化前的旧测试用例,yj和yk是从所有解决方案中随机选中的两个测试用例。在上述计算完成之后,会进行DE算法的交叉操作:
首先,对于测试用例X的第i代的第j维都将会生成一个[0,1]之间的随机数然后,如果的大小小于预设的交叉概率Pc那么就保留之前的解;如果的大小大于预设的交叉概率Pc那么就舍弃刚刚求得的解,保留以前的解。我们将交叉概率Pc的值预设为0.1,该操作主要是保证上一代种群有一定概率保留信息,保护算法的多样性。
步骤(e)中,收敛速度控制器(CSC)的减速算子如下,添加一个区域击中次数统计数据结构,每次在程序运行之前,将程序输入变量的范围进行分区,具体为:测试用例X的第i个维度取值范围是[1,100],将其平均分成10个区域,并统计每一个区域的击中次数,每次进行收敛速度控制器(CSC)的减速操作的时候,选择测试用例的每个维度击中次数最少的区域,并进行初始化。
本发明的收敛速度控制器(CSC)的操作如下:首先,定义一个矩阵C,矩阵C共有n行m列,矩阵C的第(i,j)个元素代表着输入参数的第i维对测试程序第j个分支判断节点的影响,每次生成一组测试用例的时候都会更新矩阵C,通过比较不同维度数值的改变是否会使得某个判断节点的走向发生改变,如果会发生改变,则对应数值加一。更新完矩阵之后,每次经过10代的DE算法的迭代更新,就分析DE算法是否陷入了局部最优值,如果陷入了局部最优值,则通过类似步骤(d)中的[lb,ub]范围内的均匀分布,重新初始化种群;如果没有陷入局部最优,则从未覆盖路径中找到一条目前测试用例没有覆盖的节点,找到影响这个节点的输入数据维度,通过矩阵C中的影响数值大小用轮盘赌的方式找到优化的维度,进行动态步长搜索。
上述基于路径覆盖软件测试的测试用例自动生成方法的步骤(f)中,对步骤(d)中生成的初始解和步骤(e)中差分进化算法(DE)迭代生成的解进行分析,判断这些解对应的测试用例覆盖被测试程序的那一条路径,如果测试用例覆盖了一条之前未被覆盖的路径,则将该测试用例记录下来。这样一来算法迭代结束之后,我们将会得到一组测试用例的集合(其中k表示被测试程序拥有的路径数目),每一个测试Xi(i=1,2,,,k)都覆盖了一条与集合中其他测试用例不同的路径,即完成了整个被测试程序的路径覆盖。
步骤(f)中,记录初始解以及用差分进化算法(DE)迭代生成的测试用例中,覆盖被测试程序中目前未被覆盖的路径的测试用例;对于测试的具体情况,如果测试人员需要覆盖同一条路径的多个测试用例的情况,可进行调整参数,记录更多的覆盖同一条路径的测试用例;对于仅记录覆盖路径的第一个测试用例的情况,通过数学模型如下:X={x1,x2,...,xN}代表所找的所有测试用例,每一个xi可能是一个整数向量,i=1,2,...,N,被测试程序有P={p1,p2,...,pL},共L条路径,j=1,2,...,L,而我们基于路径覆盖软件测试用例生成问题就是:
目标:最小化m
约束:
j=1,2,...,L;1≤n1<n2<...<nm≤N。
上述基于路径覆盖软件测试的测试用例自动生成方法的中步骤(g)中差分进化算法(DE)的迭代终止条件有两个,第一个是算法已经得到覆盖测试程序路径的所有测试用例,另一个则是算法经过多次迭代更新都没有得到覆盖测试程序所有路径的测试用例,在我们的设置中,该最大迭代测试设置为Max=108。不满足迭代终止条件说明算法没有找到目标解集合,所以需要继续进行迭代搜索;满足迭代终止条件有两种情况,一种是找到了目标解集合,一种是用尽了迭代次数,一般迭代了Max次之后还没有得到结果的话,被测试程序的复杂度应该特别高,或者变量的取值范围太大,应该缩小范围再进行操作。执行完毕之后,算法将会把记录的覆盖对应路径的测试用例集合输出。
本发明提供的基于路径覆盖软件测试的测试用例自动生成方法,首先分析被测试程序的判断、循环分支,得到程序控制流图(CFG),然后根据被测试问题的实际输入、输出数据类型和范围确定问题的编码,接着根据问题的CFG图、问题编码以及我们设定的分支距离计算方法得到计算一个测试用例适应值的适应值函数BenchMarkfunction(),然后在测试用例的取值范围内,使用均匀分布的方式随机初始化种群,接着使用差分进化算法(DE)和设计的收敛速度控制器(CSC)以及BenchMarkfunction()迭代更新上述初始化种群,在差分进化算法初始化以及迭代过程中记录覆盖程序未被覆盖路径的测试用例,最后判断DE算法是否完成迭代,未满足迭代结束条件则继续执行DE算法,满足迭代终止条件则结束DE算法迭代,并输出记录的覆盖对应路径的测试用例集合。
与现有的技术相比,本发明具有以下优点和技术效果:
对于软件测试自动生成的软件,市面上大多数是使用简单的随机规则,或者使用静态的符号执行的方式,前者过于简单,后者对于复杂的测试问题解决能力不强,而本发明采取的是使用差分进化算法结合自适应函数的解决方法,通过差分算法强大的搜索能力和优化后的适应值函数得打测试用例,极大地提高了方法处理复杂被测试问题的解决能力。其次,动态软件测试用例生成的方法,都需要确地具体的覆盖准则,而现有的大多采用基于语句覆盖或者分支覆盖的方法生成测试用例,而路径覆盖作为一种更强的覆盖准则,相应的基于路径覆盖准则找到的测试用例则拥有更强的纠错能力。本发明采用差分进化算法(DE)以及设计的一种收敛速度控制器(CSC)进行可行解的搜索,并设计相对应的自适应的测试用例适应值计算函数,使得软件测试人员只需要按照简单的规则对测试程序的分支进行分析,设计对应的适应值计算函数BenchMarkfunction(),并按照测试程序要求的输入、输出确定问题的编码,就能够使用该发明的方法,使用计算机自动生成测试问题的基于路径覆盖的测试用例。方法相对便捷,不需要测试人员对被测试程序的逻辑等规律有很深的了解,拥有很强的易用性,只要测试人员按照本发明的方法进行简单的操作,有广阔的应用空间。
附图说明
图1为实施方法中基于路径覆盖软件测试的测试用例自动生成方法。
图2是实施方式中示例测试程序“Triangle”代码。
图3是实施方式中示例测试程序“Triangle”控制流图。
具体实施方式
以下结合实施例对本发明的实施方式作进一步说明,但本发明的实施不限于此,需指出的是,以下若有未特别详细说明之处,均是本领域技术人员可参照现有技术理解或实现的,例如举例过程中的部分代码。
如图1,基于路径覆盖软件测试的测试用例自动生成方法包括以下步骤:
第一步,分析被测试程序的输入、输出以及判断、循环分支,并画出测试函数的控制流图(CFG)。
对于每个输入的、输出以及判断、循环分支进行分析,以这些信息为基准,画出被测试功能单元的控制流图(CFG),如图2、图3所示。得到控制流图之后,根据控制流图的圈复杂度得到被测试程序存在的路径数目。通过分析图3我们发现测试程序存在5个分支判断节点{2,5,6,8,10},我们将这些节点从1~5进行编号。
由图3,我们可以清楚的认识到Triangle问题存在的所有路径:
{0,0,0,N,N},{0,0,1,0,N},{0,0,1,1,0},{0,0,1,1,1},{1,1,N,N,N}以及
{1,0,0,N,N},{1,0,1,0,N},{1,0,1,1,0},{1,0,1,1,1},{0,1,N,N,N}。
第二步,确定被测试程序的具体问题编码。
根据测试问题“Triangle”中对输入变量a,b,c三者的定义,a,b,c都是范围为[1,MAX_VALUE]的正整数,其中MAX_VALUE代表着计算机可表达的正整数。
第三步,根据测试程序得到对应的适应值函数Benchmarkfunction()。
根据表1中我们提出的基于分支距离的计算方法,我们将得到针对测试函数“Triangle”的适应值函数:在第一个判断分支②处,计算语句的分支距离:
if(a<(b+c))&&(b<(a+c))&&(c<(a+b))
由表1中α<β的语义我们将会对a<(b+c)、b<(a+c)以及c<(a+b)进行分别判断,其中:
if(a<(b+c))v1=0;
else v1=a-(b+c)+K;
if(b<(a+c))v2=0;
else v2=b-(a+c)+K;
if(c<(a+b))v3=0;
else v3=c-(a+b)+K;(K为常量,我们设置为10)
根据上述公式方法得到三个判断分支的分支距离v1、v2以及v3,而“&&”表示“α∧β”的语义,所以我们需要将三个分支距离求和得到:
接下来的⑤⑥⑧⑩四个判断分支节点同样使用表1中的规则计算被测试函数判断节点的分支距离f(PX,j)(其中j=1,2,…,Triangle中判断分支数),最终适应值计算函数BenchMarkfunction()返回的测试用例适应值就通过累加测试用例经过的判断节点的分支距离得到:(其中k表示测试用例X经过的分支数目)。
第四步,随机初始化种群。
针对测试程序Triangle,选择程序输入下界为lb=1,上界为ub=MAX_VALUE,然后在[lb,ub]内使用均匀分布的方式随机初始化种群。
第五步,使用差分进化算法迭代更新种群,并记录覆盖程序路径的第一个测试用例。
选取差分进化算法(DE)来迭代种群,选取的种群大小为50,对步骤(d)中生成的初始解以及步骤(e)中差分进化算法(DE)迭代生成的解进行分析,判断这些解对应的测试用例覆盖Triangle的哪一条路径,如果测试用例覆盖了一条之前未被覆盖的路径,则将该测试用例记录下来。这样一来算法迭代结束之后,我们将会得到一组测试用例的集合(其中k表示被测试程序拥有的路径数目),每一个测试Xi(i=1,2,,,k)都覆盖了一条与集合中其他测试用例不同的路径,即完成了整个被测试程序的路径覆盖。
在进行DE算法搜索的同时,通过每一代的测试用例,更新输入维度影响判断分支节点的记录矩阵C,矩阵C共有n行m列,矩阵C的第(i,j)个元素代表着输入参数的第i维对测试程序第j个分支判断节点的影响。每次经过10代的DE算法的迭代更新,就分析DE算法是否陷入了局部最优值,如果陷入了局部最优值,则通过类似步骤(d)中的[lb,ub]范围内的均匀分布,重新初始化种群;如果没有陷入局部最优,则从未覆盖路径中找到一条目前测试用例没有覆盖的节点,找到影响这个节点的输入数据维度,通过矩阵C中的影响数值大小用轮盘赌的方式找到优化的维度,进行动态步长搜索。
动态步长搜索的的方法如下:对于一个[lb,ub]范围的维度i,每次都在维度i随机选取[lb,ub]范围内的两个值x,y,不妨设x<y要求x,y两个数的差要大于0.5*(ub‐lb),取|x‐y|作为初始步长,之后在[x,y]范围内进行二分查找的方法,进行动态步长方式查找。
第六步,检测是否满足迭代终止条件,不满足跳回第五步继续执行,满足则输出最终结果。
这一步是判断算法运行是否结束完成任务,差分进化算法(DE)的迭代终止条件有两个,第一个是算法已经得到覆盖测试程序路径的所有测试用例,另一个则是算法经过多次迭代更新都没有得到覆盖测试程序所有路径的测试用例,在我们的设置中,该最大迭代测试设置为Max=108。执行完毕之后,算法将会把记录的覆盖对应路径的测试用例集合输出。
由于第四、五、六步中有大量随机因素参与,因此我们的解决方法并不是一个确定一定能够在多少时间或者开销内解决的方法,所以这几步很难模拟。
但是我们最后会发现我们只找到{0,0,0,N,N},{0,0,1,0,N},{0,0,1,1,0},{0,0,1,1,1},{1,1,N,N,N}这五条路径的测试用例,而{1,0,0,N,N},{1,0,1,0,N},{1,0,1,1,0},{1,0,1,1,1},{0,1,N,N,N}这五条路径的测试用例却无法找到,问题其实很简单,从Triangle函数的程序源码中我们可以看到,在执行了④之后isatriangle就被赋值为false了,是不会在⑤这个判断分支进入⑥的,所以所有路径中以{1,0}开头的路径均是无效路径,是没有对应的测试用例的,同理{0,1,N,N,N}也没有测试用例。
从实例结果来看,通过本发明方法,可以找到Triangle问题的有效路径测试用例。
Claims (9)
1.基于路径覆盖软件测试的测试用例自动生成方法,其特征在于,包括以下步骤:
(a)对输入的被测测试程序分析功能对应的输入、输出并且通过分析程序中存在的判断、循环分支得到控制流图CFG,并对需要覆盖的路径进行编码;
(b)根据测试问题的实际输入、输出数据的类型和范围确定问题编码;
(c)通过对步骤(a)中得到了控制流图CFG和步骤(b)中根据具体测试问题输入确定的问题编码,以及预设的计算分支距离的方法得到计算一个测试用例评估值的适应值函数;
(d)在测试用例的取值范围内,使用均匀分布的方式随机初始化种群;
(e)以步骤(d)中得到的种群,使用差分进化算法(DE)和收敛速度控制器(CSC)以及步骤(c)中得到的适应值函数更新迭代种群;
(f)将步骤(d)、(e)中种群个体里,覆盖被测试程序目前未被覆盖路径的测试用例记录下来;
(g)检测是否满足差分进化算法的迭代终止条件:如果不满足条件,则跳回步骤(e)继续执行;如果满足条件,则输出记录的覆盖对应路径的测试用例集合。
2.根据权利要求1所述基于路径覆盖软件测试的测试用例自动生成方法,其特征在于:步骤(a)中,对输入的被测程序采用单元测试的测试方法,对于各个功能单元分析对应功能单元的输入、输出以及判断、循环分支,画出功能单元的控制流图CFG;并依据控制流图CFG确定所有路径的编码,首先将测试程序汇总所有的判断、循环分支进行编号,设为1~N,设定路径为一个长度为N的字符串,如果路径经过第k个分支判断节点,那么该路径的第k位的值为字符“1”或者字符“0”,字符“1”表示路径走的是No方向,字符“0”表示路径走的是Yes方向,如果未经过第k个分支判断节点,则可使用字符“N”表示,通过这种方式对路径进行编码,所有的路径都能用一个长度为N的字符串表示。
3.根据权利要求1所述基于路径覆盖软件测试的测试用例自动生成方法,其特征在于:步骤(b)中,分析被测试程序的输入、输出数据类型和范围,确定具体问题的编码,具体包括:对于数值型的数据变量,需要确定数据具体是整数还是浮点数,并且设定其取值范围;如果变量的类型是字符型,使用[0,255]范围内的整数表示一个ASCII码符号,而一个长度为m的字符串就可使用m个[0,255]范围内的整数表示;如果变量是枚举类型,其中枚举选择的数量是k,使用[1,k]范围内的整数来表示一个输入的测试用例;对于输入、输出是上述类型的组合的情况,只需要组合上述输入、输出的类型,就可得到一个测试用例。
4.根据权利要求1所述基于路径覆盖软件测试的测试用例自动生成方法,其特征在于:步骤(c)中,计算测试用例的适应值的方法为,首先确定输入的测试用例X经过了步骤(a)中生成的控制流图(CFG)的哪些节点以及走向,测试用例X形成的路径称为PX,该测试用例在经过路径PX上第j个分支节点的分支距离评估值记为f(PX,j),在f(PX,j)的计算过程中使用了两个策略保证适应值函数的效果,第一个策略是对于已覆盖的分支节点方向的f(PX,j)值会被设置为0,第二个策略是对于未覆盖的路径PX上的第j个节点 其中ε是一个设定常数,则代表着测试用例X在节点上的分值距离;通过结合上述两个策略,实现自适应的测试用例适应值计算函数。
5.根据权利要求1所述基于路径覆盖软件测试的测试用例自动生成方法,其特征在于:步骤(e)中,选取差分进化算法(DE)来迭代种群,差分进化算法迭代公式为:vi=yi+F*(yj-yk),其中vi是得到的新测试用例,而yi是差分进化前的旧测试用例,yj和yk是从种群所有解决方案中随机选中的两个测试用例;在上述计算完成之后,接下来进行差分进化算法(DE)的交叉操作,生成一个[0,1]之间的随机数rand,如果rand的大小小于预设的交叉概率Pc,那么就保留之前的解,如果rand的大小大于预设的交叉概率Pc,那么就舍弃刚刚求得的解,保留以前的解;在差分进化算法进行迭代更新的同时,通过收敛速度控制器(CSC)来控制DE算法的收敛速度,在判断DE算法收敛速度太慢的时候进行相关维度的动态步长搜索操作,加快算法收敛速度,在判断DE算法收敛速度太快的时候进行初始化种群部分维度操作,减缓算法收敛速度;其中动态步长搜索操作方法如下:在一个设定的维度的范围内进行大步长搜索,找到其中适应值最好的位置,并以此位置进行更小范围内的搜索,直到步长小于预设值,此时,在这个小于预设值的范围内进行穷举,找到适应值最高的点;并依据数据新建该维度动态步长搜索后得到的新种群个体。
6.根据权利要求1所述基于路径覆盖软件测试的测试用例自动生成方法,其特征在于:步骤(e)中,收敛速度控制器(CSC)的减速算子如下,添加一个区域击中次数统计数据结构,每次在程序运行之前,将程序输入变量的范围进行分区,具体为:测试用例X的第i个维度取值范围是[1,100],将其平均分成10个区域,并统计每一个区域的击中次数,每次进行收敛速度控制器(CSC)的减速操作的时候,选择测试用例的每个维度击中次数最少的区域,并进行初始化。
7.根据权利要求1所述基于路径覆盖软件测试的测试用例自动生成方法,其特征在于:对步骤(d)中生成的初始解和步骤(e)中差分进化算法(DE)迭代生成的解进行分析,判断这些解对应的测试用例覆盖被测试程序的那一条路径,如果测试用例覆盖了一条之前未被覆盖的路径,则将该测试用例记录下来。这样一来算法迭代结束之后,将会得到一组测试用例的集合其中k表示被测试程序拥有的路径数目,每一个测试Xi(i=1,2,,,k)都覆盖了一条与集合中其他测试用例不同的路径,即完成了整个被测试程序的路径覆盖。
8.根据权利要求1所述基于路径覆盖软件测试的测试用例自动生成方法,其特征在于:步骤(g)中,差分进化算法(DE)的迭代终止条件有两个,第一个是已经得到覆盖测试程序所有路径的测试用例,另一个则是经过多次迭代更新都没有得到覆盖测试程序所有路径的测试用例,满足其中一个条件就跳出循环;设置最大迭代次数,执行完毕之后,将会把记录的覆盖对应路径的测试用例集合输出。
9.根据权利要求1所述基于路径覆盖软件测试的测试用例自动生成方法,其特征在于:步骤(e)中,收敛速度控制器(CSC)的操作如下:首先,定义一个矩阵C,矩阵C共有n行m列,矩阵C的第(i,j)个元素代表着输入参数的第i维对测试程序第j个分支判断节点的影响,每次生成一组测试用例的时候都会更新矩阵C,通过比较不同维度数值的改变是否会使得某个判断节点的走向发生改变,如果会发生改变,则对应数值加一;更新完矩阵之后,每次经过10代的差分进化算法(DE)的迭代更新,就分析差分进化算法(DE)是否陷入了局部最优值,如果陷入了局部最优值,则通过类似步骤(d)中的[lb,ub]范围内的均匀分布,重新初始化种群;如果没有陷入局部最优,则从未覆盖路径中找到一条目前测试用例没有覆盖的节点,找到影响这个节点的输入数据维度,通过矩阵C中的影响数值大小用轮盘赌的方式找到优化的维度,进行动态步长搜索。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710766422.3A CN107590073B (zh) | 2017-08-30 | 2017-08-30 | 基于路径覆盖软件测试的测试用例自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710766422.3A CN107590073B (zh) | 2017-08-30 | 2017-08-30 | 基于路径覆盖软件测试的测试用例自动生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107590073A true CN107590073A (zh) | 2018-01-16 |
CN107590073B CN107590073B (zh) | 2021-03-30 |
Family
ID=61051813
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710766422.3A Active CN107590073B (zh) | 2017-08-30 | 2017-08-30 | 基于路径覆盖软件测试的测试用例自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107590073B (zh) |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108710575A (zh) * | 2018-05-23 | 2018-10-26 | 华南理工大学 | 基于路径覆盖测试用例自动生成的单元测试方法 |
CN109376075A (zh) * | 2018-09-19 | 2019-02-22 | 北京奇安信科技有限公司 | 一种生成测试对象最优测试覆盖路径的处理方法及装置 |
CN110377493A (zh) * | 2018-04-12 | 2019-10-25 | 南京慕测信息科技有限公司 | 一种面向代码可读性的单元测试用例优化方法 |
CN110377492A (zh) * | 2018-04-12 | 2019-10-25 | 南京慕测信息科技有限公司 | 一种基于方法相似度的单元测试用例生成方法 |
CN110399286A (zh) * | 2018-04-24 | 2019-11-01 | 西安邮电大学 | 一种基于独立路径的测试数据自动生成方法 |
CN110543421A (zh) * | 2019-08-31 | 2019-12-06 | 华南理工大学 | 基于测试用例自动生成算法的单元测试自动执行方法 |
CN111209192A (zh) * | 2019-12-30 | 2020-05-29 | 山东科技大学 | 一种基于双混沌鲸鱼优化算法的测试用例自动生成方法 |
CN111831532A (zh) * | 2019-04-15 | 2020-10-27 | 富士通株式会社 | 构建测试场景的方法以及信息处理设备 |
CN112162932A (zh) * | 2020-10-30 | 2021-01-01 | 中国人民解放军国防科技大学 | 一种基于线性规划预测的符号执行优化方法及装置 |
CN112286824A (zh) * | 2020-11-18 | 2021-01-29 | 长江大学 | 基于二分搜索迭代的测试用例生成方法、***及电子设备 |
CN112749082A (zh) * | 2020-05-11 | 2021-05-04 | 长江大学 | 一种基于de-th算法的测试用例生成方法及*** |
CN113342699A (zh) * | 2021-07-26 | 2021-09-03 | 中南大学 | 一种软件无线电符合性测试方法及*** |
CN113468044A (zh) * | 2021-05-27 | 2021-10-01 | 长江大学 | 一种基于改进的灰色预测演化算法的测试用例生成方法 |
CN113672503A (zh) * | 2021-08-03 | 2021-11-19 | 中移(杭州)信息技术有限公司 | 测试用例的生成方法、***、终端设备以及存储介质 |
CN113742251A (zh) * | 2021-11-08 | 2021-12-03 | 山东建筑大学 | 基于集合进化的软件测试路径生成方法及*** |
CN114064453A (zh) * | 2021-10-12 | 2022-02-18 | 华南理工大学 | 基于聚类和进化算法的软件测试用例自动生成方法 |
CN114490316A (zh) * | 2021-12-16 | 2022-05-13 | 四川大学 | 一种基于损失函数的单元测试用例自动生成方法 |
CN114579435A (zh) * | 2022-02-23 | 2022-06-03 | 南京信息工程大学 | 一种软件测试用例的生成方法 |
CN117472786A (zh) * | 2023-12-27 | 2024-01-30 | 道普信息技术有限公司 | 一种测试用例自动生成方法、装置、电子设备和存储介质 |
CN117520211A (zh) * | 2024-01-08 | 2024-02-06 | 江西财经大学 | 基于多维覆盖矩阵的随机组合测试用例生成方法与*** |
-
2017
- 2017-08-30 CN CN201710766422.3A patent/CN107590073B/zh active Active
Cited By (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110377493A (zh) * | 2018-04-12 | 2019-10-25 | 南京慕测信息科技有限公司 | 一种面向代码可读性的单元测试用例优化方法 |
CN110377492A (zh) * | 2018-04-12 | 2019-10-25 | 南京慕测信息科技有限公司 | 一种基于方法相似度的单元测试用例生成方法 |
CN110399286B (zh) * | 2018-04-24 | 2023-05-12 | 西安邮电大学 | 一种基于独立路径的测试数据自动生成方法 |
CN110399286A (zh) * | 2018-04-24 | 2019-11-01 | 西安邮电大学 | 一种基于独立路径的测试数据自动生成方法 |
US11720477B2 (en) | 2018-05-23 | 2023-08-08 | South China University Of Technology | Unit testing method based on automatic generation of path coverage test cases |
WO2019223247A1 (zh) * | 2018-05-23 | 2019-11-28 | 华南理工大学 | 基于路径覆盖测试用例自动生成的单元测试方法 |
CN108710575A (zh) * | 2018-05-23 | 2018-10-26 | 华南理工大学 | 基于路径覆盖测试用例自动生成的单元测试方法 |
CN109376075B (zh) * | 2018-09-19 | 2022-04-22 | 奇安信科技集团股份有限公司 | 一种生成测试对象最优测试覆盖路径的处理方法及装置 |
CN109376075A (zh) * | 2018-09-19 | 2019-02-22 | 北京奇安信科技有限公司 | 一种生成测试对象最优测试覆盖路径的处理方法及装置 |
CN111831532A (zh) * | 2019-04-15 | 2020-10-27 | 富士通株式会社 | 构建测试场景的方法以及信息处理设备 |
CN110543421B (zh) * | 2019-08-31 | 2022-03-29 | 华南理工大学 | 基于测试用例自动生成算法的单元测试自动执行方法 |
CN110543421A (zh) * | 2019-08-31 | 2019-12-06 | 华南理工大学 | 基于测试用例自动生成算法的单元测试自动执行方法 |
CN111209192A (zh) * | 2019-12-30 | 2020-05-29 | 山东科技大学 | 一种基于双混沌鲸鱼优化算法的测试用例自动生成方法 |
CN112749082A (zh) * | 2020-05-11 | 2021-05-04 | 长江大学 | 一种基于de-th算法的测试用例生成方法及*** |
CN112749082B (zh) * | 2020-05-11 | 2022-06-24 | 长江大学 | 一种基于de-th算法的测试用例生成方法及*** |
CN112162932A (zh) * | 2020-10-30 | 2021-01-01 | 中国人民解放军国防科技大学 | 一种基于线性规划预测的符号执行优化方法及装置 |
CN112162932B (zh) * | 2020-10-30 | 2022-07-19 | 中国人民解放军国防科技大学 | 一种基于线性规划预测的符号执行优化方法及装置 |
CN112286824B (zh) * | 2020-11-18 | 2022-08-02 | 长江大学 | 基于二分搜索迭代的测试用例生成方法、***及电子设备 |
CN112286824A (zh) * | 2020-11-18 | 2021-01-29 | 长江大学 | 基于二分搜索迭代的测试用例生成方法、***及电子设备 |
CN113468044A (zh) * | 2021-05-27 | 2021-10-01 | 长江大学 | 一种基于改进的灰色预测演化算法的测试用例生成方法 |
CN113342699A (zh) * | 2021-07-26 | 2021-09-03 | 中南大学 | 一种软件无线电符合性测试方法及*** |
CN113342699B (zh) * | 2021-07-26 | 2023-08-04 | 中南大学 | 一种软件无线电符合性测试方法及*** |
CN113672503A (zh) * | 2021-08-03 | 2021-11-19 | 中移(杭州)信息技术有限公司 | 测试用例的生成方法、***、终端设备以及存储介质 |
CN114064453B (zh) * | 2021-10-12 | 2023-04-07 | 华南理工大学 | 基于聚类和进化算法的软件测试用例自动生成方法 |
CN114064453A (zh) * | 2021-10-12 | 2022-02-18 | 华南理工大学 | 基于聚类和进化算法的软件测试用例自动生成方法 |
CN113742251B (zh) * | 2021-11-08 | 2022-01-28 | 山东建筑大学 | 基于集合进化的软件测试路径生成方法及*** |
CN113742251A (zh) * | 2021-11-08 | 2021-12-03 | 山东建筑大学 | 基于集合进化的软件测试路径生成方法及*** |
CN114490316B (zh) * | 2021-12-16 | 2023-04-18 | 四川大学 | 一种基于损失函数的单元测试用例自动生成方法 |
CN114490316A (zh) * | 2021-12-16 | 2022-05-13 | 四川大学 | 一种基于损失函数的单元测试用例自动生成方法 |
CN114579435A (zh) * | 2022-02-23 | 2022-06-03 | 南京信息工程大学 | 一种软件测试用例的生成方法 |
CN114579435B (zh) * | 2022-02-23 | 2024-05-28 | 南京信息工程大学 | 一种软件测试用例的生成方法 |
CN117472786A (zh) * | 2023-12-27 | 2024-01-30 | 道普信息技术有限公司 | 一种测试用例自动生成方法、装置、电子设备和存储介质 |
CN117472786B (zh) * | 2023-12-27 | 2024-04-12 | 道普信息技术有限公司 | 一种测试用例自动生成方法、装置、电子设备和存储介质 |
CN117520211A (zh) * | 2024-01-08 | 2024-02-06 | 江西财经大学 | 基于多维覆盖矩阵的随机组合测试用例生成方法与*** |
Also Published As
Publication number | Publication date |
---|---|
CN107590073B (zh) | 2021-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107590073A (zh) | 基于路径覆盖软件测试的测试用例自动生成方法 | |
CN102141958B (zh) | 面向缺陷的路径覆盖测试数据进化生成方法 | |
CN103116540A (zh) | 基于全局超级块支配图的动态符号执行方法及其装置 | |
Oliveira et al. | Hybrid evolutionary algorithms and clustering search | |
CN110399286A (zh) | 一种基于独立路径的测试数据自动生成方法 | |
Last et al. | Effective black-box testing with genetic algorithms | |
CN111897729A (zh) | 基于TensorFuzz的深度神经网络模糊测试框架和测试方法 | |
CN117170980B (zh) | 一种服务器硬件异常预警方法、装置、设备及存储介质 | |
CN105930272A (zh) | 基于重要语句的分支覆盖测试数据生成方法 | |
CN117992356A (zh) | 一种面向模糊测试的变异调度方法及装置 | |
Peng et al. | Memetic differential evolution with an improved contraction criterion | |
CN109583751A (zh) | 有效载荷的故障决策方法 | |
Oliveira et al. | Footprints of fitness functions in search-based software testing | |
KR101827124B1 (ko) | 운전자의 주행 패턴 인식 시스템 및 방법 | |
CN109934917B (zh) | 基于机器学习预测计算强度的并行化点云生成dem方法 | |
CN113743572A (zh) | 一种基于Fuzz的人工神经网络测试方法 | |
CN112181420B (zh) | 基于强化学习的编译器缺陷定位方法 | |
CN115795483A (zh) | 一种基于人工鱼群算法的软件漏洞检测方法 | |
Kadavy et al. | Introducing self-adaptive parameters to self-organizing migrating algorithm | |
Dhivya et al. | Weighted particle swarm optimization algorithm for randomized unit testing | |
Ding et al. | Adaptive training of radial basis function networks using particle swarm optimization algorithm | |
CN114691518B (zh) | 一种基于深度强化学习的efsm输入序列生成方法 | |
Garrett et al. | Analyzing the performance of hybrid evolutionary algorithms for the multiobjective quadratic assignment problem | |
Zhang et al. | Differential evolution with random walk mutation and an external archive for multimodal optimization | |
CN107064794A (zh) | 一种基于遗传算法的防爆电机故障检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230112 Address after: No. 309E, 3rd Floor, Building 22, Shunlian Machinery City, No. 18, Xingye 4th Road, Guanglong Industrial Park, Chihua Community, Chencun Town, Shunde District, Foshan City, Guangdong Province, 528314 Patentee after: Microscience Intelligent Inspection (Foshan) Technology Co.,Ltd. Address before: 510640 No. five, 381 mountain road, Guangzhou, Guangdong, Tianhe District Patentee before: SOUTH CHINA University OF TECHNOLOGY |
|
TR01 | Transfer of patent right |