本申请涉及软件测试,更具体的说,是涉及一种单元测试生成方法及装置。
背景技术:
1、在软件开发过程中,单元测试是一项非常重要的工作。它可以帮助开发人员及时发现代码中的错误,提高代码质量,减少后期维护成本。但是,手动编写单元测试代码是一项繁琐的工作,需要耗费大量的时间和精力,而且往往存在质量不高、覆盖率不够等问题。因此,自动化生成单元测试代码成为了当前软件测试技术领域的研究热点之一。
2、此外,大语言模型的出现,使ai技术具有了对业务逻辑的理解能力,如果能够将大语言模型的优点应用到单元测试代码的自动生成工作中,将会对软件的智能化测试带来非常积极的影响。
技术实现思路
1、有鉴于此,本申请提供如下技术方案:
2、一种单元测试生成方法,包括:
3、解析待测代码中的第一信息得到待测代码的约束数据,所述第一信息至少包括运算符号和约束信息,所述约束数据用于约束单元测试代码的输入和输出;
4、解析所述待测代码确定所述待测代码的业务数据,所述业务数据用于表征所述待测代码的业务方向;
5、将所述约束数据和所述业务数据输入至大语言模型,基于所述大语言模型生成对应所述待测代码的单元测试代码。
6、可选地,在所述将所述约束数据和所述业务数据输入至大语言模型,基于所述大语言模型生成对应所述待测代码的单元测试代码后,还包括:
7、执行所述单元测试代码,获得执行日志和所述待测代码的覆盖度数据;
8、基于所述执行日志和所述覆盖度数据进行动态分析,并基于分析结果优化所述单元测试代码;
9、迭代进行上述步骤,直至所述单元测试代码满足设定要求。
10、可选地,所述解析待测代码中的第一信息得到待测代码的约束数据,包括:
11、解析待测代码中的运算符号和约束信息,得到针对所述待测代码中每个变量的约束条件;
12、通过决策树匹配将所述约束条件转化为树状结构数据。
13、可选地,还包括:
14、通过启发式算法和模糊边界分析方法对所述约束条件进行优化。
15、可选地,所述通过决策树匹配将所述约束条件转化为树状结构数据,包括:
16、将所述约束条件转化为初始决策树,所述初始决策树中包括多个决策节点,每个所述决策节点表征一个约束条件,所述决策树的根节点表征约束条件的集合;
17、基于在所述初始决策树中确定的决策路径逐个匹配约束条件,以保证生成的单元测试代码满足所有的约束条件;
18、基于所述决策路径上的约束条件生成单元测试代码的输入数据,以保证所述输入数据满足所述决策路径上的所有约束条件;
19、基于所述输入数据确定单元测试代码的预期输出结果。
20、可选地,所述解析所述待测代码确定所述待测代码的业务数据,包括:
21、对所述待测代码中的抽象语法树进行解析,得到所述待测代码的语法结构和语义信息;
22、通过领域建模,按照领域边界限定所述待测代码的业务边界,所述语法结构、语义信息和所述业务边界属于业务数据。
23、可选地,所述基于所述执行日志和所述覆盖度数据进行动态分析,并基于分析结果优化所述单元测试代码,包括:
24、基于所述执行日志和所述覆盖度数据进行动态分析,得到单元测试代码的执行情况和覆盖度情况;
25、将所述执行情况和所述覆盖度情况输入所述大语言模型,以使得所述大语言模型基于接收到的所述执行情况和所述覆盖度情况优化单元测试代码。
26、可选地,还包括:
27、若待测代码发生变更,收集所述单元测试代码执行过程中的报错信息;
28、若所述报错信息为编译错误,则重新确定约束数据和业务数据;
29、将重新确定的约束数据和业务数据输入至大语言模型,得到新的单元测试代码。
30、可选地,所述覆盖度数据由第三方覆盖度监测工具监测获得。
31、本申请还公开了一种单元测试生成装置,包括:
32、约束数据确定模块,用于解析待测代码中的第一信息得到待测代码的约束数据,所述第一信息至少包括运算符号和约束信息,所述约束数据用于约束单元测试代码的输入和输出;
33、业务数据确定模块,用于解析所述待测代码确定所述待测代码的业务数据,所述业务数据用于表征所述待测代码的业务方向;
34、单元测试生成模块,用于将所述约束数据和所述业务数据输入至大语言模型,基于所述大语言模型生成对应所述待测代码的单元测试代码。
35、经由上述的技术方案可知,本申请实施例公开了一种单元测试生成方法及装置,方法包括:解析待测代码中的第一信息得到待测代码的约束数据,所述第一信息至少包括运算符号和约束信息,所述约束数据用于约束单元测试代码的输入和输出;解析所述待测代码确定所述待测代码的业务数据,所述业务数据用于表征所述待测代码的业务方向;将所述约束数据和所述业务数据输入至大语言模型,基于所述大语言模型生成对应所述待测代码的单元测试代码。上述方案基于大语言模型自动生成单元测试代码,通过约束数据规划了可评判可量化的指标,且在生成单元测试代码的过程中通过业务数据限定业务场景,使得最终得到的单元测试代码具有稳定性且符合业务逻辑,提高了单元测试代码的准确定和可靠性。
1.一种单元测试生成方法,其特征在于,包括:
2.根据权利要求1所述的单元测试生成方法,其特征在于,在所述将所述约束数据和所述业务数据输入至大语言模型,基于所述大语言模型生成对应所述待测代码的单元测试代码后,还包括:
3.根据权利要求1所述的单元测试生成方法,其特征在于,所述解析待测代码中的第一信息得到待测代码的约束数据,包括:
4.根据权利要求3所述的单元测试生成方法,其特征在于,还包括:
5.根据权利要求3所述的单元测试生成方法,其特征在于,所述通过决策树匹配将所述约束条件转化为树状结构数据,包括:
6.根据权利要求1所述的单元测试生成方法,其特征在于,所述解析所述待测代码确定所述待测代码的业务数据,包括:
7.根据权利要求2所述的单元测试生成方法,其特征在于,所述基于所述执行日志和所述覆盖度数据进行动态分析,并基于分析结果优化所述单元测试代码,包括:
8.根据权利要求2所述的单元测试生成方法,其特征在于,还包括:
9.根据权利要求2所述的单元测试生成方法,其特征在于,所述覆盖度数据由第三方覆盖度监测工具监测获得。
10.一种单元测试生成装置,其特征在于,包括: