《银行科技研究社》消息:招商银行正申请一项名为“测试代码生成方法、装置、设备、存储介质及产品”的专利。其申请于2024年7月11日,公布于2024年11月8日。
方法包括:基于抽象语法树,对待测试代码的变量类型与调用方式进行上下文提取,得到关键上下文信息(步骤A,下有详述);将关键上下文信息、预设的测试场景提示词及预设的编码风格提示词发送至大模型,接收大模型输出的测试代码(步骤C,下有详述),其中,大模型根据测试场景提示词与编码风格提示词,对关键上下文信息进行测试场景分析,输出对应的测试代码。
更具体的,(步骤A)基于抽象语法树,对待测试代码的变量类型与调用方式进行上下文提取,得到关键上下文信息的步骤,包括:解析待测试代码,构建待测试代码的抽象语法树,通过抽象语法树得到待测试代码的变量类型;遍历待测试代码的变量类型,检验变量类型是否在待测试代码中存在设定;若变量类型在待测试代码中存在设定,则读取变量类型的字段的类型信息及系统配置信息为变量类型的上下文信息;扫描待测试代码,得到待测试代码的调用方式,通过抽象语法树获取调用方式的代码,将调用方式的代码作为调用方式的上下文信息(步骤B,下有详述);组合变量类型的上下文信息与调用方式的上下文信息,得到关键上下文信息。
(步骤B)扫描待测试代码,得到待测试代码的调用方式,通过抽象语法树获取调用方式的代码,将调用方式的代码作为调用方式的上下文信息的步骤,包括:扫描待测试代码,得到待测试代码的调用方式;通过抽象语法树对调用方式进行解析;若项目路径存在作用域节点的变量类型,则调用方式为充血方法,通过抽象语法树获取充血方法的代码为方法类的上下文信息;若项目路径存在特定命名方式,通过正则表达式识别对应的调用方式,通过抽象语法树获取调用方式对应的代码为方法类的上下文信息。
通过抽象语法树对调用方式进行解析的步骤之后,还需要:获取待测试代码的调用方式;将待测试代码的调用方式在预设的调用方式库进行比对,若待测试代码的调用方式存在于调用方式库,则获取调用方式库中待测试代码的调用方式对应的动态提示词。
(步骤C)将关键上下文信息、预设的测试场景提示词及预设的编码风格提示词发送至大模型,接收大模型输出的测试代码的步骤,包括:将关键上下文信息、预设的测试场景提示词发送至大模型;接收大模型输出的单元测试场景,将单元测试场景与预设的编码风格提示词发送至大模型,其中,大模型根据测试场景提示词,对关键上下文信息进行测试场景分析,输出单元测试场景;接收大模型输出的测试代码,其中,大模型根据编码风格提示词,对单元测试场景进行编码风格修改,输出测试代码。
另外,接收大模型输出的单元测试场景,将单元测试场景与预设的编码风格提示词发送至大模型的步骤,包括:接收大模型返回的单元测试场景;拆分单元测试场景,得到多个次级单元测试场景;展示所有的次级单元测试场景;对所有的次级单元测试场景进行评估,得到目标次级单元测试场景;将目标次级单元测试场景与预设的编码风格提示词发送至大模型。
说明书提到该发明的背景为,在软件开发过程中,单元测试是确保代码质量和功能正确性的关键环节。单元测试的重要性体现在能够及早发现和修复错误,减少后期维护成本,并提高软件的可靠性。然而,传统的单元测试编写方式通常要求开发人员根据特定的业务逻辑和应用场景来手动撰写测试用例,这一过程不仅耗时而且容易出错。开发人员需要对每一个功能点进行细致分析,并且编写相应的测试代码,这在大型项目中尤其有挑战性。随着人工智能和机器学习技术的发展,利用大模型技术来辅助或自动生成测试代码成为研究热点。
在现有的技术中,一些插件或工具能够通过大模型完成单元测试的编写。但这些工具通常缺乏足够的智能化,会遗漏部分单元测试场景。同时,这些工具也不能根据不同的编码风格自动调整测试代码的格式和结构。对此,用户需要频繁手动修改提示词来调整大模型的单元测试场景,并对输出的测试代码进行手动的代码编写风格调整。这增加了用户的工作量,降低了工作效率。
该发明通过输入提示词及抽象语法树提取的关键上下文信息至大模型,由大模型生成的符合特定编码风格和测试场景需求的测试代码,使得测试代码生成的工作量得到明显降低,工作效率显著提高。