CN117951010A - 函数测试方法、装置、计算机设备和存储介质 - Google Patents

函数测试方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN117951010A
CN117951010A CN202410051584.9A CN202410051584A CN117951010A CN 117951010 A CN117951010 A CN 117951010A CN 202410051584 A CN202410051584 A CN 202410051584A CN 117951010 A CN117951010 A CN 117951010A
Authority
CN
China
Prior art keywords
function
test
code
tested
output
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202410051584.9A
Other languages
English (en)
Inventor
卢勇
张红杨
金鑫
彭思涛
厉井钢
刘虓瀚
张香菊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Nuclear Power Technology Research Institute Co Ltd
CGN Power Co Ltd
Original Assignee
China Nuclear Power Technology Research Institute Co Ltd
CGN Power Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Nuclear Power Technology Research Institute Co Ltd, CGN Power Co Ltd filed Critical China Nuclear Power Technology Research Institute Co Ltd
Priority to CN202410051584.9A priority Critical patent/CN117951010A/zh
Publication of CN117951010A publication Critical patent/CN117951010A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本申请涉及一种函数测试方法、装置、计算机设备和存储介质。所述方法包括:获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数;对参考代码进行改造处理,得到代码生成工具;针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值;基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码;获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果。采用本方法能够提高函数测试效率。

Description

