SWE-NFI: Studying and Benchmarking Coding Agents for Non-Functional Improvements
本文介绍了 SWE-NFI,这是一个包含 188 个真实世界任务和 92 条可执行规则的基准测试,旨在评估编程智能体在非功能性改进方面的表现,结果表明,尽管智能体在功能正确性方面取得了较高的成就,但在执行保持行为不变的代码增强方面,仍显著落后于人类开发者。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正在教一个机器人写代码。长期以来,测试机器人做得好不好的唯一方法就是问:“这个程序能运行吗?”如果机器人造出了一个能正确进行加法运算的计算器,它就会得到一颗金星。但在现实世界中,编写软件就像盖房子。仅仅因为屋顶不漏水、门能打开,并不意味着这栋房子住起来是愉悦的。也许墙后的电线乱成一团,或者油漆在剥落,又或者开关的使用说明是用隐形墨水写的。这些都是房子的“非功能性”部分:关于它是否易于维修、是否安全以及看起来是否美观。
最近,被称为“编程智能体”(coding agents)的智能计算机程序在构建软件的基础结构方面已经变得非常出色。它们可以修复漏洞并添加新功能。但没人真正知道这些智能体是否也能胜任那些琐碎、枯燥但又极其重要的工作——比如清理代码、整理布线以及在不破坏原有功能的前提下编写清晰的说明。这正是来自加拿大、中国和新加坡大学的研究团队决定回答的问题。他们想看看这些数字助手是否不仅仅是功能性的建筑师,更能成为真正的软件护理员。
为了找出答案,研究人员创建了一个新的测试,叫做 SWE-NFI。你可以把这个测试想象成一份巨大的、自动化的检查员清单。这份清单不仅仅是检查程序是否运行,它还包含 92 条关于代码“看起来和感觉起来”有多好的具体规则。这些规则会检查诸如:“你是否为这个函数写了清晰的解释?”(文档编制)、“你是否安全地处理了错误以防止程序崩溃?”(错误处理)以及“你是否使用了现代工具而不是陈旧过时的工具?”(库约束)等内容。
研究人员利用从人类已经修复过的实际软件项目中提取的 188 个真实案例构建了这个测试。他们拿到了代码的“修改前”版本,将其交给各种编程智能体,并要求它们在不改变实际功能的前提下使代码变得更好。然后,他们使用这 92 条规则组成的清单来为这些智能体评分。他们还设立了一个“人类参考”分数,即人类开发者在现实世界中改进同一段代码的表现。
结果却是一个令人清醒的现实。表现最好的编程智能体在确保代码仍能正常运行方面确实做得不错(功能正确率达到 70.0%)。然而,当涉及到让代码在人类所关心的维度上变得“更好”时,这些智能体却显得力不从心。它们在几乎所有类别中都落后于人类开发者。
最大的差距出现在“逻辑模式”(Logic Patterns)上,这类似于代码的结构完整性。人类在该领域的平均改进分数为 1.5,但表现最好的编程智能体仅能达到 0.0 到 1.3 之间。这就像机器人可以建造一面坚固的墙,但却无法弄清楚如何让砖块排列得完美无瑕,或者如何添加一个漂亮的拱门。
研究还发现了一些有趣的现象:
- 单文件与多文件: 智能体在修复单个文件时表现尚可,但当它们需要同时协调多个文件之间的更改时(比如同时修理厨房和客厅的布线),表现就变得糟糕得多。
- 成本与质量: 研究人员检查了智能体消耗了多少“燃料”(计算时间和数据 Token)。他们发现,投入更多的资源或时间并不总是意味着更好的结果。一个智能体消耗的资源是另一个的 100 倍,但并没有产生显著更好的代码改进。
- 一致性: 一旦某个智能体成功写出了可以运行的代码,它在进行这些微小改进方面是非常一致的。真正的难题在于如何让代码首先跑通。
简而言之,这篇论文表明,虽然我们的编程机器人正变得非常擅长处理“做什么”(让事物运转),但在“如何做”(使其易于维护、安全且整洁)方面仍有很长的路要走。它们是优秀的学徒,能够遵循指令,但尚未学会成为一名懂得整理工作坊的顶级匠人。研究人员希望,通过这个全新的、严格的清单,我们可以教会下一代编程智能体不仅去构建软件,更去呵护软件。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。