发明名称 基于语句占优关系和两阶段遗传算法的高阶变异测试方法
摘要 本发明公布了一种基于语句占优关系和两阶段遗传算法的高阶变异测试方法,目的是提高高阶变异测试的有效性和质量。首先,基于程序的占优关系树,来确定高阶变异的语句选择问题,从而保障位于同一个高阶变异体中的所有变异语句都被执行;然后,建立所需的目标函数,对高阶变异体的优劣进行度量;最后,设计了一种包含两个交替进化过程的遗传算法来生成高质量的高阶变异体,从而揭示程序所包含的复杂缺陷。该方法不但可以减少高阶变异体的数量,还可以保证高阶变体具有好的性能,对提高高阶变异测试的有效性和可行性具有重要意义。
申请公布号 CN103605605B 申请公布日期 2016.05.25
申请号 CN201310595506.7 申请日期 2013.11.21
申请人 中国矿业大学 发明人 姚香娟;巩敦卫;郭仪昊;李鑫;张功杰;顾雅丽;王文亮;吴飞跃
分类号 G06F11/36(2006.01)I 主分类号 G06F11/36(2006.01)I
代理机构 代理人
主权项 一种基于语句占优关系和两阶段遗传算法的高阶变异测试方法,其特征在于如下步骤:步骤1:提出基于语句占优关系的变异语句选择方法,保障位于同一个高阶变异体中的所有变异语句都被执行;步骤2:给出一种新的高阶变异体评价方法,保障生成的高阶变异体比起低价变异体具有更好的检错能力;设T是一个已有测试数据集,<img file="FDA0000906676940000011.GIF" wi="164" he="63" />是按照步骤1所选择的变异语句,那么令<img file="FDA0000906676940000012.GIF" wi="639" he="79" />则Z是T的一个子集,且Z所包含的测试数据能够覆盖所有的变异语句;利用Z所包含的测试数据对高阶变异体的性能进行评价;设<img file="FDA0000906676940000013.GIF" wi="70" he="69" />是对语句<img file="FDA0000906676940000014.GIF" wi="44" he="59" />进行变异得到的一阶变异体,M<sub>k</sub>是<img file="FDA0000906676940000015.GIF" wi="211" he="71" />组合在一起得到的k阶变异体;令kill<sub>Z</sub>{M}表示Z中能够杀死M的测试数据所构成的集合;定义M<sub>k</sub>的适应度如下:<img file="FDA0000906676940000016.GIF" wi="586" he="172" />该公式的含义为:高阶变异体的适应度为杀死该高阶变异体的测试数据的个数与杀死构成该高阶变异体的一阶变异体的个数的比值;由定义,一个高阶变异体的适应值落在区间[0,+∞)上;当适应值大于1时,该高阶变异体比一阶变异体更容易被杀死,因此,对测试没有任何价值;当高阶变异体的适应值从1变化到0时,其性能逐步提高;如果高阶变异体的适应值为0,就将其看做等价变异体;步骤3:设计了一种包含两个交替进化过程的遗传算法,来生成高质量的高阶变异体,从而揭示程序所包含的复杂缺陷;所述包含两个交替进化过程的遗传算法,包括以下步骤:步骤3.1:个体表示方法在遗传算法中,所求问题的一个可能解称为一个个体;个体是指高阶变异体;为了准确表示一个高阶变异体,需要确定变异语句和变异算子;(1)变异语句表示方法设变异路径为P,P包含m条语句,分别记为s<sub>1</sub>,s<sub>2</sub>,…,s<sub>m</sub>;从s<sub>1</sub>,s<sub>2</sub>,…,s<sub>m</sub>中选出k条语句进行变异,其中k≥2,从而生成一个高阶变异体;定义<img file="FDA0000906676940000017.GIF" wi="470" he="151" />一旦选定k条语句进行变异,则可得到一个(0,1)字符串(λ<sub>1</sub>,…,λ<sub>m</sub>),使得<img file="FDA00009066769400000110.GIF" wi="246" he="77" />另一方面,如果<img file="FDA0000906676940000019.GIF" wi="318" he="76" />并且<img file="2013105955067100001FDA00009066769400000110.GIF" wi="246" he="77" />则用字符串(λ<sub>1</sub>,…λ<sub>m</sub>)来表示选择语句<img file="FDA00009066769400000111.GIF" wi="159" he="63" />来进行变异;(2)变异算子表示方法假设每个变异语句都有n个变异算子可供选择,定义:γ<sub>i</sub>=j,如果第i个变异语句选择了第j个变异算子,则可得到一个长为k的向量(γ<sub>1</sub>,…,γ<sub>k</sub>),代表k个变异语句分别使用第γ<sub>1</sub>,…,γ<sub>k</sub>个变异算子进行变异;如果不同语句使用的变异算子的个数不同,那么采用合理的方法进行转化;记<img file="FDA0000906676940000021.GIF" wi="303" he="62" />Γ=(γ<sub>1</sub>,…,γ<sub>k</sub>),则用<img file="FDA0000906676940000022.GIF" wi="122" he="63" />表示通过对语句<img file="FDA0000906676940000023.GIF" wi="158" he="55" />分别实施第δ<sub>1</sub>,…,δ<sub>k</sub>个变异算子所生成的k阶变异体M<sub>k</sub>;也记M<sub>k</sub>=(λ<sub>1</sub>,…,λ<sub>m</sub>|δ<sub>1</sub>,…,δ<sub>k</sub>);步骤3.2:进化算子设计方法每个个体能够分为两个完全不同的部分,所述步骤3.2设计了两个相互交替的进化过程,分别实现个体不同部分的进化;两个进化过程的区别主要体现在实施交叉和变异算子的部位和策略不同,而选择算子并没有本质区别;(1)选择算子采用轮盘赌方法进行个体选择,并使用贪心策略;首先,根据适应值选择5%的个体直接进入下一代种群;同时,把这部分个体投入交叉池;然后,采用轮盘赌策略再选择50%的个体进入交叉池;(2)交叉算子采用单点交叉算子对个体进行交叉;首先,随机选择交叉点;然后,让该交叉点前或后的两个个体的部分结构进行互换,并生成两个新个体;第一个阶段:该阶段对个体第一部分进行交叉;设:<img file="FDA0000906676940000024.GIF" wi="757" he="79" /><img file="FDA0000906676940000025.GIF" wi="782" he="76" />为两个个体;随机选择一个交叉点,记为c<sub>1</sub>,其中1≤c<sub>1</sub>≤m‑1;让个体individual<sup>(1)</sup>和individual<sup>(2)</sup>的第一部分在第c<sub>1</sub>个基因位后进行交叉,从而生成两个新的个体:<img file="FDA0000906676940000026.GIF" wi="997" he="79" /><img file="FDA0000906676940000027.GIF" wi="1014" he="79" />需要说明的是,如果<img file="FDA0000906676940000028.GIF" wi="670" he="71" />或者<img file="FDA0000906676940000029.GIF" wi="671" he="77" />那么individual<sup>(3)</sup>或者individual<sup>(4)</sup>将不能表示k阶变异体;在这种情况下,需要对个体进行修正;假设(λ<sub>1</sub>,…,λ<sub>m</sub>|δ<sub>1</sub>,…,δ<sub>k</sub>)是一个个体;如果λ<sub>1</sub>+…+λ<sub>m</sub>&lt;k,那么将(λ<sub>1</sub>,…,λ<sub>m</sub>)中最前面的(λ<sub>1</sub>+…+λ<sub>m</sub>)‑k个字符1改为0;反之,如果λ<sub>1</sub>+…+λ<sub>m</sub>&gt;k,则将(λ<sub>1</sub>,…,λ<sub>m</sub>)中最前面的 k‑(λ<sub>1</sub>+…+λ<sub>m</sub>)个字符0改为1;这样,则可以保证(λ<sub>1</sub>,…,λ<sub>m</sub>|δ<sub>1</sub>,…,δ<sub>k</sub>)是k阶变异体;第二个阶段:该阶段对个体第二部分进行交叉;设:<img file="FDA0000906676940000031.GIF" wi="757" he="79" /><img file="FDA0000906676940000032.GIF" wi="781" he="74" />为两个个体;随机选择一个交叉点,记为c<sub>2</sub>,其中1≤c<sub>2</sub>≤k‑1;让个体individual<sup>(1)</sup>和individual<sup>(2)</sup>的第二部分在第c<sub>2</sub>个基因位后进行交叉,从而生成两个新的个体:<img file="FDA0000906676940000033.GIF" wi="997" he="85" /><img file="FDA0000906676940000034.GIF" wi="1014" he="79" />(3)变异算子采用单点变异算子对个体进行变异;首先,随机选择一个变异点;然后,用一个新的值替换该变异点的值,从而得到一个新个体;第一个阶段:该阶段对个体第一部分进行变异;设:individual=(λ<sub>1</sub>,…,λ<sub>m</sub>|δ<sub>1</sub>,…,δ<sub>k</sub>)是一个个体;随机选择一个变异点,记为c<sub>1</sub>,其中1≤c<sub>1</sub>≤m,如果个体individual第一部分第c<sub>1</sub>个基因位的值是1,则变为0;如果是0,则变为1,从而生成一个新的个体;第二个阶段:该阶段对个体第二部分进行变异;设:individual=(λ<sub>1</sub>,…,λ<sub>m</sub>|δ<sub>1</sub>,…,δ<sub>k</sub>)为一个个体;随机选择一个交叉点,记为c<sub>2</sub>,其中1≤c<sub>2</sub>≤k,让个体individual第二部分第c<sub>2</sub>个基因位的值随机替换为<img file="FDA0000906676940000035.GIF" wi="311" he="71" />中的某个值,从而生成一个新的个体;步骤3.3:算法终止条件本算法的终止条件包含两方面内容:一是针对每条占优路径运行遗传算法的的终止条件,二是针对整个被测程序搜索过程的终止条件;针对每条占优路径运行遗传算法的的终止条件当前进化达到一定代数;针对整个被测程序搜索过程的终止条件是所有占优路径都得到遍历。
地址 221116 江苏省徐州市中国矿业大学理学院