论文

使用 LLM 改造代码以支持异常行为

Retrofitting Code Using LLMs to Support Exceptional Behavior

上下文与知识上下文工程

摘要

异常相关代码 (ERC) 包括 throw 语句、保护这些 throw 语句的条件(if 语句)以及 try/catch 块,是软件系统的重要组成部分,允许开发人员检测和处理偏离预期程序行为的异常状态。然而,跨大型代码库手动编写 ERC 非常乏味。我们提出了一项新任务:使用 ERC 改造现有代码。也就是说,给定代码(没有 ERC)和异常行为测试(EBT)(例如,如果将 null 作为参数的值给出,则检查方法是否抛出 InvalidArgumentException),我们的目标是自动生成缺失的 ERC,以便给定的测试通过。我们设计并实现了执行上下文工程的异常编码器 (EXCODER),以帮助 大语言模型 (LLM) 解决此任务。 EXCODER 通过向 LLM 提供提取的上下文信息,将静态和动态程序分析与 LLM 集成。为了评估 EXCODER,我们构建了一个从 GitHub Java 存储库构建的基准,其中我们系统地删除了 75 个项目的 304 个方法中的 ERC。我们的结果表明,EXCODER 为自动代码生成中的这一问题提供了一种有效但不完美的解决方案,为开发人员提供了在测试驱动开发之后实施 ERC 的第一种方法。与 Qwen 2.5 Coder 32b 结合使用时,EXCODER 在开发人员编写的测试套件上分别实现了 85.92%(超出基线 12.56 个百分点)、86.18%(超出基线 12.82 个百分点)和 86.51%(超出基线 13.15 个百分点)的 pass@1、5 和 10 率。我们对生成代码的手动检查进一步揭示了 EXCODER 的局限性,为未来的工作指明了方向。