赞
踩
大语言模型(LLM)在自然语言处理中表现出了卓越的性能,包括问答、翻译、文本生成并且能够处理大规模数据集,并为通用人工智能开辟了新的可能性。
在代码生成领域,LLM已被用于各种编码的相关任务,包括代码生成、代码评审以及单元测试等任务。
本文以LLM生成单元测试用例为切入点,对LLM生成测试用例的有效性和方法进行了简要探讨。
软件测试是一项至关重要的工作,是确保软件产品质量和可靠性的基石。软件测试有助于在开发生命周期的早期识别和解决问题,从而降低维护成本,从而防止出现更严重的复杂情况。
单元测试的目标是验证每个程序单元是否按预期工作并满足指定的要求。单元的意思是指一段可以独立分离和检查的代码。像写代码一样,单元测试不仅要正确,还要满足其他质量属性,例如可维护性和可读性。
软件测试通常会使用软件测试工具,通过软件测试工具来生成测试用例。目前测试工具的研究已经取得了显著的进展,尤其是通过基于搜索、约束和随机等技术生成单元测试的方法,但仍然存在一些挑战,如生成的测试覆盖率和可读性无法完全满足人们的需求,同时全面覆盖仍然是一个难以实现的目标。在面对这些局限性时,研究人员一直在积极探索创新技术,以提高软件测试任务的效率。在这方面,大型语言模型(Large Language Models,LLM)是目前最有前途的方向之一。
论文《An Empirical Study of Using Large Language Models for Unit Test Generation》为软件测试领域的进展提供了重要的实证研究。该研究以三种生成模型(StarCoder、Codex和GPT-3.5-Turbo)为对象,分析它们在单元测试生成任务中的性能。具体而言,研究采用了两个基准测试,分别是HumanEva和Evosuite SF110(Java版本),并通过对编译率、测试正确性以及覆盖率等方面进行评估,深入探讨了这些LLM在生成测试用例方面的有效性。
第一步
论文首先对焦点方法(focal method)进行检索和排除:
E1:仅检索非静态方法,且只在公共类中进行检索;
E2:排除以is开头、不带参数且返回布尔类型;
E3:排除set开头;
E4:以get开头且不带参数;
E5:覆盖java.lang.Object(toString(),hashCode()等);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。