Skip to main content
QUICK REVIEW

[论文解读] Unit Test Generation using Generative AI : A Comparative Performance Analysis of Autogeneration Tools

Shreya Bhatia, Tarushi Gandhi|arXiv (Cornell University)|Dec 17, 2023
Energy Load and Power Forecasting被引用 4
一句话总结

本研究评估了ChatGPT在生成Python代码单元测试方面的有效性,将其与基于搜索的工具Pynguin在过程式、函数式和面向对象类代码上进行比较。结果表明,ChatGPT在测试覆盖率方面与Pynguin相当,通过提示词迭代可提升性能,但其约有三分之一的断言存在错误;其遗漏语句与Pynguin的遗漏语句重叠极少,表明两种工具具有潜在互补性,可协同提升测试覆盖率。

ABSTRACT

Generating unit tests is a crucial task in software development, demanding substantial time and effort from programmers. The advent of Large Language Models (LLMs) introduces a novel avenue for unit test script generation. This research aims to experimentally investigate the effectiveness of LLMs, specifically exemplified by ChatGPT, for generating unit test scripts for Python programs, and how the generated test cases compare with those generated by an existing unit test generator (Pynguin). For experiments, we consider three types of code units: 1) Procedural scripts, 2) Function-based modular code, and 3) Class-based code. The generated test cases are evaluated based on criteria such as coverage, correctness, and readability. Our results show that ChatGPT's performance is comparable with Pynguin in terms of coverage, though for some cases its performance is superior to Pynguin. We also find that about a third of assertions generated by ChatGPT for some categories were incorrect. Our results also show that there is minimal overlap in missed statements between ChatGPT and Pynguin, thus, suggesting that a combination of both tools may enhance unit test generation performance. Finally, in our experiments, prompt engineering improved ChatGPT's performance, achieving a much higher coverage.

研究动机与目标

  • 评估大型语言模型(特别是ChatGPT)在生成Python程序单元测试方面的有效性。
  • 从测试覆盖率、正确性和可读性角度,对比ChatGPT与最先进的基于搜索的单元测试生成工具Pynguin的性能表现。
  • 探究迭代提示是否能提升ChatGPT生成的测试用例的质量与覆盖率。
  • 评估ChatGPT生成的断言的正确性,并判断其是否与代码预期功能一致。
  • 探索将基于大语言模型(LLM)与基于搜索的方法相结合,以提升整体单元测试生成性能的潜力。

提出的方法

  • 研究采用了一个精心筛选的60个Python项目数据集,每类20个:过程式脚本、函数式模块化代码和类式模块化代码。
  • 针对每个项目,基于圈复杂度、函数数量和依赖关系指标,选取100–300行的核心模块。
  • 通过向ChatGPT提供代码模块进行提示,生成单元测试,并与Pynguin生成的测试进行对比。
  • 对ChatGPT应用迭代提示,将前一轮遗漏的语句反馈回去,以提升覆盖率。
  • 使用语句覆盖率、断言正确性及可读性等指标评估测试质量。
  • 通过合并ChatGPT与Pynguin的测试套件,评估两种方法结合后可能带来的协同覆盖率增益。

实验结果

研究问题

  • RQ1RQ1:在覆盖率、正确性和可读性方面,ChatGPT与Pynguin在生成单元测试方面的表现如何?
  • RQ2RQ2:ChatGPT生成的测试用例在多次提示迭代后,其有效性是否得到提升?
  • RQ3RQ3:ChatGPT生成的断言正确性如何?其正确断言占多大比例,且与代码预期功能是否一致?
  • RQ4RQ4:结合使用ChatGPT与Pynguin是否能从覆盖率和有效性角度提升整体单元测试生成性能?

主要发现

  • ChatGPT在所有代码类别中均实现了与Pynguin相当的语句覆盖率,平均覆盖率之间无统计学显著差异。
  • 迭代提示显著提升了ChatGPT在函数式和类式代码中的覆盖率,四轮迭代后达到饱和,但在过程式脚本中未观察到改进。
  • 约三分之一的ChatGPT生成断言存在错误,且错误率从类别1(过程式)到类别3(类式)代码逐步降低。
  • ChatGPT与Pynguin遗漏的语句重叠极少,表明其覆盖率具有互补性,结合使用可显著提升整体测试覆盖率。
  • 本研究证实,结合基于大语言模型与基于搜索的方法可实现更高覆盖率,支持在测试生成流水线中集成两种工具。
  • ChatGPT因侧重自然语言理解,可能实现高覆盖率但断言不准确,提示未来基于大语言模型的测试生成需引入语义感知的断言生成机制。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。