InferFix:基于大语言模型的端到端程序修复
软件工程
2023-03-14 v1
摘要
软件开发生命周期深受缺陷的影响:缺陷的引入、识别与最终解决占据了软件成本的很大一部分。这促使软件工程研究人员与实践者提出不同方法来自动化识别和修复软件缺陷。大语言模型已通过少样本示范学习与指令提示适配到程序修复任务,将其视为填充任务。然而,这些模型仅关注于从公共仓库挖掘的未分类缺陷中学习通用的修 bug 模式。本文中,我们提出 InferFix:一个基于 transformer 的程序修复框架,配合最先进的静态分析器来修复关键的安全与性能缺陷。InferFix 结合了一个检索器——通过对比学习目标预训练的 transformer 编码器模型,旨在搜索语义等价的缺陷及相应修复;以及一个生成器——一个在监督修 bug 数据上微调的大语言模型(Codex Cushman),其提示通过缺陷类型标注以及从外部非参数记忆检索的语义相似修复进行增强。为训练和评估我们的方法,我们整理了 InferredBugs,一个新颖的、元数据丰富的缺陷数据集,通过对数千个 Java 和 C# 仓库的变更历史执行 Infer 静态分析器提取得到。我们的评估表明 InferFix 优于强 LLM 基线,在 C# 中生成修复的 top-1 准确率为 65.6%,在 Java 中为 76.8%。我们讨论了 InferFix 与 Infer 在微软的部署,其提供端到端的缺陷检测、分类与定位,以及候选补丁的修复与验证解决方案,集成于持续集成流水线中以自动化软件开发工作流。
引用
@article{arxiv.2303.07263,
title = {InferFix: End-to-End Program Repair with LLMs},
author = {Matthew Jin and Syed Shahriar and Michele Tufano and Xin Shi and Shuai Lu and Neel Sundaresan and Alexey Svyatkovskiy},
journal= {arXiv preprint arXiv:2303.07263},
year = {2023}
}