【技术实现步骤摘要】
基于对话式大语言模型的高可靠单元测试自动生成方法及装置
[0001]本专利技术属于单元测试自动生成
,具体涉及基于对话式大语言模型的高可靠单元测试自动生成方法及装置。
技术介绍
[0002]随着当今的软件规模越来越大、结构越来越复杂,对软件质量的要求也越来越高。即便是微小的缺陷,也足以使企业蒙受巨大的损失。因此,软件测试作为软件交付的最后一道环节变得越来越重要。在软件测试金字塔中,单元测试作为最大、最基本的组成部分,是整个测试流程中最重要的一个环节。但是,单元测试用例的编写需要耗费大量的时间和精力,因此通常被开发者们所忽略。自动生成单元测试用例技术的出现,就致力于解决这一问题。所谓单元测试用例自动生成,是指自动地生成一组单元测试用例,以覆盖尽可能多的代码路径和代码逻辑,以确保软件单元的正确性和稳定性。采用这种技术生成的单元测试用例,可以提高测试覆盖率,减少手动编写测试用例的工作量,并且可以更早地发现和修复软件中的错误和缺陷。
[0003]目前,现有的单元测试用例生成方法可以分为三类:基于传统程序分析的方法、基于预训练模型的方法、基于对话式大语言模型的方法。基于传统程序分析的方法通常使用变异测试、随机测试、符号执行等技术来生成单元测试用例;基于预训练模型的方法则使用大规模英文和代码语料库训练预训练模型,并将单元测试用例的生成任务定义为翻译任务,从待测代码直接翻译成测试用例;基于对话式大语言模型的方法通过将待测方法的上下文信息输入预设好的提示模版生成提示,然后通过对话的方式来让大语言模型生成针对待测方法的单 ...
【技术保护点】
【技术特征摘要】
1.一种基于对话式大语言模型的高可靠单元测试自动生成方法,其特征在于,包括以下步骤:S1,对待测项目进行解析,提取出对象文件,并对对象文件进行解析,从类级别的上下文信息中提取出待测方法列表,针对每个待测方法进行代码可达分析,获取方法级别的上下文信息,包括每个待测方法所使用的依赖类、字段、调用方法;S2,针对每个待测方法,使用对话式大语言模型进行测试必要性判断,如果判断待测方法有测试必要,则会对测试目的进行划分,获取测试方向列表;S3,从测试方向列表中的一个测试方向出发,根据待测方法的代码可达分析结果,使用动态上下文生成技术,在最大提示长度限制下,生成包含尽可能多的待测方法上下文的提示,并将该提示输入对话式大语言模型中,获得包含初始测试用例的回答;S4,从包含初始测试用例的回答中提取出初始测试用例,对初始测试用例进行语法验证,编译并执行该测试用例,如果在此过程中发生了错误,则尝试利用启发式的方法和/或对话式大语言模型修复该错误;S5,针对每个成功的测试用例,首先将测试用例中基本数据类型字段暴露出来,再对测试输入数据的空间进行搜索;S6,针对所有生成的测试用例,采用变异测试的方式对测试用例的断言质量进行验证;针对没有成功解决的突变,将突变信息融入一个新的提示,利用对话式大语言模型再次生成新的测试用例,直到解决突变或达到最大尝试次数;S7,对所有成功生成的测试用例组成的测试套件进行最小化,以保证套件中的测试用例在测试目的、覆盖情况、突变解决情况上不会重复。2.根据权利要求1所述的基于对话式大语言模型的高可靠单元测试自动生成方法,其特征在于,S1具体为:S1.1,遍历整个待测项目,提取出对象文件,并对对象文件进行解析,使用解析器将对象文件解析成抽象语法树AST的形式;S1.2,从抽象语法树的根节点出发,遍历整个抽象语法树,从抽象语法树中提取出类级别的上下文信息,包括包声明语句、引入的外部依赖、类签名、类构造函数、类字段、获取器和设置器的方法签名、以及待测方法列表;S1.3,针对每个待测方法进行代码可达分析,获取方法级别的上下文信息,包括方法体、方法的修饰符、方法是否使用到了字段、方法是否使用到了获取器和设置器、方法所使用的依赖类、调用方法的信息。3.根据权利要求1所述的基于对话式大语言模型的高可靠单元测试自动生成方法,其特征在于,S2具体为:S2.1,针对每个待测方法,将其渲染进一个包含有测试必要性判断和测试目的划分的提示模版中,输入对话式大语言模型,并指定回答格式,通过正则表达式根据回答内容判断测试必要性;S2.2,如果对话式大语言模型判断待测方法有测试必要性时,则根据回答内容获取通过测试目的划分得到的测试方向列表。4.根据权利要求1所述的基于对话式大语言模型的高可靠单元测试自动生成方法,其特征在于,S3具体为:
S3.1,根据一个待测方向,以及待测方法所在类的关键信息、待测方法的可达代码块,在确保不超出预设的最大提示长度的情况下,尽可能提供更多的待测方法上下文,渲染成提示;具体为:尝试生成最小上下文,在最小上下文中必须包含方法体、所在类的签名、构造函数的签名、可达字段以及相应的获取器和设置器的签名;如果最小上下文的长度大于预设的最大提示长度,则会取消此次生成测试用例的尝试;根据待测方法是否依赖于外部类来动态添加更多的待测方法上下文;如果待测方法依赖于外部类,则尝试在上下文信息中添加该外部类以及被调用方法的签名,添加信息后会进行提示生成,确保提示的长度小于预设的最大提示长度;如果待测方法没有外部依赖,则尝试在上下文信息中添加待测方法所在类中被调用方法的签名,如果仍然未超出预设的最大提示长度,则尝试在上下文信息中添加待测方法所在类中所有方法的签名;如果在尝试添加更多信息到上下文信息过程中,出现了提示超出预设的最大提示长度的情况,则会停止此次的添加行为;S3.2,在步骤S3.1生成了满足要求的待测方法上下文后,将该上下文按照上下文的内容,渲染至相应的提示模版中;具体为:如果上下文中包含有依赖信息,则将上下文信息渲染至包含有依赖的模版中;如果上下文中不包含有依赖信息,则将上下文信息渲染至无依赖的模版中;最终生成一个满足最大提示长度限制、符合当前测试方向、富含待测方法上下文的提示;S3.3,将S3.2生成的提示输入对话式大语言模型中,获得包含初始测试用例的回答。5.根据权利要求1所述的基于对话式大语言模型的高可靠单元测试自动生成方...
【专利技术属性】
技术研发人员:智晨,谢卓魁,陈膺浩,赵新奎,邓水光,尹建伟,
申请(专利权)人:浙江大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。