TENET:利用测试超越验证进行代码生成

发表
Lin TanLin Tan 提交
作者: Yiran HuYiran Hu, Nan Jiang, Shanchao Liang, Yi WuYi Wu, Lin TanLin Tan

摘要

AI 生成总结
TENET 是一个用于复杂存储库中 TDD 的 LLM 智能体,它使用测试套件、高效代码检索和迭代精炼来提高代码生成准确性和性能。
测试驱动开发(TDD)是一种被广泛采用的软件工程实践,它要求开发人员在代码实现的同时创建和执行测试,以确保软件行为得到持续的验证和改进。在代码生成时代,开发人员通过指定高级意图越来越委托大型语言模型(LLM)来编写代码,TDD 变得更加重要,因为测试用例充当可执行规范,明确定义和验证超出自然语言描述和代码上下文所能传达的功能。虽然 TDD 下的代码生成很有前景,但存在三个主要挑战:(1)选择一个小型但有效的测试套件以提高生成准确性和控制执行工作负载,(2)有效检索相关代码等上下文,以及(3)系统地使用测试反馈进行有效的代码改进。为了应对这些挑战,我们引入了 TENET,一个用于在 TDD 设置下复杂真实世界存储库中生成函数的 LLM 代理。TENET 具有三个组成部分:(1)一种新颖的测试工具链机制,用于选择简洁的测试套件以最大化目标使用场景的多样性;(2)一种定制的代理工具集,可进行高效的相关代码检索和交互式调试;(3)一种基于反思的改进工作流程,用于迭代分析失败、补充上下文并应用代码改进。TENET 在 RepoCod 和 RepoEval 基准上分别实现了 69.08% 和 81.77% 的 Pass@1,比最佳的代理基线分别提高了 9.49 和 2.17 个百分点。此外,这是第一个关于具有存储库级别上下文的测试驱动代码生成的​​研究,它考察了测试套件的不同方面如何影响 TDD 设置下 LLM 代理的性能。
查看 arXiv 页面查看 PDF

评论

Lin TanLin Tan
论文作者
论文提交者

我们引入了 TENET,一个 LLM 智能体,用于在测试驱动开发(TDD)设置下的复杂真实世界存储库中生成函数。TENET 包含三个组件:(1)一种新颖的测试工具机制,该机制选择简洁的测试套件以最大化目标使用场景的多样性;(2)一种量身定制的智能体工具集,可执行高效的相关代码检索和交互式调试;(3)一种基于反思的改进工作流程,该工作流程迭代分析故障、补充上下文并应用代码改进。TENET 在 REPOCOD 和 RepoEval 基准测试上分别实现了 69.08% 和 81.77% 的 Pass@1,分别比最佳智能体基线高出 9.49 和 2.17 个百分点。此外,这是第一个关于具有存储库级别上下文的测试驱动代码生成的 Study,研究了测试套件的不同方面如何在 TDD 设置下影响 LLM 智能体的性能。