LLM赋能软件工程:综述与开放问题

由 loop 创建12 次浏览

论文信息

字段 内容
标题 Large Language Models for Software Engineering: Survey and Open Problems
作者 Angela Fan, Mitya Lyubarskiy, Beliz Gokkaya, Mark Harman, Shubho Sengupta, Shin Yoo, Jie M. Zhang
机构 Meta Platforms Inc., KAIST, King’s College London
论文地址 https://arxiv.org/abs/2310.03533
发表时间 2023年11月

一句话概要

本文系统综述了大型语言模型在软件工程各环节(需求、设计、编码、测试、维护、文档等)中的应用现状与开放挑战。作者基于arXiv文献计量分析揭示了LLM-SE领域自2019年以来的指数级增长(2023年已有超过10%的LLM论文聚焦软件工程),同时指出幻觉、非确定性、评估不严谨等核心问题。核心洞察在于:LLM与现有SE技术(如搜索测试、变异测试、回归Oracle)的混合方法比单独使用LLM更具可靠性;生成-测试范式为LLM-based SE提供了科学框架;幻觉不一定只有负面作用,可被重新利用。论文最后系统提出了各子领域的开放研究议程。

背景与研究动机

传统软件工程研究长期依赖手工或半自动化的方法,而在大数据与深度学习浪潮下,程序语言的自然性假设(Hindle等人提出)已经表明代码具有高度可预测性和重复性。这为借用自然语言处理技术处理代码奠定了基础。然而,直到LLM的出现,才真正实现了从“自然语言描述→可执行代码”的端到端生成能力。

作者指出,LLM的涌现特性为软件工程带来了新颖性和创造力,但同时也带来了严峻的技术挑战——幻觉问题使得生成的工程制品看起来合理但可能不正确。与人类智能类似,LLM会创造虚构输出;在软件工程语境下,这意味着引入bug。

值得注意的是,软件工程领域与其他LLM应用领域有一个关键区别:软件通常可以用执行结果作为自动化的ground truth。论文提出“自动化回归Oracle”的概念:对于现有软件的改进与非功能性优化,可以将原始系统的功能行为作为参考标准,从而无需外部oracle即可验证生成结果。这一洞察直接呼应了遗传改进领域多年来积累的生成-测试方法论。

另一个驱动因素是LLM-SE研究的爆发现状。作者对arXiv预印本进行了手动分析(数据截至2023年7月27日),计算出2023年已有3.17%的计算机科学预印本与LLM相关,其中约10.9%的LLM论文聚焦于软件工程与编程语言子领域。这一比例自2019年以来急剧上升,说明该领域已经到了需要系统梳理和指明方向的时刻。

现有方法的瓶颈

  1. 幻觉问题缺乏系统性应对:虽然已有大量文章讨论LLM的幻觉,但现有工作多停留在示例分析层面,缺乏系统性的检测与缓解方法。传统SE中的验证技术(如测试生成)可以部分对幻觉进行过滤,但其自身也面临Oracle问题。

  2. 评估方法论严重不足:作者引用Hort等人的分析指出,在293篇LLM代码生成论文中,仅33%共享了源代码,27%共享了训练制品;Wang等人对LLM测试论文的调研更发现,超过90%的论文因缺乏清晰可复现的评估方法(无基线比较)而被过滤。LLM的内在非确定性使传统的一次性实验设计失效,但仅有21.1%的代码生成论文在实验中考虑了非确定性威胁。

  3. 各子领域发展极不均衡:代码生成、代码补全和测试生成占据了绝对多数,而需求工程、设计、重构、软件过程等高度依赖自然语言分析的关键子领域几乎没有得到关注。论文提到有调研显示实践工程师甚至不愿意将LLM用于高层设计目标。

  4. 现有代码生成基准存在虚假正确性判断:HumanEval等基准的测试套本身可能不充分。Liu等人提出的EvalPlus框架表明,通过自动生成额外测试输入,pass@k指标最多可下降15%。这暗示大量被报告为“正确”的代码实际上并未通过全面测试。

  5. LLM参数和设置报告缺失:绝大多数论文未报告温度、采样策略等关键超参数,导致实验无法复现。作者强调“使作者有义务显著报告这些参数设置”是亟待改进的最基本问题。

核心洞察与贡献

