一种基于源代码的动态测试的方法、系统、设备及介质技术方案

技术编号:26170561 阅读:16 留言:0更新日期:2020-10-31 13:38
本发明专利技术公开了一种基于源代码的动态测试的方法、系统、设备和存储介质,方法包括以下步骤:对源代码进行扫描,确定需要进行测试的代码;扫描需要进行测试的代码中的各个原函数,并基于原函数创建同名拦截函数,将原函数改名并包含在同名拦截函数中;响应于接收到测试原函数的指令,将指令发送到同名拦截函数,并基于同名拦截函数将指令发送到改名后的原函数中以对改名后的原函数进行测试;以及基于改名后的原函数将测试结果返回同名拦截函数,并基于同名拦截函数对测试结果进行展示。本发明专利技术提出的方案通过创建同名拦截函数,提高了动态测试的细化程度和测试工作的效率,降低了测试成本。

【技术实现步骤摘要】
一种基于源代码的动态测试的方法、系统、设备及介质
本专利技术涉及测试领域,更具体地,特别是指一种基于源代码的动态测试的方法、系统、计算机设备及可读介质。
技术介绍
在一个标准的开发流程中,程序在编码完成后,都需要进行复杂的测试和调试过程,以及时发现代码中存在的漏洞和错误,并加以修复,以确保最后发布的版本是安全稳定的。目前市面上主要的测试方法,依据目标运行状态划分有静态测试和动态测试两种。其中,动态测试是使用较多的一种测试方法,其着重于检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能,但是其对于不存在预期结果,或初始设计下输入数据/输出结果就存在问题的情况适应性不好,需要其他提高输入数据覆盖面和动态检查测试结果的技术和方法的支持。同时动态测试一般在模块/功能编写完成后的测试时使用,其测试细化程度一般仅限于模块/功能一级,而不能更加细化的对函数方法等进行测试。
技术实现思路
有鉴于此,本专利技术实施例的目的在于提出一种基于源代码的动态测试的方法、系统、计算机设备及计算机可读存储介质,通过创建同名拦截函数,使得动态测试能够对函数方法进行测试,提高了动态测试的细化程度和测试工作的效率,并降低了测试成本。基于上述目的,本专利技术实施例的一方面提供了一种基于源代码的动态测试的方法,包括如下步骤:对源代码进行扫描,确定需要进行测试的代码;扫描所述需要进行测试的代码中的各个原函数,并基于所述原函数创建同名拦截函数,将所述原函数改名并包含在所述同名拦截函数中;响应于接收到测试所述原函数的指令,将所述指令发送到所述同名拦截函数,并基于所述同名拦截函数将所述指令发送到改名后的原函数中以对所述改名后的原函数进行测试;以及基于改名后的原函数将测试结果返回所述同名拦截函数,并基于所述同名拦截函数对所述测试结果进行展示。在一些实施方式中,所述基于所述同名拦截函数对所述测试结果进行展示包括:将所述测试结果与预期测试结果进行比对以判断所述测试结果中是否存在异常;响应于所述测试结果中存在异常,记录所述异常并确定所述原函数产生异常的原因。在一些实施方式中,所述基于所述同名拦截函数将所述指令发送到改名后的原函数中以对所述改名后的原函数进行测试包括:创建函数表,响应于每次对原函数进行测试,创建记录标识,将所述记录标识与所述原函数进行关联并写入所述函数表中。在一些实施方式中,所述基于所述同名拦截函数将所述指令发送到改名后的原函数中以对所述改名后的原函数进行测试还包括:查询测试记录中上一个测试原函数是否与当前原函数相同。在一些实施方式中,所述基于所述同名拦截函数将所述指令发送到改名后的原函数中以对所述改名后的原函数进行测试还包括:响应于上一个测试原函数与当前原函数不同,查询是否存在所述当前原函数的父函数的测试记录。在一些实施方式中,所述基于所述同名拦截函数将所述指令发送到改名后的原函数中以对所述改名后的原函数进行测试还包括:响应于存在所述当前原函数的父函数的测试记录,将所述当前原函数的记录标识与所述父函数的记录标识进行关联。在一些实施方式中,将所述当前原函数的记录标识与所述父函数的记录标识进行关联包括:在所述父函数的信息表中添加所述当前原函数的记录标识。本专利技术实施例的另一方面,还提供了一种基于源代码的动态测试系统,包括:扫描模块,配置用于对源代码进行扫描,确定需要进行测试的代码;拦截模块,配置用于扫描所述需要进行测试的代码中的各个原函数,并基于所述原函数创建同名拦截函数,将所述原函数改名并包含在所述同名拦截函数中;测试模块,配置用于响应于接收到测试所述原函数的指令,将所述指令发送到所述同名拦截函数,并基于所述同名拦截函数将所述指令发送到改名后的原函数中以对所述改名后的原函数进行测试;结果模块,配置用于基于改名后的原函数将测试结果返回所述同名拦截函数,并基于所述同名拦截函数对所述测试结果进行展示。本专利技术实施例的又一方面,还提供了一种计算机设备,包括:至少一个处理器;以及存储器,所述存储器存储有可在所述处理器上运行的计算机指令,所述指令由所述处理器执行时实现如上方法的步骤。本专利技术实施例的再一方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有被处理器执行时实现如上方法步骤的计算机程序。本专利技术具有以下有益技术效果:通过创建同名拦截函数,使得动态测试能够对函数方法进行测试,提高了动态测试的细化程度和测试工作的效率,并降低了测试成本。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。图1为本专利技术提供的基于源代码的动态测试的方法的实施例的示意图;图2为本专利技术提供的基于源代码的动态测试的系统的实施例的示意图;图3为本专利技术提供的基于源代码的动态测试的计算机设备的实施例的硬件结构示意图。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本专利技术实施例进一步详细说明。需要说明的是,本专利技术实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本专利技术实施例的限定,后续实施例对此不再一一说明。动态调试是指利用调试器跟踪软件的运行,获取软件在运行中的详细信息,从而跟踪程序执行流程,达到破解、调试等目的。现有动态调试技术需要专门的调试器,如OllyDbg等,对于系统依赖较重,需要人工全程参与。其可以实现直接输入、更改、跟踪、运行程序;观察操作系统内容;查看和修改RAM(RandomAccessMemory,随机存取存储器)内容等功能。动态调试技术依赖人工参与,自动化较困难;并且修改程序执行流程操作复杂,大规模修改程序(如修改每个函数的执行流程以满足高细化程度测试的需求)成本高。APIHook是指应用程序接口拦截技术,用于改变和控制API(ApplicationProgrammingInterface,应用程序接口)执行流程。现有APIHook技术根据实现方法可分为内联Hook,导入表Hook,替换Windows消息处理函数实现Hook等。其核心思想为在程序运行中,当运行到指定函数之前,通过修改跳转地址的方式,跳过原有函数API的代码,跳转到自定义函数进行执行,从而达到改变和控制API执行流程的目的。代码层面可以直接修改/覆盖原始函数的流程进而实现劫持。APIHook技术实现较复杂,实现麻烦;并且APIHook对于自定义的函数拦截效果一般,不适合对程序进行完整的函数拦截和测试工作。本专利技术的主要目的是在产品源代码编写完成后,通过程序自动分析和修改源代码,加入提供动态测试功能的代码,以生成一个专门的可供动态测试的程序版本。可通过对其进行详细的函数级别的功能测本文档来自技高网...

