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

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

Info

Publication number
CN106354644B
CN106354644B CN201610771814.4A CN201610771814A CN106354644B CN 106354644 B CN106354644 B CN 106354644B CN 201610771814 A CN201610771814 A CN 201610771814A CN 106354644 B CN106354644 B CN 106354644B
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.)
Active
Application number
CN201610771814.4A
Other languages
English (en)
Other versions
CN106354644A (zh
Inventor
孙吉平
田力闯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Senseshield Technology Co Ltd
Original Assignee
Beijing Senseshield Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Senseshield Technology Co Ltd filed Critical Beijing Senseshield Technology Co Ltd
Priority to CN201610771814.4A priority Critical patent/CN106354644B/zh
Publication of CN106354644A publication Critical patent/CN106354644A/zh
Application granted granted Critical
Publication of CN106354644B publication Critical patent/CN106354644B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software 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,把实施统计预设性能指标的动态库注入待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计预设性能指标的特征数据进行解析;
具体地,为实施统计,本发明实施例将动态库注入待分析程序,也就是说在系统函数前插入跳转指令,以便于在执行系统函数之前可以执行能够实现统计功能的函数,例如,在系统函数LoadLibraryExW之前插入跳转指令。本实施例为统计函数或代码段统计调用次数,在执行时需要对函数或代码段进行定位,以便于统计其调用次数。在执行待分析程序时,对待分析程序中包含的函数或代码段的调用次数进行统计。需要说明的是,本实施例所指的系统函数,并非是特指某一系统函数,也并非指所有系统函数,而是指能够实现加载动态库功能的系统函数。例如,该系统函数能够将动态库mscorjit.dll或者clrjit.dll等动态库加载到内存。
S103,在待分析程序执行完毕后,输出预设性能指标。
具体地,本实施例中包括接受统计结果端和实施统计端,上述两个步骤S101和S102是在实施统计端实行,本步骤是将实行结果发送至接受统计结果端。在本实施例的待分析程序启动前,可以预先创建文件映射表,当本步骤输出预设性能指标时,直接将预设性能指标作为对象发送至文件映射表中,待输出的预设性能指标搜集完毕,将直接打开结果,使用户对应用程序性能有直观的了解。
本发明实施例的技术方案在执行待分析程序时,将实施分析预设性能指标的动态库注入待分析程序,该动态库会对待分析程序中与预设性能指标相关的特征数据进行定位,从而对预设性能指标相关的特征数据进行解析,当待分析程序执行完毕时,输出预设性能指标,由于本发明的技术方案对预设性能指标相关的特征数据进行解析,对不同.net程序版本均解析为汇编语言代码,因此本发明的技术方案可以兼容不同版本的.net程序。
图2为本发明的应用程序性能测试方法的实施例二的流程图,本实施例的应用程序性能测试方法在上述实施例一的基础上,进一步更加详细地介绍本发明的技术方案。如图2所示,本实施例的应用程序性能测试方法,具体可以包括如下步骤:
S201,执行待分析程序;
具体地,基于程序的特性,由于程序一般具有模块化的特点,因此用户一般无法直接查看程序的代码来确定函数或代码段的位置,因此只有在执行待分析程序时,才能为函数或代码段定位,以方便统计函数或代码段的调用次数,从而对应用程序的性能进行测试。
S202,挂钩能够加载动态库的系统函数,以等待所述动态库加载到内存;
具体地,本发明实施例中将动态库注入待分析程序以实施统计,也就是说在系统函数前插入跳转指令,以便于在执行系统函数之前可以执行能够实现统计功能的函数,例如,在系统函数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 (9)

1.一种应用程序性能测试方法,其特征在于,所述方法包括:
执行待分析程序;
把实施统计预设性能指标的动态库注入所述待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计所述预设性能指标的特征数据进行解析;
在所述待分析程序执行完毕后,输出所述预设性能指标,
其中,对待分析程序中的将要统计预设性能指标的特征数据进行定位,包括:
挂钩能够加载动态库的系统函数,等待所述动态库加载到内存;
挂钩所述动态库的导出函数,以获得所述导出函数的返回值。
2.根据权利要求1所述的应用程序性能测试方法,其特征在于,
所述预设性能指标为包括调用次数在内的调用信息。
3.根据权利要求2所述的方法,其特征在于,所述特征数据包括函数或代码段。
4.根据权利要求1所述的方法,其特征在于,对将要统计所述预设性能指标的特征数据进行解析,包括:
将所述返回值指向的第一个函数或代码段替换为自定义函数,并执行所述自定义函数,其中,所述第一个函数或代码段用于解析所述待分析程序的源程序代码。
5.根据权利要求4所述的方法,其特征在于,执行所述自定义函数,包括:
解析所述待分析程序的源程序代码;
在解析得到的代码前插入跳转指令,以跳转到性能分析函数;
执行所述性能分析函数,然后再继续执行所述解析得到的代码。
6.根据权利要求5所述的方法,其特征在于,执行所述性能分析函数,包括:
统计所述源程序代码中每一个函数或代码段的调用次数,并形成统计报告。
7.根据权利要求6所述的方法,其特征在于,输出所述预设性能指标,包括:
将所述统计报告发送到接收统计结果端,以显示所述统计报告。
8.一种应用程序性能测试系统,其特征在于,所述系统包括:
执行模块,用于执行待分析程序;
注入模块,用于把实施统计预设性能指标的动态库注入所述待分析程序,以对待分析程序中的将要统计预设性能指标的特征数据进行定位,进而对将要统计所述预设性能指标的特征数据进行解析;
输出模块,用于当所述待分析程序执行完毕时,输出所述预设性能指标,
其中,对待分析程序中的将要统计预设性能指标的特征数据进行定位,包括:
挂钩能够加载动态库的系统函数,等待所述动态库加载到内存;
挂钩所述动态库的导出函数,以获得所述导出函数的返回值。
9.一种应用程序性能测试设备,其特征在于,所述设备包括如权利要求8所述的应用程序性能测试系统。
CN201610771814.4A 2016-08-30 2016-08-30 应用程序性能测试方法、装置和系统 Active CN106354644B (zh)

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 CN106354644A (zh) 2017-01-25
CN106354644B true 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)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107506275B (zh) * 2017-06-21 2020-10-27 西北大学 一种基于arm指令虚拟化的软件防护能耗评估方法
CN107480029B (zh) * 2017-08-02 2019-02-15 北京深思数盾科技股份有限公司 一种函数调用时间的监控方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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 网易(杭州)网络有限公司 应用程序性能测试方法、装置和系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9047412B2 (en) * 2007-05-06 2015-06-02 Dynatrace Corporation System and method for extracting instrumentation relevant inheritance relationships for a distributed, inheritance rule based instrumentation system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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 网易(杭州)网络有限公司 应用程序性能测试方法、装置和系统

