论文部分内容阅读
软件缺陷自动修复是推进软件维护自动化,提高软件质量和可信性的重要手段。尽管人们已经提出了多种支持软件缺陷自动修复的方法和技术,然而已有的研究结果表明,当前软件缺陷自动修复技术还处于初级阶段,修复的效率和能力有待提高。论文着重于研究基于启发式搜索的软件缺陷自动修复技术,该类技术将缺陷自动修复问题转化为一种依据某种启发式信息从潜在搜索空间中寻找正确补丁的搜索问题。深入研究了软件缺陷自动修复的三种搜索空间并在现有技术的基础上分别对这三种搜索空间进行了一定程度的优化。首先,通过预设最小可疑值和最大可疑位置数量限制可疑空间的规模;然后,扩充了操作空间以增加修复更多缺陷的机会;最后,为了限制材料空间的规模,将修复材料的来源限制在缺陷程序本身。针对现有基于搜索的软件缺陷自动修复技术中搜索空间大、搜索效率低的问题,提出了两种软件缺陷自动修复方法,并在大型开源软件的真实历史缺陷上验证了有效性。主要工作和贡献总结如下:(1)针对现有软件缺陷自动修复方法中搜索空间大、搜索效率低的问题,提出了一种基于遗传编程与代码相似性的软件缺陷自动修复方法,设计并实现了其原型工具GPSRepair(Genetic Programming with Similarity Repair)。首先,通过缺陷定位技术获取可疑空间;其次,通过变异和交叉生成候选补丁;然后,通过测试用例验证每个候选补丁并计算其与原始程序的相似度;接着,计算每个补丁个体的适应度值,并按照适应度值选择新一代种群;最后,重复上述步骤直到生成通过所有测试用例的补丁。在Defects4j缺陷数据集的224个真实Java软件缺陷上进行了验证,结果表明GPSRepair比现有软件缺陷自动修复方法拥有更好的修复能力。(2)针对现有软件缺陷自动修复方法中补丁验证消耗计算资源过大的问题,提出了一种基于随机搜索策略的软件缺陷自动修复方法,设计并实现了其原型工具RSSRepair(Random Search Strategy Repair)。RSSRepair取消了GPSRepair方法中的交叉过程并且不再使用适应度函数去描述候选补丁的优劣程度,对每个个体的选择方式为均匀随机选择。首先,通过缺陷定位技术获取可疑空间和缺陷程序的失败测试用例;其次,重构原有测试用例,为每个测试用例赋予无效补丁识别能力;然后,通过变异生成候选补丁;接着,通过测试用例排序技术加速候选补丁的验证过程;最后,重复上述步骤直到生成通过所有测试用例的补丁。在Defects4j缺陷数据集的224个真实Java软件缺陷上进行验证,实验结果表明RSSRepair比现有软件缺陷自动修复方法拥有更高的修复效率。