本文的核心贡献是一份横跨所有SE活动、结构化且带有明确开放问题的综述。其特色在于:

  1. “生成-测试”作为统一框架:作者明确将LLM-based SE与搜索式软件工程和遗传改进的方法论连接起来。两者都采用“生成-测试”范式——先宽松地生成候选方案,然后通过测试进行过滤。遗传改进中成熟的评估技术(如参数与非参数推断统计)可以直接迁移,形成LLM-SE的科学评估基础。

  2. “自动化回归Oracle”的关键地位:对于保持语义的代码转换(如重构、性能优化),原始系统的行为可作为免费且自动化的测试oracle。这一观点极大简化了非功能性改进的验证问题,并暗示LLM-based重构和性能优化较其他新功能生成场景天然有一层保障。

  3. 混合方法优势的系统证据:整个综述反复出现一个模式——将LLM与现有SE技术(SBST、fuzzing、变异测试、静态分析)结合,效果显著优于单独使用LLM。例如CODAMOSA(SBST+LLM)在486个基准上显著超过纯SBST和纯LLM基线;ChatFuzz(AFL+LLM)分支覆盖率提升13%;多LLM协作的ChatDev整体提升30-47%。这可以理解为一个核心设计原则:LLM不应被视为孤立的黑盒,而应嵌入到成熟SE工作流中。

  4. 幻觉的辩证观点:作者提出幻觉不一定只有负面作用。LLM的“合理虚构”可以被重新利用——例如将幻觉的测试用例视为新特性建议,将幻觉的代码摘要视为人对代码可能产生误解的预警。这为未来提供了一条“驾驭幻觉”而非“消灭幻觉”的路径。

  5. 系统的开放问题谱图:每个子章节后都单独列出开放问题,并横跨所有子领域(第XII节汇总了8个跨领域开放主题)。这相当于为整个研究社区提供了一张经过专家论证的路线图。

方法详解

本文本身是一篇综述,其“方法”在于构建了一套覆盖面广且逻辑递进的分类框架,并辅以文献计量分析作为证据。

综述方法论

作者首先进行了arXiv文献计量分析(表I),手动从Kaggle提供的arXiv元数据(截至2023年7月27日)中提取预印本数据。他们采用分层过滤:先筛选计算机科学类别,再筛选标题或摘要包含“Large Language Model”“LLM”“GPT”的论文(手动排除GPT作为通用规划工具的重叠),最后定位到cs.SE和cs.PL子类别。数据确认为近似而非精确,但足以支撑总体趋势的判断。

结构化分类体系

论文按照软件开发活动与研究领域进行组织,涵盖11个主要章节:需求工程与设计(III)、代码生成与补全(IV)、软件测试(V)、维护、演进与部署(VI)、文档生成(VII)、软件分析与仓库挖掘(VIII)、人机交互(IX)、软件工程过程(X)、软件工程教育(XI),以及跨领域开放主题(XII)。每个子领域内,又按“应用现状”“混合方法”“开放问题”三层展开。

这种分类的动机在于:使读者能够快速定位感兴趣的子领域,并在同一逻辑框架下对比不同子领域的成熟度。例如,代码生成(IV)对应大量实证研究,而需求工程(III)仅有三项工作——这种对比本身就揭示了研究空白。

术语定义与范畴界定

初步部分(II)给出了三类LLM(编码器仅、编码器-解码器、解码器仅)的关键术语表(表III),以及现有代码生成LLM的汇总表(表II)。这保证了自包含性,避免读者因术语歧义而误解后续讨论。

开放问题提取方法

每个子章节末尾的开放问题并非随意列举,而是从已有文献的局限、技术机会、以及与其他领域的类比三个渠道提取。例如,重构的开放问题来自对“自动化回归Oracle免费”这一观察的延伸——既然重构可直接用原始行为验证,为何研究极少?这引导出“定制化重构”和“模式迁移”等具体方向。

实验与结果

作为综述,本文没有新实验,但系统汇总了多个子领域的实证发现。以下提炼关键定量结果,这些结果均来自被引的原始论文。

Table 1. arXiv预印本中LLM与LLM-SE论文的增长趋势(数据截至2023年7月27日)

年份 CS类别总数 LLM相关论文数 SE+PL中LLM论文数 LLM占比(%) SE在LLM中占比(%)
2019 55,325 36 0 0.00 0.00
2020 71,431 99 5 0.00 5.05
2021 77,520 192 13 0.25 6.77
2022 81,964 434 45 0.53 10.36
2023 52,547 1,665 181 3.17 10.87

