CN101882106B - 一种基于灾变的演化测试的动态优化方法 - Google Patents
一种基于灾变的演化测试的动态优化方法 Download PDFInfo
- Publication number
- CN101882106B CN101882106B CN201010198471A CN201010198471A CN101882106B CN 101882106 B CN101882106 B CN 101882106B CN 201010198471 A CN201010198471 A CN 201010198471A CN 201010198471 A CN201010198471 A CN 201010198471A CN 101882106 B CN101882106 B CN 101882106B
- Authority
- CN
- China
- Prior art keywords
- population
- individuality
- adaptive value
- test case
- test
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
本发明提出了一种基于灾变的演化测试的动态优化方法,主要用于解决演化测试在演化过程中出现的种群早熟退化现象,本发明涉及到的关键操作包括:(1)生成初始种群时,需要度量初始种群的多样性,如果初始种群的多样性高于第一阀值,则表示种群中的个体过于分散,搜索过程较难收敛,此时需要重新生成初始种群直到初始种群多样性低于第一阀值;(2)演化过程中周期性的度量种群的多样性,一旦发现种群多样性低于第二阀值且未找到全局最优解则判定种群早熟退化,此时采取灾变操作以帮助种群恢复多样性。
Description
技术领域
本发明是一种基于灾变的演化测试的动态优化方法,主要用于处理演化测试在演化过程中出现的种群的早熟退化现象。
背景技术
通常情况下,软件测试需要耗费整个软件开发过程50%以上的资源。为了提高测试效率,降低测试成本,研究者们针对自动化测试技术进行了大量研究。其中已被广泛应用的是随机测试技术,该技术除了可以实现高度的自动化,还具有简单、操作性强等优点。但是由于采取了盲目搜索的方法,随机测试往往会产生庞大低效的测试用例集,从而严重降低测试的缺陷检测能力。因此为了弥补随机测试中的缺陷,进一步提高自动化测试的效率,需要人们积极研究新的自动化测试方法。其中演化测试作为一种非常有前景的新兴方法,受到了越来越多的关注。
演化测试利用某种元启发式搜索方法(主要使用遗传算法)来产生测试用例,演化测试将测试用例的生成过程转化为一个利用遗传算法进行数值优化的问题。随着演化测试应用领域的扩大,越来越多的研究者开始关注演化测试性能优化的研究,目前的研究主要集中在解决种群的早熟退化问题与flag变量问题两大方面。本发明主要针对解决的是种群的早熟退化问题。传统方法利用静态优化方法获得具有合理选择压力的演化测试配置,以降低由于收敛速度不合理所造成的种群早熟退化。该方法仅适用于进化停滞问题的预防,但是一旦种群早熟退化,静态优化方法无法帮助演化测试摆脱局部最优解,从而导致最终无法找到全局最优解。另外一种方法就是动态优化方法,在种群演化的过程中动态处理种群的早熟退化问题。
发明内容
技术问题:本发明的目的是提供一种基于灾变的演化测试的动态优化方法,帮助演化测试解决种群的早熟退化问题,从而提高演化测试的性能。与过去使用的方法相比,本发明能够更好地自动产生测试用例,并提高演化测试的性能。
技术方案:本发明的方法是当演化测试在演化过程中出现种群早熟退化现象时,采用灾变操作,帮助演化测试解决种群的早熟退化问题。
本发明提出的基于灾变的演化测试的动态优化方法具体步骤如下:
步骤1).分析指定的作为测试对象的程序并构造对应的控制流图,在测试对象中指定测试目标并根据指定的测试目标构造适应值函数,所述的测试目标是公知的语句覆盖、分支覆盖及路径覆盖,
步骤2).随机生成k个数,这k个数组成一个测试用例即每个测试用例包含k个数,然后每个测试用例编码成种群中的一个个体,重复上述过程直至初始种群有n个个体,其中k和n都是正整数,所述的编码方法是公知的二进制编码和格雷码编码方法,
步骤3).将种群中的个体解码为测试用例并将该测试用例作为测试对象的输入,运行测试对象并根据步骤1)构造的适应值函数计算适应值,适应值的值域为(0,1.0],当某个体的适应值为1.0时,该个体就是所需的全局最优解,该个体对应的是满足测试目标的测试用例,所述的解码是将二进制编码或者格雷码编码的个体转换为十进制数值的测试用例,
步骤4).将种群中个体的适应值按照设定的划分标准进行划分,统计每个划分区域中的个体数,根据DCP=-∑Pi*log10Pi度量初始种群的多样性,所述的DCP为种群的多样性,Pi表示种群中适应值在第i个划分区域的个体数占个体总数的比例,且Pi∈[0,1],i为正整数且为划分区域的编号,如果初始种群的多样性DCP高于设定的第一阀值,就重新生成初始种群直到初始种群的多样性DCP低于第一阀值,第一阀值的值域为(0,1.0],
步骤5).如果种群中的个体包含所需的全局最优解或者种群演化满足预设终止条件,则转至步骤11),否则,进入步骤6),所述的全局最优解是种群中适应值为1.0的个体,且该个体对应的是满足测试目标的测试用例,所述的预设终止条件是种群演化迭代次数达到预设的种群最大迭代次数max,所述的max是正整数,
步骤6).如果种群的多样性DCP低于设定的第二阀值,第二阀值的值域为(0,1.0],则进行灾变操作,产生一个新种群,并转入步骤9),否则,将当前种群作为旧种群,进入步骤7),
步骤7).对旧种群进行演化操作,并生成临时种群,
步骤8).按照设定的存活概率Ps对旧种群和临时种群进行存活操作,形成一个新种群,新种群中的个体为二进制编码或者格雷码编码的个体,所述的存活概率Ps∈(0,1.0);
步骤9).将新种群作为当前种群,并将当前种群中的个体解码为测试用例并将该测试用例作为测试对象的输入,运行测试对象并根据步骤1)构造的适应值函数计算适应值,
步骤10).转至步骤5),
步骤11).结束测试。
有益效果:经过大量实验证明,本发明和其他方法相比能够很好的解决演化测试在种群演化过程中出现的种群早熟退化问题,在命中率和平均进化代数等性能上都得到一定的提高。且经过试验发现,格雷码编码在性能提高上要比二进制编码要好,而且锦标赛选择要比随机选择和轮盘赌选择要好。
附图说明
图1是演化测试的通用流程图。
图2是评估个体适应值的流程。
图3是种群演化的具体操作。
图4是改进的演化测试的流程,其中虚框中的流程是本发明的核心。
图5是灾变操作的流程。
图6是测试对象对应的控制流图,该测试对象是用来判定输入三个数所组成的三角形的类型。
图7是在进行灾变操作时是否保留最优个体性能比较,其中Without_Best表示当灾变算子工作时,不把早熟种群的最佳个体保留到新种群中,OSBC表示本发明的方法,C3、C6、C12、C17、C19和C24见表1。
具体实施方式
步骤1).分析指定的作为测试对象的程序并构造对应的控制流图,在测试对象中指定测试目标并根据指定的测试目标构造适应值函数,所述的测试目标是公知的语句覆盖、分支覆盖及路径覆盖。
构造适应值函数示例如下:以分支条件if(a==b)为例,其中a和b是程序中的整型变量,当目标分支为该判定的“真”分支时,对于测试用例来说最简单的适应值函数可被定义为fitness=1/(|a-b|+k),当a=b时,设定fitness=1.0,其中fitness表示适应值,k∈(0,0.01);又如,对于分支判定条件if(a>=b),其中a和b同上例,目标分支为“假”分支时,适应值函数可被定义为fitness=1/((a-b)+k),其中k∈(0,0.01)。设某一程序路径包括以上两个分支判定条件,其适应值函数为:fitness=1/(|a-b|+(a-b)+k),其中k∈(0,0.01),当a=b时,设定fitness=1.0。
步骤2).随机生成k个数,这k个数组成一个测试用例即每个测试用例包含k个数,然后每个测试用例编码成种群中的一个个体,重复上述过程直至初始种群有n个个体,其中k和n都是正整数,所述的编码是公知的二进制编码和格雷码编码,经过大量实验发现格雷码编码的演化测试的性能要比二进制编码的演化测试性能要高。
二进制编码示例如下:假设一个测试用例包含2个数6和9,则该测试用例可表示为(6,9),将这个测试用例用二进制进行编码,测试用例中的每个数被编码位4位0/1串,则该测试用例对应的个体是(0110 1001)。
格雷码编码示例如下:假设一个测试用例表示为(6,9),将这个测试用例用格雷码进行编码,测试用例中的每个数被编码位4位0/1串,则该测试用例对应的个体是(0101 1101)。
步骤3).将种群中的个体解码为测试用例并将该测试用例作为测试对象的输入,运行测试对象并根据步骤1)构造的适应值函数计算适应值,适应值的值域为(0,1.0],当某个体的适应值为1.0时,该个体就是所需的全局最优解,该个体对应的是满足测试目标的测试用例,所述的解码是将二进制编码或者格雷码编码的个体转换为十进制数值的测试用例。
示例如下:选择种群中个体(0010 0100),该个体用格雷码解码之后对应的测试用例是(3,7),设适应值函数为fitness=1/(|a-b|+0.01)且当a=b时,fitness=1.0,则将测试用例(a=3,b=7)带入适应值函数则该个体对应的适应值为0.25,当对测试用例(4,4)而言,设定fitness=1.0,而不是100。
步骤4).将种群中个体的适应值按照设定的划分标准进行划分,统计每个划分区域中的个体数,根据DCP=-∑Pi*log10Pi度量初始种群的多样性,所述的DCP为种群的多样性,Pi表示种群中适应值在第i个划分区域的个体数占个体总数的比例,且Pi∈[0,1],i为正整数且为划分区域的编号,如果初始种群的多样性DCP高于设定的第一阀值,就重新生成初始种群直到初始种群的多样性DCP低于第一阀值,第一阀值的值域为(0,1.0];
示例如下:假定种群中个体对应的适应值分别为0.05、0.12、0.25、0.34、0.48、0.59、0.61、0.75、0.84和0.96,适应值划分的标准为(0-0.1)、(0.1-0.2)、(0.2-0.3)、(0.3-0.4)、(0.4-0.5)、(0.5-0.6)、(0.6-0.7)、(0.7-0.8)、(0.8-0.9)和(0.9-1.0)共10个区间,则根据上述公式,在此示例下Pi均等于0.1,其中i是属于[1,10]的正整数,则最终DCP=1。假定第一阀值为0.8,则DCP>第一阀值,此时需要重新生成初始种群直至DCP≤第一阀值。
步骤5).如果种群中的个体包含所需的全局最优解或者种群演化满足预设终止条件,则转至步骤11),否则,进入步骤6),所述的全局最优解是种群中适应值为1.0的个体,且该个体对应的是满足测试目标的测试用例,所述的预设终止条件是种群演化迭代次数达到预设的种群最大迭代次数max,所述的max是正整数;
假设我们找到一个测试用例(4,4),且适应值函数为fitness=1/(|a-b|+0.01),该测试用例的适应值设为1.0,正是全局最优解,转步骤11)。若预设的种群最大迭代次数max=100,且此时已有的种群迭代次数是100,此时种群演化次数已达最大迭代次数,则转步骤11)。
步骤6).如果种群的多样性DCP低于设定的第二阀值,第二阀值的值域为(0,1.0],则进行灾变操作,产生一个新种群,并转入步骤9),否则,将当前种群作为旧种群,进入步骤7)。灾变操作的具体步骤如下:保留旧种群中的最佳个体,将旧种群中的其余n-1个个体全部抛弃,再随机生成一个包含n-1个个体的新种群,并将保留的旧种群的最佳个体放到新种群中,此时新种群中共有n个个体,所述的旧种群中的最佳个体是旧种群中适应值最大的个体,所述的n是正整数。
示例如下:设定的第二阀值为0.3,若当前种群中个体对应的测试用例为(3,4)、(3,5)、(5,3)(3,5)(3,5)和(3,5),每个个体对应的适应值为0.99、0.5、0.5、0.5、0.5、0.5和0.5。根据种群多样性的计算方式,可知当前种群的多样性为0.197,则0.197<0.3,则可判定该种群早熟了,则进行灾变操作。保留种群中的最优个体对应的测试用例(3,4),抛弃其他五个个体,再随机生成一个种群(包含5个个体),新生成的种群中个体对应的测试用例为(3,6)、(7,6)、(4,8)、(3,4)和(8,5),将之前保留的(3,4)插到新种群中,则最终种群中个体对应的测试用例为(3,4)、(3,6)、(7,6)、(4,8)、(3,4)和(8,5)。
步骤7).对旧种群进行演化操作,生成临时种群,临时种群的生成可以采用公知的方法进行,即:选择、交叉、变异,重复上述三个操作,直至临时种群中有n个个体,所述的n是正整数。
所述的选择操作是从旧种群中选择2个个体出来,具体的选择方法是公知的轮盘赌选择、随机选择和锦标赛选择,
所述的交叉操作是按照设定的交叉概率Pc对选择出来的2个个体进行交叉操作,具体的交叉方法是公知的单点交叉和均匀交叉,所述的Pc∈(0,1.0),
所述的变异操作是按照设定的变异概率Pm对交叉操作结束之后的2个个体进行变异操作,具体的变异操作是公知的单点变异和多点变异,所述的Pm∈(0,1.0),
示例如下:假设当前种群中的个体对应的测试用例为(3,4)、(3,8)、(6,7)、(5,9)、(10,8)和(15,18),每个个体对应的适应值为0.99、0.2、0.99、0.25、0.5、0.33。
选择方法示例如下:
①轮盘赌选择的示例如下:将每个个体的适应值规格化,规格化计算公式fit=fit(j)/totalFit,其中fit表示每个个体规格化之后的适应值,fit(j)表示根据适应值函数计算的个体j的适应值,totalFit表示所有个体的适应值之和,j为正整数,规格化之后结果如下表,其中累加适应值表示将该个体之前的所有个体的规格化适应值相加:
(3,4) | (3,8) | (6,7) | (5,9) | (10,8) | (15,18) | |
适应值 | 0.99 | 0.20 | 0.99 | 0.25 | 0.50 | 0.32 |
规格化适应值 | 0.305 | 0.062 | 0.305 | 0.077 | 0.154 | 0.097 |
累加适应值 | 0.305 | 0.367 | 0.672 | 0.749 | 0.903 | 1.0 |
产生一个随机数0.42,则0.366<0.42<0.671,则选出测试用例(6,7),再产生一个随机数选出(3,4)。则轮盘赌选择法选出两个测试用例(6,7)和(3,4)。
②随机选择的示例如下:种群中共有6个个体,6个个体编号为1到6,产生一个随机数Ran且1≤Ran≤6,Ran为正整数,若Ran=2,则选择(3,8),按照这种方法再选择1个个体出来,最终选择(3,8)和(10,8)。
③锦标赛选择的示例如下:首先从种群中的6个个体中随机选择3个个体出来,如选择(3,4)、(3,8)和(5,9),然后在3个个体中选择适应值最大的个体,即(3,4),按照这种方法再选一个个体出来,最终选择的个体是(3,4)和(10,8)。
交叉方式:按照设定的交叉概率Pc对选择出来的个体进行交叉生成新的个体。产生一个随机数Ran,且Ran∈(0,1.0)。若Ran>Pc,则不需要对选择出来的2个个体进行交叉操作,直接进行变异操作;若Ran≤Pc,则对选择出来的个体进行交叉操作,并把产生的新个体带入变异操作中。具体的交叉方法示例如下:
①单点交叉的示例如下:若选择出来的两个个体是(0010 1101)和(10011000),选择第4位作为交叉点,则
经过交叉后产生新个体(0011 1000)和(1000 1101)。
②均匀交叉的示例如下:如选择出来的两个个体是(0110 1101)和(10011000),选择第1、3、6、8位作为交叉点,则
经过交叉后产生新个体(1100 1000)和(0011 1101)。
变异方式:按照设定的变异概率Pm对交叉操作之后的2个个体进行变异操作(将指定的变异位由1变0或者由0变1)。产生一个随机数Ran,且Ran∈(0,1.0)。若Ran>Pm,则直接将交叉生成的个体放到临时种群中;若Ran≤Pm,则对交叉生成的个体进行变异操作,并把产生的新个体放到临时种群中,通常采用的变异方式包括:单点变异和多点变异。具体的变异方法示例如下:
①单点变异的示例如下:以个体(0010 1101)为例,变异位为第5位,则
个体(0010 1101)变为新个体(0010 0101)。
②多点变异的示例如下:以个体(0010 1101)为例,变异位为第2位和第6位,则
个体(0010 1101)变为新个体(0110 1001)。
重复选择、交叉和变异操作直到临时种群中有6个个体,假定最终临时种群中的个体对应的测试用例是(4,6)、(4,7)、(7,3)、(9,6)、(13,5)和(12,10)。
步骤8).按照设定的存活概率Ps对旧种群和临时种群进行存活操作,生成一个新种群,所述的存活概率Ps∈(0,1.0)。产生一个随机数Ran,且Ran∈(0,1.0)。若Ran>Ps,则从旧种群中选择一个个体出来并放到新种群N中若Ran≤Ps,则从临时种群中选择一个个体出来并放到新种群中。通常采用的存活方式有:轮盘赌存活、适应值存活和不重复存活。假定此时旧种群中个体对应的测试用例为(3,4)、(3,8)、(6,7)、(5,9)、(10,8)和(15,18),临时种群中个体对应的测试用例为(4,6)、(4,7)、(7,3)、(9,6)、(13,5)和(12,10)。假设设定的存活概率Ps=0.5。
①轮盘赌存活的示例如下:对旧种群和临时种群的每个个体的适应值规格化,规格化计算公式fit=fit(j)/totalFit,其中fit表示每个个体规格化之后的适应值,fit(j)表示个体j的当前适应值,j为正整数,totalFit表示所有个体的适应值之和,旧种群规格化之后的结果如下表:
(3,4) | (3,8) | (6,7) | (5,9) | (10,8) | (15,18) | |
适应值 | 0.99 | 0.20 | 0.99 | 0.25 | 0.50 | 0.32 |
规格化适应值 | 0.305 | 0.062 | 0.305 | 0.077 | 0.154 | 0.097 |
累加适应值 | 0.305 | 0.367 | 0.672 | 0.749 | 0.903 | 1.0 |
临时种群规格化之后的结果如下:
(4,6) | (4,7) | (7,3) | (9,6) | (13,5) | (12,10) | |
适应值 | 0.5 | 0.33 | 0.25 | 0.33 | 0.125 | 0.5 |
规格化适应值 | 0.246 | 0.162 | 0.123 | 0.162 | 0.061 | 0.246 |
累加适应值 | 0.246 | 0.408 | 0.531 | 0.693 | 0.754 | 1.0 |
产生第一个随机数,假定第一个随机数是0.64,则0.64>0.5,则需要从旧种群中选一个个体出来,此时再产生第二个随机数,假定第二个随机数为0.45,则0.366<0.45<0.671,则从旧种群中选择(6,7)放入到新种群中。若第一个随机数为0.36,则0.36<0.5,则需要从临时种群中选一个个体出来,此时再产生第二个随机数,假定第二个随机数为0.56,则0.531<0.56<0.693,则从临时种群中选择(9,6)放入到新种群中。重复上述步骤直到新种群中有6个个体。
②适应值存活的示例如下:产生一个随机数,若该随机数为0.64,则0.64>0.5,则需要从旧种群中选择适应值最大的个体(3,4),并将该个体放入到新种群中。若该随机数为0.36,则0.36<0.5,则需要从临时种群中选适应值最大的个体(4,6)。重复上述步骤直到新种群中有6个个体。
③不重复存活的示例如下:产生一个随机数,若该随机数为0.64,则0.64>0.5,则从旧种群中选择适应值最大的个体(3,4)放到新种群中,并将该个体从旧种群中删除,此时旧种群只有(3,8)、(6,7)、(5,9)、(10,8)和(15,18);若该随机数为0.4,则0.4≤0.5,则从临时种群中选择适应值最大的个体(4,6)放到新种群中。重复上述操作直到新种群中有6个个体。
假定经过存活操作之后产生的新种群中个体对应的测试用例为(3,4)、(6,7)、(4,6)、(12,10)、(10,8)和(4,7)。
步骤9).将种群中的个体解码为测试用例并将该测试用例作为测试对象的输入,运行测试对象并根据步骤1)构造的适应值函数计算适应值,适应值的值域为(0,1.0],所述的解码是将二进制编码或者格雷码编码的个体转换为十进制数值的测试用例,
步骤10).转至步骤5);
步骤11).结束测试。
为了检验该动态优化方法的性能,我们选取以下代码作为测试对象,下列代码是用来判断三角形形状的。
1.void judge(){
2. int a,b,c;
3. int isATriangle;
4. printf(“Enter 3 integers which are sides of a triangle”);
5. scanf(“%d%d%d”,&a,&b,&c);
6. printf(“Side A is %d\n”,a);
7. printf(“Side B is %d\n”,b);
8. printf(“Side C is %d\n”,c);
9. if((a<b+c)&&(b<a+c)&&(c<a+b))
10. isATriangle=1;
11. else isATriangle=0;
12. if(isATriangle)
13. if((a==b)&&(b==c))/*等边三角形*/
14. printf(“Equilateral\n”);
15. else if((a!=b)&&(a!=c)&&(b!=c))/*普通三角形*/
16. printf(“Scalence\n”);
17. else printf(“Isoceles\n”);/*等腰*/
18. else printf(“NOT a Triangle\n”);/*不是三角形*/
19. }
假设第一阀值为0.7,第二阀值为0.4,,交叉概率Pc=0.9,变异概率Pm=0.1,存活概率Ps=0.5,种群演化的最大迭代次数为100,演化测试的具体步骤如下:
步骤1).分析上述的源代码并构造对应的控制流图,构造的控制流图如图6,指定测试目标为语句14(即找到三条边能够组成等边三角形),构造的适应值函数为fitness=1/((a-b)2+(b-c)2+(a-c)2+0.01),其中a,b,c的值分别是上述程序中的变量a,b,c对应的输入值,当a=b=c时,适应值为1.0,而不是100。
步骤2).假设种群中包含10个个体(实际测试系统中种群包含100个个体,为了举例方便,示例中设置种群只有10个个体),生成初始种群,每次随机生成三个整数(值域为0-50)并组成一个测试用例。假设生成的10个测试用例分别是(10,13,12)、(3,4,5)、(9,14,12)、(4,12,4)、(14,12,10)、(10,13,10)、(8,12,13)、(10,9,12)、(11,15,13)和(5,4,5),用格雷码把测试用例编码成种群中的个体,编码结果如下:(1111 1011 1010)、(0010 0110 0111)、(1101 1001 1010)、(0110 1010 0110)、(1001 1010 1111)、(1111 1011 1111)、(1100 10101011)、(1111 1101 1010)、(1110 1000 1011)和(0111 0110 0111)。
步骤3).将种群中的个体解码为测试用例,并将测试用例中的数值作为被测程序中变量a、b、c的值,运行测试对象并计算种群中每个个体的适应值。运行结束之后可知种群中个体的适应值分别是0.07、0.17、0.026、0.008、0.042、0.056、0.023、0.07、0.042和0.5。
步骤4).已知第一阀值为0.7,度量初始种群的多样性,其中适应值按照(0-0.01)、(0.01-0.02)、(0.02-0.03)、(0.03-0.04)、(0.04-0.05)、(0.05-0.06)、(0.06-0.07)、(0.07-0.08)、(0.08-0.09)和(0.09-1.0)进行划分。经过计算,可知种群多样性DCP=0.76。此时DCP>0.7,则重新生成初始种群直到初始种群多样性DCP≤0.7。假定最终初始种群中的个体如下:(1101 0101 1100)、(0111 0101 0110)、(1110 0101 1100)、(1101 0101 1100)、(1101 0101 1100)、(1101 0101 1100)、(1101 01011100)、(1101 0101 1100)、(1101 0101 1100)和(0010 0110 0010),对应的测试用例如下:(9,6,8)、(5,6,4)、(11,6,8)、(9,6,8)、(9,6,8)、(9,6,8)、(9,6,8)、(9,6,8)、(9,6,8)和(3,4,3),每个个体对应的适应值分别是0.07、0.17、0.02、0.07、0.07、0.07、0.07、0.07、0.07和0.5。初始种群的多样性DCP=0.345。
步骤5).如果种群中的个体包含所需的全局最优解或者种群演化满足预设终止条件,则转至步骤11),否则,进入步骤6)。而步骤4)产生的种群中没有全局最优解即没有一个个体的适应值为1.0且种群演化迭代次数只有1,还未达最大迭代次数100,则进入步骤6)。
步骤6).已知第二阀值为0.4,度量步骤4)产生的初始种群的多样性DCP=0.345,发现DCP<第二阀值,则进行灾变操作。灾变操作的具体步骤如下:保留旧种群中的最佳个体(3,4,3),抛弃旧种群中的其余9个个体,然后再随机生成一个新种群,该新种群包含9个个体,假定生成的9个个体对应的测试用例为(14,11,12)、(15,12,10)、(9,6,7)、(5,5,13)、(4,7,5)、(10,13,10)、(10,9,12)、(15,12,14)和(5,12,4)。再把旧种群的最佳个体对应的测试用例(3,4,3)放到新种群中,最终新种群中有10个个体,且这10个个体对应的测试用例是(3,4,3)、(14,11,12)、(15,12,10)、(9,6,7)、(5,5,13)、(4,7,5)、(10,13,10)、(10,9,12)、(15,12,14)和(5,12,4),新种群的多样性DCP=0.59,每个测试用例对应的个体是(0010 0110 0010)、(1001 1110 1010)、(1000 1010 1111)、(1101 0101 0100)、(0111 01111011)、(0110 0100 0111)、(1111 1011 1111)、(1111 1101 1010)、(10001010 1001)和(0111 1010 0110)。
步骤7).将种群中的个体解码为测试用例,并将测试用例中的数值作为被测程序中变量a、b、c的值,运行测试对象并计算种群中每个个体的适应值。运行结束之后可知种群中个体的适应值分别是0.50、0.07、0.026、0.07、0.008、0.07、0.055、0.07、0.07和0.009。
步骤8).对旧种群进行演化操作,具体步骤如下:
采用锦标赛选择法从旧种群中选择2个个体出来。首先从旧种群中的10个个体中随机选择3个个体出来,如选择的个体对应的测试用例是(3,4,3)、(14,11,12)和(15,12,10),然后在3个个体中选择适应值最大的个体出来,即(3,4,3),再选3个个体出来,这3个个体对应的测试用例是(10,9,12)、(15,12,14)和(5,12,4),在这三个中选择(10,9,12)。最终选择的个体对应的测试用例是(3,4,3)和(10,9,12)。
已知交叉概率Pc为0.9。采用单点交叉,假定生成一个随机数0.8,则0.8<0.9,则对(3,4,3)和(10,9,12)进行交叉操作。选择第6位作为交叉点,则
经过交叉后生成两个新个体(0010 0101 1010)和(1111 1110 0010),
对应的测试用例分别是(3,6,12)和(10,11,3)。
已知变异概率Pm为0.1,对交叉操作之后的两个个体进行变异操作,产生一个随机数0.01,且0.01<0.1则进行变异操作,我们采用单点变异,变异位为第一位,具体过程如下:
个体(0010 0101 1010)变为新个体(1010 0101 1010)。将新个体(10100101 1010)放到临时种群中。对个体(1111 1101 1010)采取同样的变异操作。
重复选择、交叉和变异操作,直至临时种群中有10个个体。最终临时种群为(1010 1101 1010)、(0111 1110 0111)、(1011 0101 0100)、(11101010 1110)、(0111 1001 1111)、(1110 1110 1111)、(1010 0101 1010)、(0111 1110 0010)、(1000 1011 1011)和(0111 0111 1101),对应的测试用例分别是(12,9,12)、(5,11,5)、(13,6,7)、(11,12,11)、(5,14,10)、(11,11,10)、(12,6,12)、(5,11,3)、(15,13,13)和(5,5,9)。
步骤9).已知存活概率Ps为0.5。对旧种群和临时种群进行存活操作,产生一个新种群。我们采用不重复存活,具体操作如下:旧种群中个体对应的测试用例为(3,4,3)、(14,11,12)、(15,12,10)、(9,6,7)、(5,5,13)、(4,7,5)、(10,13,10)、(10,9,12)、(15,12,14)和(5,12,4),临时种群为(12,9,12)、(5,11,5)、(13,6,7)、(11,12,11)、(5,14,10)、(11,11,10)、(12,6,12)、(5,11,3)、(15,13,13)和(5,5,9)。从旧种群和临时种群中选出10个个体作为新种群的个体。产生一个随机数Ran,Ran∈(0,1),若Ran>0.5,则从旧种群中选择适应值最大的个体放到新种群中,并将该个体从旧种群中删除;若Ran≤0.5,则从临时种群中选择适应值最大的个体放到新种群中。重复上述操作直到新种群有10个个体,最终新种群中个体对应的测试用例为(3,4,3)、(11,12,11)、(14,11,12)、(11,11,10)、(15,13,13)、(9,6,7)、(11,11,10)、(4,7,5)、(11,12,11)和(10,9,12)。
步骤10).将种群中的个体解码为测试用例,并将测试用例中的数值作为被测程序中变量a、b、c的值,运行测试对象并计算种群中每个个体的适应值。运行结束之后可知种群中个体的适应值分别是0.50、0.50、0.07、0.50、0.125、0.07、0.50、0.07、0.50和0.07。
步骤11).重复执行上述步骤,假定经过若干代种群演化迭代之后,种群为(9,9,9)、(10,13,10)、(10,9,12)、(15,12,14)、(11,12,11)、(5,14,10)、(11,11,10)、(13,11,4)、(15,13,13)和(9,6,7),此时测试用例(9,9,9)的适应值恰好为1.0,即为所需要的全局最优解,则转步骤12)。若经过100次种群迭代之后,还未找到全局最优解,则转至步骤12)。
步骤12).结束测试。
表1显示了一些演化测试的静态配置策略。其中B表示二进制编码,G表示格雷码编码,R表示随机选择,S1表示轮盘赌选择,S2表示单点交叉,U1表示均匀交叉,S3表示轮盘赌存活,F表示适应值存活,U2表示不重复存活。
在下文分析时,OSBC代表本发明。表2显示了本发明的方法与其他方法的性能比较,其中Ph表示实验的总次数中成功找到测试用例的比例,Ph的计算公式如下:Ph=Th/T0(其中Th表示达到测试目标的试验次数,T0表示实验的总次数),HAG表示平均进化代数,TTC表示试验中产生的平均测试用例数,TTC的计算公式如下:TTC=Psize*[Ph*HAG+(1-Ph)*IterMax](其中Psize表示种群大小,IterMax表示种群演化最大迭代次数),U表示没有优化的演化测试,D表示DOMP(动态优化变异概率的优化方法),O表示本发明的方法。
表1
从表2中可以看出,在所有情况下,OSBC都提高了演化测试的性能。首先针对Ph,除了(C13,C15和C20),其他的配置方案中OSBC的性能都比DOMP好。而且OSBC增加了两个100%命中率(C3和C9)。其次针对HAG,除了(C1,C7,C8,C13,C14,C15,C19,C20和C21),其他的配置方案中OSBC都比DOMP运行的快。在HAG方面,OSBC的性能比DOMP好的不多。因为当早熟现象发生时,OSBC需要重新生成种群,这样可能使得演化测试的时间消耗比较大,从而导致本发明的运行速度有所降低。最后,针对TTC,除了(C8和C15),其他的配置方案中OSBC都要比DOMP好。从整体上来看,OSBC要比DOMP好。虽然在时间消耗上,OSBC运行消耗的时间可能要比DOMP要多,但是最终成功找到所需测试用例的几率,OSBC却比DOMP要大。
为了验证灾变算子工作时保存的最优个体的作用,我们进行了一些额外的实验。当灾变算子工作时,不把当前早熟种群的最优个体保存到新种群中,我们把这种配置策略称为Without_Best。经过一系列实验,我们发现Without_Best和OSBC对Ph的影响不是很明显,但是对HAG和TTC的影响非常明显。我们从表1中选出几个的配置方案(C3,C6,C12,C17,C19和C24)(命中率都是100%)。从图7可以看到Without_Best和OSBC对HAG的影响。我们可以看出当灾变算子工作时,保留当前种群的最优个体到新的种群中是有利的。这个最优个体能够使得演化测试的演化过程更快。
表2
Claims (2)
1.一种基于灾变的演化测试的动态优化方法,其特征在于如下步骤:
步骤1).分析指定的作为测试对象的程序并构造对应的控制流图,在测试对象中指定测试目标并根据指定的测试目标构造适应值函数,所述的测试目标是公知的语句覆盖、分支覆盖及路径覆盖,
步骤2).随机生成k个数,这k个数组成一个测试用例即每个测试用例包含k个数,然后每个测试用例编码成种群中的一个个体,重复上述过程直至初始种群有n个个体,其中k和n都是正整数,所述的编码是公知的二进制编码或格雷码编码,
步骤3).将种群中的个体解码为测试用例并将该测试用例作为测试对象的输入,运行测试对象并根据步骤1)构造的适应值函数计算适应值,适应值的值域为(0,1.0],当某个体的适应值为1.0时,该个体就是所需的全局最优解,该个体对应的是满足测试目标的测试用例,所述的解码是将二进制编码或者格雷码编码的个体转换为十进制数值的测试用例,
步骤4).将种群中个体的适应值按照设定的划分标准进行划分,统计每个划分区域中的个体数,根据DCP=一∑Pi*log10Pi度量初始种群的多样性,所述的DCP为种群的多样性,Pi表示种群中适应值在第i个划分区域的个体数占个体总数的比例,且Pi∈[0,1.0],i为正整数且为划分区域的编号,如果初始种群的多样性DCP高于设定的第一阀值,就重新生成初始种群直到初始种群的多样性DCP低于第一阀值,第一阀值的值域为(0,1.0],
步骤5).如果种群中的个体包含所需的全局最优解或者种群演化满足预设终止条件,则转至步骤11),否则,进入步骤6),所述的全局最优解是种群中适应值为1.0的个体,且该个体对应的是满足测试目标的测试用例,所述的预设终止条件是种群演化迭代次数达到预设的种群最大迭代次数max,所述的max是正整数,
步骤6).如果种群的多样性DCP低于设定的第二阀值,则进行灾变操作,产生一个新种群,并转入步骤9),否则,将当前种群作为旧种群,进入步骤7),第二阀值的值域为(0,1.0],
步骤7).对旧种群进行演化操作,并生成临时种群,
步骤8).按照设定的存活概率Ps对旧种群和临时种群进行存活操作,形成一个新种群,新种群中的个体为二进制编码或者格雷码编码的个体,所述的存活概率Ps∈(0,1.0);
步骤9).将新种群作为当前种群,并将当前种群中的个体解码为测试用例并将该测试用例作为测试对象的输入,运行测试对象并根据步骤1)构造的适应值函数计算适应值,
步骤10).转至步骤5),
步骤11).结束测试。
2.根据权利要求1所述的基于灾变的演化测试的动态优化方法,其特征在于步骤6)中的灾变操作的具体步骤如下:保留旧种群中的最佳个体,将旧种群中的其余n-1个个体全部抛弃,再随机生成一个包含n-1个个体的新种群,并将保留的旧种群的最佳个体放到新种群中,此时新种群中共有n个个体,所述的旧种群中的最佳个体是旧种群中适应值最大的个体,所述的n是正整数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010198471A CN101882106B (zh) | 2010-06-11 | 2010-06-11 | 一种基于灾变的演化测试的动态优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010198471A CN101882106B (zh) | 2010-06-11 | 2010-06-11 | 一种基于灾变的演化测试的动态优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101882106A CN101882106A (zh) | 2010-11-10 |
CN101882106B true CN101882106B (zh) | 2012-10-24 |
Family
ID=43054123
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010198471A Expired - Fee Related CN101882106B (zh) | 2010-06-11 | 2010-06-11 | 一种基于灾变的演化测试的动态优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101882106B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106991039A (zh) * | 2016-01-20 | 2017-07-28 | 滴滴(中国)科技有限公司 | 用于平台自适应引擎系统的测试方法及装置 |
CN108874656A (zh) * | 2017-05-16 | 2018-11-23 | 北京京东尚科信息技术有限公司 | 代码测试方法、装置、可读存储介质及计算机设备 |
CN112035343B (zh) * | 2020-08-13 | 2022-02-01 | 武汉大学 | 一种基于贝叶斯估计的测试用例生成方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101324926A (zh) * | 2008-07-25 | 2008-12-17 | 重庆大学 | 一种面向复杂模式分类的特征选择方法 |
CN101464831A (zh) * | 2009-01-09 | 2009-06-24 | 西安邮电学院 | 一种测试用例集缩减技术 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1345167A1 (en) * | 2002-03-12 | 2003-09-17 | BRITISH TELECOMMUNICATIONS public limited company | Method of combinatorial multimodal optimisation |
US8924341B2 (en) * | 2006-03-17 | 2014-12-30 | International Business Machines Corporation | Method and system for optimizing mixed integer programming solutions |
-
2010
- 2010-06-11 CN CN201010198471A patent/CN101882106B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101324926A (zh) * | 2008-07-25 | 2008-12-17 | 重庆大学 | 一种面向复杂模式分类的特征选择方法 |
CN101464831A (zh) * | 2009-01-09 | 2009-06-24 | 西安邮电学院 | 一种测试用例集缩减技术 |
Also Published As
Publication number | Publication date |
---|---|
CN101882106A (zh) | 2010-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109636043B (zh) | 一种梯级水电系统发电调度自适应优化方法与系统 | |
CN103745108B (zh) | 多层次状态监测数据融合的可靠度评估方法 | |
CN107632590B (zh) | 一种基于优先级的底事件排序方法 | |
CN101882106B (zh) | 一种基于灾变的演化测试的动态优化方法 | |
CN104268077A (zh) | 基于混沌遗传算法的测试用例集约简算法 | |
JP7431368B2 (ja) | ハイブリッドアルゴリズムに基づくカスケード水力発電所の最適化スケジューリングモデルの解を求める方法 | |
CN112132424B (zh) | 一种大规模储能多属性决策选型方法 | |
CN109242150A (zh) | 一种电网可靠性预测方法 | |
CN117743870A (zh) | 一种基于大数据的水利数据管理系统 | |
Lalitha et al. | A two stage methodology for siting and sizing of DG for minimum loss in radial distribution system using RCGA | |
CN105426966A (zh) | 基于改进遗传算法的关联规则挖掘方法 | |
Piotrów | Uwrmaxsat-a new minisat+-based solver in maxsat evaluation 2019 | |
Le et al. | A novel algorithm for mining high utility itemsets | |
CN110543615A (zh) | 基于spss解释结构模型的风险因子交互作用分析方法 | |
CN111625908B (zh) | 多约束下深海连接器密封结构时变可靠性优化设计方法 | |
CN117477544A (zh) | 融合时间模式特征的lstm超短期光伏功率预测方法及系统 | |
CN105306075B (zh) | 一种三值fprm电路功耗最佳极性搜索方法 | |
Dui et al. | Multi-phased resilience methodology of urban sewage treatment network based on the phase and node recovery importance in IoT | |
CN105117800A (zh) | 一种基于遗传算法的优化输变电工程施工网络计划方法 | |
CN110309606A (zh) | 一种基于遗传算法的重型减速器轴承选配方法 | |
CN112464576B (zh) | 一种基于贝叶斯网络的大坝风险评估方法和设备 | |
CN106021654A (zh) | 一种考虑铺层相容性的复合材料铺层方案库建库方法 | |
CN112488805A (zh) | 基于多元回归时间序列分析的长租市场预警方法 | |
CN114581058B (zh) | 一种基于业务流程的人员组织结构优化方法 | |
CN115270080B (zh) | 一种海况时间历程快速生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121024 Termination date: 20150611 |
|
EXPY | Termination of patent right or utility model |