应用程序性能测试方法、装置和系统转让专利

申请号 : CN201610771814.4

文献号 : CN106354644B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 孙吉平田力闯

申请人 : 北京深思数盾科技股份有限公司

摘要 :

本发明公开了一种应用程序性能测试方法、装置和系统,所述方法包括:执行待分析程序,把实施统计预设性能指标的动态库注入所述待分析程序,该动态库会对待分析程序中的将要统计预设性能指标的特征数据进行定位,以对将要统计所述预设性能指标的特征数据进行解析;在所述待分析程序执行完毕后,输出所述预设性能指标。本发明实施例的技术方案将实施分析预设性能指标的动态库注入所述待分析程序,从而对预设性能指标相关的特征数据进行解析,当所述待分析程序执行完毕时,输出所述预设性能指标,由于本发明的技术方案对预设性能指标相关的特征数据进行解析,对不同.net程序版本均解析为汇编语言代码,因此本发明的技术方案可以兼容不同版本的.net程序。

权利要求 :

1.一种应用程序性能测试方法,其特征在于,所述方法包括:执行待分析程序;

把实施统计预设性能指标的动态库注入所述待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计所述预设性能指标的特征数据进行解析;

在所述待分析程序执行完毕后,输出所述预设性能指标,其中,对待分析程序中的将要统计预设性能指标的特征数据进行定位,包括:挂钩能够加载动态库的系统函数,等待所述动态库加载到内存;

挂钩所述动态库的导出函数,以获得所述导出函数的返回值。

2.根据权利要求1所述的应用程序性能测试方法,其特征在于,所述预设性能指标为包括调用次数在内的调用信息。

3.根据权利要求2所述的方法,其特征在于,所述特征数据包括函数或代码段。

4.根据权利要求1所述的方法,其特征在于,对将要统计所述预设性能指标的特征数据进行解析,包括:将所述返回值指向的第一个函数或代码段替换为自定义函数,并执行所述自定义函数,其中,所述第一个函数或代码段用于解析所述待分析程序的源程序代码。

5.根据权利要求4所述的方法,其特征在于,执行所述自定义函数,包括:解析所述待分析程序的源程序代码;

在解析得到的代码前插入跳转指令,以跳转到性能分析函数;

执行所述性能分析函数,然后再继续执行所述解析得到的代码。

6.根据权利要求5所述的方法,其特征在于,执行所述性能分析函数,包括:统计所述源程序代码中每一个函数或代码段的调用次数,并形成统计报告。

7.根据权利要求6所述的方法,其特征在于,输出所述预设性能指标,包括:将所述统计报告发送到接收统计结果端,以显示所述统计报告。

8.一种应用程序性能测试系统,其特征在于,所述系统包括:执行模块,用于执行待分析程序;

注入模块,用于把实施统计预设性能指标的动态库注入所述待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计所述预设性能指标的特征数据进行解析;

输出模块,用于当所述待分析程序执行完毕时,输出所述预设性能指标,其中,对待分析程序中的将要统计预设性能指标的特征数据进行定位,包括:挂钩能够加载动态库的系统函数,等待所述动态库加载到内存;

挂钩所述动态库的导出函数,以获得所述导出函数的返回值。

9.一种应用程序性能测试设备,其特征在于,所述设备包括如权利要求8所述的应用程序性能测试系统。

说明书 :

应用程序性能测试方法、装置和系统

技术领域

[0001] 本发明涉及应用程序测试技术领域,特别涉及一种应用程序性能测试方法、装置和系统。

背景技术

[0002] 在.NET的程序保护领域中,往往要对一段程序进行保护。如果盲目的采用加壳(shell)等方式进行保护,会对程序性能造成很大的影响,严重时将导致程序无法运行或特别缓慢。比较理想的方法是先对程序的执行进行统筹分析,在分析结果之上进行保护。
[0003] 对于程序的分析方法,目前主要有以下两种:
[0004] 1,采用com组件,利用微软提供的com接口进行程序的性能分析。采用这种方法对程序性能进行分析时,需要设置环境变量,而且这种环境变量同时也是全局变量,会对其它.net程序造成影响。另外对于不同的.net版本需要采用不同的分析方式,兼容性较差,且步骤繁琐,不方便对进程进行性能统计。
[0005] 2,采用mono开源库的,采用这种方法对程序性能进行分析时,需要在待分析的程序中插入分析代码,需要修改源程序,而且这种方法同样对不同的.net版本需要采用不同的分析方式,兼容性较差。
[0006] 可见,现有的对.net程序性能进行分析的方法都存在兼容性较差的问题。

发明内容