关键实证发现汇总(本文中引用的其他论文结果)

  • 代码补全采纳率:Murali等人报告Meta的CodeCompose(基于Incoder)在15天内提供450万次建议,开发者接受率22%,定性反馈92%正面。Peng等人发现程序员使用GitHub Copilot完成HTTP服务器实现的速度提高56%。
  • 代码生成正确性:GPT-4 zero-shot在HumanEval上pass@1为67%(GPT-4技术报告)。Reflexion(GPT-4)可达90%以上。但SWE-bench(真实GitHub issue)显示Claude 2和GPT-4仅分别解决4.8%和1.7%的问题,说明实验室基准与实际工程存在巨大差距。
  • 测试生成可执行性:Nie等人报告TeCo生成的测试仅29%可执行;Yuan等人发现ChatGPT生成的测试约1/4可编译,通过提示工程提升至1/3。Bareiß等人用CodeX将Randoop的10%行覆盖率提升至14%。
  • 混合方法的覆盖率提升:CODAMOSA(SBST+CodeX)在486个基准上显著超过单独SBST和单独CodeX;ChatFuzz(AFL+LLM)在12个目标程序上分支覆盖率比AFL高13%。
  • Bug修复:Xia等人提出的ChatRepair用文本修复对话方式在337个bug中修复162个,每个bug成本仅0.42美元。Jiang等人对10个CLMs的评估显示,修复特定微调后成功修复率比最先进深度学习APR技术高160%。
  • 性能改进:Madaan等人用CodeGen和CodeX提出性能改进编辑,在已用-O3优化的C++代码上仍能提升性能。Cummins等人用7B参数LLM生成编译器优化指令,带来3%的指令计数减少,91%可编译,70%功能正确。
  • 测试输出预测:Liu等人提出的CodeExecutor在Tutorial数据集上执行轨迹输出准确率76%,而CodeX仅13%。

优势与局限性

优势

  1. 领域覆盖面广且逻辑贯通:从需求到部署,再到教育和社会影响,每一环节都分析了当前工作、混合策略和未来方向。不同子领域之间的呼应关系(如代码生成与测试生成之间的反馈循环)被明确揭示。

  2. 强调混合方法而非LLM孤立使用:作者反复论证“LLM+传统SE技术”是当前最有效的路径,这一观点本身就构成了后续研究的核心设计原则。对于追求实用性的工业界研究者,这是直接可操作的指导。

  3. 开放问题的质量高:每个开放问题都具体到可操作的研究方向(如“提示工程应如何减少测试不稳定”“如何自动评估生成测试的置信度”),而非泛泛的“需要更多研究”。这使本综述成为一份可立即用于科研选题的蓝图。

  4. 对科学评估质量进行元评估:作者不只报告正面结果,而是主动揭露了当前文献中的评估缺陷(如测试套不充分、未报告参数、缺乏基线)。这种自反性在综述中并不常见,但大幅增加了可信度。

局限性

  1. 数据的时间窗口局限:文献计量分析数据截至2023年7月27日,而综述发表于2023年11月。自2023年下半年以来,又有大量新模型(如Code Llama各变体、GPT-4 Turbo、Claude 3等)出现,HumanEval上的排名也已发生显著变化。作者对此有所预见并指出“这些数字和排名本身会快速变化”。

  2. 引用文献偏向知名机构:大量引用来自Meta、KAIST、King’s College等单位,部分原因可能因为这些作者本身是合作者。虽然覆盖面已很广,但可能遗漏了中国、欧洲其他团队的同期重要工作,特别是在代码生成和APR领域。

  3. 缺少定量元分析:综述呈现了各个论文的离散结果,但未对相似任务(如测试生成覆盖率)进行标准的元分析(effect size、异质性检验等)。这使跨研究的比较只能靠肉眼判断,存在方法学风险。

  4. 对实际部署挑战的描述较薄弱:虽然讨论了CodeCompose和Copilot的工业部署,但对诸如延迟、成本、版本管理、模型更新导致的性能漂移等工程问题的讨论相对简要。这可能是因为当前文献本身就以研究论文为主,工业报告仍稀少。

  5. “驾驭幻觉”部分缺乏具体案例:作者提出幻觉可以重新利用,但只给出了概念性方向(如非设计新特性、误解预警),没有引用已实现的工作来支撑。这可以理解为该想法仍处于萌芽阶段,但也意味着其可行性尚待验证。