函数测试方法、装置、计算机设备和存储介质
技术领域
本申请涉及软件测试技术领域,特别是涉及一种函数测试方法、装置、计算机设备和存储介质。
背景技术
软件代码单元测试是代码开发过程不可缺少的一步,它对软件的质量保证至关重要。对于开发人员来说,在开发过程中做好单元测试,能够尽早发现软件中的错误,对于保证代码质量十分重要。
随着软件管理和应用的平台化和智能化发展,以及提高软件管理和维护的便利性和效率的需要,需要统一软件开发语言。目前软件存在采用不同开发语言开发的问题,因此需将软件开发语言统一起来,如将FORTRAN(Formula Translation,公式翻译)和Java(一种面向对象的编程语言)等其他语言开发的软件统一转为C++语言开发。对于核电领域的计算类软件,其逻辑关系比较复杂,测试单元和数据量通常很大,数据准备难度大,开展单元测试需要耗费大量人力和物力,并且对单元测试质量要求较高,否则后续系统测试中发现问题,难以排查,并将付出更大的人力物力成本。
传统的软件单元测试工具需要人工给出有意义的单元测试用例数据,由人工操作完成软件单元测试,测试工作量大,过程繁琐,容易出错,存在测试效率低的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高函数测试效率的函数测试方法、装置、计算机设备和计算机可读存储介质。
第一方面,本申请提供了一种函数测试方法,包括:
获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数;
对参考代码进行改造处理,得到代码生成工具;
针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值;基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码;
获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果。
在其中一个实施例中,对参考代码进行改造处理,得到代码生成工具,包括:
解析参考代码,得到参考函数的输入变量、输出变量和逻辑代码;
基于输入变量,确定第一测试语句;基于逻辑代码,确定第二测试语句;基于输出变量,确定第三测试语句;
基于第一测试语句、第二测试语句和第三测试语句,得到代码生成工具。
在其中一个实施例中,解析参考代码,得到参考函数的输入变量、输出变量和逻辑代码,包括:
解析参考代码,得到多个候选函数和多个候选变量;
获取预先设置的函数映射关系,根据函数映射关系,从多个候选函数中确定出与待测函数对应的目标候选函数,并作为参考函数;
解析参考函数,得到参考函数的逻辑代码,以及多个候选变量与参考函数之间的调用关系;
根据调用关系,在多个候选变量中确定出参考函数的输入变量和输出变量。
在其中一个实施例中,基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码,包括:
解析待测函数,得到待测输入变量和待测输出变量;
将输入变量值作为待测输入变量的待测输入变量值;
基于输出变量值和待测输出变量,确定比较代码;
基于待测输入变量、待测输入变量值和比较代码,在代码生成工具运行后,生成测试用例对应的测试代码。
在其中一个实施例中,参考函数的输出变量的数量和待测输出变量的数量均为多个;基于输出变量值和待测输出变量,确定比较代码,包括:
获取预先设置的变量映射关系,根据变量映射关系,在多个输出变量中分别确定出多个待测输出变量各自对应的目标输出变量;
针对每个待测输出变量,将待测输出变量和待测输出变量对应的目标输出变量的输出变量值一起输入初始比较代码,得到待测输出变量对应的变量比较代码;
基于多个待测输出变量各自对应的变量比较代码,确定比较代码。
在其中一个实施例中,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果,包括:
在多个测试用例各自对应的运行结果均为通过的情况下,确定待测函数的测试结果为测试通过。
第二方面,本申请还提供了一种函数测试装置,包括:
获取模块,用于获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数;
改造模块,用于对参考代码进行改造处理,得到代码生成工具;
生成模块,用于针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值;基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码;
测试模块,用于获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果。
第三方面,本申请还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数;
对参考代码进行改造处理,得到代码生成工具;
针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值;基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码;
获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果。
第四方面,本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数;
对参考代码进行改造处理,得到代码生成工具;
针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值;基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码;
获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果。
第五方面,本申请还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数;
对参考代码进行改造处理,得到代码生成工具;
针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值;基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码;
获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果。
上述函数测试方法、装置、计算机设备、存储介质和计算机程序产品,通过获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数,改造参考代码,得到代码生成工具,代码生成工具在基于测试用例运行过程中自动生成参考函数的输入变量值和输出变量值,基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,自动生成测试用例对应的测试代码,多个测试用例的测试代码在运行后,将确定出待测函数的测试结果,实现了测试用例数据和测试代码的自动化批量化生成,有利于提高函数测试效率。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一个实施例中函数测试方法的应用环境图;
图2为一个实施例中函数测试方法的流程示意图;
图3为另一个实施例中函数测试方法的流程示意图;
图4为一个实施例中函数测试方法的总体流程示意图;
图5为一个实施例中函数测试装置的结构框图;
图6为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的函数测试方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以存储服务器104需要处理的数据。数据存储系统可以集成在服务器104上,也可以放在云上或其他网络服务器上。本申请实施例提供的函数测试方法可以应用于终端102,或者服务器104,还可以应用于包括终端102和服务器104的系统,并通过终端102和服务器104的交互实现。函数测试方法包括:获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数;对参考代码进行改造处理,得到代码生成工具;针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值;基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码;获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个示例性的实施例中,如图2所示,提供了一种函数测试方法,以该方法应用于图1中的终端102为例进行说明,包括以下步骤202至步骤208。其中:
步骤202,获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数。
其中,参考代码为基于某种类型的代码开发语言开发出的代码,参考代码为已经通过单元测试的代码。参考代码可以为一个,或者多个代码文件。参考代码中包括至少一个参考函数。
待测函数与参考函数具有相同功能,且为采用不同于参考代码的代码开发语言开发的函数。例如,参考代码为采用FORTRAN或者Java语言开发的代码,待测函数为采用C++开发的代码。
待测函数通常为待测代码中的一个函数。对待测代码进行单元测试,主要是对待测代码中的待测函数进行测试。
测试用例指的是为某个测试目标而编制的测试方法,对待测函数进行测试时,将按照测试用例中的测试方法执行测试。由于核电领域的计算类软件,逻辑关系复杂,待测函数较多,且数据量较大,数据准备难度大,开展对待测代码的单元测试时,需要大量的数据用于编写测试用例。本申请实施例提出的测试用例中不包括测试所需的输入数据和预期输出数据,大大简化了测试的复杂度,提高了测试效率。
步骤204,对参考代码进行改造处理,得到代码生成工具。
其中,代码生成工具为用于生成对待测函数进行测试的代码的工具。代码生成工具可以在参考代码的基础上,经过改造处理得到。由于代码生成工具由终端自动生成,对于多个待测函数进行测试时,能够通过对参考代码的自动改造而批量生成,大大提高了函数测试效率。
步骤206,针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值;基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码。
其中,终端控制代码生成工具基于测试用例运行。例如,测试用例为在环境温度到达预设温度时,开始自动执行代码生成工具。
由于代码生成工具对参考代码改造处理得到的,代码生成工具在运行过程中,将得到参考函数的输入变量值和输出变量值。
由于参考函数和待测函数具有相同的功能,参考函数的输入变量值和输出变量值可以作为待测函数下测试用例下的测试数据,测试用例的测试数据由代码生成工具自动生成,有利于提高对待测函数的测试效率。
代码生成工具在运动结束后将生成测试代码。其中,生成测试代码将基于输入变量值、输出变量值和待测函数生成。
步骤208,获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果。
其中,终端控制测试代码运行,得到每个测试用例下,测试代码的运行结果。终端通过多个不同的测试用例对待测函数进行测试,分别得到多个测试用例各自对应的运行结果,由多个运行结果,共同确定出待测函数的测试结果。
上述函数测试方法中,通过获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数,改造参考代码,得到代码生成工具,代码生成工具在基于测试用例运行过程中自动生成参考函数的输入变量值和输出变量值,基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,自动生成测试用例对应的测试代码,多个测试用例的测试代码在运行后,将确定出待测函数的测试结果,实现了测试用例数据和测试代码的自动化批量化生成,有利于提高函数测试效率。
在一个示例性的实施例中,对参考代码进行改造处理,得到代码生成工具,包括:解析参考代码,得到参考函数的输入变量、输出变量和逻辑代码;基于输入变量,确定第一测试语句;基于逻辑代码,确定第二测试语句;基于输出变量,确定第三测试语句;基于第一测试语句、第二测试语句和第三测试语句,得到代码生成工具。
其中,为了对参考代码进行改造,终端首先对参考代码进行语义解析,得到参考函数的输入变量、输出变量和逻辑代码。
每个参考函数均具有输入变量、输出变量和逻辑代码。输入变量通过逻辑代码的处理,得到输出变量。例如:参考函数fun()为:
int fun(int a,int b)
{c=a+b;
return c;
}
其中,a和b分别为参考函数fun()的输入变量,c=a+b为参考函数的逻辑代码,c为参考函数的输出变量。
终端将根据输入变量、逻辑代码和输出变量,分别生成不同的测试语句,不同的测试语句可以构成代码生成工具。
例如,第一测试语句可以为:write(29,“(‘a=’,a,‘;’)”);
第二测试语句可以为:write(29,“(‘b=’,b,‘;’)”);
第三测试语句可以为:write(29,“assertEq(‘c=’,c,‘;’) ”);
本实施例中,通过解析参考代码得到参考函数的输入变量、输出变量和逻辑代码,分别基于输入变量、输出变量和逻辑代码改造为对应的测试语句,从而生成代码生成工具,由于参考代码可以自动进行解析,代码生成工具可以自动生成,有利于提高代码生成工具的生成效率,从而提高函数测试效率。
在一个示例性的实施例中,解析参考代码,得到参考函数的输入变量、输出变量和逻辑代码,包括:解析参考代码,得到多个候选函数和多个候选变量;获取预先设置的函数映射关系,根据函数映射关系,从多个候选函数中确定出与待测函数对应的目标候选函数,并作为参考函数;解析参考函数,得到参考函数的逻辑代码,以及多个候选变量与参考函数之间的调用关系;根据调用关系,在多个候选变量中确定出参考函数的输入变量和输出变量。
其中,对参考代码的解析过程,具体可以为,对参考代码进行逐行的语义解析,得到多个候选函数和多个候选变量等。其中,候选函数中包括函数的名称、输入参量、返回值和函数类型。函数类型指候选函数是否具有返回值。
候选变量包括变量名称、变量类型、变量类别、变量初值、变量是否改变、变量的数组维数。变量类型包括整型、浮点型、双精度型、字符型、逻辑型等。变量类别包括全局变量、局部变量、常量、返回变量、参量等。变量是否改变用来标识变量的值在函数执行过程中是否发生变化。
由于待测函数与参考函数应为一一对应,终端中预先设置了函数映射关系,函数映射关系用于表征待测函数与参考函数的对应关系。
解析得到的多个候选函数中存在对待测函数对应的参考函数,参考函数可以通过查询预设映射关系确定。
终端对参考函数进行逐行的语义解析,得到参考函数中的逻辑代码。由逻辑代码可以确定出候选变量与参考函数之间的调用关系。例如,候选变量包括a、b、c和d。参考函数中的逻辑代码为c=a+b,因此,可以确定出a、b、c与参考函数具有调用关系,其中,等号右边的变量a和b为参考函数的输入变量,等号左边的变量c为参考函数的输出变量。
本实施例中,通过解析出参考代码中的多个候选函数和多个候选变量,从候选函数中确定出参考函数,再解析参考函数,确定出参考函数中的逻辑代码、输入变量和输出变量,参考函数以及参考函数中的内容可以自动解析得到,有利于自动生成代码生成工具,提高代码生成工具的生成效率。
在一个示例性的实施例中,基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码,包括:解析待测函数,得到待测输入变量和待测输出变量;将输入变量值作为待测输入变量的待测输入变量值;基于输出变量值和待测输出变量,确定比较代码;基于待测输入变量、待测输入变量值和比较代码,在代码生成工具运行后,生成测试用例对应的测试代码。
其中,测试代码可以由代码生成工具自动生成。终端对待测函数进行逐行解析,得到多个待测变量,从多个待测变量中确定出待测输入变量和待测输出变量。
由于待测函数和参考函数的功能相同,因此,待测函数的待测输入变量与参考函数中的输入变量对应,待测函数的待测输出变量与参考函数中的输出变量对应。
终端将输入变量值赋给待测输入变量,得到待测输入变量的待测输入变量值。比较代码用于比较输出变量值和待测输出变量对应的变量值是否一致,待测输入变量、待测输入变量值和比较代码,一起写入测试代码中。
由于待测输出变量对应的变量值未知,需要在测试代码运行后才能得到待测输出变量的变量值,待测输出变量的变量值赋给比较代码中的待测输出变量,得到运行结果,运行结果用于表征输出变量值和待测输出变量对应的变量值是否一致。
本实施例中,测试代码在代码生成工具运行后自动生成,有利于提高测试代码的生成效率,进而提高函数测试效率。测试代码中包括待测输入变量、待测输入变量值和比较代码,在测试代码运行后,能够对待测函数自动进行测试,有利于提高函数测试效率。
在一个示例性的实施例中,参考函数的输出变量的数量和待测输出变量的数量均为多个;基于输出变量值和待测输出变量,确定比较代码,包括:获取预先设置的变量映射关系,根据变量映射关系,在多个输出变量中分别确定出多个待测输出变量各自对应的目标输出变量;针对每个待测输出变量,将待测输出变量和待测输出变量对应的目标输出变量的输出变量值一起输入初始比较代码,得到待测输出变量对应的变量比较代码;基于多个待测输出变量各自对应的变量比较代码,确定比较代码。
其中,变量映射关系用于表征参考函数的输出变量和待测输出变量之间的对应关系。在参考函数的输出变量的数量和待测输出变量的数量均为多个的情况下,终端在多个输出变量中确定出多个待测输出变量各自对应的目标输出变量。
待测输出变量和该待测输出变量对应的目标输出变量的输出变量值一起输入至初始比较代码,得到该待测输出变量对应的变量比较代码,最终得到的比较代码由多个待测输出变量各自对应的变量比较代码组成。
例如,待测输出变量为c’,与目标输出变量c对应,c=1。待测输出变量为d’,与目标输出变量d对应,d=2。
c’对应的变量比较代码可以为:bResult=assertEq("c’",c’,1)。
d’对应的变量比较代码可以为:bResult=assertEq("d’",d’,2)。
本实施例中,通过确定多个待测输出变量各自对应的目标输出变量,每个待测输出变量,均将待测输出变量和对应的目标输出变量的输出变量值一起输入初始比较代码,得到比较代码,比较代码能够用于比较输出变量值和待测输出变量的变量值,在比较代码运行后可以自动得到运行结果,有利于提高函数测试的效率。
在一个示例性的实施例中,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果,包括:在多个测试用例各自对应的运行结果均为通过的情况下,确定待测函数的测试结果为测试通过。
其中,采用多个测试用例,从多个角度对待测函数进行测试,在多个测试用例的运行结果均为通过的情况下,确定待测函数的测试结果为测试通过,有利于提高测试结果的准确性。
如图3所示为一个实施例中对待测函数进行函数测试的方法流程示意图。其中,测试用例包括3个,运行代码生成工具,在不同的测试用例下,生成不同的测试代码,分别运行3个测试代码,得到每个测试代码各自对应的运行结果,由3个运行结果,确定出待测函数的测试结果。
在一些实施例中,还可以按照上述方法得到待测代码对应的代码生成工具,以及待测代码对应的测试代码,待测代码中包括多个待测函数,采用多个测试用例各自对应的测试代码对待测代码进行测试,在多个测试用例的运行结果均为通过的情况下,确定待测代码的测试结果为测试通过。
为详细说明本方案中函数测试方法及效果,下面以一个最详细实施例进行说明:
终端获取待测函数、包含参考函数的参考代码和多个测试用例,待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数。例如,参考代码为采用FORTRAN或者Java语言开发的代码,待测函数为采用C++开发的代码。
如图4所示为一个实施例中函数测试方法的总体流程示意图。终端解析参考代码,得到多个候选函数和多个候选变量,获取预先设置的函数映射关系,根据函数映射关系,从多个候选函数中确定出与待测函数对应的目标候选函数,并作为参考函数。
终端解析参考函数,得到参考函数的逻辑代码,以及多个候选变量与参考函数之间的调用关系,根据调用关系,在多个候选变量中确定出参考函数的输入变量和输出变量。基于输入变量,确定第一测试语句,基于逻辑代码,确定第二测试语句,基于输出变量,确定第三测试语句,基于第一测试语句、第二测试语句和第三测试语句,得到代码生成工具。
终端针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值。解析待测函数,得到待测输入变量和待测输出变量,将输入变量值作为待测输入变量的待测输入变量值。在参考函数的输出变量的数量和待测输出变量的数量均为多个的情况下,获取预先设置的变量映射关系,根据变量映射关系,在多个输出变量中分别确定出多个待测输出变量各自对应的目标输出变量。针对每个待测输出变量,将待测输出变量和待测输出变量对应的目标输出变量的输出变量值一起输入初始比较代码,得到待测输出变量对应的变量比较代码,基于多个待测输出变量各自对应的变量比较代码,确定比较代码。
终端基于待测输入变量、待测输入变量值和比较代码,在代码生成工具运行后,生成测试用例对应的测试代码。获取多个测试用例各自对应的测试代码的运行结果,在多个测试用例各自对应的运行结果均为通过的情况下,确定待测函数的测试结果为测试通过。
上述函数测试方法,通过获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数,改造参考代码,得到代码生成工具,代码生成工具在基于测试用例运行过程中自动生成参考函数的输入变量值和输出变量值,基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,自动生成测试用例对应的测试代码,多个测试用例的测试代码在运行后,将确定出待测函数的测试结果,实现了测试用例数据和测试代码的自动化批量化生成,有利于提高函数测试效率。同时,快速完成新软件单元测试工作,节约大量人力和物力,提高单元测试质量和效率。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的函数测试方法的函数测试装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个函数测试装置实施例中的具体限定可以参见上文中对于函数测试方法的限定,在此不再赘述。
在一个示例性的实施例中,如图5所示,提供了一种函数测试装置500,包括:获取模块520、改造模块540、生成模块560和测试模块580,其中:
获取模块520,用于获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数;
改造模块540,用于对参考代码进行改造处理,得到代码生成工具;
生成模块560,用于针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值;基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码;
测试模块580,用于获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果。
上述函数测试装置,通过获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数,改造参考代码,得到代码生成工具,代码生成工具在基于测试用例运行过程中自动生成参考函数的输入变量值和输出变量值,基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,自动生成测试用例对应的测试代码,多个测试用例的测试代码在运行后,将确定出待测函数的测试结果,实现了测试用例数据和测试代码的自动化批量化生成,有利于提高函数测试效率。
在一个实施例中,对参考代码进行改造处理,得到代码生成工具,改造模块540还用于:解析参考代码,得到参考函数的输入变量、输出变量和逻辑代码;基于输入变量,确定第一测试语句;基于逻辑代码,确定第二测试语句;基于输出变量,确定第三测试语句;基于第一测试语句、第二测试语句和第三测试语句,得到代码生成工具。
在一个实施例中,解析参考代码,得到参考函数的输入变量、输出变量和逻辑代码,改造模块540还用于:解析参考代码,得到多个候选函数和多个候选变量;获取预先设置的函数映射关系,根据函数映射关系,从多个候选函数中确定出与待测函数对应的目标候选函数,并作为参考函数;解析参考函数,得到参考函数的逻辑代码,以及多个候选变量与参考函数之间的调用关系;根据调用关系,在多个候选变量中确定出参考函数的输入变量和输出变量。
在一个实施例中,基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码,生成模块560还用于:解析待测函数,得到待测输入变量和待测输出变量;将输入变量值作为待测输入变量的待测输入变量值;基于输出变量值和待测输出变量,确定比较代码;基于待测输入变量、待测输入变量值和比较代码,在代码生成工具运行后,生成测试用例对应的测试代码。
在一个实施例中,参考函数的输出变量的数量和待测输出变量的数量均为多个;基于输出变量值和待测输出变量,确定比较代码,生成模块560还用于:获取预先设置的变量映射关系,根据变量映射关系,在多个输出变量中分别确定出多个待测输出变量各自对应的目标输出变量;针对每个待测输出变量,将待测输出变量和待测输出变量对应的目标输出变量的输出变量值一起输入初始比较代码,得到待测输出变量对应的变量比较代码;基于多个待测输出变量各自对应的变量比较代码,确定比较代码。
在一个实施例中,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果,测试模块580还用于:在多个测试用例各自对应的运行结果均为通过的情况下,确定待测函数的测试结果为测试通过。
上述函数测试装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个示例性的实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图6所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种函数测试方法。
本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个示例性的实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数;对参考代码进行改造处理,得到代码生成工具;针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值;基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码;获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
解析参考代码,得到参考函数的输入变量、输出变量和逻辑代码;基于输入变量,确定第一测试语句;基于逻辑代码,确定第二测试语句;基于输出变量,确定第三测试语句;基于第一测试语句、第二测试语句和第三测试语句,得到代码生成工具。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
解析参考代码,得到多个候选函数和多个候选变量;获取预先设置的函数映射关系,根据函数映射关系,从多个候选函数中确定出与待测函数对应的目标候选函数,并作为参考函数;解析参考函数,得到参考函数的逻辑代码,以及多个候选变量与参考函数之间的调用关系;根据调用关系,在多个候选变量中确定出参考函数的输入变量和输出变量。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
解析待测函数,得到待测输入变量和待测输出变量;将输入变量值作为待测输入变量的待测输入变量值;基于输出变量值和待测输出变量,确定比较代码;基于待测输入变量、待测输入变量值和比较代码,在代码生成工具运行后,生成测试用例对应的测试代码。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
参考函数的输出变量的数量和待测输出变量的数量均为多个;获取预先设置的变量映射关系,根据变量映射关系,在多个输出变量中分别确定出多个待测输出变量各自对应的目标输出变量;针对每个待测输出变量,将待测输出变量和待测输出变量对应的目标输出变量的输出变量值一起输入初始比较代码,得到待测输出变量对应的变量比较代码;基于多个待测输出变量各自对应的变量比较代码,确定比较代码。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
在多个测试用例各自对应的运行结果均为通过的情况下,确定待测函数的测试结果为测试通过。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数;对参考代码进行改造处理,得到代码生成工具;针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值;基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码;获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
解析参考代码,得到参考函数的输入变量、输出变量和逻辑代码;基于输入变量,确定第一测试语句;基于逻辑代码,确定第二测试语句;基于输出变量,确定第三测试语句;基于第一测试语句、第二测试语句和第三测试语句,得到代码生成工具。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
解析参考代码,得到多个候选函数和多个候选变量;获取预先设置的函数映射关系,根据函数映射关系,从多个候选函数中确定出与待测函数对应的目标候选函数,并作为参考函数;解析参考函数,得到参考函数的逻辑代码,以及多个候选变量与参考函数之间的调用关系;根据调用关系,在多个候选变量中确定出参考函数的输入变量和输出变量。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
解析待测函数,得到待测输入变量和待测输出变量;将输入变量值作为待测输入变量的待测输入变量值;基于输出变量值和待测输出变量,确定比较代码;基于待测输入变量、待测输入变量值和比较代码,在代码生成工具运行后,生成测试用例对应的测试代码。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
参考函数的输出变量的数量和待测输出变量的数量均为多个;获取预先设置的变量映射关系,根据变量映射关系,在多个输出变量中分别确定出多个待测输出变量各自对应的目标输出变量;针对每个待测输出变量,将待测输出变量和待测输出变量对应的目标输出变量的输出变量值一起输入初始比较代码,得到待测输出变量对应的变量比较代码;基于多个待测输出变量各自对应的变量比较代码,确定比较代码。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
在多个测试用例各自对应的运行结果均为通过的情况下,确定待测函数的测试结果为测试通过。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取待测函数、包含参考函数的参考代码和多个测试用例;待测函数和参考函数为基于不同语言编写的,且具有相同功能的函数;对参考代码进行改造处理,得到代码生成工具;针对每个测试用例,获取代码生成工具在基于测试用例运行过程中得到的参考函数的输入变量值和输出变量值;基于输入变量值、输出变量值和待测函数,在代码生成工具运行后,生成测试用例对应的测试代码;获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到待测函数的测试结果。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
解析参考代码,得到参考函数的输入变量、输出变量和逻辑代码;基于输入变量,确定第一测试语句;基于逻辑代码,确定第二测试语句;基于输出变量,确定第三测试语句;基于第一测试语句、第二测试语句和第三测试语句,得到代码生成工具。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
解析参考代码,得到多个候选函数和多个候选变量;获取预先设置的函数映射关系,根据函数映射关系,从多个候选函数中确定出与待测函数对应的目标候选函数,并作为参考函数;解析参考函数,得到参考函数的逻辑代码,以及多个候选变量与参考函数之间的调用关系;根据调用关系,在多个候选变量中确定出参考函数的输入变量和输出变量。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
解析待测函数,得到待测输入变量和待测输出变量;将输入变量值作为待测输入变量的待测输入变量值;基于输出变量值和待测输出变量,确定比较代码;基于待测输入变量、待测输入变量值和比较代码,在代码生成工具运行后,生成测试用例对应的测试代码。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
参考函数的输出变量的数量和待测输出变量的数量均为多个;获取预先设置的变量映射关系,根据变量映射关系,在多个输出变量中分别确定出多个待测输出变量各自对应的目标输出变量;针对每个待测输出变量,将待测输出变量和待测输出变量对应的目标输出变量的输出变量值一起输入初始比较代码,得到待测输出变量对应的变量比较代码;基于多个待测输出变量各自对应的变量比较代码,确定比较代码。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
在多个测试用例各自对应的运行结果均为通过的情况下,确定待测函数的测试结果为测试通过。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要符合相关规定。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (10)