【技术保护点】
1.一种基于源代码的动态测试的方法,其特征在于,包括以下步骤:/n对源代码进行扫描,确定需要进行测试的代码;/n扫描所述需要进行测试的代码中的各个原函数,并基于所述原函数创建同名拦截函数,将所述原函数改名并包含在所述同名拦截函数中;/n响应于接收到测试所述原函数的指令,将所述指令发送到所述同名拦截函数,并基于所述同名拦截函数将所述指令发送到改名后的原函数中以对所述改名后的原函数进行测试;以及/n基于改名后的原函数将测试结果返回所述同名拦截函数,并基于所述同名拦截函数对所述测试结果进行展示。/n

【技术特征摘要】
1.一种基于源代码的动态测试的方法,其特征在于,包括以下步骤:
对源代码进行扫描,确定需要进行测试的代码;
扫描所述需要进行测试的代码中的各个原函数,并基于所述原函数创建同名拦截函数,将所述原函数改名并包含在所述同名拦截函数中;
响应于接收到测试所述原函数的指令,将所述指令发送到所述同名拦截函数,并基于所述同名拦截函数将所述指令发送到改名后的原函数中以对所述改名后的原函数进行测试;以及
基于改名后的原函数将测试结果返回所述同名拦截函数,并基于所述同名拦截函数对所述测试结果进行展示。


2.根据权利要求1所述的方法,其特征在于,所述基于所述同名拦截函数对所述测试结果进行展示包括:
将所述测试结果与预期测试结果进行比对以判断所述测试结果中是否存在异常;
响应于所述测试结果中存在异常,记录所述异常并确定所述原函数产生异常的原因。


3.根据权利要求1所述的方法,其特征在于,所述基于所述同名拦截函数将所述指令发送到改名后的原函数中以对所述改名后的原函数进行测试包括:
创建函数表,响应于每次对原函数进行测试,创建记录标识,将所述记录标识与所述原函数进行关联并写入所述函数表中。


4.根据权利要求3所述的方法,其特征在于,所述基于所述同名拦截函数将所述指令发送到改名后的原函数中以对所述改名后的原函数进行测试还包括:
查询测试记录中上一个测试原函数是否与当前原函数相同。


5.根据权利要求4所述的方法,其特征在于,所述基于所述同名拦截函数将所述指令发送到改名后的原函数中以对所述改名后的原函数进行测试还包括:
响应于上一个测试原函数与当前原函数不同,查询...

【专利技术属性】
技术研发人员:范益
申请(专利权)人:苏州浪潮智能科技有限公司
类型:发明
国别省市:江苏;32

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

1