关键词:
程序自动修复
基于搜索的程序自动修复
软件动态更新
自适应搜索
摘要:
在软件开发过程中,开发人员需要对软件进行调试以修复相关缺陷。为减少软件缺陷修复的工作量,近年来,基于搜索的程序自动修复技术被广泛研究。这类方法通过随机或者启发式方法在设定好的搜索空间中寻找并生成潜在的正确补丁,并运行程序以验证补丁是否正确。目前,已有的基于搜索的程序自动修复技术依然存在如下不足:1)补丁验证方面,现有的Java程序自动修复技术均采取基于进程的验证方式,这种方式包含了冗余的进程重启和类加载过程,增加了每个补丁的平均搜索代价;2)补丁生成方面,现有的基于搜索的程序自动修复技术会预先固定搜索空间的大小,然而如何针对不同的程序设定合适的搜索空间依然是个难题,设定过小或者过大均可能影响修复效果。针对上述不足,本文首先利用软件动态更新在同一进程中验证不同补丁,以加速补丁的验证过程。其次,本文提出一种基于自适应搜索的程序自动修复方法,在修复过程中动态调整搜索空间大小。具体而言,本文的主要工作包括:●基于软件动态更新的Java程序自动修复加速技术。我们利用软件动态更新技术,提出了一种基于HotSwap的补丁验证方法,该方法可以有效减少补丁验证过程中验证无关的冗余操作,在真实缺陷数据集Defects4J上的实验结果表明该方法在轻微降低正确率的情况下显著提高了补丁验证效率;●基于自适应搜索的Java程序自动修复技术。在上述加速技术的基础上,我们基于缺陷语句、修改算子、可重用代码元素以及最多修改位置等因素提出了一种修复时动态调整当前补丁搜索空间的方法,在Defects4J上的实验结果验证了该方法的有效性;●面向Java的程序自动修复原型系统。基于上述技术,我们实现了一个面向Java的程序自动修复原型系统。该系统可为提交的Java缺陷程序自动提供修复方案,初步验证上述技术的可行性。