Automated program repair is an emerging technology which consists of a suite of techniques to automatically fix bugs or vulnerabilities in programs. In this paper, we present a comprehensive survey of the state of the art in program repair. We first study the different suite of techniques used including search based repair, constraint based repair and learning based repair. We then discuss one of the main challenges in program repair namely patch overfitting, by distilling a class of techniques which can alleviate patch overfitting. We then discuss classes of program repair tools, applications of program repair as well as uses of program repair in industry. We conclude the survey with a forward looking outlook on future usages of program repair, as well as research opportunities arising from work on code from large language models.
翻译:自动程序修理是一种新兴技术,由一套自动修补程序故障或弱点的技术组成。在本文件中,我们介绍对程序修理方面最新技术的全面调查。我们首先研究使用的各种技术,包括基于搜索的修理、基于限制的修理和基于学习的修理。然后我们讨论方案修理方面的主要挑战之一,即补丁补补补补补,方法是通过蒸馏能够减轻补补补补的一类技术。我们接着讨论方案维修工具的种类、程序维修的应用以及工业中方案维修的用途。我们结束这项调查时,对今后方案维修的用途以及大型语言模型的编码工作所产生的研究机会持前瞻性看法。