未来方向与开放问题

论文在多个章节详细列出了开放问题,其中跨领域的八个方向尤为关键:

  1. 构建与调优面向SE的LLM:现有工作多将LLM视为原子组件,少有专门针对软件工程任务(如执行跟踪感知)的预训练模型。动态执行信息是代码领域区别于自然语言的关键特性,目前几乎没有被利用。Ding等人的TRACED模型已展示执行感知预训练可使下游任务准确率提升25%,这是未来SE专用LLM的重要方向。

  2. 动态自适应提示工程与参数调优:当前的提示工程结果高度问题特定,“一刀切”策略不可行。可以将提示优化形式化为多目标搜索问题,借鉴搜索式软件工程技术。同时作者强调必须显著报告模型参数设置以支持复现。

  3. 混合化的设计模式:需要为LLM嵌入SE工作流建立设计模式,特别是如何将LLM集成到持续集成流水线中,以及如何利用静态/动态分析对LLM输出进行后处理。

  4. 驾驭幻觉:系统研究如何将幻觉转化为有用建议,可能需要新的实验设计(如“幻觉作为需求启发”)。

  5. 稳健可靠的评估:需要更严格的基准(如SWE-bench)、自动生成额外测试输入(如EvalPlus)、以及考虑非确定性的统计推理。同时,纵向研究(开发者在LLM辅助下的长期行为)必不可少。

  6. 彻底的测试:测试技术将是LLM-SE的“安全网”,但测试本身也面临oracle问题和测试正确性问题(生成的测试可能本身错误并“烘烤”错误行为)。需要发展自动置信度评估和测试过滤机制。

  7. 处理更长文本输入:大型软件系统的上下文远远超出当前LLM的token局限(GPT-4 128K token出现较晚,但即便如此对于大型代码库仍然不够)。这方面的进展将直接扩展LLM在SE中的应用范围。

  8. 探索覆盖不足的子领域:需求工程、设计、重构、软件过程、软件仓库挖掘等利用自然语言分析的核心领域目前研究极少,但潜力巨大。

组会预判问答

Q1:这篇综述与我们当前研究的直接关联是什么?
A:如果你在做代码生成或测试生成,它提供了一个完整的工具对比表(Table II)和混合方法的分类(面向搜索的、面向缓存的、面向多智能体协作的等)。如果你在做需求或维护,它能直接告诉你这些子领域的空白点——例如需求工程中几乎没有LLM工作,但traceability和完整性检查是天然适配场景。

Q2:HL说“生成-测试范式”是核心框架,这具体指什么?
A:意思是不要期望LLM一次就生成完美代码,而是先生成多个候选(“生成”阶段),然后用测试自动化过滤(“测试”阶段)。这和APR、遗传改进的哲学完全一致。这使得SBSE中大量关于排名、置信度、贝叶斯优化的成果可以直接继承。

Q3:这篇综述是否有偏倚?
A:有。作者团队中有多位来自Meta和KAIST,引用了较多Meta内部的工作和合作者论文。这可能使得某些领域(如CodeCompose、CODAMOSA)被过度强调,相对低估了其他团队的工作。建议交叉参考其他同期综述(如Hou等人的SLR)来补充视角。

Q4:他们对幻觉的“正面利用”观点是否可信?
A:目前缺乏实验支持,属于概念性方向。但可以理解为一种有启发性的视角转换——如果我们接受LLM幻觉是不可避免的,与其试图完全消除,不如设计一个有人类在环的流程来利用它。至少在设计领域(如生成备选架构)有一定合理性。需要更多实证研究。

Q5:你觉得这篇综述最重要的一个结论是什么?
A:不是任何单一结果,而是“混合方法”被确立为核心设计原则。这个结论具有直接操作性:当你设计一个新的LLM-SE系统时,第一反应应该是“我如何用现有的SE技术来补全LLM的不足”,而不是“我如何让LLM自己搞定一切”。此外,关于评估质量的警告(90%的测试论文因无基线被过滤),应当成为我们提交论文前的自查清单。

本报告由立理AI生成,仅供参考,请以原文为准。

创作同款