代码测试方法、装置、电子设备及存储介质制造方法及图纸

技术编号:34605322 阅读:18 留言:0更新日期:2022-08-20 09:09
本发明专利技术实施例涉及软件测试技术领域,公开了一种代码测试方法、装置、电子设备及存储介质。代码测试方法包括:在读取到测试代码的函数替换指令时,根据所述函数替换指令,调用预设的函数替换接口,所述函数替换接口用于将待测函数编译后的二进制代码的首部分替换为替换函数的长调用二进制指令;执行替换后的所述待测函数的二进制代码,得到所述替换函数的执行结果;将所述替换函数的执行结果返回给所述待测函数。使得能够动态替换相关调用函数,虚拟出原来无法覆盖到的测试逻辑,提高了代码覆盖率。盖率。盖率。

【技术实现步骤摘要】
代码测试方法、装置、电子设备及存储介质


[0001]本专利技术实施例涉及软件测试
,特别涉及一种代码测试方法、装置、电子设备及存储介质。

技术介绍

[0002]软件测试作为软件开发过程中的一个重要环节,按测试的范围可以分为单元测试、功能测试等。在软件测试的过程中,为了提高代码覆盖率,很多高级编程语言提出了基于mock技术的测试框架,即用反射机制或者编程语言的多态机制来模拟函数的数据输入和输出,而低级编程语言由于无法支持反射机制和多态机制,因此,一般是通过在代码编译预处理阶段替换掉待测函数相关的数据输入输出函数来实现。
[0003]然而,代码编译预处理阶段的替换后,复杂函数在进行软件测试时,代码覆盖率仍然比较低。

技术实现思路

