面向程序修复的精确条件合成
软件工程
2018-08-30 v5
摘要
由于修复缺陷困难,许多研究致力于自动缺陷修复。给定一个未能通过某些测试用例的有缺陷程序,典型的自动修复技术尝试修改程序使所有测试通过。然而,由于真实世界项目的测试套件通常不充分,以通过测试套件为目标常导致不正确补丁。本文旨在生成精确补丁,即我们生成的任何补丁有相对较高概率正确。更具体地,我们关注条件合成,其已被证明能修复现有方法中一半以上的缺陷。我们的关键见解有三方面。第一,了解本地上下文中哪些变量应被用于“if”条件十分重要,我们提出基于变量间依赖关系的排序方法。第二,我们观察到API文档可用于指导修复过程,并提出文档分析技术进一步过滤变量。第三,了解对变量集合应执行什么谓词十分重要,我们提出从现有项目中挖掘相似上下文中频繁使用的谓词。我们开发了新颖的程序修复系统ACS,可在错误位置生成精确条件。此外,鉴于生成条件非常精确,我们可执行先前被认为过拟合的修复操作:直接返回测试预言(test oracle)来修复缺陷。使用我们的方法,我们在Defects4J的四个项目上成功修复了17个缺陷,这是该数据集上迄今报告的全自动修复缺陷的最大数量。更重要的是,我们的方法在评估中精度为73.9%,显著高于以往通常低于40%的方法。
引用
@article{arxiv.1608.07754,
title = {Precise Condition Synthesis for Program Repair},
author = {Yingfei Xiong and Jie Wang and Runfa Yan and Jiachen Zhang and Shi Han and Gang Huang and Lu Zhang},
journal= {arXiv preprint arXiv:1608.07754},
year = {2018}
}
备注
Accepted at ICSE 2017. This is a longer version of the conference paper and also corrects several errors