[0007] 有鉴于此,本发明的目的是提供一种能够兼容多个.net版本的应用程序性能测试方法、装置和系统。
[0008] 为了实现上述目的,本发明提供了一种应用程序性能测试方法,所述方法包括:执行待分析程序;
[0009] 把实施统计预设性能指标的动态库注入所述待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计所述预设性能指标的特征数据进行解析;
[0010] 在所述待分析程序执行完毕后,输出所述预设性能指标。
[0011] 作为优选,所述预设性能指标为包括调用次数在内的调用信息。
[0012] 作为优选,所述特征数据包括函数或代码段。
[0013] 作为优选,对待分析程序中的将要统计预设性能指标的特征数据进行定位,包括:
[0014] 挂钩能够加载动态库的系统函数,等待所述动态库加载到内存;
[0015] 挂钩所述动态库的导出函数,以获得所述导出函数的返回值。
[0016] 作为优选,把实施统计预设性能指标的动态库注入所述待分析程序,以对将要统计所述预设性能指标的特征数据进行解析,包括:
[0017] 将所述返回值指向的第一个函数或代码段替换为自定义函数,并执行所述自定义函数,其中,所述第一个函数或代码段用于解析所述待分析程序的源程序代码。
[0018] 作为优选,执行所述自定义函数,包括:
[0019] 解析所述待分析程序的源程序代码;
[0020] 在解析得到的代码前插入跳转指令,以跳转到性能分析函数;
[0021] 执行所述性能分析函数,然后再继续执行所述解析得到的代码。
[0022] 作为优选,执行所述性能分析函数,包括:
[0023] 统计所述源程序代码中每一个函数或代码段的调用次数,并形成统计报告。
[0024] 作为优选,输出所述预设性能指标,包括:
[0025] 将所述统计报告发送到接收统计结果端,以显示所述统计报告。
[0026] 本发明还提供一种应用程序性能测试系统,所述系统包括:
[0027] 执行模块,用于执行待分析程序;
[0028] 注入模块,用于把实施统计预设性能指标的动态库注入所述待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计所述预设性能指标的特征数据进行解析;
[0029] 输出模块,用于当所述待分析程序执行完毕时,输出所述预设性能指标。
[0030] 本发明还提供一种应用程序性能测试设备,所述设备包括上述的应用程序性能测试系统。
[0031] 与现有技术相比,本发明具有以下有益效果:本发明实施例的技术方案在执行待分析程序时,以将实施分析预设性能指标的动态库注入所述待分析程序,以对待分析程序中与预设性能指标相关的特征数据进行定位,从而对预设性能指标相关的特征数据进行解析,当所述待分析程序执行完毕时,输出所述预设性能指标,由于本发明的技术方案对预设性能指标相关的特征数据进行解析,对不同.net程序版本均解析为汇编语言代码,因此本发明的技术方案可以兼容不同版本的.net程序。

附图说明

[0032] 图1为本发明的应用程序性能测试方法的实施例一的流程图;
[0033] 图2为本发明的应用程序性能测试方法的实施例二的流程图;
[0034] 图3为本发明的应用程序性能测试系统的实施例的示意图。

具体实施方式