[0004]本专利技术实施例的目的在于提供一种代码测试方法、装置、电子设备及存储介质,使得能够动态替换相关调用函数,虚拟出原来无法覆盖到的测试逻辑,提高了代码覆盖率。
[0005]为达到上述目的,本专利技术的实施例提供了一种代码测试方法,包括:在读取到测试代码的函数替换指令时,根据所述函数替换指令,调用预设的函数替换接口,所述函数替换接口用于将待测函数编译后的二进制代码的首部分替换为替换函数的长调用二进制指令;执行替换后的所述待测函数的二进制代码,得到所述替换函数的执行结果;将所述替换函数的执行结果返回给所述待测函数。
[0006]为达到上述目的,本专利技术的实施例还提供了一种代码测试装置,包括:替换模块,用于在读取到测试代码的函数替换指令时,根据所述函数替换指令,调用预设的函数替换接口,所述函数替换接口用于将待测函数编译后的二进制代码的首部分替换为替换函数的长调用二进制指令;执行模块,用于读取替换后的所述待测函数的二进制代码并执行,得到所述替换函数的执行结果;结果返回模块,用于将所述替换函数的执行结果返回给所述待测函数。
[0007]为达到上述目的,本专利技术的实施例还提供了一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上所述的代码测试方法。
[0008]为达到上述目的,本专利技术的实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的代码测试方法。
[0009]本专利技术实施例提供的代码测试方法,在执行测试代码的过程中,若是读取到测试代码中的函数替换指令,则根据函数替换指令,调用预设的函数替换接口,使得待测函数编译后的二进制代码的首部分被替换为替换函数的长调用二进制指令,这样当读取并执行待
测函数的编译后的二进制代码时,会动态地转向对替换函数的调用,得到替换函数的执行结果,接着通过将替换函数的执行结果返回给待测函数,实现执行结果对外表现为待测函数的执行结果,使得通过执行结果给出的测试结果对替换无感知。并且此时替换函数的设置不会受到低级语言的编译过程限制,能够灵活、动态地设置替换函数以虚拟出相应的测试场景,尤其是待测函数所针对的异常场景,这样被测函数所有逻辑都能够运行的到,提高了代码覆盖率。
附图说明
[0010]一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
[0011]图1是本专利技术一实施例中提供的代码测试方法的流程图;
[0012]图2是本专利技术另一实施例中提供的包括根据函数替换指令确定地址的步骤代码测试方法的流程图;
[0013]图3是本专利技术另一实施例中提供的包括在存储空间中预存信息的步骤代码测试方法的流程图;
[0014]图4是本专利技术另一实施例中提供的包括将当前最新的标识更新到全局变量的步骤代码测试方法的流程图;
[0015]图5是本专利技术另一实施例中提供的包括读取堆栈寄存器的步骤代码测试方法的流程图;
[0016]图6是本专利技术另一实施例中提供的包括将下一条指令的地址写入存储空间并与标识绑定的步骤代码测试方法的流程图;
[0017]图7是本专利技术另一实施例中提供的代码测试装备的结构示意图;
[0018]图8是本专利技术另一实施例中提供的电子设备的结构示意图。
具体实施方式
[0019]由
技术介绍
可知,低级编程语言,如C语言,通过在代码编译预处理阶段的替换待测函数,对复杂函数的代码覆盖率提升效果很有限。
[0020]经分析发现,出现上述问题的原因之一在于:在代码编译预处理阶段替换掉待测函数会导致编译后的二进制文件中需要执行待测函数的地方均被统一替换,虽然能够通过替换函数覆盖部分原来未覆盖的场景,但是其他场景对被替换函数的调用也会受到影响,影响代码覆盖率,这一影响在复杂函数中的表现尤为明显。
[0021]为解决上述问题,本专利技术实施例提供了一种代码测试方法,包括:在读取到测试代码的函数替换指令时,根据所述函数替换指令,调用预设的函数替换接口,所述函数替换接口用于将待测函数编译后的二进制代码的首部分替换为替换函数的长调用二进制指令;执行替换后的所述待测函数的二进制代码,得到所述替换函数的执行结果;将所述替换函数的执行结果返回给所述待测函数。
[0022]本专利技术实施例提供的代码测试方法,在执行测试代码的过程中,若是读取到测试代码中的函数替换指令,则根据函数替换指令,调用预设的函数替换接口,使得待测函数编
译后的二进制代码的首部分被替换为替换函数的长调用二进制指令,这样当读取并执行待测函数的编译后的二进制代码时,会动态地转向对替换函数的调用,得到替换函数的执行结果,接着通过将替换函数的执行结果返回给待测函数,实现执行结果对外表现为待测函数的执行结果,使得通过执行结果给出的测试结果对替换无感知。并且此时替换函数的设置不会受到低级语言的编译过程限制,能够灵活、动态地设置替换函数以虚拟出相应的测试场景,尤其是待测函数所针对的异常场景,这样被测函数所有逻辑都能够运行的到,提高了代码覆盖率。
[0023]为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合附图对本专利技术的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本专利技术各实施例中,为了使读者更好地理解本专利技术而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本专利技术所要求保护的技术方案。
[0024]以下各个实施例的划分是为了描述方便,不应对本专利技术的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
[0025]本专利技术实施例一方面提供了一种代码测试方法,应用于计算机、服务器等电子设备。其流程如图1所示。
[0026]步骤101,在读取到测试代码的函数替换指令时,根据函数替换指令,调用预设的函数替换接口,函数替换接口用于将待测函数编译后的二进制代码的首部分替换为替换函数的长本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码测试方法,其特征在于,包括:在读取到测试代码的函数替换指令时,根据所述函数替换指令,调用预设的函数替换接口,所述函数替换接口用于将待测函数编译后的二进制代码的首部分替换为替换函数的长调用二进制指令;执行替换后的所述待测函数的二进制代码,得到所述替换函数的执行结果;将所述替换函数的执行结果返回给所述待测函数。2.根据权利要求1所述的代码测试方法,其特征在于,所述根据所述函数替换指令,调用预设的函数替换接口,包括:根据所述函数替换指令,确定所述待测函数编译后的二进制代码的地址和所述替换函数编译后的二进制代码的地址;将所述待测函数编译后的二进制代码的地址和所述替换函数编译后的二进制代码的地址作为所述函数替换接口的输入,调用所述函数替换接口增加所述待测函数编译后的二进制代码的地址的写权限并将所述待测函数编译后的二进制代码的地址上的二进制代码中的首部分替换为包含所述替换函数编译后的二进制代码的地址的长调用二进制指令。3.根据权利要求1或2所述的代码测试方法,其特征在于,所述函数替换接口还用于为所述待测函数编译后的二进制代码的首部分绑定标识,所述根据所述函数替换指令,调用预设的函数替换接口之后,所述方法还包括:将所述待测函数编译后的二进制代码的地址、所述替换函数编译后的二进制代码的地址、所述首部分和所述标识记录在预设的存储空间中。4.根据权利要求3所述的代码测试方法,其特征在于,所述根据所述函数替换指令,调用预设的函数替换接口,包括:根据所述函数替换指令,调用所述函数替换接口,为所述待测函数分配所述标识并将所述待测函数编译后的二进制代码中的部分字节修改为所述标识。5.根据权利要求3所述的代码测试方法,其特征在于,所述执行替换后的所述待测函数的二进制代码,得到所述替换函数的执行结果,包括:读取堆栈寄存器记录的所述待测函数编译后的二进制代码的地址;根据所述待测函数编译后的二进制代码的地址,读取替换后的所述待测函数编译后的二进制代码中携带的所述标识;根据所述标识在所述存储空间中进行查询,确定所述首部分并将所述首部分写回所述待测函...

【专利技术属性】
技术研发人员:朱智佳
申请(专利权)人:网宿科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1