研究背景
单元测试是软件开发中广泛接受的实践,其核心在于断言的生成。然而,手动编写断言费时费力,现有方法存在生成无效用例、缺乏测试和覆盖反馈、重复抑制等问题。此外,自动断言生成方法也面临训练数据有限、模型架构局限、检索匹配限制等挑战。
单元测试生成和修复
TestART方法结合了大模型的语义理解和代码生成能力,通过提示引导和动态反馈生成和修复单元测试。该方法首先对被测代码进行预处理,然后利用大模型生成初始测试用例,并进行初步检查和修正。修复阶段通过模板修复和模型修复解决生成的测试用例中的错误,最后利用覆盖信息反馈给大模型,指导生成下一轮的增量测试用例。实验结果表明,TestART在通过率和覆盖率上都明显优于现有方法,如ChatGPT和EvoSuite。
单元测试的断言问题
自动测试生成工具缺乏语义理解能力,难以检测真实缺陷。现有自动断言生成方法存在训练语料有限、模型架构局限、检索匹配限制等问题。
面向单元测试场景的大模型断言生成能力探索
研究发现,LLMs在自动化断言生成中能够达到显著的表现,CodeT5在多个数据集上表现最佳。EASE方法结合检索到的断言和LLMs生成新的断言,进一步提升了LLMs的断言生成准确率。
基于混合检索增强的单元测试断言生成
RetriGen方法结合了基于token的检索器和基于Embedding的检索器,同时考虑了代码的词汇和语义相似性,并使用CodeT5作为基础模型生成断言。实验结果表明,RetriGen在准确性和CodeBLEU方面显著超过了所有基线。
基于检索生成协同增强的单元测试断言生成
AG-RAG方法利用大模型的代码理解和生成能力设计断言检索器和生成器,并通过联合训练策略优化模型性能。实验结果表明,AG-RAG在三个指标上显著优于所有以前的AG方法。
应用验证
TestART工具在实际应用中有效增强了现有的测试框架,显著提高了代码覆盖率和测试质量。
总结与展望
大模型在自动生成单元测试和断言生成方面展现了显著的潜力。未来研究方向包括模型优化、集成增强、领域适应性、自动化反馈循环和大规模应用。