基于大模型的测试断言生成技术
房春荣南京大学;
博士,南京大学软件学院准聘副教授、特聘研究员,博士生导师,紫金学者,CCF高级会员,系统软件/容错计算专委会委员,主要从事智能软件工程研究(BigCodeAITesting)。主持国家自然科学基金项目3项,国家重点研发项目骨干2项,教育部产学合作协同育人项目3项,横向科研项目若干。在CCF-A会议/期刊发表论文40余篇,获得国际会议最佳论文1项,申请发明专利10余项,部分成果在华为、百度等知名企业应用。曾担任AST、AIST等国际会议程序委员会共同主席,多次担任国际顶级会议程序委员会委员及顶级期刊审稿人,并多次获得杰出审稿人。参编多项软件工程和工业APP相关国家、省、团体标准。获2022年国家级教学成果奖,CCFTCFTC2021年软件测试青年创新奖,2020国家级一流本科课程、2018国家精品在线开放课程《软件测试》。;
1.研究背景
2.单元测试生成和修复
3.单元测试的断言问题
①初步探索:面向单元测试场景的大模型断言生成能力
②检索角度:基于混合检索增强的单元测试断言生成
③训练角度:基于检索生成协同增强的单元测试断言生成
4.应用验证
5.总结与展望;
PART01
研究背景大语言模型和单元测试基础;
研究背景-单元测试与测试断言
单元测试:一种被广泛接受的甚至是强制性的开发实践;;
研究背景-单元测试生成方法存在的主要问题
n生成无效测试用例:
大型语言模型(LLMs)可能在上下文不足的情况下生成无效的测试用例,导致编译错误。这意味着生成的测试用例无法成功运行,影响测试过程的有效性。
n缺乏测试和覆盖反馈:
缺乏详细的测试反馈和覆盖率信息可能导致生成的测试用例在运行时出现错误,并且覆盖率低。这意味着生成的测试用例可能未能充分测试目标代码,从而降低了测试的全面性和有效性。
n重复抑制问题:
现有方法中,LLMs可能会陷入自我修复或再生成尝试的重复循环,导致生成过程低效。即模型在面对生成错误时,可能会不断尝试修复同样的错误而无法前进,从而浪费计算资源和时间。;;
研究背景-自动断言生成方法存在的主要问题
n手动编写单元测试的劳动密集性:
编写测试断言通常非常耗时且劳动密集,需要测试专家手动插入测试输入(如前缀)和测试输出(如断言)。
n现有方法的局限性:
基于深度学习(DL)的方法通常需要大量的训练数据,并且可能在处理特定任务时表现不佳。
依赖于从现有数据中检索相关的测试断言,可能会受到词汇匹配的限制,难以生成语义上有意义的断言。
许多现有方法没有采用联合训练策略,导致检索器和生成器之间缺乏协同优化,无法充分利用各自的优势来生成更准确的断言。
许多现有方法在有限的训练数据上表现不佳,难以生成高质量的断言。
现有使用LLM进行单元测试生成的技术的有效性并没有系统的比较研究。;
PART02
单元测试生成和修复;
单元测试生成-基于提示引导和动态反馈的大模型测试用例生成
和修复
n生成阶段:是TestART方法的核心步骤,旨
在利用大型语言模型(LLM)生成初始的
单元测试用例。通过这一阶段,TestART可
以自动化生成测试用例,从而减少人工测
试的工作量,并提高代码覆盖率。生成阶
段的成功执行依赖于有效的上下文预处理
和模型提示设计,以充分发挥LLM的潜力。;
1、被测代码预处理
n代码清理与压缩:在生成阶段之前,源代码需要经过预处理,以确保LLM聚焦于代码的关键部分。清理步骤:
?去除注释:移除所有代码注释,以防止注释内容与代码逻辑的不一致导致LLM产生幻觉。
?删除多余空行:精简代码结构,提升模型处理效率。;
3、处理生成的初始测试用例
n初步检查和修正:
?对生成的测试用例进行初步检查,识别并标记编译错误和语
法错误。
?修正简单的语法问题,确保测试用例在编译器中通过基础验
证。
n生成结果记录与分析:
?记录生成测试用例的数量、类型和初步结果。
?分析生成的测试用例覆盖范围及其在真实场景下的有效性。;
利用提示注入优化生成
n提示注入策略:
?使用修复后的测试用例作为提示输入,防止LLM在后续生成中出现相同错误。
?提示注入能有效减少模型的重复抑制问题,提高生成用