HEJ-Robust: A Robustness Benchmark for LLM-Based Automated Program Repair
本文介绍了 HEJ-Robust,这是一个利用语义保持的代码变换构建的新基准,旨在揭示当前基于大语言模型的自动程序修复模型在面对细微语法变化时性能下降超过 50%,从而凸显现有方法在鲁棒性方面的严重不足。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你有一位非常有天赋的机械师,他受过专门训练,能够修理某种特定类型的坏玩具车。这位机械师是一个人工智能(大型语言模型),它已经学习了数千个坏车的例子以及修复它们的方法。过去,研究人员通过每次向它展示完全相同的坏车来测试这位机械师。机械师表现优异,100% 地修好了车。
但这里有个问题:在现实世界中,人们并不总是以完全相同的方式描述坏车。有时他们会说“左轮掉了”,而不是“左前轮掉了”。有时他们把发动机放在稍微不同的位置,但它仍然能正常工作。
问题:“完美”测试与现实生活
这篇论文的作者 Fazle Rabbi 和 Jinqiu Yang 意识到,用于训练和评估这些 AI 机械师的测试过于僵化。这就像一场驾驶考试,你只需要在某个特定的红灯处左转。如果你把红灯改成绿灯,或者要求你右转,AI 可能会感到困惑,尽管驾驶技能本身是相同的。
论文指出,虽然这些 AI 修复工具在代码看起来与它们之前见过的完全一致时非常擅长修复错误,但它们却出奇地脆弱。如果你对代码进行微小且无害的更改(例如将变量从 x 重命名为 count),AI 往往会完全失败。
解决方案:HEJ-Robust(“压力测试”)
为了证明这一点,作者建立了一个名为HEJ-Robust的新测试平台。可以将此视为对 AI 机械师的“压力测试”。
他们选取了 164 个损坏的 Java 程序(即“玩具”),并对每个程序应用了八种不同类型的无害转换。这些转换就像改变汽车的颜色或重新排列座椅——所有功能完全相同,但外观不同。这八种更改包括:
- 重命名事物:将变量命名为
temp而不是count。 - 改变结构:将
for循环切换为while循环(就像在圆形中驾驶与在方形中驾驶)。 - 添加噪声:插入一条无害的日志消息(就像机械师在仪表盘上写一张便条)。
- 重新排列:交换条件的顺序(就像说“如果下雨并且我有伞”与“如果我有伞并且下雨”)。
他们创建了这些损坏程序的1,450 个新版本来测试 AI。
结果:AI 崩溃了
作者在这项新的压力测试中测试了五种不同的 AI 模型。结果令人震惊。
- 大幅下降:当代码被轻微重命名或重构时,AI 的成功率下降了超过 50%。
- 类比:这就好比机械师在方向盘位于左侧时能完美地修好车,但如果你把方向盘移到右侧(尽管车仍然能正常行驶),机械师就完全忘记了如何修理。
- 规模无关紧要:更大、更强大的 AI 模型并没有表现得更好。事实上,有时当代码看起来略有不同时,“最聪明”的模型比较小的模型失败得更频繁。
- 错误的指标:论文还发现,标准的“语法检查器”(如 CodeBLEU 等指标)并未察觉到 AI 的失败。AI 编写的代码看起来与正确答案相似,但实际上无法运行。这就像学生写了一篇看起来完美的文章,但内容却是错误的;语法没问题,但逻辑是破碎的。
结论
论文得出结论,当前用于修复代码的 AI 工具并不稳健。它们就像那些死记硬背了特定考试答案但并未真正理解该学科的学生。如果你稍微改变问题的措辞,他们就会失败。
作者发布了他们的新基准测试(HEJ-Robust),以便其他研究人员可以利用它来构建真正灵活的 AI 机械师,能够应对现实世界软件中混乱多样的实际情况,而不仅仅是通过僵化、完美的测试。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。