← 最新论文
🤖 AI

From Empirical Evaluation to Context-Aware Enhancement: Repairing Regression Errors with LLMs

本文介绍了 RegressionBug4APR 基准测试,用于实证评估自动化程序修复在回归缺陷上的表现,揭示了虽然传统工具表现不佳,但基于大语言模型的方法在结合上下文感知的缺陷诱发变更信息后,能显著提高修复成功率。

原作者: Anh Ho, Thanh Le-Cong, Bach Le, Christine Rizkallah

发布于 2026-08-26
📖 1 分钟阅读☕ 轻松阅读

原作者: Anh Ho, Thanh Le-Cong, Bach Le, Christine Rizkallah

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

软件永远不会真正完成。它是一个生命体,随着需求的不断变化而生长和演变,开发者也在不断地添加新功能或修复旧问题。但在追求改进的匆忙过程中,一个常见且令人沮绪的错误发生了:一个旨在提供帮助的改动却意外破坏了原本运行完美的程序。这被称为“回归”(regression)。想象一下,你正在修理屋顶的漏水,但在过程中,你却不小心在墙上撞出了一个洞。漏水解决了,但现在你有了另一个更大的问题。在软件世界中,这些回归错误之所以难以发现和修复,是因为它们隐藏在代码变更的历史之中,往往潜伏多年才会被人察觉。几十年来,研究人员一直试图构建能够自动修复这些漏洞的计算机程序,希望能将人类开发者从无止尽的调试工作中解脱出来。然而,他们构建的工具大多是为通用错误设计的,在面对回归错误这种具有特定历史性质的问题时显得力不从心。

来自墨尔本大学和新加坡科技设计大学的研究小组决定调查现代人工智能——特别是大语言模型(LLM)——是否能更好地胜任这项艰巨的任务。这些模型是先进的计算机系统,通过海量的文本和代码进行训练,能够理解指令并生成新内容。研究人员想知道,这些智能系统是否不仅能找到损坏的代码,还能通过观察导致问题的特定变更来理解其“为何”出错。为了测试这一点,他们首先必须建立一个新的、高质量的真实软件错误集合,因为旧有的集合要么已经过时,要么不包含正确类型的错误。他们创建了一个名为 RegressionBug4APR 的基准测试集,其中包含了来自流行的 Java 和 Python 软件项目的 200 个确认的回归漏洞。他们仔细验证了每一个漏洞,以确保其为真正的回归,即某个功能在软件的早期版本中运行正常,但在特定的更新后停止工作。

有了这个新集合,研究人员对各种修复工具进行了测试。首先,他们尝试了沿用多年的传统自动化工具。这些工具通过尝试对代码进行微小的改动(例如交换一个单词或删除一行)来观察错误是否消失。结果非常悬殊:这些传统工具未能修复 2-00 个漏洞中的任何一个。它们根本无法处理这些特定错误的复杂性。随后,研究人员转向了更强大、更新颖的人工智能模型。这些模型的表现要好得多,其中最先进的模型成功修复了相当数量的漏洞。然而,研究人员注意到,这些模型仍然是在“黑暗中摸索”。它们被告知了损坏的代码和错误信息,但并没有被告知软件历史中究竟是哪次特定的变更导致了故障。

为了看看提供更多上下文是否会有所帮助,研究人员尝试了一种新方法。他们将引入漏洞的精确代码变更,以及原始开发者在进行该变更时编写的注释,一同喂给人工智能。这类似于给机械师提供的不仅仅是一辆坏掉的车,还有那个导致螺栓出问题的特定扳手。当模型获得了关于“引发漏洞的变更”这一额外信息时,它们的表现大幅提升。表现最好的设置采用了对话式风格,使模型可以请求反馈并尝试再次修复,这种设置成功修复了 200 个漏洞中的 39 个。这比使用相同模型但没有额外历史信息的表现提升了 1.6 倍。研究人员发现,这些上下文帮助模型理解了错误的根源,使其能够决定是简单地撤销错误的变更,还是进行更细微的修正——既保留更新中的优点,又修复其中的缺点。

研究还表明,并非所有的漏洞都是一样的。有些错误发生在代码被修改的具体位置,而另一些错误则发生在远离修改处、甚至完全未被触动的程序部分。即使有了额外的历史信息,模型发现修复那些远端错误也困难得多。此外,研究人员还分析了模型犯下的错误。有时,模型误判了错误的起因;或者,它们创造了一个虽然通过了测试但逻辑错误的修复方案,本质上是“欺骗”了测试系统,而非解决了真正的难题。尽管存在这些局限性,但研究结果是明确的:传统的自动化修复工具对于回归漏洞是无效的,但现代人工智能展现出了巨大的潜力,尤其是当它被允许查看代码历史以理解错误是如何发生的时候。这表明,修复软件的未来不仅在于更聪明的算法,还在于向这些算法讲述软件演进的全过程。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →