掌桥专利:专业的专利平台
掌桥专利
首页

应用程序的测试方法和装置

文献发布时间:2023-06-19 16:04:54



技术领域

本说明书一个或多个实施例涉及计算机技术,尤其涉及应用程序的测试方法和装置。

背景技术

随着网络的快速发展,基于网络产生了各种各样的业务应用。用户只需要在终端设备中下载相应业务应用的应用程序(APP),就可以通过APP实现相应的业务功能,比如,看电影、微信聊天或者购买商品等。

为了保证应用程序能够正常运行,需要对应用程序进行测试,从而发现应用程序的漏洞或者缺陷。目前,在对应用程序进行测试时,通常是获取应用程序针对一个输入所输出的反馈信息,并通过验证该反馈信息来确定应用程序的漏洞或者缺陷。

然而,在很多业务场景下,可能无法获取到一个应用程序在测试过程中发送的针对测试过程的反馈信息,从而导致无法对应用程序进行有效地测试。

发明内容

本说明书一个或多个实施例描述了应用程序的测试方法和装置,能够更有效地对应用程序进行测试。

根据第一方面,提供了一种应用程序的测试方法,其中,包括:

针对待测试应用程序,得到符合该应用程序输入格式的输入数据;

对所述输入数据进行变异,生成符合该应用程序输入格式的坏数据;

将所述坏数据输入至待测试应用程序,以由该待测试应用程序根据该坏数据进行运行;

采集在所述待测试应用程序运行过程中,CPU所执行的各内存地址;

根据所述各内存地址,生成所述待测试应用程序对应所述坏数据的运行路径;

根据所述运行路径,确定所述待测试应用程序的性能。

其中,所述待测试应用程序为TEE中的待测试TA。

其中,将所述坏数据输入至待测试的应用程序包括:通过REE中的SMC驱动发起SMC指令,使得CPU切换为执行所述待测试TA,由REE中的客户端程序CA将所述坏数据传入所述待测试TA。

其中,所述采集在所述待测试应用程序运行过程中CPU所执行的各内存地址,包括:

在所述待测试TA开始运行时,使执行所述待测试TA的CPU进入debug模式,并对该CPU进行调试;

在调试过程中,读写TEE侧内存;

遍历已知的内存范围,查找待测试TA的目标ELF文件的已知内存页;

根据查找到的该已知内存页,确定内存中对应待测试TA的目标地址范围;

在所述目标地址范围内,采集在所述待测试应用程序运行过程中CPU所执行的各内存地址。

其中,所述根据所述内存地址确定所述待测试的应用程序的运行路径,包括:

根据所述CPU所执行的各内存地址的顺序,依次从该各内存地址中读取所述待测试应用程序执行的指令;

根据依次读取的各个指令,生成所述待测试的应用程序的运行路径。

其中,执行至少两轮:从所述得到符合该应用程序输入格式的输入数据的步骤直至所述生成所述待测试应用程序对应所述坏数据的运行路径的步骤,直至遍历所述待测试应用程序的所有运行路径;

所述对所述输入数据进行变异包括:根据上一轮中生成的所述待测试应用程序的运行路径,确定本轮中对输入数据的变异方式,并根据所确定的变异方式,对所述输入数据进行变异;

所述确定所述待测试应用程序的性能,包括:根据至少两轮中得到的至少两条运行路径,确定所述待测试应用程序的性能。

根据第二方面,提供了应用程序的测试装置,其中,包括:

输入数据获取模块,配置为针对待测试应用程序,得到符合该应用程序输入格式的输入数据;

变异模块,配置为对所述输入数据进行变异,生成符合该应用程序输入格式的坏数据;

坏数据输入模块,配置为将所述坏数据输入至待测试应用程序,以由该待测试应用程序根据该坏数据进行运行;

地址采集模块,配置为采集在所述待测试应用程序运行过程中,CPU所执行的各内存地址;

运行路径生成模块,配置为根据所述各内存地址,生成所述待测试应用程序对应所述坏数据的运行路径;

性能获取模块,配置为根据所述运行路径,确定所述待测试应用程序的性能。

其中,所述地址采集模块被配置为执行:

在所述待测试TA开始运行时,使执行所述待测试TA的CPU进入debug模式,并对该CPU进行调试;

在调试过程中,读写TEE侧内存;

遍历已知的内存范围,查找待测试TA的目标ELF文件的已知内存页;

根据查找到的该已知内存页,确定内存中对应待测试TA的目标地址范围;

在所述目标地址范围内,采集在所述待测试应用程序运行过程中CPU所执行的各内存地址。

其中,所述运行路径生成模块被配置为执行:

根据所述CPU所执行的各内存地址的顺序,依次从该各内存地址中读取所述待测试应用程序执行的指令;

根据依次读取的各个指令,生成所述待测试的应用程序的运行路径。

根据第三方面,提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现本说明书任一实施例所述的方法。

本说明书实施例提供的方法和装置在对待测试应用程序进行测试时,无需获取该应用程序在测试过程中发送的针对测试过程的反馈信息,也就是说无需根据该反馈信息进行测试,而是首先获取在待测试应用程序运行过程中,CPU所执行的各内存地址,然后再根据各内存地址生成所述待测试应用程序的运行路径,也就是待测试应用程序针对当前输入的执行流程,这样,根据此种运行路径/执行流程,经过多轮测试,就可以得到待测试应用程序在各种输入下的执行流程,从而就可以确定待测试应用程序的性能。可见,本说明书实施例的方法能够更为有效地对待测试应用程序进行测试。

附图说明

为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本说明书一个实施例中应用程序的测试方法的流程图。

图2是本说明书一个实施例中应用于待测试TA的测试系统的组成示意图。

图3是本说明书一个实施例中采集在待测试TA运行过程中CPU所执行的各内存地址的方法的流程图。

图4是本说明书一个实施例中应用程序的测试装置的结构示意图。

具体实施方式

如前所述,在很多业务场景下,可能无法获取到一个应用程序在测试过程中发送的针对测试过程的反馈信息,从而导致无法对应用程序进行有效地测试。比如,对于设置在可信执行环境(TEE,Trusted Execution Environment)内的可信应用程序(TrustedApplication,TA),因为该TA是在TEE内部运行,因此,即使向该TA发送用于测试的输入,也无法得到TA针对该输入在测试过程中的反馈信息。因此,利用反馈信息的方式无法对应用程序进行有效的测试。

下面结合附图,对本说明书提供的方案进行描述。

图1是本说明书一个实施例中应用程序的测试方法的流程图。该方法的执行主体为应用程序的测试装置。可以理解,该方法也可以通过任何具有计算、处理能力的装置、设备、平台、设备集群来执行。参见图1,该方法包括:

步骤101:针对待测试应用程序,得到符合该应用程序输入格式的输入数据。

步骤103:对所述输入数据进行变异,生成符合该应用程序输入格式的坏数据。

步骤105:将生成的坏数据输入至待测试应用程序,以由该待测试应用程序根据该坏数据进行运行。

步骤107:采集在所述待测试应用程序运行过程中,CPU所执行的各内存地址。

步骤109:根据所述各内存地址,生成所述待测试应用程序对当前坏数据的运行路径。

步骤111:根据所述运行路径,确定所述待测试应用程序的性能。

根据上述图1所示流程可以看出,在对待测试应用程序进行测试时,无需获取该应用程序在测试过程中发送的针对测试过程的反馈信息,也就是说无需根据该反馈信息进行测试,而是首先获取在待测试应用程序运行过程中,CPU所执行的各内存地址,然后再根据各内存地址中的数据生成待测试应用程序的运行路径,也就是待测试应用程序针对当前输入的执行流程,这样,根据此种运行路径/执行流程,经过多轮测试,就可以得到待测试应用程序在各种输入下的各种执行流程,从而就可以确定待测试应用程序的性能。可见,本说明书实施例的方法能够更为有效地对待测试应用程序进行测试。

下面结合具体实施例对图1中的每一个步骤进行说明。

首先对于步骤101:

针对待测试应用程序,得到符合该应用程序输入格式的输入数据。

各种应用程序,其输入数据的格式可能不同,因此,需要根据当前待测试的应用程序,得到相应的合法输入数据。

接下来对于步骤103:对输入数据进行变异,生成符合该应用程序输入格式的坏数据。

本说明书实施例中,通过向待测试应用程序提供非预期的输入即坏数据,监视异常结果来发现待测试应用程序的软件漏洞。

对输入数据进行变异的方式有多种,比如,替换合法输入数据中的一部分字节,或者在合法输入数据中增加或者减少一部分字节等。

接下来对于步骤105:将坏数据输入至待测试应用程序,以由该待测试应用程序根据该坏数据进行运行。

在本说明书一个实施例中,待测试应用程序可以为TEE中的待测试TA。

可以理解,因为待测试TA处于TEE环境中,外部的测试程序就无法直接访问该TA,因此,参见图2,本步骤105中,可以通过REE(Rich Execution Environment,丰富执行环境)中的SMC驱动发起SMC指令,使得CPU切换为执行待测试TA,并由REE中的客户端程序(CA)将坏数据传入待测试TA。

接下来对于步骤107:采集在待测试应用程序运行过程中,CPU所执行的各内存地址。

当待测试应用程序为TEE中的待测试TA时,为了进一步提高采集效率,在本说明书一个实施例中,可以首先确定待测试TA执行时在内存中对应的目标地址范围,然后在该目标地址范围内采集CPU所执行的各内存地址,从而避免在内存的众多地址中进行盲目采集。此时,参见图3,本步骤107的具体实现过程包括:

步骤1071:在待测试TA开始运行时,使执行待测试TA的CPU进入调试(debug)模式,并对该CPU进行调试。

在本说明书一个实施例中,可以通过CoreSight组件来实现步骤1071至步骤1079的过程。

对于一个ARM的多核SoC,可通过在一个CPU上触发CoreSight组件中的CTI(CrossTrigger Interface)使另一个CPU进入debug模式,从而对其进行调试。因此,本步骤1071中,可以在待测试TA开始运行时,使执行待测试TA的CPU进入debug模式,并对该CPU进行调试。

步骤1073:在调试过程中,读写TEE侧内存。

在已有的技术中,是无法读写TEE侧内存的。本说明书实施例中,在执行待测试TA的CPU进入debug模式时,就可以在调试过程中读写TEE侧内存。

步骤1075:遍历已知的内存范围,查找待测试TA对应的目标ELF文件的已知内存页。

步骤1077:根据查找到的该已知内存页,确定内存中对应待测试TA的目标地址范围。

步骤1079:在所述目标地址范围内,采集在待测试应用程序运行过程中CPU所执行的各内存地址。

参见图2,本步骤1079中,可以通过CoreSight组件中的ETM(Embedded TraceMacrocell)来采集在待测试TA运行过程中CPU所执行的各内存地址。具体地,ETM组件可通过配置寄存器,设置过滤选项从而收集到特定CPU即运行待测试应用程序的CPU所执行的内存地址。

接下来,对于步骤109:

根据采集到的CPU所执行的各内存地址,生成待测试应用程序对当前输入的坏数据的运行路径。

在本说明书一个实施例中,步骤109的具体实现过程包括:根据CPU所执行的各内存地址的顺序,依次从该各内存地址中读取待测试应用程序执行的指令;根据依次读取的各个指令,生成待测试的应用程序针对当前坏数据的运行路径。

比如,待测试应用程序包括10对“if else”程序语言,也就是说,总共有100种执行的流程分支,即100种运行路径,当步骤105中输入一种坏数据时,待测试应用程序针对该坏数据进行运行,可能执行了其中10种流程分支,步骤109中生成了对当前坏数据的一种运行路径,该运行路径包括10个流程分支。该种运行路径体现了待测试应用程序针对当前坏数据的运行情况,因此,可以测试出在此种情况下待测试应用程序的性能。

接下来对于步骤111:根据生成的运行路径,确定待测试应用程序的性能。

如前所述,针对一种坏数据,步骤109中可以生成待测试应用程序的一种运行路径,通常该运行路径只能覆盖待测试应用程序的所有路径中的一部分路径,因此,为了更好地完成测试,进行更多路径甚至是全路径覆盖,在本说明书一个实施例中,可以采用模糊测试方法,执行至少两轮上述图1中步骤101至步骤109的过程,直至遍历待测试应用程序的所有运行路径。在每一轮测试中,根据上一轮中生成的待测试应用程序的运行路径,确定本轮中对输入数据的变异方式,并根据所确定的变异方式,对所述输入数据进行变异;最终,根据至少两轮中得到的至少两条运行路径,综合确定待测试应用程序的性能。

