AI能否真正胜任代码工作?研究揭示自主软件工程的瓶颈与挑战

1

在软件开发的未来,人工智能(AI)将承担起繁琐的任务,例如代码重构、传统系统迁移和竞态条件排查,从而使人类工程师能够专注于架构、设计以及机器无法触及的创新问题。麻省理工学院计算机科学与人工智能实验室(CSAIL)的研究人员发表了一篇新论文,题为《人工智能在软件工程中的挑战与路径》,他们认为,要实现这一潜力,必须认真审视当前的挑战。

A 3D cartoon robot appears confused, standing in front of different newspaper headlines about the progress of AI coding. Blocks of code are visible behind a red background.

该论文深入探讨了代码生成之外的软件工程任务,识别了瓶颈,并提出了克服这些瓶颈的研究方向,目标是让人类专注于高层次设计,同时将日常工作自动化。

麻省理工学院电气工程与计算机科学教授、CSAIL首席研究员、该研究的资深作者Armando Solar-Lezama表示:“每个人都在谈论我们不再需要程序员,以及现在有各种自动化工具可用。一方面,该领域取得了巨大进展。我们拥有的工具比以往任何时候都强大。但要真正实现我们期望的完全自动化,还有很长的路要走。”

Solar-Lezama认为,流行的观点往往将软件工程缩小为“本科生编程部分:有人给你一个小的函数规范,你来实现它,或者解决LeetCode风格的编程面试题。”但实际情况远不止于此。它包括改进设计的日常重构,以及将数百万行代码从COBOL迁移到Java,并重塑整个业务的全面迁移。它需要不间断的测试和分析(模糊测试、基于属性的测试和其他方法)来捕获并发错误或修补零日漏洞。它还包括维护工作:记录十年以上的代码,为新团队成员总结变更历史,以及审查pull request的风格、性能和安全性。

行业规模的代码优化(例如,重新调整GPU内核或Chrome V8引擎背后的多层改进)仍然难以评估。目前的指标是为短小、独立的问题设计的,虽然多项选择测试仍然在自然语言研究中占据主导地位,但它们从来都不是AI for Code的标准。该领域的实际标准SWE-Bench只是要求模型修补GitHub问题:这很有用,但仍然类似于“本科生编程练习”模式。它只涉及几百行代码,存在来自公共存储库的数据泄漏风险,并且忽略了其他实际环境(AI辅助重构、人机配对编程或跨越数百万行的性能关键型重写)。在基准测试扩展到捕获这些高风险场景之前,衡量进展(从而加速进展)仍然是一个开放的挑战。

如果说衡量是一个障碍,那么人机通信就是另一个障碍。第一作者Alex Gu是麻省理工学院电气工程与计算机科学的研究生,他认为今天的交互是“一条细微的通信线”。当他要求系统生成代码时,他经常收到一个大型、非结构化的文件,甚至是一组单元测试,但这些测试往往是肤浅的。这种差距延伸到AI有效使用更广泛的软件工程工具(从调试器到静态分析器)的能力,而人类依赖这些工具进行精确控制和更深入的理解。“我真的无法控制模型编写的内容,”他说。“如果没有AI暴露其自身置信度的渠道(‘这部分是正确的……这部分,可能要仔细检查’),开发人员可能会盲目相信编译但会在生产中崩溃的幻觉逻辑。另一个关键方面是让AI知道何时应推迟给用户进行澄清。”

规模放大了这些困难。当前的AI模型在大型代码库(通常跨越数百万行)中表现不佳。基础模型从公共GitHub学习,但“每个公司的代码库都有些不同且独特,”Gu说,这使得专有的编码约定和规范要求从根本上来说是分布之外的。结果是代码看起来似乎合理,但会调用不存在的函数、违反内部样式规则或未能通过持续集成管道。这通常会导致AI生成的代码“产生幻觉”,这意味着它创建的内容看起来似乎合理,但与给定公司的特定内部约定、辅助函数或架构模式不一致。

模型也经常会错误地检索,因为它检索的是具有相似名称(语法)而不是功能和逻辑的代码,而这正是模型可能需要知道如何编写函数的原因。Solar-Lezama说:“标准检索技术很容易被做同样事情但看起来不同的代码片段所愚弄。”

作者提到,由于没有解决这些问题的灵丹妙药,他们呼吁社区规模的努力:更丰富的数据,捕获开发人员编写代码的过程(例如,开发人员保留与丢弃的代码、代码如何随时间推移进行重构等),共享评估套件,衡量重构质量、错误修复持久性和迁移正确性的进展;以及透明的工具,让模型可以暴露不确定性并邀请人类指导,而不是被动接受。Gu将该议程定义为“行动呼吁”,呼吁更大的开源协作,而不是单个实验室可以召集的。Solar-Lezama设想了渐进式的进步——“研究结果分别从每个挑战中咬下一块”——这些进步会反馈到商业工具中,并逐渐将AI从自动完成的助手转变为真正的工程合作伙伴。

“为什么这些很重要?软件已经支撑着金融、交通、医疗保健和日常生活的细节,而安全地构建和维护它所需的人力正成为瓶颈。一种能够承担繁重工作(并且在不引入隐藏失败的情况下这样做)的AI将使开发人员能够专注于创造力、战略和伦理,”Gu说。“但这种未来取决于承认代码完成是容易的部分;困难的部分是其他一切。我们的目标不是取代程序员。而是要放大他们。当AI能够处理乏味和可怕的事情时,人类工程师最终可以将时间花在只有人类才能做的事情上。”

Mistral AI的AI科学家Baptiste Rozière(未参与该论文)表示:“随着AI for Coding领域涌现出如此多的新作品,社区经常追逐最新趋势,很难退后一步,反思哪些问题最重要。我喜欢阅读这篇论文,因为它清晰地概述了AI for Software Engineering中的关键任务和挑战。它还概述了该领域未来研究的有希望的方向。”

Gu和Solar-Lezama与加州大学伯克利分校教授Koushik Sen和博士生Naman Jain和Manish Shetty、康奈尔大学助理教授Kevin Ellis和博士生Wen-Ding Li、斯坦福大学助理教授Diyi Yang和博士生Yijia Shao以及即将上任的约翰霍普金斯大学助理教授Ziyang Li共同撰写了该论文。他们的工作得到了美国国家科学基金会(NSF)、SKY Lab工业赞助商和附属机构、英特尔公司(通过NSF赠款)以及海军研究办公室的部分支持。

研究人员将在国际机器学习会议(ICML)上展示他们的工作。