深度报告-20250320-中智凯灵_北京_科技-基于大模型的测试断言生成技术_79页_9mb
报告摘要
2024 AI+研发数字峰会总结
核心内容
本次2024 AI+研发数字峰会上,房春荣教授从南京大学分享了基于大模型的测试断言生成技术,重点探讨了如何利用大型语言模型(LLMs)提升单元测试的生成与修复能力,并通过实验验证了其有效性。
主要观点
- 单元测试的重要性:单元测试是被广泛接受的开发实践,是保证代码质量的重要手段。
- LLMs在测试生成中的应用:LLMs在理解语义和生成代码方面表现出色,但其生成的测试用例可能包含编译错误和运行时错误。
- 测试生成与修复的结合:通过引入修复机制,可以有效提升生成测试用例的正确性与覆盖率。
- 检索增强的断言生成:结合传统信息检索和LLMs的语义理解能力,可以提升断言生成的准确性与全面性。
- 断言类型与性能影响:不同类型的断言对LLMs的生成效果有显著影响,其中CodeT5在多种断言类型中表现最佳。
关键信息
单元测试生成与修复
- TestART方法:TestART是一个基于提示引导和动态反馈的测试用例生成和修复方法,结合了LLMs的生成能力和修复模板的修复能力。
- 生成阶段:
- 代码预处理:清理与压缩代码,提取关键信息以构建模型提示。
- 提示设计:设计包含代码上下文、预期行为和测试条件的提示,以引导LLMs生成多样化的测试用例。
- 错误处理:初步检查和修正生成的测试用例,标记错误并进行修复。
- 修复阶段:
- 错误定位与信息提取:通过分析编译日志和堆栈追踪信息,定位错误并提取相关数据。
- 模板修复:使用预设的修复模板(如导入错误、布尔类断言、相等类断言、插入异常处理、增加捕获语句)进行修复。
- 大模型修复:在模板修复失败时,利用大模型进行修复,通过提示模板引导模型分析错误并生成修正后的测试代码。
- 覆盖信息反馈:计算生成测试用例的覆盖率,并将信息反馈给LLMs以优化后续生成。
自动断言生成
- 基于LLMs的断言生成:LLMs在断言生成中表现出色,尤其在Dataold和Data new数据集上,准确率分别达到51.82%~58.71%和38.72%~48.19%。
- EASE方法:结合检索到的断言和LLMs生成新的断言,显著提升了断言生成的准确性。
- RetriGen方法:RetriGen是一种基于混合检索增强的断言生成框架,结合了基于token的检索和基于Embedding的检索,以提升断言生成的语义与词汇相似性。
实验结果与分析
- RQ1:TestART与基线方法的正确性比较:
- TestART在多个项目上的测试用例通过率显著优于基线方法,如Gson(63.49%)、Lang(87.85%)等。
- RQ2:TestART的充分性比较:
- TestART在分支覆盖率和行覆盖率上均优于基线方法,平均提升了17%。
- RQ3:不同组件对TestART鲁棒性的影响:
- 修复模块显著提升了TestART的通过率和覆盖率,而迭代和测试反馈贡献了额外的3%提升。
- RQ1:LLMs在断言生成中的准确性:
- CodeT5在多个数据集上表现最佳,准确率分别为58.71%和48.19%。
- RQ2:LLMs在检测真实漏洞中的性能:
- LLMs平均能检测到32个真实漏洞,比最先进的技术EDTAS提高了52.38%。
- RQ3:不同候选断言数量对LLMs性能的影响:
- 候选断言数量增加,LLMs的预测准确性显著提高,特别是在Top-50时,CodeT5的准确率达到61.20%。
- 断言类型的影响:
- CodeT5在NotNull、False和Null类型的断言上表现最佳,而Equals和ArrayEquals类型的断言生成准确性较低。
- 测试与断言长度的影响:
- 输入测试长度在300-400 tokens时,LLMs的表现最佳;输出断言长度小于100 tokens时,生成准确性较高。
总结与展望
- 总结:
- TestART方法通过结合LLMs的生成能力和修复模板,显著提升了单元测试的正确性与覆盖率。
- LLMs在断言生成中表现出色,尤其在Dataold和Data new数据集上,准确率较高。
- RetriGen通过混合检索增强方法,提升了断言生成的准确性与全面性。
- 展望:
- 未来的研究可以探索多断言过滤方法,以进一步提高断言生成的性能。
- 可以结合不同的LLMs和AG技术,以提升断言生成的准确性和覆盖范围。
- 推动LLMs在实际开发场景中的应用,提高测试效率与质量。
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载