CN106354644A - 应用程序性能测试方法、装置和系统 - Google Patents
应用程序性能测试方法、装置和系统 Download PDFInfo
- Publication number
- CN106354644A CN106354644A CN201610771814.4A CN201610771814A CN106354644A CN 106354644 A CN106354644 A CN 106354644A CN 201610771814 A CN201610771814 A CN 201610771814A CN 106354644 A CN106354644 A CN 106354644A
- Authority
- CN
- China
- Prior art keywords
- program
- analyzed
- function
- default capabilities
- capabilities index
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种应用程序性能测试方法、装置和系统,所述方法包括:执行待分析程序,把实施统计预设性能指标的动态库注入所述待分析程序,该动态库会对待分析程序中的将要统计预设性能指标的特征数据进行定位,以对将要统计所述预设性能指标的特征数据进行解析;在所述待分析程序执行完毕后,输出所述预设性能指标。本发明实施例的技术方案将实施分析预设性能指标的动态库注入所述待分析程序,从而对预设性能指标相关的特征数据进行解析,当所述待分析程序执行完毕时,输出所述预设性能指标,由于本发明的技术方案对预设性能指标相关的特征数据进行解析,对不同.net程序版本均解析为汇编语言代码,因此本发明的技术方案可以兼容不同版本的.net程序。
Description
技术领域
本发明涉及应用程序测试技术领域,特别涉及一种应用程序性能测试方法、装置和系统。
背景技术
在.NET的程序保护领域中,往往要对一段程序进行保护。如果盲目的采用加壳(shell)等方式进行保护,会对程序性能造成很大的影响,严重时将导致程序无法运行或特别缓慢。比较理想的方法是先对程序的执行进行统筹分析,在分析结果之上进行保护。
对于程序的分析方法,目前主要有以下两种:
1,采用com组件,利用微软提供的com接口进行程序的性能分析。采用这种方法对程序性能进行分析时,需要设置环境变量,而且这种环境变量同时也是全局变量,会对其它.net程序造成影响。另外对于不同的.net版本需要采用不同的分析方式,兼容性较差,且步骤繁琐,不方便对进程进行性能统计。
2,采用mono开源库的,采用这种方法对程序性能进行分析时,需要在待分析的程序中插入分析代码,需要修改源程序,而且这种方法同样对不同的.net版本需要采用不同的分析方式,兼容性较差。
可见,现有的对.net程序性能进行分析的方法都存在兼容性较差的问题。
发明内容
有鉴于此,本发明的目的是提供一种能够兼容多个.net版本的应用程序性能测试方法、装置和系统。
为了实现上述目的,本发明提供了一种应用程序性能测试方法,所述方法包括:执行待分析程序;
把实施统计预设性能指标的动态库注入所述待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计所述预设性能指标的特征数据进行解析;
在所述待分析程序执行完毕后,输出所述预设性能指标。
作为优选,所述预设性能指标为包括调用次数在内的调用信息。
作为优选,所述特征数据包括函数或代码段。
作为优选,对待分析程序中的将要统计预设性能指标的特征数据进行定位,包括:
挂钩能够加载动态库的系统函数,等待所述动态库加载到内存;
挂钩所述动态库的导出函数,以获得所述导出函数的返回值。
作为优选,把实施统计预设性能指标的动态库注入所述待分析程序,以对将要统计所述预设性能指标的特征数据进行解析,包括:
将所述返回值指向的第一个函数或代码段替换为自定义函数,并执行所述自定义函数,其中,所述第一个函数或代码段用于解析所述待分析程序的源程序代码。
作为优选,执行所述自定义函数,包括:
解析所述待分析程序的源程序代码;
在解析得到的代码前插入跳转指令,以跳转到性能分析函数;
执行所述性能分析函数,然后再继续执行所述解析得到的代码。
作为优选,执行所述性能分析函数,包括:
统计所述源程序代码中每一个函数或代码段的调用次数,并形成统计报告。
作为优选,输出所述预设性能指标,包括:
将所述统计报告发送到接收统计结果端,以显示所述统计报告。
本发明还提供一种应用程序性能测试系统,所述系统包括:
执行模块,用于执行待分析程序;
注入模块,用于把实施统计预设性能指标的动态库注入所述待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计所述预设性能指标的特征数据进行解析;
输出模块,用于当所述待分析程序执行完毕时,输出所述预设性能指标。
本发明还提供一种应用程序性能测试设备,所述设备包括上述的应用程序性能测试系统。
与现有技术相比,本发明具有以下有益效果:本发明实施例的技术方案在执行待分析程序时,以将实施分析预设性能指标的动态库注入所述待分析程序,以对待分析程序中与预设性能指标相关的特征数据进行定位,从而对预设性能指标相关的特征数据进行解析,当所述待分析程序执行完毕时,输出所述预设性能指标,由于本发明的技术方案对预设性能指标相关的特征数据进行解析,对不同.net程序版本均解析为汇编语言代码,因此本发明的技术方案可以兼容不同版本的.net程序。
附图说明
图1为本发明的应用程序性能测试方法的实施例一的流程图;
图2为本发明的应用程序性能测试方法的实施例二的流程图;
图3为本发明的应用程序性能测试系统的实施例的示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
图1为本发明的应用程序性能测试方法的实施例一的流程图,如图1所示,本实施例的应用程序性能测试方法,具体可以包括如下步骤:
S101,执行待分析程序;
具体地,本实施例为对应用程序性能进行测试,对于特征数据的要统计的预设性能指标可以是特征数据的调用次数等指标,因此在本实施例中,预设性能指标可以为包括调用次数在内的调用信息。在本发明的其他实施例中,预设性能指标还可以是如执行时间等其他性能指标。
本实施例在具体实施时,特征数据可以包括函数或代码段。例如,可以统计一函数的调用次数,还可以统计一函数中的某一代码段的调用次数,同理还可以是其他部分的代码段的调用次数。
S102,把实施统计预设性能指标的动态库注入待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计预设性能指标的特征数据进行解析;
具体地,为实施统计,本发明实施例将动态库注入待分析程序,也就是说在系统函数前插入跳转指令,以便于在执行系统函数之前可以执行能够实现统计功能的函数,例如,在系统函数kernelbase!LoadLibraryExW之前插入跳转指令。本实施例为统计函数或代码段统计调用次数,在执行时需要对函数或代码段进行定位,以便于统计其调用次数。在执行待分析程序时,对待分析程序中包含的函数或代码段的调用次数进行统计。需要说明的是,本实施例所指的系统函数,并非是特指某一系统函数,也并非指所有系统函数,而是指能够实现加载动态库功能的系统函数。例如,该系统函数能够将动态库mscorjit.dll或者clrjit.dll等动态库加载到内存。
S103,在待分析程序执行完毕后,输出预设性能指标。
具体地,本实施例中包括接受统计结果端和实施统计端,上述两个步骤S101和S102是在实施统计端实行,本步骤是将实行结果发送至接受统计结果端。在本实施例的待分析程序启动前,可以预先创建文件映射表,当本步骤输出预设性能指标时,直接将预设性能指标作为对象发送至文件映射表中,待输出的预设性能指标搜集完毕,将直接打开结果,使用户对应用程序性能有直观的了解。
本发明实施例的技术方案在执行待分析程序时,将实施分析预设性能指标的动态库注入待分析程序,该动态库会对待分析程序中与预设性能指标相关的特征数据进行定位,从而对预设性能指标相关的特征数据进行解析,当待分析程序执行完毕时,输出预设性能指标,由于本发明的技术方案对预设性能指标相关的特征数据进行解析,对不同.net程序版本均解析为汇编语言代码,因此本发明的技术方案可以兼容不同版本的.net程序。
图2为本发明的应用程序性能测试方法的实施例二的流程图,本实施例的应用程序性能测试方法在上述实施例一的基础上,进一步更加详细地介绍本发明的技术方案。如图2所示,本实施例的应用程序性能测试方法,具体可以包括如下步骤:
S201,执行待分析程序;
具体地,基于程序的特性,由于程序一般具有模块化的特点,因此用户一般无法直接查看程序的代码来确定函数或代码段的位置,因此只有在执行待分析程序时,才能为函数或代码段定位,以方便统计函数或代码段的调用次数,从而对应用程序的性能进行测试。
S202,挂钩能够加载动态库的系统函数,以等待所述动态库加载到内存;
具体地,本发明实施例中将动态库注入待分析程序以实施统计,也就是说在系统函数前插入跳转指令,以便于在执行系统函数之前可以执行能够实现统计功能的函数,例如,在系统函数kernelbase!LoadLibraryExW之前插入跳转指令。需要说明的是,本实施所指的系统函数,并非是特指某一系统函数,也并非指所有系统函数,而是指能够实现加载动态库功能的系统函数。例如,将动态库mscorjit.dll或者clrjit.dll加载到内存。
S203,挂钩所述动态库的导出函数,以获得所述导出函数的返回值;
具体地,虽然不同的.net版本所包含的动态库不尽相同,但是其导出函数都相同,因此,本发明基于导出函数进行统计,能够兼容不同的.net版本。
S204,将所述返回值指向的第一个函数或代码段替换为自定义函数,并执行所述自定义函数,其中,所述第一个函数或代码段用于解析所述待分析程序的源程序代码。
具体地,自定义函数的作用为在实现第一个函数的功能的同时,还可以在以后程序的执行过程中,在需要分析的函数或代码段前均插入用于分析程序性能的函数。
具体地,第一个函数是转换函数。由于.net是一种中间代码,.net程序在执行时,均要将源程序的代码转换成汇编代码,才能执行。返回值指向的第一个函数正是能够将源程序的代码转换成汇编代码。同时,由于第一个函数为转换函数,因此不需要统计其调用次数,因此将第一个函数替换,不会影响本实施例对应用程序性能分析结果的准确性。
具体地,步骤S204包括:A,解析待分析程序的源程序代码;B,在解析得到的代码前插入跳转指令,以跳转到性能分析函数;C,执行性能分析函数,然后再继续执行解析得到的代码。
就本实施例而言,性能分析函数,主要用于统计函数或代码段的调用次数,在其他实施例中,根据性能指标的不同,性能分析函数的功能也有所不同。这里解析所得到的代码为汇编代码。
同时,步骤C包括:统计所述源程序代码中每一个函数或代码段的调用次数,并形成统计报告。
S205,将所述统计报告发送到接收统计结果端,以显示所述统计报告。
具体地,本实施例中包括接受统计结果端和实施统计端,上述两个步骤S201-S204是在实施统计端实行,则本步骤是将实行结果发送至接受统计结果端。在本实施例的待分析程序启动前,可以预先创建文件映射表,当本步骤输出预设性能指标时,直接将预设性能指标作为对象发送至文件映射表中,待输出的预设性能指标搜集完毕,将直接打开结果,使用户对应用程序性能有直观的了解。
本发明实施例的技术方案在执行待分析程序时,在待分析程序挂钩自定义函数,在但于在对待分析程序进行转换时,插入跳转指令,跳转到性能分析函数,由于自定义函数所挂钩的导出函数,而对于所有的.net版本的导出函数均相同,因此本发明可以兼容不同版本的.net程序。
图3为本发明的应用程序性能测试系统的实施例的示意图,如图3所示,本实施例的应用程序性能测试系统,具体可以包括定位模块31、注入模块32和输出模块33。
定位模块31,用于执行待分析程序;
注入模块32,用于把实施统计预设性能指标的动态库注入所述待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计所述预设性能指标的特征数据进行解析;
输出模块34,用于当所述待分析程序执行完毕时,输出所述预设性能指标。
本实施例的应用程序性能测试装置,通过采用上述模块对应用程序的性能进行测试的实现机制与上述图1所示实施例的应用程序性能测试方法的实现机制相同,详细可以参考上述图1所示实施例的记载,在此不再赘述。
本发明还提供一种应用程序性能测试设备,系统包括如图3所示的应用程序性能测试系统。
以上实施例仅为本发明的示例性实施例,不用于限制本发明,本发明的保护范围由权利要求书限定。本领域技术人员可以在本发明的实质和保护范围内,对本发明做出各种修改或等同替换,这种修改或等同替换也应视为落在本发明的保护范围内。
Claims (10)
1.一种应用程序性能测试方法,其特征在于,所述方法包括:
执行待分析程序;
把实施统计预设性能指标的动态库注入所述待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计所述预设性能指标的特征数据进行解析;
在所述待分析程序执行完毕后,输出所述预设性能指标。
2.根据权利要求1所述的应用程序性能测试方法,其特征在于,
所述预设性能指标为包括调用次数在内的调用信息。
3.根据权利要求2所述的方法,其特征在于,所述特征数据包括函数或代码段。
4.根据权利要求1所述的方法,其特征在于,对待分析程序中的将要统计预设性能指标的特征数据进行定位,包括:
挂钩能够加载动态库的系统函数,等待所述动态库加载到内存;
挂钩所述动态库的导出函数,以获得所述导出函数的返回值。
5.根据权利要求4所述的方法,其特征在于,把实施统计预设性能指标的动态库注入所述待分析程序,以对将要统计所述预设性能指标的特征数据进行解析,包括:
将所述返回值指向的第一个函数或代码段替换为自定义函数,并执行所述自定义函数,其中,所述第一个函数或代码段用于解析所述待分析程序的源程序代码。
6.根据权利要求5所述的方法,其特征在于,执行所述自定义函数,包括:
解析所述待分析程序的源程序代码;
在解析得到的代码前插入跳转指令,以跳转到性能分析函数;
执行所述性能分析函数,然后再继续执行所述解析得到的代码。
7.根据权利要求6所述的方法,其特征在于,执行所述性能分析函数,包括:
统计所述源程序代码中每一个函数或代码段的调用次数,并形成统计报告。
8.根据权利要求7所述的方法,其特征在于,输出所述预设性能指标,包括:
将所述统计报告发送到接收统计结果端,以显示所述统计报告。
9.一种应用程序性能测试系统,其特征在于,所述系统包括:
执行模块,用于执行待分析程序;
注入模块,用于把实施统计预设性能指标的动态库注入所述待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计所述预设性能指标的特征数据进行解析;
输出模块,用于当所述待分析程序执行完毕时,输出所述预设性能指标。
10.一种应用程序性能测试设备,其特征在于,所述设备包括如权利要求9所述的应用程序性能测试系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610771814.4A CN106354644B (zh) | 2016-08-30 | 2016-08-30 | 应用程序性能测试方法、装置和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610771814.4A CN106354644B (zh) | 2016-08-30 | 2016-08-30 | 应用程序性能测试方法、装置和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106354644A true CN106354644A (zh) | 2017-01-25 |
CN106354644B CN106354644B (zh) | 2018-12-14 |
Family
ID=57857824
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610771814.4A Active CN106354644B (zh) | 2016-08-30 | 2016-08-30 | 应用程序性能测试方法、装置和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106354644B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107480029A (zh) * | 2017-08-02 | 2017-12-15 | 北京深思数盾科技股份有限公司 | 一种函数调用时间的监控方法及装置 |
CN107506275A (zh) * | 2017-06-21 | 2017-12-22 | 西北大学 | 一种基于arm指令虚拟化的软件防护能耗评估方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011076010A1 (zh) * | 2009-12-24 | 2011-06-30 | 北京飞天诚信科技有限公司 | 在.net程序中注入代码的方法和装置 |
US20130179868A1 (en) * | 2007-05-06 | 2013-07-11 | Compuware Corporation | System And Method For Extracting Instrumentation Relevant Inheritance Relationships For A Distributed, Inheritance Rule Based Instrumentation System |
CN104866416A (zh) * | 2014-02-25 | 2015-08-26 | 腾讯科技(深圳)有限公司 | 实现应用程序性能分析的方法和装置 |
CN105550104A (zh) * | 2015-12-08 | 2016-05-04 | 北京奇虎科技有限公司 | 应用程序性能测试方法及装置 |
CN105653456A (zh) * | 2015-12-31 | 2016-06-08 | 网易(杭州)网络有限公司 | 应用程序性能测试方法、装置和系统 |
-
2016
- 2016-08-30 CN CN201610771814.4A patent/CN106354644B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130179868A1 (en) * | 2007-05-06 | 2013-07-11 | Compuware Corporation | System And Method For Extracting Instrumentation Relevant Inheritance Relationships For A Distributed, Inheritance Rule Based Instrumentation System |
WO2011076010A1 (zh) * | 2009-12-24 | 2011-06-30 | 北京飞天诚信科技有限公司 | 在.net程序中注入代码的方法和装置 |
CN104866416A (zh) * | 2014-02-25 | 2015-08-26 | 腾讯科技(深圳)有限公司 | 实现应用程序性能分析的方法和装置 |
CN105550104A (zh) * | 2015-12-08 | 2016-05-04 | 北京奇虎科技有限公司 | 应用程序性能测试方法及装置 |
CN105653456A (zh) * | 2015-12-31 | 2016-06-08 | 网易(杭州)网络有限公司 | 应用程序性能测试方法、装置和系统 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107506275A (zh) * | 2017-06-21 | 2017-12-22 | 西北大学 | 一种基于arm指令虚拟化的软件防护能耗评估方法 |
CN107506275B (zh) * | 2017-06-21 | 2020-10-27 | 西北大学 | 一种基于arm指令虚拟化的软件防护能耗评估方法 |
CN107480029A (zh) * | 2017-08-02 | 2017-12-15 | 北京深思数盾科技股份有限公司 | 一种函数调用时间的监控方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106354644B (zh) | 2018-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9612943B2 (en) | Prioritization of tests of computer program code | |
Hills et al. | An empirical study of PHP feature usage: a static analysis perspective | |
Alberti et al. | SAFARI: SMT-based abstraction for arrays with interpolants | |
CN103853652B (zh) | 一种测试案例生成方法及装置 | |
CN103970659B (zh) | 基于插桩技术的安卓应用软件自动化测试方法 | |
CN104050080B (zh) | 用户态调试linux内核的方法及系统 | |
CN106909510A (zh) | 一种获取测试用例的方法以及服务器 | |
Chen et al. | Wasai: uncovering vulnerabilities in wasm smart contracts | |
CN103605606B (zh) | 一种可自动转换的嵌入式软件测试用例批量执行方法 | |
EP2565790A1 (en) | Method and system for injecting simulated errors | |
US8185881B2 (en) | Procedure summaries for pointer analysis | |
CN111124870A (zh) | 一种接口测试方法及装置 | |
US8875074B1 (en) | Formal fault detection | |
KR20180129623A (ko) | 연관된 다중 파일 정적 분석 장치 | |
CN103235757B (zh) | 基于自动化造数对输入域测试对象进行测试的装置和方法 | |
CN106354644A (zh) | 应用程序性能测试方法、装置和系统 | |
CN109828890A (zh) | 一种硬盘的测试数据整理方法、装置、设备及存储介质 | |
CN106844221B (zh) | 一种实现虚拟验证系统覆盖率分析的方法 | |
CN106557412A (zh) | 一种模糊测试的方法及装置 | |
US10496524B2 (en) | Separating test coverage in software processes using shared memory | |
CN109582574A (zh) | 一种代码覆盖率统计方法、装置、存储介质及终端设备 | |
Gerlich et al. | Random testing: From the classical approach to a global view and full test automation | |
Prevosto | ACSL Mini-Tutorial | |
CN110018953A (zh) | 使用python测试JS代码的方法、存储介质、设备和系统 | |
CN103678114A (zh) | 产生断言的设备和方法以及验证处理器的设备和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100094 510, 5th floor, building 5, East District, yard 10, northwest Wangdong Road, Haidian District, Beijing Patentee after: Beijing Shendun Technology Co.,Ltd. Address before: 100094 510, 5th floor, building 5, East District, yard 10, northwest Wangdong Road, Haidian District, Beijing Patentee before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd. |
|
CP01 | Change in the name or title of a patent holder |