文章摘要
【关 键 词】 unit测试、程序分片、代码覆盖、自然语言处理、软件质量
在软件开发过程中,单元测试是确保代码质量的关键环节,它验证软件中的最小可测试单元是否按预期工作。然而,对于复杂函数的测试,传统的大语言模型(LLM)在生成高覆盖率的测试样例集方面存在局限性。为了解决这一问题,北京大学李戈教授团队提出了一种新的方法,通过程序分片思想,将复杂函数拆解为简单片段,然后利用大模型为每个片段生成测试样例,从而提高整体的测试覆盖率。
该方法的核心在于程序分片,即将程序根据语义划分为多个解决问题的阶段,每个阶段对应一段代码。这种方法的优势在于,大模型在生成测试样例时只需关注一个片段,降低了分析难度,同时有助于大模型掌握代码执行的中间状态。HITS(High-coverage LLM-based Unit Test Generation via Method Slicing)利用大模型的自然语言处理能力,通过上下文学习方法调用大模型,实现了程序分片的效果。
生成测试样例的过程包括三个步骤:首先分析片段的输入,然后构建prompt指导大模型生成初始测试样例,最后通过规则后处理和大模型self-debug调整测试样例以确保其正确运行。这一过程充分利用了大模型在提取外部输入和理解代码执行环境方面的能力。
实验验证表明,HITS在提升代码覆盖率方面表现优异。研究团队使用gpt-3.5-turbo作为HITS调用的大模型,在Java项目中的复杂函数上进行了测试,结果显示HITS在代码覆盖率上明显优于其他基于大模型的单元测试方法和evosuite。
通过样例分析,研究团队展示了分片方法如何提升代码覆盖率。在一个案例中,基线方法未能覆盖某个代码片段,而HITS通过分析外部变量并构建相应的测试样例,成功实现了对该代码片段的覆盖。这种方法不仅提高了单元测试的覆盖率,还增强了系统的可靠性和稳定性,从而提升了软件的整体质量。
HITS的提出,为软件测试领域带来了新的视角和解决方案。其简洁直接的实施方法,有望在未来的实际场景中帮助团队更早地发现并修正开发中的错误,进一步提升软件交付的质量。
原文和模型
【原文链接】 阅读原文 [ 1991字 | 8分钟 ]
【原文作者】 AIGC开放社区
【摘要模型】 moonshot-v1-32k
【摘要评分】 ★★★★☆