[发明专利]一种基于多目标遗传算法的求解器性能缺陷检测方法在审
| 申请号: | 202110767573.7 | 申请日: | 2021-07-07 |
| 公开(公告)号: | CN113377676A | 公开(公告)日: | 2021-09-10 |
| 发明(设计)人: | 周奕;范晓飞;任志磊;江贺 | 申请(专利权)人: | 大连理工大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36;G06N3/12 |
| 代理公司: | 大连理工大学专利中心 21200 | 代理人: | 温福雪 |
| 地址: | 116024 辽*** | 国省代码: | 辽宁;21 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 多目标 遗传 算法 求解 性能 缺陷 检测 方法 | ||
1.一种基于多目标遗传算法的求解器性能缺陷检测方法,其特征在于,具体步骤如下:
步骤1:插桩编译目标求解器
具体为:由于在算法运行中需要计算测试用例的代码语句覆盖率,所以需要使用代码覆盖率检测工具对目标求解器进行插桩编译;代码覆盖率检测工具可以生成程序中每个语句执行的精确计数;插桩编译并不会影响目标求解器的正常运行,只是会在运行过后生成包含语句执行次数信息的文件,用在步骤7中统计测试用例的代码语句覆盖率;
步骤2:随机生成种子测试文件集,构成初代种群
具体为:随机生成符合SMT语法规则的测试用例文件,测试用例文件构成初代种群,即种群中的每个个体都是一个测试文件;种群的大小则代表种群中共包含测试文件的数目;
步骤3:通过二元锦标赛选择的方法对初代种群中的种子测试文件进行筛选
具体为:使用二元锦标赛选择方法筛选出初代种群中表现优良的测试文件;二元锦标赛的方法是每次从种群中取出两个测试文件,初代的筛选会选取其中使得目标求解器运行时间更长的一个作为表现优良的测试文件;
步骤4:种群内优良测试文件进行交叉变异,生成子代种群
具体为:选择出优良测试文件后,通过交叉算子和变异算子生成新的测试文件构成子代种群;每次从表现优良测试文件中选取出待操作测试文件,然后通过交叉率和变异率判断该测试文件该进行哪种操作生成新的测试文件,操作不断地进行,直到新的测试文件数目到达规定的种群数目;
交叉算子选取两个测试文件交换彼此的断言语句,交叉算子为:为了确保足够的交叉量,选取两个测试文件中断言语句一部分进行交换;如果父母测试文件的断言数量没到到达交换的数量,则交换其中的一条断言语句,即要保证每个测试用例最少有一条断言语句;
变异算子是针对单个测试文件操作,变异算子包含:新建变量、删除变量、添加断言语句、删除断言语句、替换断言语句中的符串和数字、替换替换断言语句中的函数以及替换类型相同的节点;
步骤5:判断算法是否收敛或者到达算法最大迭代次数
具体为:判断是否到达算法的最大迭代次数或者算法是否收敛,如果没有则跳转到步骤6,进行算法的迭代;如果已经到达了最大的迭代次数或者算法以及收敛,则跳转到步骤11;算法收敛是指种群的平均适应度在一定的代数内已经没有改变;
步骤6:合并父代中的优良测试文件和子代种群的测试文件,产生新的种群
具体为:将父代中的优良测试文件和子代种群中的测试文件合并成为新的测试文件集合,即新的种群,进行下一次迭代操作;
步骤7:对种群中的测试文件进行适应度评估,分别计算求解器运行时间差、代码覆盖率和测试用例的复杂度
具体为:对种群中的每个测试文件进行适应度函数评估,算法中使用三个优化目标指标:第一个优化目标是目标求解器与基准求解器的运行时间差,在指定的超时时间下,使用目标求解器和基准求解器分别运行测试用例,统计两者的用时;使用目标求解器与基准求解器的运行时间差作为第一个适应度得分,在这过程中会生成代码覆盖信息文件和动态跟踪文件;第二个优化目标是目标求解器的代码语句覆盖率,通过代码覆盖信息文件中包含的代码语句执行信息,计算该测试用例运行时目标求解器的代码语句覆盖率,即统计该测试用例执行时覆盖到的代码语句数目和目标求解器总代码语句数的比例,作为第二个适应度得分;第三个优化目标是为了防止测试用例过度膨胀,通过最小化计算测试用例的复杂度,来使得测试用例的保持一个较小的体积;测试用例的复杂度受到测试用例中断言语句的语句数目和语句内节点的嵌套深度影响,具体的计算方法是使用加权分数,处在第n层的节点积n分,遍历每个语句中的所有节点计算加权分数和作为第三个适应度;通过本步骤的操作,每个测试用例都会获得一个三元元组作为适应度得分,参加步骤8的排序;
步骤8:对种群中的测试用例进行非支配的帕累托排序,并计算测试用例间的拥挤距离
具体为:进行非支配帕累托排序:首先从种群中选取出所有的非支配的测试用例集合作为一个帕累托前沿面;然后将这些测试用例从种群中剔除,再次选取出非支配的测试用例组成新的帕累托前沿面,重复该操作直到所有的测试用例都被加入到帕累托前沿面上;再使用步骤7中每个测试用例在目标求解器运行时生成的动态追踪文件计算测试用例间的拥挤距离,用于步骤9中的选择操作;
步骤9:选择种群中表现优良测试用例
具体为:使用基于支配的二元锦标赛选择筛选优良的测试用例;经过非支配帕累托排序后,每个测试用例具有两个属性:非支配排序和拥挤距离;当测试用例I和测试用例J进行比较时遵守如下规则:测试用例I的非支配排序优于测试用例J,测试用例I胜出;测试用例I与测试用例J的非支配排序相同,但是测试用例I的拥挤距离大于测试用例J,测试用例I胜出;重复选择操作,直到表现优良的测试用例的数目达到指定的种群大小,构成新的种群;
步骤10:对表现优良测试用例进行交叉变异,产生新的子种群
具体为:与步骤4操作相同,得到新的子种群;
步骤11:对生成的测试文件进行验证,筛选出触发性能缺陷的测试用例
具体为:在足够长的超时时间下让目标求解器重新执行种群中的测试文件;如果测试文件依旧无法被求解,那么将其加入到最终的结果集中;结果集中的测试用例会触发求解器的性能缺陷,算法结束。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于大连理工大学,未经大连理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110767573.7/1.html,转载请声明来源钻瓜专利网。





