Tests as Prompt: A Test-Driven-Development Benchmark for LLM Code Generation

📄 arXiv: 2505.09027v1 📥 PDF

作者: Yi Cui

分类: cs.SE, cs.AI

发布日期: 2025-05-13

备注: arXiv admin note: text overlap with arXiv:2409.05177


💡 一句话要点

WebApp1K:提出测试驱动开发基准,评估LLM从测试用例生成代码的能力

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 测试驱动开发 代码生成 大型语言模型 基准测试 指令遵循 上下文学习 软件工程 WebApp1K

📋 核心要点

  1. 现有方法依赖自然语言提示进行代码生成,与实际软件开发中测试驱动开发(TDD)的流程存在脱节。
  2. WebApp1K基准利用测试用例作为LLM的提示和验证,更贴近真实开发流程,关注模型从测试用例直接生成代码的能力。
  3. 实验结果表明,指令遵循和上下文学习能力对于TDD至关重要,并揭示了长提示中指令丢失等性能瓶颈。

📝 摘要(中文)

本文提出了WebApp1K,这是一个新的基准,用于评估大型语言模型(LLM)在测试驱动开发(TDD)任务中的能力,其中测试用例既作为代码生成的提示,又作为验证手段。与依赖自然语言提示的传统方法不同,该基准强调LLM直接从测试用例解释和实现功能的能力,反映了真实的软件开发实践。WebApp1K包含20个应用领域中的1000个不同的挑战,评估LLM在上下文长度和多特征复杂性的约束下生成紧凑、功能性代码的能力。研究结果表明,指令遵循和上下文学习是TDD成功的关键能力,超过了一般的编码能力或预训练知识的重要性。通过对19个前沿模型的全面评估,揭示了性能瓶颈,例如长提示中的指令丢失,并提供了涵盖多个根本原因的详细错误分析。这项工作强调了TDD特定基准的实际价值,并为推进LLM在严格的、应用驱动的编码场景中的能力奠定了基础。

🔬 方法详解

问题定义:现有代码生成基准主要依赖自然语言描述作为输入,这与实际软件开发中测试驱动开发(TDD)的流程不符。TDD强调先编写测试用例,然后根据测试用例实现代码。因此,需要一个能够评估LLM从测试用例生成代码能力的基准,以更好地反映实际开发场景。现有方法的痛点在于无法有效评估LLM在TDD流程中的应用能力。

核心思路:WebApp1K的核心思路是将测试用例作为LLM的输入提示,并利用这些测试用例来验证生成的代码是否正确。通过这种方式,可以评估LLM理解和实现测试用例所描述功能的能力。这种设计更贴近实际的软件开发流程,能够更准确地评估LLM在TDD场景下的表现。

技术框架:WebApp1K基准包含以下主要组成部分:1) 1000个不同的编程挑战,涵盖20个应用领域;2) 每个挑战都包含一组测试用例,用于描述所需的功能;3) 评估指标,用于衡量生成的代码是否通过了所有测试用例。整体流程是:LLM接收测试用例作为输入,生成代码,然后使用相同的测试用例验证生成的代码。

关键创新:WebApp1K的关键创新在于它使用测试用例作为LLM的输入提示,而不是自然语言描述。这使得该基准更贴近实际的软件开发流程,并且能够更准确地评估LLM在TDD场景下的表现。此外,WebApp1K还包含大量的编程挑战,涵盖多个应用领域,这使得该基准具有很高的通用性和实用性。

关键设计:WebApp1K的关键设计包括:1) 测试用例的设计,需要确保测试用例能够清晰地描述所需的功能;2) 评估指标的选择,需要选择能够准确衡量代码质量的指标,例如代码的正确性、效率和可读性;3) 上下文长度的限制,模拟真实开发中代码长度的约束。此外,还考虑了多特征复杂性,确保挑战的多样性。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

对19个前沿模型的评估表明,指令遵循和上下文学习是TDD成功的关键能力,超过了一般的编码能力或预训练知识。实验还揭示了长提示中的指令丢失等性能瓶颈。例如,某些模型在处理长上下文时,对测试用例的理解和执行能力会显著下降。此外,错误分析表明,代码生成错误的原因多种多样,包括对测试用例的误解、代码逻辑错误和语法错误等。

🎯 应用场景

WebApp1K基准的潜在应用领域包括自动化软件开发、代码生成辅助工具和LLM在软件工程领域的应用研究。该基准可以用于评估和改进LLM在TDD场景下的代码生成能力,从而提高软件开发的效率和质量。未来,可以基于WebApp1K开发更智能的代码生成工具,帮助开发者更快地完成软件开发任务。

📄 摘要(原文)

We introduce WebApp1K, a novel benchmark for evaluating large language models (LLMs) in test-driven development (TDD) tasks, where test cases serve as both prompt and verification for code generation. Unlike traditional approaches relying on natural language prompts, our benchmark emphasizes the ability of LLMs to interpret and implement functionality directly from test cases, reflecting real-world software development practices. Comprising 1000 diverse challenges across 20 application domains, the benchmark evaluates LLMs on their ability to generate compact, functional code under the constraints of context length and multi-feature complexity. Our findings highlight instruction following and in-context learning as critical capabilities for TDD success, surpassing the importance of general coding proficiency or pretraining knowledge. Through comprehensive evaluation of 19 frontier models, we reveal performance bottlenecks, such as instruction loss in long prompts, and provide a detailed error analysis spanning multiple root causes. This work underscores the practical value of TDD-specific benchmarks and lays the foundation for advancing LLM capabilities in rigorous, application-driven coding scenarios.