Also Published As

Publication number Publication date
CN106354644A (zh) 2017-01-25

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
CN102722440B (zh) 一种嵌入式系统可执行代码的调试装置、调试方法及嵌入式系统
US7379860B1 (en) Method for integrating event-related information and trace information
CN105550104B (zh) 应用程序性能测试方法及装置
Malloy et al. An empirical analysis of the transition from python 2 to python 3
CN106354644B (zh) 应用程序性能测试方法、装置和系统
US8875074B1 (en) Formal fault detection
Mustafa et al. Classification of software testing tools based on the software testing methods
CN103778052A (zh) 一种前端javascript代码的测试方法和装置
US7451358B2 (en) Test executive system with automatic expression logging and parameter logging
CN111767232B (zh) 一种装备测试程序集验证系统
Mathaikutty et al. Model-driven test generation for system level validation
US9405870B2 (en) Generating coverage data for a switch frequency of HDL or VHDL signals
Shrivastava et al. Metrics for test case design in test driven development
CN112433762A (zh) 基于数据相关性约束的随机指令序列生成方法
US10496524B2 (en) Separating test coverage in software processes using shared memory
KR101039874B1 (ko) 정보통신 통합플랫폼 테스트 시스템
Hamza et al. Measuring qualities for osgi component-based applications
Iwanicki et al. Bringing modern unit testing techniques to sensornets
Ezick et al. The benefits of static compliance testing for SCA next
US8458523B2 (en) Meta attributes in functional coverage models
Lopez et al. Relevance of the cyclomatic complexity threshold for the java programming language
Cornish et al. An open source software framework for the implementation of an open systems architecture, run-time system
Tóth Applying and evaluating halstead’s complexity metrics and maintainability index for rpg

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
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.