TENET: Leveraging Tests Beyond Validation for Code Generation
作者: Yiran Hu, Nan Jiang, Shanchao Liang, Yi Wu, Lin Tan
分类: cs.SE, cs.AI
发布日期: 2025-09-29 (更新: 2025-09-30)
💡 一句话要点
TENET:利用测试驱动开发提升代码生成质量,解决复杂仓库环境下的代码生成难题。
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 代码生成 大型语言模型 测试驱动开发 软件工程 Agent 代码检索 代码改进
📋 核心要点
- 现有代码生成方法在复杂仓库环境中面临挑战,难以有效利用测试驱动开发(TDD)的优势。
- TENET通过选择多样性测试套件、高效代码检索和反思式代码改进,提升LLM在TDD环境下的代码生成能力。
- 实验表明,TENET在RepoCod和RepoEval基准测试中显著优于现有Agent方法,Pass@1指标分别提升9.49%和2.17%。
📝 摘要(中文)
本文提出TENET,一个在测试驱动开发(TDD)环境下,用于在复杂真实仓库中生成函数的LLM Agent。TDD是一种广泛采用的软件工程实践,它要求开发者在代码实现的同时创建和执行测试,以确保软件行为得到持续验证和改进。TENET旨在解决TDD环境下Vibe Coding面临的三个主要挑战:(1)选择小而有效的测试套件以提高生成精度并控制执行工作量;(2)有效检索相关代码等上下文;(3)系统地使用测试反馈进行有效的代码改进。TENET包含三个组件:(1)一种新颖的测试工具机制,选择简洁的测试套件以最大化目标使用场景的多样性;(2)定制的Agent工具集,执行高效的相关代码检索和交互式调试;(3)基于反思的改进工作流程,迭代地分析失败,补充上下文并应用代码改进。在RepoCod和RepoEval基准测试中,TENET分别实现了69.08%和81.77%的Pass@1,分别超过了最佳Agent基线9.49和2.17个百分点。此外,这是第一个在仓库级别上下文中进行测试驱动代码生成的研究,考察了测试套件的不同方面如何影响TDD环境下LLM Agent的性能。
🔬 方法详解
问题定义:论文旨在解决在复杂的真实仓库环境中,如何有效地利用测试驱动开发(TDD)来提升大型语言模型(LLM)的代码生成质量。现有方法在选择合适的测试用例、检索相关代码上下文以及利用测试反馈进行代码改进方面存在不足,导致生成代码的准确性和可靠性不高。
核心思路:TENET的核心思路是构建一个LLM Agent,使其能够像人类开发者一样,在TDD的框架下,通过执行测试用例、分析测试结果、检索相关代码和迭代改进代码来生成高质量的代码。这种方法强调测试用例作为可执行的规范,能够更清晰地定义和验证代码的功能。
技术框架:TENET的整体架构包含三个主要组件:(1)测试工具机制:用于选择简洁且具有多样性的测试套件,以覆盖不同的使用场景。(2)Agent工具集:用于高效地检索相关代码,并支持交互式调试。(3)反思式改进工作流程:用于迭代地分析测试失败,补充上下文信息,并应用代码改进。整个流程是一个迭代循环,Agent首先生成代码,然后执行测试,分析测试结果,并根据结果进行代码改进,直到所有测试都通过。
关键创新:TENET的关键创新在于其将测试驱动开发与LLM Agent相结合,并针对代码生成过程中的三个关键问题(测试用例选择、代码检索和代码改进)提出了相应的解决方案。特别是,TENET的测试工具机制能够选择具有代表性的测试用例,从而减少了测试执行的开销,并提高了代码生成的效率。
关键设计:TENET的关键设计包括:(1)测试套件选择策略,旨在选择能够最大化覆盖不同使用场景的测试用例;(2)代码检索策略,旨在快速准确地找到与当前任务相关的代码片段;(3)代码改进策略,旨在根据测试结果,有针对性地修改代码,以修复错误并提高代码质量。具体的参数设置、损失函数和网络结构等技术细节在论文中未详细描述,属于未知信息。
🖼️ 关键图片
📊 实验亮点
TENET在RepoCod和RepoEval基准测试中取得了显著的性能提升。在RepoCod上,TENET的Pass@1指标达到了69.08%,超过了最佳基线方法9.49个百分点。在RepoEval上,TENET的Pass@1指标达到了81.77%,超过了最佳基线方法2.17个百分点。这些结果表明,TENET在复杂仓库环境下的代码生成能力显著优于现有方法。
🎯 应用场景
TENET的研究成果可以应用于自动化软件开发、代码补全、代码修复等领域。通过将测试驱动开发与LLM相结合,可以显著提高代码生成的质量和效率,降低软件开发的成本。未来,该方法有望应用于更复杂的软件系统和更广泛的编程语言。
📄 摘要(原文)
Test-Driven Development (TDD) is a widely adopted software engineering practice that requires developers to create and execute tests alongside code implementation, ensuring that software behavior is continuously validated and refined. In the era of vibe coding, where developers increasingly delegate code writing to large language models (LLMs) by specifying high-level intentions, TDD becomes even more crucial, as test cases serve as executable specifications that explicitly define and verify intended functionality beyond what natural-language descriptions and code context can convey. While vibe coding under TDD is promising, there are three main challenges: (1) selecting a small yet effective test suite to improve the generation accuracy and control the execution workload, (2) retrieving context such as relevant code effectively, and (3) systematically using test feedback for effective code refinement. To address these challenges, we introduce TENET, an LLM agent for generating functions in complex real-world repositories under the TDD setting. TENET features three components: (1) a novel test harness mechanism that selects a concise test suite to maximize diversity of target usage scenarios; (2) a tailored agent toolset that performs efficient retrieval of relevant code with interactive debugging; and (3) a reflection-based refinement workflow that iteratively analyzes failures, replenishes context, and applies code refinement. TENET achieves 69.08% and 81.77% Pass@1 on RepoCod and RepoEval benchmarks, outperforming the best agentic baselines by 9.49 and 2.17 percentage points, respectively. In addition, this is the first study of test-driven code generation with repository-level context, examining how different aspects of test suites affect the performance of LLM agents under the TDD setting.