HardTests: Synthesizing High-Quality Test Cases for LLM Coding

📄 arXiv: 2505.24098v1 📥 PDF

作者: Zhongmou He, Yee Man Choi, Kexun Zhang, Jiabao Ji, Junting Zhou, Dejia Xu, Ivan Bercovich, Aidan Zhang, Lei Li

分类: cs.CL

发布日期: 2025-05-30

🔗 代码/项目: PROJECT_PAGE


💡 一句话要点

HARDTESTGEN:利用LLM合成高质量测试用例,提升代码生成模型验证精度

🎯 匹配领域: 支柱二:RL算法与架构 (RL & Architecture) 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码生成 大型语言模型 测试用例生成 程序验证 HARDTESTS数据集

📋 核心要点

  1. 大型语言模型推理中,验证器至关重要,但对于复杂编程问题,难以获得可靠的验证器。
  2. HARDTESTGEN利用LLM生成高质量测试用例,构建了包含4.7万个问题的HARDTESTS数据集。
  3. 实验表明,HARDTESTGEN生成的测试用例在精度和召回率上均优于现有测试集,并能有效提升下游代码生成性能。

📝 摘要(中文)

本文提出了一种名为HARDTESTGEN的流程,用于利用大型语言模型(LLM)合成高质量的测试用例。该流程用于构建一个全面的竞争性编程数据集HARDTESTS,其中包含4.7万个问题和合成的高质量测试用例。与现有测试用例相比,HARDTESTGEN生成的测试用例在评估LLM生成的代码时,精度提高了11.3个百分点,召回率提高了17.5个百分点。对于更难的问题,精度提升甚至可以高达40个百分点。HARDTESTS也被证明在模型训练方面更有效,这通过下游代码生成性能来衡量。该数据集和合成流程将在https://leililab.github.io/HardTests/开源。

🔬 方法详解

问题定义:现有的大型语言模型(LLM)在代码生成任务中表现出色,但对生成的代码进行验证仍然是一个挑战。特别是对于复杂的编程问题,LLM生成的错误代码可能难以被现有的测试用例检测出来。人工编写高质量的边缘测试用例成本高昂且耗时,因此需要一种自动化的方法来合成高质量的测试用例,以更有效地验证LLM生成的代码。

核心思路:HARDTESTGEN的核心思路是利用LLM本身来生成测试用例。具体来说,该方法利用LLM的生成能力,根据给定的编程问题,生成多样化的、具有挑战性的测试用例。通过精心设计的prompt和约束条件,引导LLM生成能够覆盖各种边界情况和特殊情况的测试用例,从而提高测试的有效性。

技术框架:HARDTESTGEN的整体流程包括以下几个主要阶段: 1. 问题理解:分析给定的编程问题,提取关键信息和约束条件。 2. 测试用例生成:利用LLM生成候选测试用例,包括输入数据和期望的输出结果。 3. 测试用例过滤与优化:对生成的测试用例进行过滤和优化,去除无效或冗余的测试用例,并对测试用例进行增强,以提高其覆盖率和有效性。 4. 测试用例评估:使用生成的测试用例评估LLM生成的代码,并根据评估结果调整测试用例生成策略。

关键创新:HARDTESTGEN的关键创新在于利用LLM的生成能力来自动合成高质量的测试用例。与传统的测试用例生成方法相比,HARDTESTGEN能够生成更具挑战性和多样性的测试用例,从而更有效地检测LLM生成的代码中的错误。此外,HARDTESTGEN还能够根据评估结果动态调整测试用例生成策略,从而不断提高测试的有效性。

关键设计:HARDTESTGEN的关键设计包括: 1. Prompt设计:设计有效的prompt,引导LLM生成高质量的测试用例。 2. 约束条件:设置约束条件,限制LLM生成的测试用例的范围,避免生成无效或冗余的测试用例。 3. 过滤与优化策略:设计有效的过滤和优化策略,去除无效或冗余的测试用例,并对测试用例进行增强。 4. 评估指标:选择合适的评估指标,评估测试用例的有效性,并根据评估结果调整测试用例生成策略。

📊 实验亮点

实验结果表明,HARDTESTGEN生成的测试用例在评估LLM生成的代码时,精度提高了11.3个百分点,召回率提高了17.5个百分点。对于更难的问题,精度提升甚至可以高达40个百分点。HARDTESTS也被证明在模型训练方面更有效,这通过下游代码生成性能来衡量。这些结果表明,HARDTESTGEN能够有效地合成高质量的测试用例,并显著提高LLM代码生成模型的性能。

🎯 应用场景

HARDTESTGEN及其生成的数据集HARDTESTS可广泛应用于LLM代码生成模型的训练、评估和改进。该方法可以帮助开发者更有效地发现和修复LLM生成的代码中的错误,提高代码质量和可靠性。此外,HARDTESTS数据集可以作为LLM代码生成模型训练的benchmark,促进相关研究的进展。

📄 摘要(原文)

Verifiers play a crucial role in large language model (LLM) reasoning, needed by post-training techniques such as reinforcement learning. However, reliable verifiers are hard to get for difficult coding problems, because a well-disguised wrong solution may only be detected by carefully human-written edge cases that are difficult to synthesize. To address this issue, we propose HARDTESTGEN, a pipeline for high-quality test synthesis using LLMs. With this pipeline, we curate a comprehensive competitive programming dataset HARDTESTS with 47k problems and synthetic high-quality tests. Compared with existing tests, HARDTESTGEN tests demonstrate precision that is 11.3 percentage points higher and recall that is 17.5 percentage points higher when evaluating LLM-generated code. For harder problems, the improvement in precision can be as large as 40 points. HARDTESTS also proves to be more effective for model training, measured by downstream code generation performance. We will open-source our dataset and synthesis pipeline at https://leililab.github.io/HardTests/.