比如,在上一轮中,变异方式为:对输入数据替换其中的一部分字节,从而得到坏数据,那么,在本轮中变异方式可以继续为:对输入数据替换其中的另一部分字节,并观察本轮生成的运行路径,如果本轮生成的运行路径与上一轮生成的运行路径大致相同,则说明需要改变变异方式,比如可以在下一轮中,变异方式不再是替换字节的方式,而是改为在输入数据中增加部分字节,从而得到坏数据;当然,如果本轮生成的运行路径与上一轮生成的运行路径大不相同,则可以在下一轮中继续采用替换字节的方式进行变异。

在经过多轮测试得到多个运行路径后,就可以覆盖待测试应用程序的全路径,从而测试出在针对各种输入的坏数据时,待测试的应用程序是否崩溃,是否存在执行错误等问题。

在本说明书的一个实施例中,提供了一种应用程序的测试装置,参见图4,该装置包括:

输入数据获取模块401,配置为针对待测试应用程序,得到符合该应用程序输入格式的输入数据;

变异模块402,配置为对所述输入数据进行变异,生成符合该应用程序输入格式的坏数据;

坏数据输入模块403,配置为将所述坏数据输入至待测试应用程序,以由该待测试应用程序根据该坏数据进行运行;

地址采集模块404,配置为采集在所述待测试应用程序运行过程中,CPU所执行的各内存地址;

运行路径生成模块405,配置为根据所述各内存地址,生成所述待测试应用程序对所述坏数据的运行路径;

性能获取模块406,配置为根据所述运行路径,确定所述待测试应用程序的性能。

在本说明书装置的一个实施例中,待测试应用程序为TEE中的待测试TA;

相应地,坏数据输入模块403被配置为执行:通过REE中的SMC驱动发起SMC指令,使得CPU切换为执行所述待测试TA,由REE中的客户端程序CA将所述坏数据传入所述待测试TA。

在本说明书装置的一个实施例中,地址采集模块404被配置为执行:

在所述待测试TA开始运行时,使执行所述待测试TA的CPU进入debug模式,并对该CPU进行调试;

在调试过程中,读写TEE侧内存;

遍历已知的内存范围,查找待测试TA的目标ELF文件的已知内存页;

根据查找到的该已知内存页,确定内存中对应待测试TA的目标地址范围;

在所述目标地址范围内,采集在所述待测试应用程序运行过程中CPU所执行的各内存地址。

在本说明书装置的一个实施例中,运行路径生成模块405被配置为执行:

根据所述CPU所执行的各内存地址的顺序,依次从该各内存地址中读取所述待测试应用程序执行的指令;

根据依次读取的各个指令,生成所述待测试的应用程序的运行路径。

在本说明书装置的一个实施例中,执行至少两轮测试,性能获取模块406被配置为执行:根据至少两轮测试中得到的至少两条运行路径,确定待测试应用程序的性能;

变异模块402被配置为执行:根据上一轮中生成的所述待测试应用程序的运行路径,确定本轮中对输入数据的变异方式,并根据所确定的变异方式,对所述输入数据进行变异。

本说明书一个实施例提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行说明书中任一个实施例中的方法。

本说明书一个实施例提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现执行说明书中任一个实施例中的方法。

可以理解的是,本说明书实施例示意的结构并不构成对本说明书实施例的装置的具体限定。在说明书的另一些实施例中,上述装置可以包括比图示更多或者更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件、软件或者软件和硬件的组合来实现。

上述装置、系统内的各模块之间的信息交互、执行过程等内容,由于与本说明书方法实施例基于同一构思,具体内容可参见本说明书方法实施例中的叙述,此处不再赘述。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、挂件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。

相关技术
  • 应用程序打包方法、应用程序测试方法、终端及存储介质
  • 应用程序测试系统以及应用程序测试方法
技术分类

06120114693257