[发明专利]一种新的动态反馈和改进型补丁评价的软件自动修复方法有效
| 申请号: | 201910973884.1 | 申请日: | 2019-10-14 |
| 公开(公告)号: | CN110879778B | 公开(公告)日: | 2023-09-26 |
| 发明(设计)人: | 方景龙;石宇;陈滨;魏丹;王兴起 | 申请(专利权)人: | 杭州电子科技大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F21/57;G06N3/126 |
| 代理公司: | 杭州君度专利代理事务所(特殊普通合伙) 33240 | 代理人: | 杨舟涛 |
| 地址: | 310018 浙*** | 国省代码: | 浙江;33 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 动态 反馈 改进型 补丁 评价 软件 自动 修复 方法 | ||
1.一种新的动态反馈和改进型补丁评价的软件自动修复方法,其特征在于,该方法具体包括以下步骤:
步骤一:输入缺陷程序和测试用例,计算种群中所有个体适应度,将新生种群按平均适应度划分成三个子群:优秀种群,普通种群,不良种群;将缺陷程序表示为抽象语法树并将语法树中的语句对应一组实时维护的权值列表,所述的测试用例至少包含一个辨别程序缺陷的负向测试用例;
将新生种群按平均适应度划分成三个子群,具体为:根据区间理论建立一个评估规范,考虑云模型的双边约束[a,b],给出云参数方程计算方法:假设f(ti)是第t代中个体xi的适应值,则f(avg(t))表示整个群体的平均适应度,并且f(best(t))表示最佳适合度;对于比f(avg(t))更好的适应度的所有个体,获得平均值f(avg1(t));对于比f(avg(t))更差的适应度的所有个体,计算平均值f(avg2(t));其中f(avg1(t))是区间的上边界,f(avg2(t))是区间的下边界;
如果f(ti)大于f(avg1(t)),则表明这些个体是优秀的,它们展现出最有希望的成果,为了最快得到最优解,应该在遗传算法中使其遗传到下一代;如果f(ti)小于f(avg2(t)),则这些个体是表现较差的个体,在遗传算法的的选择阶段优先给予删除;三个子群如下表所示:
步骤二:收集普通种群的期望,熵,以及前代反馈信息超熵,构建正态云分布模型;设定普通个体集的期望Ex和熵En如下:
Ex=f(best(t)) (1)
其中n表示普通个体集中个体的数量;
然后,公式(3)表示超熵He的第一代取值公式,随后He的取值会根据每代反馈情况给予变动;变动规则为:
其中当前策略为随机游走策略或一维更新策略;如果当前策略计算的种群适应度总体较上代得到提高,保持现有策略,其中一维更新策略将超熵设定为0.2和0.5之间的随机值;随机游走策略将超熵设定为0.5到0.8之间的随机值,以此来变更云模型的混乱度,调整群体的差异性和稳定性;
将期望、熵、超熵作为参数生成云,正态云生成函数如公式4所示;
步骤三:对每一个普通个体集中个体计算与源程序的相似度,按照相似度从高向低赋予其云模型属性中的确定度,以此增强候选个体的适应度信息;
根据云模型概率分布,按照程序相似度顺序将适应度与调整因子进行相加,与源程序的相似度越大,表示对源程序的改动越小,那么程序语义改变的可能性就越小,在都被测试集验证通过的前提下,改动源程序幅度更小的修复方式拥有更高的修复质量;源程序相似度计算公式如(5)所示,k与k’代表源程序与普通个体集中个体程序的语句数量,其中E(i)代表普通个体集中个体程序语句中第i个元素,E’(i)代表源程序语句中第i个元素,用E(i)==E’(i)表示元素的一致性,如果相同语句则返回1,否则返回0;
对于公式(6)考虑如下:对于同一代的相似个体组成的种群,即除去最优和最差子群后的个体集组成的种群,使用云模型将这些无序同性质个体通过云分布概率模型重新调整适应值,以区分不同个体适应度;公式中n表示属于[a,b]范围的普通个体数目,由于调整后的适应度不能高于区间最大适应度,所以取最大适应度与最大区间b的差值作为调整范围,为了防止随机因素的干扰,取差值的一半,按照云概率分布图中的概念确定度更新适应度;
更新规则如公式(7)所示,其中个体角度的适应度计算部分:NposT表示通过的正向测试用例个数,每个通过的正向测试用例用全局参数正向测试权重WposT更新权值,用以表明程序的功能正确性;NnegT表示通过的负向测试用例个数,每个通过的负向测试用例用更大负向测试权重WnegT更新权值,用来着重体现程序中修复的错误;最后加上整体角度根据云模型确定的调整因子,共同组成适应度计算公式;
f(t)=NposT*WposT+NnegT*WnegT+αi (7)
步骤四:合并三个子群,根据更新的适应度函数对所有补丁进行重排列,根据上代反馈信息调整遗传参数,用遗传算法对种群进行选择,交叉,变异,生成新一代种群;
步骤五:收集新种群的反馈信息并与原始种群的适应度进行比较;在提高适应度的基础上,保持现有策略不变;假若种群质量下降,则更换另一种策略和参数;
将上一代的适合度与当前种群的适应度值进行遍历;在提高补丁解决方案质量的情况下,成功率增加1,用sr1和sr2分别记录随机游走和一维更新策略的成功率;如果sr1大于sr2,则表示使用随机游走的成功率高于使用一维更新规则的成功率;这时分两部分更新策略:
(1)在下一次迭代中,更多的个体应用随机游走的进化策略,增加变异率Pm的值;
(2)同时更新He值;
步骤六:重复执行步骤二~步骤五,超过时限或最大遗传代数表示修复失败;否则直至找到通过所有测试用例的候选补丁,程序执行成功并报告给用户。
2.根据权利要求1所述的一种新的动态反馈和改进型补丁评价的软件自动修复方法,其特征在于:步骤四中遗传算法通过选择高适应度个体复制到下一代中来进行迭代,丢弃适应度为0,未编译或未通过测试用例的变体,将其余部分放在一起使用随机通用抽样选择新一代成员带入新的交配池;在遗传算法中,变异操作通常涉及单位翻转或简单的符号替换;因为基本单元是语句,所以变异运算由删除,插入或与另一个语句交换组成,其中删除表示删除整个语句,插入表示在其后插入另一个语句;从这些选项中以同样的随机概率进行选择,在交换的情况下,可以从程序中的任何位置随机选择第二条语句;交叉将一个变体的“第一部分”与另一个变体的“第二部分”结合起来,创建后代变体,该后代变体结合了来自两个亲本的信息。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州电子科技大学,未经杭州电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910973884.1/1.html,转载请声明来源钻瓜专利网。





