ProjectTest
收藏arXiv2025-02-10 更新2025-02-26 收录
下载链接:
http://arxiv.org/abs/2502.06556v1
下载链接
链接失效反馈官方服务:
资源简介:
ProjectTest是一个针对单元测试生成的项目级基准数据集,由伊利诺伊大学芝加哥分校提出。该数据集包含Python、Java和JavaScript三种编程语言各20个中等规模、高质量的项目。数据集通过从GitHub上精心筛选符合特定标准的项目构建而成,每个项目包含多个文件和依赖关系。该数据集旨在为项目级单元测试生成提供更大的高质量项目集合,并进行前沿LLM在单元测试生成方面的全面错误分析。
ProjectTest is a project-level benchmark dataset for unit test generation, proposed by the University of Illinois Chicago. It contains 20 medium-sized, high-quality projects for each of the three programming languages: Python, Java, and JavaScript. The dataset is constructed by meticulously screening eligible projects that meet specific criteria from GitHub, with each project encompassing multiple source files and dependency relationships. This dataset is intended to provide a larger corpus of high-quality projects for project-level unit test generation, and facilitate comprehensive error analysis of state-of-the-art LLMs in the domain of unit test generation.
提供机构:
伊利诺伊大学芝加哥分校
创建时间:
2025-02-10
搜集汇总
数据集介绍

构建方式
ProjectTest数据集的构建采用了严格的筛选标准,从GitHub平台上收集了具有代表性的项目,覆盖了Python、Java和JavaScript三种编程语言。每个语言包含了20个中等规模、高质量的项目,每个项目都有多个文件和依赖关系,且代码行数不超过1600行,以便适应大多数代码语言模型的输入长度限制。为了确保数据集的质量,所选项目都具有较高的星星和分支数量,这表明了社区对其的认可和广泛使用。此外,对于一些规模较大的项目,还从中提取了较小的自包含项目,以满足输入长度的限制。
使用方法
使用ProjectTest数据集进行LLM单元测试生成能力的评估时,可以采用三种场景:原生单元测试生成、手动修复编译和级联错误后的单元测试生成以及LLM自我修复生成的单元测试。评估指标包括编译率、正确率和覆盖率。在评估过程中,可以首先输入整个项目和精心设计的提示,然后从LLM的响应中提取原生单元测试。接下来,手动修复编译和级联错误,并重新评估修复后的单元测试。最后,可以探索LLM的自我修复能力,通过提供错误信息和对话历史来评估其在生成项目级单元测试时的错误修复能力。
背景与挑战
背景概述
在软件开发的领域中,单元测试对于识别漏洞并确保代码的稳定性和可维护性至关重要。然而,编写单元测试是一项耗时的工作,通常占开发者软件开发时间的约15.8%(Daka和Fraser,2014)。因此,自动测试用例生成方法,如基于搜索(Fraser和Arcuri,2011;Harman和McMinn,2009)、基于约束(Xiao等,2013)和基于随机(Pacheco等,2007)的方法,已被提出以创建单元测试。然而,生成的单元测试通常比手动编写的测试可读性差,并且仅限于特定类型的函数(Grano等,2018)。最近,大型语言模型(LLMs)已成为游戏规则改变者,显著加快了单元测试生成,并以极少的努力提高了可读性和泛化能力(Siddiq等,2024;Xie等,2023)。鉴于LLMs在单元测试上的快速采用,LLM单元测试生成能力的评估似乎落后了。以前的单元测试生成评估基准主要关注函数级、类级或文件级(Chen等,2021;Du等,2023;Wang等,2024;Jain等,2024a)代码。然而,项目级代码更能代表现实世界的场景和实际需求。项目级代码库中不同文件之间的复杂依赖关系使得单元测试生成更具挑战性。现有的唯一探索项目级单元测试生成的基准是DevBench(Li等,2024)。然而,由于其广泛的关注点,每个语言的单元测试生成项目数量很少(例如,Java为5个,C和C++为5个),质量也参差不齐。其中一半的单元测试生成项目难以追踪,大多数可识别的项目拥有少于250个Star和少于50个Fork。DevBench也没有对前沿LLMs在单元测试生成方面的错误类型、潜力或自我修复能力进行全面分析。因此,我们提出了一个新的项目级单元测试生成评估基准——ProjectTest,为项目级单元测试生成提供更大的、高质量的项目集,并对其进行更全面的错误分析。ProjectTest涵盖了三种编程语言:Python、Java和JavaScript。对于每种编程语言,我们从GitHub构建了20个项目。ProjectTest采用了清晰的筛选标准来选择项目。它包括中等大小的项目,它们具有多个文件和文件之间的依赖关系。每个项目都少于1600行代码,这符合大多数代码语言模型的最大输入长度。通过Star和Fork的数量确保了质量。我们在ProjectTest上评估了九种前沿LLMs,如Claude-3.5-Sonnet(Anthropic,2024)、Gemini-1.5Pro(Team等,2024b)和GPT-o1,并进行了全面的错误分析。我们发现所有测试的前沿LLMs在Python和Java上的ProjectTest中表现出中等性能,突出了ProjectTest的难度。我们还进行了一项彻底的错误分析,结果显示即使是Claude-3.5-Sonnet等前沿LLMs也存在着显著的简单错误,包括编译错误和级联错误。受此观察的启发,我们进一步在手动错误修复和自我错误修复场景下评估了所有前沿LLMs,以评估它们配备错误修复机制时的潜力。
当前挑战
ProjectTest数据集在单元测试生成领域面临着一些挑战。首先,现有的评估基准主要关注函数级、类级或文件级代码,而项目级代码库更具有现实意义和挑战性。其次,项目级代码库中不同文件之间的复杂依赖关系使得单元测试生成更具挑战性。此外,即使是前沿LLMs也存在着显著的简单错误,如编译错误和级联错误。最后,LLMs的自我修复能力仍然落后于人工修复的质量和可靠性。这些挑战需要进一步研究和改进,以提高LLMs在项目级单元测试生成方面的能力和效率。
常用场景
经典使用场景
ProjectTest数据集为单元测试生成提供了一个基于项目级别的评估基准,涵盖了Python、Java和JavaScript三种编程语言。该数据集的特点是包含了每个语言20个中等规模和高质量的工程项目。通过对九种前沿大型语言模型在ProjectTest上的评估,结果表明,尽管这些模型在Python和Java上的表现尚可,但ProjectTest的难度仍然很大。此外,通过错误分析,我们发现即使是前沿的LLM模型,如Claude-3.5Sonnet,也存在显著的简单错误,包括编译错误和级联错误。为了解决这个问题,我们在手动错误修复和自我错误修复的情景下进一步评估了所有前沿LLM,以评估它们在配备错误修复机制时的潜力。
解决学术问题
ProjectTest数据集解决了现有单元测试生成评估基准的局限性,即它们主要关注函数级、类级或文件级代码,而不是更具实践性和挑战性的项目级代码库。此外,该数据集还解决了现有单元测试生成方法的不足,即生成的单元测试通常不如手动编写的测试易读,并且限制在特定类型的函数。通过引入ProjectTest,研究者可以更好地评估LLM在单元测试生成方面的能力,并探索LLM在错误修复方面的潜力,从而推动单元测试生成领域的研究。
实际应用
ProjectTest数据集的实际应用场景包括但不限于软件开发、软件测试和质量保证。它可以帮助开发人员快速生成单元测试,提高软件开发的效率和质量。此外,该数据集还可以用于评估和选择最适合特定项目的LLM模型,从而优化单元测试生成的过程。最后,ProjectTest还可以用于研究和开发新的单元测试生成方法,以进一步提高单元测试生成的效率和准确性。
数据集最近研究
最新研究方向
ProjectTest数据集的最新研究方向主要聚焦于项目级单元测试生成基准,以及错误修复机制对单元测试生成的影响。该研究旨在解决现有评估基准主要关注函数级或类级代码,而忽略了更实际和具有挑战性的项目级代码库的问题。ProjectTest数据集涵盖了Python、Java和JavaScript三种编程语言,每个语言包含20个中等规模和高质量的项目。研究评估了九种前沿的LLMs在ProjectTest上的表现,发现所有测试的LLMs在Python和Java上表现一般,突显了ProjectTest的难度。此外,研究还进行了全面错误分析,发现即使是前沿的LLMs,如Claude-3.5Sonnet,也存在显著的简单错误,包括编译错误和级联错误。基于此观察,研究进一步评估了所有前沿LLMs在手动错误修复和自我错误修复场景下的表现,以评估它们在配备错误修复机制时的潜力。
相关研究论文
- 1ProjectTest: A Project-level Unit Test Generation Benchmark and Impact of Error Fixing Mechanisms伊利诺伊大学芝加哥分校 · 2025年
以上内容由遇见数据集搜集并总结生成



