基于大模型的测试断言生成技术_79页_9mb
报告摘要
2024 AI+研发数字峰会总结:基于大模型的测试断言生成技术
核心内容
本次峰会聚焦于基于大模型的测试断言生成技术,探讨了如何利用大语言模型(LLMs)提升单元测试的生成与修复效率,从而促进企业研发过程的降本增效。会议中,南京大学的房春荣副教授分享了其团队研发的TestART方法,以及RetriGen断言生成框架,旨在解决现有测试生成方法在正确性、覆盖率和鲁棒性方面的不足。
主要观点
1. 单元测试生成与修复的挑战
- 生成无效测试用例:LLMs在上下文不足时可能生成无效测试用例,导致编译错误。
- 缺乏测试反馈和覆盖率信息:现有方法难以提供详细的测试反馈,影响测试用例的充分性。
- 重复抑制问题:LLMs可能陷入重复生成错误用例的循环,降低效率。
2. TestART方法:基于提示引导和动态反馈的测试生成与修复
- 生成阶段:通过上下文预处理和提示设计,利用LLMs生成多样化的测试用例,包括基本功能和边界条件测试。
- 修复阶段:引入模板修复策略,包括导包错误修复、布尔类断言修复、相等类断言修复、插入异常处理和增加捕获语句。这些修复策略显著提高了测试用例的通过率和覆盖率。
- 提示注入优化:利用修复后的测试用例作为提示,减少LLMs的重复错误,提升测试生成质量。
- 覆盖信息反馈:通过计算测试用例的覆盖率并反馈给LLMs,引导其生成更全面的测试用例。
3. RetriGen:基于混合检索增强的断言生成
- 混合检索器:结合基于token和基于Embedding的检索方法,提升断言的语义相关性。
- 断言生成器:使用CodeT5作为基础模型,结合检索到的断言生成新的断言,通过序列到序列学习机制进行优化。
- 损失函数:采用交叉熵损失函数,最小化预测断言与真实断言之间的差异。
关键信息
1. TestART的实验结果
- TestART在Defects4J数据集上表现优异,通过率比基线方法显著提升:
- 相比ChatGPT-3.5,整体通过率提升 $18.50%$
- 相比ChatGPT-4.0,整体通过率提升 $18.79%$
- 修复模块对通过率的提升贡献最大,提高 $28.64%$
- 通过测试反馈和迭代机制,进一步提升了覆盖率。
2. LLM在断言生成中的表现
- 准确率:在Dataold数据集上,LLMs的准确率范围为 $51.82% \sim 58.71%$,其中CodeT5表现最佳。
- 错误检测能力:LLMs在检测真实漏洞方面表现突出,平均检测到32个漏洞,比最先进的技术EDTAS高出52.38%。
- 候选断言数量影响:随着候选断言数量的增加,准确率显著提升,特别是CodeT5在Top-50时达到 $61.20%$。
- 断言类型影响:CodeT5在NotNull、False、Null类型断言上表现最佳,但Equals和ArrayEquals类型准确率较低。
3. 混合检索增强方法EASE
- EASE方法:通过结合检索到的断言与LLMs生成,进一步提升断言生成准确率。
- 实验结果:CodeT5在EASE方法下准确率从 $58.71%$ 提升到 $63.37%$,其他LLMs也有显著提升。
4. RetriGen框架
- 混合检索器:使用Jaccard相似度和余弦相似度进行断言检索,通过公式 $Sim(FT_i, FT_j) = Jac(FT_i, FT_j) + \lambda \cdot Cos(FT_i, FT_j)$,综合评估词汇和语义相似性。
- 断言生成器:基于CodeT5,通过序列到序列学习生成断言,提高生成质量。
结论与展望
1. 结论
- TestART和RetriGen方法在单元测试生成和断言生成方面表现出色,显著提高了测试用例的通过率和覆盖率。
- LLMs在断言生成任务中具有良好的潜力,尤其是在结合检索信息后,其性能得到进一步提升。
- 混合检索增强方法(如EASE)能有效解决LLMs在断言生成中的不足,提高生成准确率。
2. 展望
- 未来研究可以探索多断言过滤方法,进一步优化生成效率。
- 需要更多真实场景数据来提升模型的泛化能力。
- 推动LLMs与传统测试方法的结合,以实现更全面的测试生成与修复。
参考数据
1. Defects4J数据集
- 包含来自五个Java项目的8192个焦点方法。
- 基线方法包括EvoSuite、A3Test、ChatGPT、ChatUniTest。
2. LLMs比较
- CodeBERT、GraphCodeBERT、UniXcoder、CodeT5、CodeGPT均被评估。
- CodeT5在多个指标上表现最优,尤其在断言类型和候选数量上。
3. 实验结果
- TestART在Defects4J数据集上整体通过率达到 $78.55%$,优于其他方法。
- RetriGen在Dataold和Data new数据集上准确率分别达到 $63.37%$ 和 $61.66%$。
通过上述方法和技术,AI驱动的单元测试生成和断言生成在提高测试效率和质量方面展现出巨大潜力。
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载