[0035] 下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
[0036] 图1为本发明的应用程序性能测试方法的实施例一的流程图,如图1所示,本实施例的应用程序性能测试方法,具体可以包括如下步骤:
[0037] S101,执行待分析程序;
[0038] 具体地,本实施例为对应用程序性能进行测试,对于特征数据的要统计的预设性能指标可以是特征数据的调用次数等指标,因此在本实施例中,预设性能指标可以为包括调用次数在内的调用信息。在本发明的其他实施例中,预设性能指标还可以是如执行时间等其他性能指标。
[0039] 本实施例在具体实施时,特征数据可以包括函数或代码段。例如,可以统计一函数的调用次数,还可以统计一函数中的某一代码段的调用次数,同理还可以是其他部分的代码段的调用次数。
[0040] S102,把实施统计预设性能指标的动态库注入待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计预设性能指标的特征数据进行解析;
[0041] 具体地,为实施统计,本发明实施例将动态库注入待分析程序,也就是说在系统函数前插入跳转指令,以便于在执行系统函数之前可以执行能够实现统计功能的函数,例如,在系统函数LoadLibraryExW之前插入跳转指令。本实施例为统计函数或代码段统计调用次数,在执行时需要对函数或代码段进行定位,以便于统计其调用次数。在执行待分析程序时,对待分析程序中包含的函数或代码段的调用次数进行统计。需要说明的是,本实施例所指的系统函数,并非是特指某一系统函数,也并非指所有系统函数,而是指能够实现加载动态库功能的系统函数。例如,该系统函数能够将动态库mscorjit.dll或者clrjit.dll等动态库加载到内存。
[0042] S103,在待分析程序执行完毕后,输出预设性能指标。
[0043] 具体地,本实施例中包括接受统计结果端和实施统计端,上述两个步骤S101和S102是在实施统计端实行,本步骤是将实行结果发送至接受统计结果端。在本实施例的待分析程序启动前,可以预先创建文件映射表,当本步骤输出预设性能指标时,直接将预设性能指标作为对象发送至文件映射表中,待输出的预设性能指标搜集完毕,将直接打开结果,使用户对应用程序性能有直观的了解。
[0044] 本发明实施例的技术方案在执行待分析程序时,将实施分析预设性能指标的动态库注入待分析程序,该动态库会对待分析程序中与预设性能指标相关的特征数据进行定位,从而对预设性能指标相关的特征数据进行解析,当待分析程序执行完毕时,输出预设性能指标,由于本发明的技术方案对预设性能指标相关的特征数据进行解析,对不同.net程序版本均解析为汇编语言代码,因此本发明的技术方案可以兼容不同版本的.net程序。
[0045] 图2为本发明的应用程序性能测试方法的实施例二的流程图,本实施例的应用程序性能测试方法在上述实施例一的基础上,进一步更加详细地介绍本发明的技术方案。如图2所示,本实施例的应用程序性能测试方法,具体可以包括如下步骤:
[0046] S201,执行待分析程序;
[0047] 具体地,基于程序的特性,由于程序一般具有模块化的特点,因此用户一般无法直接查看程序的代码来确定函数或代码段的位置,因此只有在执行待分析程序时,才能为函数或代码段定位,以方便统计函数或代码段的调用次数,从而对应用程序的性能进行测试。
[0048] S202,挂钩能够加载动态库的系统函数,以等待所述动态库加载到内存;
[0049] 具体地,本发明实施例中将动态库注入待分析程序以实施统计,也就是说在系统函数前插入跳转指令,以便于在执行系统函数之前可以执行能够实现统计功能的函数,例如,在系统函数LoadLibraryExW之前插入跳转指令。需要说明的是,本实施所指的系统函数,并非是特指某一系统函数,也并非指所有系统函数,而是指能够实现加载动态库功能的系统函数。例如,将动态库mscorjit.dll或者clrjit.dll加载到内存。
[0050] S203,挂钩所述动态库的导出函数,以获得所述导出函数的返回值;
[0051] 具体地,虽然不同的.net版本所包含的动态库不尽相同,但是其导出函数都相同,因此,本发明基于导出函数进行统计,能够兼容不同的.net版本。
[0052] S204,将所述返回值指向的第一个函数或代码段替换为自定义函数,并执行所述自定义函数,其中,所述第一个函数或代码段用于解析所述待分析程序的源程序代码。
[0053] 具体地,自定义函数的作用为在实现第一个函数的功能的同时,还可以在以后程序的执行过程中,在需要分析的函数或代码段前均插入用于分析程序性能的函数。
[0054] 具体地,第一个函数是转换函数。由于.net是一种中间代码,.net程序在执行时,均要将源程序的代码转换成汇编代码,才能执行。返回值指向的第一个函数正是能够将源程序的代码转换成汇编代码。同时,由于第一个函数为转换函数,因此不需要统计其调用次数,因此将第一个函数替换,不会影响本实施例对应用程序性能分析结果的准确性。
[0055] 具体地,步骤S204包括:A,解析待分析程序的源程序代码;B,在解析得到的代码前插入跳转指令,以跳转到性能分析函数;C,执行性能分析函数,然后再继续执行解析得到的代码。
[0056] 就本实施例而言,性能分析函数,主要用于统计函数或代码段的调用次数,在其他实施例中,根据性能指标的不同,性能分析函数的功能也有所不同。这里解析所得到的代码为汇编代码。
[0057] 同时,步骤C包括:统计所述源程序代码中每一个函数或代码段的调用次数,并形成统计报告。
[0058] S205,将所述统计报告发送到接收统计结果端,以显示所述统计报告。
[0059] 具体地,本实施例中包括接受统计结果端和实施统计端,上述两个步骤S201-S204是在实施统计端实行,则本步骤是将实行结果发送至接受统计结果端。在本实施例的待分析程序启动前,可以预先创建文件映射表,当本步骤输出预设性能指标时,直接将预设性能指标作为对象发送至文件映射表中,待输出的预设性能指标搜集完毕,将直接打开结果,使用户对应用程序性能有直观的了解。
[0060] 本发明实施例的技术方案在执行待分析程序时,在待分析程序挂钩自定义函数,在但于在对待分析程序进行转换时,插入跳转指令,跳转到性能分析函数,由于自定义函数所挂钩的导出函数,而对于所有的.net版本的导出函数均相同,因此本发明可以兼容不同版本的.net程序。
[0061] 图3为本发明的应用程序性能测试系统的实施例的示意图,如图3所示,本实施例的应用程序性能测试系统,具体可以包括定位模块31、注入模块32和输出模块33。
[0062] 定位模块31,用于执行待分析程序;
[0063] 注入模块32,用于把实施统计预设性能指标的动态库注入所述待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计所述预设性能指标的特征数据进行解析;
[0064] 输出模块34,用于当所述待分析程序执行完毕时,输出所述预设性能指标。
[0065] 本实施例的应用程序性能测试装置,通过采用上述模块对应用程序的性能进行测试的实现机制与上述图1所示实施例的应用程序性能测试方法的实现机制相同,详细可以参考上述图1所示实施例的记载,在此不再赘述。
[0066] 本发明还提供一种应用程序性能测试设备,系统包括如图3所示的应用程序性能测试系统。
[0067] 以上实施例仅为本发明的示例性实施例,不用于限制本发明,本发明的保护范围由权利要求书限定。本领域技术人员可以在本发明的实质和保护范围内,对本发明做出各种修改或等同替换,这种修改或等同替换也应视为落在本发明的保护范围内。