1.一种函数测试方法,其特征在于,所述方法包括:
获取待测函数、包含参考函数的参考代码和多个测试用例;所述待测函数和所述参考函数为基于不同语言编写的,且具有相同功能的函数;
对所述参考代码进行改造处理,得到代码生成工具;
针对每个测试用例,获取所述代码生成工具在基于所述测试用例运行过程中得到的所述参考函数的输入变量值和输出变量值;基于所述输入变量值、所述输出变量值和所述待测函数,在所述代码生成工具运行后,生成所述测试用例对应的测试代码;
获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到所述待测函数的测试结果。
2.根据权利要求1所述的方法,其特征在于,所述对所述参考代码进行改造处理,得到代码生成工具,包括:
解析所述参考代码,得到所述参考函数的输入变量、输出变量和逻辑代码;
基于所述输入变量,确定第一测试语句;基于所述逻辑代码,确定第二测试语句;基于所述输出变量,确定第三测试语句;
基于所述第一测试语句、所述第二测试语句和所述第三测试语句,得到代码生成工具。
3.根据权利要求2所述的方法,其特征在于,所述解析所述参考代码,得到所述参考函数的输入变量、输出变量和逻辑代码,包括:
解析所述参考代码,得到多个候选函数和多个候选变量;
获取预先设置的函数映射关系,根据所述函数映射关系,从所述多个候选函数中确定出与所述待测函数对应的目标候选函数,并作为参考函数;
解析所述参考函数,得到所述参考函数的逻辑代码,以及多个候选变量与所述参考函数之间的调用关系;
根据所述调用关系,在所述多个候选变量中确定出所述参考函数的输入变量和输出变量。
4.根据权利要求1所述的方法,其特征在于,所述基于所述输入变量值、所述输出变量值和所述待测函数,在所述代码生成工具运行后,生成所述测试用例对应的测试代码,包括:
解析所述待测函数,得到待测输入变量和待测输出变量;
将所述输入变量值作为所述待测输入变量的待测输入变量值;
基于所述输出变量值和所述待测输出变量,确定比较代码;
基于所述待测输入变量、所述待测输入变量值和所述比较代码,在所述代码生成工具运行后,生成所述测试用例对应的测试代码。
5.根据权利要求4所述的方法,其特征在于,所述参考函数的输出变量的数量和所述待测输出变量的数量均为多个;所述基于所述输出变量值和所述待测输出变量,确定比较代码,包括:
获取预先设置的变量映射关系,根据所述变量映射关系,在多个输出变量中分别确定出多个待测输出变量各自对应的目标输出变量;
针对每个待测输出变量,将所述待测输出变量和所述待测输出变量对应的目标输出变量的输出变量值一起输入初始比较代码,得到所述待测输出变量对应的变量比较代码;
基于多个待测输出变量各自对应的变量比较代码,确定比较代码。
6.根据权利要求1所述的方法,其特征在于,所述基于多个测试用例各自对应的运行结果,得到所述待测函数的测试结果,包括:
在多个测试用例各自对应的运行结果均为通过的情况下,确定所述待测函数的测试结果为测试通过。
7.一种函数测试装置,其特征在于,所述装置包括:
获取模块,用于获取待测函数、包含参考函数的参考代码和多个测试用例;所述待测函数和所述参考函数为基于不同语言编写的,且具有相同功能的函数;
改造模块,用于对所述参考代码进行改造处理,得到代码生成工具;
生成模块,用于针对每个测试用例,获取所述代码生成工具在基于所述测试用例运行过程中得到的所述参考函数的输入变量值和所述输出变量值;基于所述输入变量值、所述输出变量值和所述待测函数,在所述代码生成工具运行后,生成所述测试用例对应的测试代码;
测试模块,用于获取多个测试用例各自对应的测试代码的运行结果,基于多个测试用例各自对应的运行结果,得到所述待测函数的测试结果。
8.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述的方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
10.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
CN202410051584.9A 2024-01-15 2024-01-15 函数测试方法、装置、计算机设备和存储介质 Pending CN117951010A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410051584.9A CN117951010A (zh) 2024-01-15 2024-01-15 函数测试方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410051584.9A CN117951010A (zh) 2024-01-15 2024-01-15 函数测试方法、装置、计算机设备和存储介质

