← 最新论文
💻 computer science

Foundation Models as Oracles for Refactoring Correctness Detection

本研究表明,基础模型可以有效地作为可适应的、零样本(zero-shot)的预言机,用于检测 Java 程序中的重构缺陷,在多种 IDE 和重构类型中均实现了高准确度,同时能够提供解释性见解,以补充传统的静态和动态分析工具。

原作者: Rohit Gheyi, Rian Melo, Jonhnanthan Oliveira, Marcio Ribeiro, Baldoino Fonseca

发布于 2026-07-03
📖 1 分钟阅读☕ 轻松阅读

原作者: Rohit Gheyi, Rian Melo, Jonhnanthan Oliveira, Marcio Ribeiro, Baldoino Fonseca

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

想象一下,你是一位大师级木匠,多年来一直致力于打造精美且坚固的桌子。你拥有一套自动化机器(比如 IDE),它们可以帮助你将桌腿从一侧移动到另一侧,或者更换抽屉。这些机器理应完美地完成工作,而不改变桌子的功能。

然而,这些机器有时也会犯错。它们可能会以一种让桌子摇晃的方式移动桌腿,或者切掉一块零件导致整个结构坍塌。在软件的世界里,这些错误被称为重构缺陷(refactoring bugs)。它们可能是细微的(桌子摇晃),也可能是明显的(桌子直接散架无法站立)。

长期以来,为了捕捉这些错误,开发者不得不为机器可能出错的每一种方式编写非常具体的、手动的规则。这就像是试图为桌子可能损坏的每一种方式编写一本规则手册。这既困难又缓慢,而且机器总能找到规则手册未涵盖的新方式来破坏东西。

新思路:一位“超级检查员”

这篇论文提出了一个简单的问题:能否让一位“超级检查员”(基础模型,即一种先进的 AI)观察桌子被移动前后的状态,并告诉我们它是否坏了?

研究人员并没有教 AI 关于桌子的特定规则。相反,他们只是向它展示了坏掉的桌子案例,并问它:“这个坏了吗?”这被称为零样本提示(zero-shot prompting)——就像是递给一个聪明人一把坏掉的椅子,不给任何说明书,直接问他:“这把椅子坐起来安全吗?”

实验过程

研究人员收集了 226 个真实的坏桌子案例(软件缺陷),这些案例发生在过去十年中流行的软件工具(如 IntelliJ、Eclipse 和 NetBeans)中。这些缺陷分为两类:

  1. “坍塌”(编译错误): 代码乱得甚至无法运行。
  2. “摇晃”(行为变化): 代码可以运行,但其表现与预期不同(比如打印了错误的数字,或者在不该崩溃的时候崩溃了)。

他们要求几位不同的“超级检查员”(AI 模型)观察这 226 个案例,并询问:“这坏了吗?”

研究发现

1. AI 在发现错误方面表现得惊人地出色。

  • 最好的 AI 检查员(如 Gemini-3.1-Pro-PreviewGPT-5.4)几乎每次都能正确识别(准确率约为 94% 到 99%)。
  • 即使是较小的、免费使用的 AI(GPT-OSS-20B)也做得相当不错(准确率约为 80%)。
  • AI 不仅仅是回答“是/否”,它还能解释为什么桌子会摇晃,这有助于人类木匠理解问题所在。

2. 有些错误比其他的更难发现。

  • AI 非常擅长发现“摇晃”(行为变化)。
  • 它在发现“坍塌”(编译错误)方面稍逊一筹,尤其是当错误非常细微或涉及复杂的部件连接规则时。
  • 有趣的是,AI 有时会被描述方式所迷惑。如果添加了一个假螺丝或改变了木材颜色(蜕变测试)而没有实际改变结构,AI 仍然能发现破损。这表明它是在观察“结构”,而不仅仅是死记硬背图片。

3. “大型项目”问题。

  • 当研究人员尝试在巨大的真实项目中应用 AI,且只向它展示一个“差异(diff)”(即一份变更列表,而非全貌)时,AI 经常会回答:“我不知道。”
  • 这种情况发生在约 40% 的案例中。AI 意识到,如果没有看到整个“车间”(完整的代码库),它无法确定移动一个部件是否会破坏另一个房间里隐藏的东西。

结论

论文得出结论,这些 AI “超级检查员”并不能完全取代旧有的、严格的规则手册(传统工具)。旧工具就像是一个激光水平仪:它们快速、廉价,并且对于能测量的东西具有 100% 的准确性。

然而,AI 更像是一位经验丰富的资深木匠

  • 它能发现激光水平仪会漏掉的棘手问题。
  • 它可以用通俗易懂的语言解释哪里出了问题。
  • 它无需编写新的手册就能处理不同种类的木材(新的编程语言)。

最佳策略: 先使用快速、廉价的激光水平仪。如果它没能捕捉到所有问题,或者问题很奇怪,再请 AI “超级检查员”进行第二次检查。它们最好的协作方式是作为搭档,而不是竞争对手。

重要提示: 本文仅针对 Java 代码进行了测试。它并不声称这适用于所有语言,也不声称可以完全取代人类的判断。AI 是一个得力的助手,而不是一个能自动修复一切的魔杖。

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

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

试用 Digest →