Skip to main content
QUICK REVIEW

[论文解读] Program Repair

Xiang Gao, Yannic Noller|arXiv (Cornell University)|Nov 23, 2022
Software Testing and Debugging Techniques被引用 4
一句话总结

本文全面综述了自动化程序修复技术,将其分类为基于搜索、基于约束和基于学习的方法。识别出补丁过拟合是关键挑战,并探讨了缓解方法,同时考察了工具、工业应用以及大型语言模型在程序修复中应用的未来机遇。

ABSTRACT

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.

研究动机与目标

  • 提供自动化程序修复领域最先进技术的全面概述。
  • 分析补丁过拟合这一核心挑战——即修复通过给定测试但对未见输入失效——并识别缓解策略。
  • 考察程序修复工具在真实世界软件开发和工业中的演变与应用。
  • 探索大型语言模型在程序修复中的新兴作用及其增强或补充现有修复技术的潜力。
  • 概述未来研究方向,特别是在将程序修复与大型语言模型生成代码相结合方面。

提出的方法

  • 将程序修复分为三大范式:基于搜索的方法(例如 GenProg)、基于约束的方法(例如使用修复约束的符号执行)和基于学习的方法(例如 GetaFix、基于人工修复补丁训练的神经网络模型)。
  • 分析语义修复技术,通过修复约束隐式表示搜索空间,实现最小且正确的补丁生成。
  • 回顾用于候选补丁排序的机器学习技术,通过过滤不可行修复方案来提高效率和质量。
  • 考察基于语言模型的代码生成(例如 GitHub Copilot、Codex)与修复流水线的集成,特别是在编辑模式下进行针对性代码修改的应用。
  • 提出一种混合方法:通过语义分析对 LLM 生成的代码候选进行分析与筛选,提取并组合正确的补丁组件。
  • 建议通过检测来自多个 LLM 候选代码片段之间的等价类,来合成稳健且语义正确的补丁。

实验结果

研究问题

  • RQ1不同程序修复技术——基于搜索、基于约束和基于学习——在有效性与可扩展性方面如何比较?
  • RQ2补丁过拟合在程序修复中由何原因引起,哪些技术能有效缓解此问题?
  • RQ3机器学习如何用于改进自动化修复中候选补丁的排序与选择?
  • RQ4大型语言模型在增强或变革现有程序修复工作流中可扮演何种角色?
  • RQ5在大型语言模型生成代码日益普遍的背景下,程序修复技术将如何演变?

主要发现

  • 基于搜索的修复技术(如 GenProg)可扩展至大型程序,但在大规模显式搜索空间中表现吃力。
  • 基于约束的修复技术通过符号执行与程序合成,隐式表示搜索空间,可生成最小且正确的补丁。
  • 基于学习的修复方法(如 GetaFix)通过从挖掘的人工修复补丁中学习,在修复常见错误方面实现高召回率。
  • 补丁过拟合仍是重大挑战,因为测试套件是不完整的规格说明,导致修复通过测试用例但对未见输入失效。
  • 近期基于语言模型的工具(如支持编辑模式的 GitHub Copilot)在自动代码上的表现已优于传统基于模式或学习的修复工具。
  • 未来程序修复可能将 LLM 生成的代码候选与语义分析结合,以提取并组合正确补丁,表明 LLM 与基于分析的修复存在协同作用。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。