Publications (1)

Publication Number Publication Date
CN117951010A true CN117951010A (zh) 2024-04-30

Family

ID=90797626

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410051584.9A Pending CN117951010A (zh) 2024-01-15 2024-01-15 函数测试方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN117951010A (zh)

Similar Documents

Publication Publication Date Title
CN111722839B (zh) 一种代码生成方法、装置、电子设备及存储介质
CN107239392B (zh) 一种测试方法、装置、终端及存储介质
CN108984155B (zh) 数据处理流程设定方法和装置
WO2021217846A1 (zh) 接口数据处理方法、装置、计算机设备和存储介质
CN112558942A (zh) 算子注册方法和相关产品
JP2017174418A (ja) モデルチェックのためのデータ構造抽象化
CN114579452A (zh) 接口影响检测方法及相关设备
US10324822B1 (en) Data analytics in a software development cycle
CN115033434B (zh) 一种内核性能理论值计算方法、装置及存储介质
CN117951010A (zh) 函数测试方法、装置、计算机设备和存储介质
CN115114230A (zh) 一种文件测试方法、系统、电子设备及可读存储介质
CN114895895A (zh) 模型开发方法、装置、计算机设备和存储介质
CN113377648A (zh) 软件系统诊断方法、装置、电子设备及计算机可读介质
CN116594918B (zh) 一种测试用例变更影响分析方法、装置、设备及存储介质
CN114661301B (zh) 图形处理单元编译方法、装置、编译加速库和存储介质
CN118092929A (zh) 寄存器描述文件转换方法、装置、计算机设备和存储介质
CN118132443A (zh) 批处理测试文件的构造方法、装置和计算机设备
CN117130909A (zh) 测试分析方法、装置、设备、存储介质和程序产品
CN117236423A (zh) 核函数调用方法、装置、设备、存储介质和程序产品
CN116737541A (zh) 测试定位方法、装置、计算机设备和计算机存储介质
CN117057340A (zh) 报表解析方法、装置、计算机设备和存储介质
CN113342696A (zh) 一种单元测试方法及装置、存储介质
CN117707937A (zh) 单元测试的方法、装置、电子设备及介质
CN116880852A (zh) 基于机器学习的代码数据检查方法、装置及计算机设备
CN117435478A (zh) 程序逻辑功能检测方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination