A System for Automated Unit Test Generation Using Large Language Models and Assessment of Generated Test Suites

📄 arXiv: 2408.07846v2 📥 PDF

作者: Andrea Lops, Fedelucio Narducci, Azzurra Ragone, Michelantonio Trizio, Claudio Bartolini

分类: cs.SE, cs.AI

发布日期: 2024-08-14 (更新: 2024-08-16)

期刊: 2025 IEEE International Conference on Software Testing, Verification and Validation Workshops (ICSTW)

DOI: 10.1109/ICSTW64639.2025.10962454


💡 一句话要点

AgoneTest:一个基于大语言模型的自动化单元测试生成与评估系统

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

关键词: 单元测试生成 大型语言模型 自动化测试 软件测试 Java项目

📋 核心要点

  1. 现有单元测试生成方法难以应对真实软件的复杂性,且评估过程依赖手动集成,效率低下。
  2. AgoneTest系统通过类级别测试代码生成,并自动化测试生成到评估的整个流程,提升效率。
  3. 论文构建新数据集,对比人工编写与LLM生成测试,并提出详细的测试质量评估方法。

📝 摘要(中文)

单元测试是软件测试生命周期中最基础的环节,对于确保软件正确性至关重要。设计和创建单元测试既耗时又费力,因此非常适合自动化。最近,大型语言模型(LLM)已被应用于软件开发的各个方面,包括单元测试生成。尽管已经存在一些评估LLM在测试代码生成能力方面的实证研究,但它们主要集中在简单场景中,例如直接生成单个方法的单元测试。这些评估通常涉及独立且小规模的测试单元,对LLM在实际软件开发场景中的性能提供有限的视角。此外,之前的研究没有以适合实际应用的规模来解决这个问题。生成的单元测试通常通过手动集成到原始项目中进行评估,这个过程限制了执行的测试数量并降低了整体效率。为了解决这些差距,我们开发了一种用于生成和评估更具实际复杂性的测试套件的方法。我们的方法侧重于类级别的测试代码生成,并自动化从测试生成到测试评估的整个过程。在这项工作中,我们提出了AgoneTest:一个用于生成Java项目测试套件的自动化系统,以及一个用于评估生成测试套件的全面且有原则的方法。从最先进的数据集(即Methods2Test)开始,我们构建了一个新的数据集,用于比较人工编写的测试与LLM生成的测试。我们的主要贡献包括一个可扩展的自动化软件系统、一个新的数据集以及一个用于评估测试质量的详细方法。

🔬 方法详解

问题定义:论文旨在解决现有单元测试生成方法在处理真实软件项目时面临的挑战,包括难以生成复杂场景下的测试用例,以及评估过程依赖手动集成导致效率低下的问题。现有方法通常侧重于简单方法的单元测试,缺乏对类级别测试的有效支持,并且评估规模受限。

核心思路:论文的核心思路是利用大型语言模型(LLM)的强大代码生成能力,构建一个自动化系统,能够生成类级别的测试套件,并提供全面的评估方法。通过自动化测试生成和评估流程,提高效率,并更真实地反映LLM在实际软件开发场景中的性能。

技术框架:AgoneTest系统包含以下主要模块:1) 测试用例生成模块:利用LLM生成Java项目的类级别测试代码。2) 测试套件构建模块:将生成的测试用例组织成完整的测试套件。3) 测试评估模块:自动化执行测试套件,并根据预定义的指标评估测试质量。4) 数据集构建模块:构建包含人工编写和LLM生成测试用例的数据集,用于对比评估。

关键创新:该论文的关键创新在于:1) 提出了一个可扩展的自动化软件系统AgoneTest,用于生成和评估Java项目的类级别测试套件。2) 构建了一个新的数据集,用于比较人工编写的测试与LLM生成的测试。3) 提出了一个详细且有原则的测试质量评估方法,能够更全面地评估LLM在单元测试生成方面的性能。

关键设计:论文中没有明确提及关键的参数设置、损失函数或网络结构等技术细节。但是,可以推断,LLM的选择和prompt的设计是影响测试生成质量的关键因素。此外,测试评估指标的选择,例如代码覆盖率、变异测试得分等,也会影响评估结果的可靠性。

🖼️ 关键图片

fig_0

📊 实验亮点

论文构建了一个新的数据集,并提出了AgoneTest系统,能够自动化生成和评估Java项目的类级别测试套件。通过对比人工编写和LLM生成的测试,可以更全面地评估LLM在单元测试生成方面的性能。具体性能数据和提升幅度需要在实验部分进一步分析。

🎯 应用场景

该研究成果可应用于软件开发过程的自动化测试环节,帮助开发人员快速生成和评估单元测试,提高软件质量和开发效率。尤其适用于大型Java项目的自动化测试,并可扩展到其他编程语言和测试框架。未来,该系统可以集成到CI/CD流程中,实现持续自动化测试。

📄 摘要(原文)

Unit tests represent the most basic level of testing within the software testing lifecycle and are crucial to ensuring software correctness. Designing and creating unit tests is a costly and labor-intensive process that is ripe for automation. Recently, Large Language Models (LLMs) have been applied to various aspects of software development, including unit test generation. Although several empirical studies evaluating LLMs' capabilities in test code generation exist, they primarily focus on simple scenarios, such as the straightforward generation of unit tests for individual methods. These evaluations often involve independent and small-scale test units, providing a limited view of LLMs' performance in real-world software development scenarios. Moreover, previous studies do not approach the problem at a suitable scale for real-life applications. Generated unit tests are often evaluated via manual integration into the original projects, a process that limits the number of tests executed and reduces overall efficiency. To address these gaps, we have developed an approach for generating and evaluating more real-life complexity test suites. Our approach focuses on class-level test code generation and automates the entire process from test generation to test assessment. In this work, we present AgoneTest: an automated system for generating test suites for Java projects and a comprehensive and principled methodology for evaluating the generated test suites. Starting from a state-of-the-art dataset (i.e., Methods2Test), we built a new dataset for comparing human-written tests with those generated by LLMs. Our key contributions include a scalable automated software system, a new dataset, and a detailed methodology for evaluating test quality.