发明名称 基于遗传算法的统计回归测试数据生成方法
摘要 本发明公布了一种基于遗传算法的统计回归测试数据生成方法,旨在可以高效快速地生成覆盖目标路径的测试数据。具体步骤如下:(1)根据回归测试过程中的修改语句,确定相关输入变量;(2)对与修改语句相关输入变量的概率分布进行建模;(3)基于修改前程序中输入分量的部分概率分布及其扰动值形成初始种群;(4)根据设计的适应度函数,对种群中的每个个体计算其适应值;(5)根据计算出的个体适应值,判断目标函数是否找到最优解,若找到,则输出测试数据并转步骤6;否则,对个体进行变异操作,生成新个体并返回步骤4;(6)结合与修改语句不相关输入变量的概率分布,得到所有输入变量的概率分布;并基于该分布采样,生成测试数据。
申请公布号 CN103559129B 申请公布日期 2016.08.17
申请号 CN201310529188.4 申请日期 2013.10.31
申请人 中国矿业大学 发明人 巩敦卫;秦备;任丽娜;姚香娟;田甜;吴川;张功杰;钟超群;陈永伟;张晨;党向盈
分类号 G06F11/36(2006.01)I;G06N3/12(2006.01)I 主分类号 G06F11/36(2006.01)I
代理机构 代理人
主权项 基于遗传算法的统计回归测试数据生成方法,其特征在于其特征在于如下步骤:步骤1.1:针对回归测试数据生成问题,建立满足修改后程序覆盖概率要求的输入变量的部分概率分布数学模型,其特征在于,以提高输入变量概率分布构建的效率为目标,以输入变量与分支语句的相关性,只更新与修改语句相关输入变量的概率分布为约束,建立基于遗传算法的统计回归测试数据生成问题的数学模型如下:<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>min</mi><mi> </mi><mi>f</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>i</mi></msub><mo>,</mo><mo>|</mo><msubsup><mi>D</mi><mrow><mi>i</mi><mi>j</mi></mrow><mo>&prime;</mo></msubsup><mo>|</mo><mo>,</mo><msub><mi>p</mi><msub><mi>x</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></msub><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000935948230000011.GIF" wi="364" he="90" /></maths>s.t. d<sub>i</sub>∈Z<sup>+</sup>|D'<sub>ij</sub>|∈[0,|D'<sub>i</sub>|]<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>p</mi><msub><mi>x</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></msub><mo>&Element;</mo><mo>&lsqb;</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>&rsqb;</mo></mrow>]]></math><img file="FDA0000935948230000012.GIF" wi="198" he="71" /></maths>i=1,2,…,v;j=1,2,…,d<sub>i</sub>为了使输入变量独立于实际的数据类型和范围,对被测程序的每个输入分量标准化,使每个分量的取值均在[0,1)之间,记标准化后输入变量为X={x<sub>1</sub>,x<sub>2</sub>,…,x<sub>n</sub>},其中n是输入变量包含分量的个数;与修改语句相关的输入分量记为X<sub>1</sub>={x<sub>1</sub>,x<sub>2</sub>,…,x<sub>v</sub>},其中,v是与修改语句相关的输入分量的个数,v≤n;D′<sub>i</sub>为输入分量x<sub>i</sub>的输入域,<img file="FDA0000935948230000013.GIF" wi="231" he="63" />为将D′<sub>i</sub>划分后的若干数据间隔,d<sub>i</sub>是D′<sub>i</sub>划分的数据间隔数,间隔长度分别为<img file="FDA0000935948230000014.GIF" wi="338" he="79" />那么,<img file="FDA0000935948230000015.GIF" wi="485" he="77" /><img file="FDA0000935948230000016.GIF" wi="325" he="55" />分别为x<sub>i</sub>在各数据间隔上的取值概率,有<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>p</mi><mrow><msub><mi>x</mi><mi>i</mi></msub><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>p</mi><mrow><msub><mi>x</mi><mi>i</mi></msub><mn>2</mn></mrow></msub><mo>+</mo><mo>...</mo><mo>+</mo><msub><mi>p</mi><mrow><msub><mi>x</mi><mi>i</mi></msub><msub><mi>d</mi><mi>i</mi></msub></mrow></msub><mo>=</mo><mn>1</mn><mo>;</mo></mrow>]]></math><img file="FDA0000935948230000017.GIF" wi="469" he="63" /></maths>步骤1.2:针对步骤1.1中给出的数学模型,设计了一种含约束的进化优化的求解方法,适应度函数表示为:<img file="FDA0000935948230000018.GIF" wi="293" he="70" />根据步骤1.1中的数学模型,将寻找部分概率分布的问题建模为一个优化问题,优化的目标为基于某概率分布采样得到的测试数据,覆盖目标路径的最小概率<img file="FDA0000935948230000019.GIF" wi="41" he="62" />与设定的期望最小概率p'<sub>min</sub>的差值,记为<img file="FDA00009359482300000110.GIF" wi="531" he="71" />从概率分布<img file="FDA00009359482300000111.GIF" wi="139" he="60" />中采样,得到K个测试数据,计算这些测试数据运行程序后覆盖目标路径集的统计特性;程序包含的目标路径集为L':{l<sub>1</sub>',l<sub>2</sub>',…,l<sub>m′</sub>′},假设对于任一l<sub>i</sub>'∈L',被测试数据执行的概率为<img file="FDA00009359482300000112.GIF" wi="91" he="54" />那么,m'条目标路径对应的执行概率分别为<img file="FDA00009359482300000113.GIF" wi="290" he="55" />这样一来:<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><mover><mi>p</mi><mo>^</mo></mover><mo>=</mo><mfrac><mn>1</mn><mi>K</mi></mfrac><munder><mrow><mi>m</mi><mi>i</mi><mi>n</mi></mrow><mrow><msup><msub><mi>l</mi><mi>i</mi></msub><mo>&prime;</mo></msup><mo>&Element;</mo><mi>L</mi></mrow></munder><mrow><mo>(</mo><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>K</mi></munderover><msub><mi>e</mi><mrow><msup><msub><mi>l</mi><mi>i</mi></msub><mo>&prime;</mo></msup><mo>,</mo><mi>j</mi></mrow></msub><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000935948230000021.GIF" wi="363" he="134" /></maths><img file="FDA0000935948230000022.GIF" wi="686" he="133" />步骤1.3:使用遗传算法求解其描述的优化问题,以得到满足修改后程序覆盖概率要求的输入变量的部分概率;步骤1.3.1:首先对d<sub>i</sub>,|D′<sub>ij</sub>|,<img file="FDA0000935948230000028.GIF" wi="73" he="53" />采用实数编码得到d<sub>i</sub>,|D′<sub>ij</sub>|,<img file="FDA0000935948230000029.GIF" wi="99" he="55" />那么,形成的进化个体,记为<img file="FDA0000935948230000023.GIF" wi="59" he="46" />可以表示为<img file="FDA0000935948230000024.GIF" wi="506" he="143" />步骤1.3.2:初始种群基于Φ<sub>1</sub>及其扰动值形成,输入分量在修改前程序中的部分概率分布为Φ<sub>1</sub>,把该部分概率分布作为初始进化种群的部分个体,将提高初始种群的性能,加快种群向Φ'<sub>1</sub>进化的速度,因Φ'<sub>2</sub>是与修改语句不相关的输入分量对应的概率分布,所以,程序修改前这些与修改语句不相干的输入分量的部分概率分布已经存在,且与Φ'<sub>2</sub>相等,故Φ<sub>1</sub>=Φ/Φ'<sub>2</sub>;步骤1.3.3:计算个体适应值,当<img file="FDA0000935948230000025.GIF" wi="38" he="55" />等于p'<sub>min</sub>时,得到的部分概率分布即为需要建立的满足修改后程序覆盖要求的部分概率分布;步骤1.3.4:设置变异概率p<sub>m</sub>,随机生成[0,1]之间的一个随机数,若该随机数小于或等于p<sub>m</sub>,则从<img file="FDA0000935948230000026.GIF" wi="38" he="46" />中随机选择一个基因位,实施变异操作,对于实施变异操作的基因位,再随机选择一种相应的变异算子,所有可能的变异算子如下表所列:<img file="FDA0000935948230000027.GIF" wi="1524" he="948" />ε和σ的取值根据具体程序确定,如整型输入分量x的输入域为[0,100),标准化到[0,1)之间,实数编码后仍为[0,1),对该分量实施<img file="FDA0000935948230000031.GIF" wi="91" he="61" />或<img file="FDA0000935948230000032.GIF" wi="88" he="55" />变异算子时,要求数据间隔的变化符合输入分量的数据类型,且能够产生有效的变化,故设置ε=0.01,这样可以让分量x的数据间隔在[0,100)之间以步长1增大或减小,由于采样概率的取值在[0,1]之间,故σ一般取0.1,并非所有的变异操作,都能满足个体对应输入变量的概率分布要求,鉴于此,种群进化过程中,比较当前个体与父代个体的适应值,跟踪个体适应值变小的变异操作,若当前个体的适应值小于父代,则继续用前一代的变异操作;反之依一定概率选择上表中的一个变异操作。
地址 221116 江苏省徐州市中国矿业大学信电学院