本發(fā)明涉及應(yīng)用程序測試技術(shù)領(lǐng)域,特別涉及一種應(yīng)用程序性能測試方法、裝置和系統(tǒng)。
背景技術(shù):
在.NET的程序保護領(lǐng)域中,往往要對一段程序進行保護。如果盲目的采用加殼(shell)等方式進行保護,會對程序性能造成很大的影響,嚴重時將導(dǎo)致程序無法運行或特別緩慢。比較理想的方法是先對程序的執(zhí)行進行統(tǒng)籌分析,在分析結(jié)果之上進行保護。
對于程序的分析方法,目前主要有以下兩種:
1,采用com組件,利用微軟提供的com接口進行程序的性能分析。采用這種方法對程序性能進行分析時,需要設(shè)置環(huán)境變量,而且這種環(huán)境變量同時也是全局變量,會對其它.net程序造成影響。另外對于不同的.net版本需要采用不同的分析方式,兼容性較差,且步驟繁瑣,不方便對進程進行性能統(tǒng)計。
2,采用mono開源庫的,采用這種方法對程序性能進行分析時,需要在待分析的程序中插入分析代碼,需要修改源程序,而且這種方法同樣對不同的.net版本需要采用不同的分析方式,兼容性較差。
可見,現(xiàn)有的對.net程序性能進行分析的方法都存在兼容性較差的問題。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明的目的是提供一種能夠兼容多個.net版本的應(yīng)用程序性能測試方法、裝置和系統(tǒng)。
為了實現(xiàn)上述目的,本發(fā)明提供了一種應(yīng)用程序性能測試方法,所述方法包括:執(zhí)行待分析程序;
把實施統(tǒng)計預(yù)設(shè)性能指標的動態(tài)庫注入所述待分析程序,以對待分析程序中的將要統(tǒng)計預(yù)設(shè)性能指標的特征數(shù)據(jù)進行定位,進而對將要統(tǒng)計所述預(yù)設(shè)性能指標的特征數(shù)據(jù)進行解析;
在所述待分析程序執(zhí)行完畢后,輸出所述預(yù)設(shè)性能指標。
作為優(yōu)選,所述預(yù)設(shè)性能指標為包括調(diào)用次數(shù)在內(nèi)的調(diào)用信息。
作為優(yōu)選,所述特征數(shù)據(jù)包括函數(shù)或代碼段。
作為優(yōu)選,對待分析程序中的將要統(tǒng)計預(yù)設(shè)性能指標的特征數(shù)據(jù)進行定位,包括:
掛鉤能夠加載動態(tài)庫的系統(tǒng)函數(shù),等待所述動態(tài)庫加載到內(nèi)存;
掛鉤所述動態(tài)庫的導(dǎo)出函數(shù),以獲得所述導(dǎo)出函數(shù)的返回值。
作為優(yōu)選,把實施統(tǒng)計預(yù)設(shè)性能指標的動態(tài)庫注入所述待分析程序,以對將要統(tǒng)計所述預(yù)設(shè)性能指標的特征數(shù)據(jù)進行解析,包括:
將所述返回值指向的第一個函數(shù)或代碼段替換為自定義函數(shù),并執(zhí)行所述自定義函數(shù),其中,所述第一個函數(shù)或代碼段用于解析所述待分析程序的源程序代碼。
作為優(yōu)選,執(zhí)行所述自定義函數(shù),包括:
解析所述待分析程序的源程序代碼;
在解析得到的代碼前插入跳轉(zhuǎn)指令,以跳轉(zhuǎn)到性能分析函數(shù);
執(zhí)行所述性能分析函數(shù),然后再繼續(xù)執(zhí)行所述解析得到的代碼。
作為優(yōu)選,執(zhí)行所述性能分析函數(shù),包括:
統(tǒng)計所述源程序代碼中每一個函數(shù)或代碼段的調(diào)用次數(shù),并形成統(tǒng)計報告。
作為優(yōu)選,輸出所述預(yù)設(shè)性能指標,包括:
將所述統(tǒng)計報告發(fā)送到接收統(tǒng)計結(jié)果端,以顯示所述統(tǒng)計報告。
本發(fā)明還提供一種應(yīng)用程序性能測試系統(tǒng),所述系統(tǒng)包括:
執(zhí)行模塊,用于執(zhí)行待分析程序;
注入模塊,用于把實施統(tǒng)計預(yù)設(shè)性能指標的動態(tài)庫注入所述待分析程序,以對待分析程序中的將要統(tǒng)計預(yù)設(shè)性能指標的特征數(shù)據(jù)進行定位,進而對將要統(tǒng)計所述預(yù)設(shè)性能指標的特征數(shù)據(jù)進行解析;
輸出模塊,用于當(dāng)所述待分析程序執(zhí)行完畢時,輸出所述預(yù)設(shè)性能指標。
本發(fā)明還提供一種應(yīng)用程序性能測試設(shè)備,所述設(shè)備包括上述的應(yīng)用程序性能測試系統(tǒng)。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:本發(fā)明實施例的技術(shù)方案在執(zhí)行待分析程序時,以將實施分析預(yù)設(shè)性能指標的動態(tài)庫注入所述待分析程序,以對待分析程序中與預(yù)設(shè)性能指標相關(guān)的特征數(shù)據(jù)進行定位,從而對預(yù)設(shè)性能指標相關(guān)的特征數(shù)據(jù)進行解析,當(dāng)所述待分析程序執(zhí)行完畢時,輸出所述預(yù)設(shè)性能指標,由于本發(fā)明的技術(shù)方案對預(yù)設(shè)性能指標相關(guān)的特征數(shù)據(jù)進行解析,對不同.net程序版本均解析為匯編語言代碼,因此本發(fā)明的技術(shù)方案可以兼容不同版本的.net程序。
附圖說明
圖1為本發(fā)明的應(yīng)用程序性能測試方法的實施例一的流程圖;
圖2為本發(fā)明的應(yīng)用程序性能測試方法的實施例二的流程圖;
圖3為本發(fā)明的應(yīng)用程序性能測試系統(tǒng)的實施例的示意圖。
具體實施方式
下面結(jié)合附圖和實施例,對本發(fā)明的具體實施方式作進一步詳細描述。以下實施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
圖1為本發(fā)明的應(yīng)用程序性能測試方法的實施例一的流程圖,如圖1所示,本實施例的應(yīng)用程序性能測試方法,具體可以包括如下步驟:
S101,執(zhí)行待分析程序;
具體地,本實施例為對應(yīng)用程序性能進行測試,對于特征數(shù)據(jù)的要統(tǒng)計的預(yù)設(shè)性能指標可以是特征數(shù)據(jù)的調(diào)用次數(shù)等指標,因此在本實施例中,預(yù)設(shè)性能指標可以為包括調(diào)用次數(shù)在內(nèi)的調(diào)用信息。在本發(fā)明的其他實施例中,預(yù)設(shè)性能指標還可以是如執(zhí)行時間等其他性能指標。
本實施例在具體實施時,特征數(shù)據(jù)可以包括函數(shù)或代碼段。例如,可以統(tǒng)計一函數(shù)的調(diào)用次數(shù),還可以統(tǒng)計一函數(shù)中的某一代碼段的調(diào)用次數(shù),同理還可以是其他部分的代碼段的調(diào)用次數(shù)。
S102,把實施統(tǒng)計預(yù)設(shè)性能指標的動態(tài)庫注入待分析程序,以對待分析程序中的將要統(tǒng)計預(yù)設(shè)性能指標的特征數(shù)據(jù)進行定位,進而對將要統(tǒng)計預(yù)設(shè)性能指標的特征數(shù)據(jù)進行解析;
具體地,為實施統(tǒng)計,本發(fā)明實施例將動態(tài)庫注入待分析程序,也就是說在系統(tǒng)函數(shù)前插入跳轉(zhuǎn)指令,以便于在執(zhí)行系統(tǒng)函數(shù)之前可以執(zhí)行能夠?qū)崿F(xiàn)統(tǒng)計功能的函數(shù),例如,在系統(tǒng)函數(shù)kernelbase!LoadLibraryExW之前插入跳轉(zhuǎn)指令。本實施例為統(tǒng)計函數(shù)或代碼段統(tǒng)計調(diào)用次數(shù),在執(zhí)行時需要對函數(shù)或代碼段進行定位,以便于統(tǒng)計其調(diào)用次數(shù)。在執(zhí)行待分析程序時,對待分析程序中包含的函數(shù)或代碼段的調(diào)用次數(shù)進行統(tǒng)計。需要說明的是,本實施例所指的系統(tǒng)函數(shù),并非是特指某一系統(tǒng)函數(shù),也并非指所有系統(tǒng)函數(shù),而是指能夠?qū)崿F(xiàn)加載動態(tài)庫功能的系統(tǒng)函數(shù)。例如,該系統(tǒng)函數(shù)能夠?qū)討B(tài)庫mscorjit.dll或者clrjit.dll等動態(tài)庫加載到內(nèi)存。
S103,在待分析程序執(zhí)行完畢后,輸出預(yù)設(shè)性能指標。
具體地,本實施例中包括接受統(tǒng)計結(jié)果端和實施統(tǒng)計端,上述兩個步驟S101和S102是在實施統(tǒng)計端實行,本步驟是將實行結(jié)果發(fā)送至接受統(tǒng)計結(jié)果端。在本實施例的待分析程序啟動前,可以預(yù)先創(chuàng)建文件映射表,當(dāng)本步驟輸出預(yù)設(shè)性能指標時,直接將預(yù)設(shè)性能指標作為對象發(fā)送至文件映射表中,待輸出的預(yù)設(shè)性能指標搜集完畢,將直接打開結(jié)果,使用戶對應(yīng)用程序性能有直觀的了解。
本發(fā)明實施例的技術(shù)方案在執(zhí)行待分析程序時,將實施分析預(yù)設(shè)性能指標的動態(tài)庫注入待分析程序,該動態(tài)庫會對待分析程序中與預(yù)設(shè)性能指標相關(guān)的特征數(shù)據(jù)進行定位,從而對預(yù)設(shè)性能指標相關(guān)的特征數(shù)據(jù)進行解析,當(dāng)待分析程序執(zhí)行完畢時,輸出預(yù)設(shè)性能指標,由于本發(fā)明的技術(shù)方案對預(yù)設(shè)性能指標相關(guān)的特征數(shù)據(jù)進行解析,對不同.net程序版本均解析為匯編語言代碼,因此本發(fā)明的技術(shù)方案可以兼容不同版本的.net程序。
圖2為本發(fā)明的應(yīng)用程序性能測試方法的實施例二的流程圖,本實施例的應(yīng)用程序性能測試方法在上述實施例一的基礎(chǔ)上,進一步更加詳細地介紹本發(fā)明的技術(shù)方案。如圖2所示,本實施例的應(yīng)用程序性能測試方法,具體可以包括如下步驟:
S201,執(zhí)行待分析程序;
具體地,基于程序的特性,由于程序一般具有模塊化的特點,因此用戶一般無法直接查看程序的代碼來確定函數(shù)或代碼段的位置,因此只有在執(zhí)行待分析程序時,才能為函數(shù)或代碼段定位,以方便統(tǒng)計函數(shù)或代碼段的調(diào)用次數(shù),從而對應(yīng)用程序的性能進行測試。
S202,掛鉤能夠加載動態(tài)庫的系統(tǒng)函數(shù),以等待所述動態(tài)庫加載到內(nèi)存;
具體地,本發(fā)明實施例中將動態(tài)庫注入待分析程序以實施統(tǒng)計,也就是說在系統(tǒng)函數(shù)前插入跳轉(zhuǎn)指令,以便于在執(zhí)行系統(tǒng)函數(shù)之前可以執(zhí)行能夠?qū)崿F(xiàn)統(tǒng)計功能的函數(shù),例如,在系統(tǒng)函數(shù)kernelbase!LoadLibraryExW之前插入跳轉(zhuǎn)指令。需要說明的是,本實施所指的系統(tǒng)函數(shù),并非是特指某一系統(tǒng)函數(shù),也并非指所有系統(tǒng)函數(shù),而是指能夠?qū)崿F(xiàn)加載動態(tài)庫功能的系統(tǒng)函數(shù)。例如,將動態(tài)庫mscorjit.dll或者clrjit.dll加載到內(nèi)存。
S203,掛鉤所述動態(tài)庫的導(dǎo)出函數(shù),以獲得所述導(dǎo)出函數(shù)的返回值;
具體地,雖然不同的.net版本所包含的動態(tài)庫不盡相同,但是其導(dǎo)出函數(shù)都相同,因此,本發(fā)明基于導(dǎo)出函數(shù)進行統(tǒng)計,能夠兼容不同的.net版本。
S204,將所述返回值指向的第一個函數(shù)或代碼段替換為自定義函數(shù),并執(zhí)行所述自定義函數(shù),其中,所述第一個函數(shù)或代碼段用于解析所述待分析程序的源程序代碼。
具體地,自定義函數(shù)的作用為在實現(xiàn)第一個函數(shù)的功能的同時,還可以在以后程序的執(zhí)行過程中,在需要分析的函數(shù)或代碼段前均插入用于分析程序性能的函數(shù)。
具體地,第一個函數(shù)是轉(zhuǎn)換函數(shù)。由于.net是一種中間代碼,.net程序在執(zhí)行時,均要將源程序的代碼轉(zhuǎn)換成匯編代碼,才能執(zhí)行。返回值指向的第一個函數(shù)正是能夠?qū)⒃闯绦虻拇a轉(zhuǎn)換成匯編代碼。同時,由于第一個函數(shù)為轉(zhuǎn)換函數(shù),因此不需要統(tǒng)計其調(diào)用次數(shù),因此將第一個函數(shù)替換,不會影響本實施例對應(yīng)用程序性能分析結(jié)果的準確性。
具體地,步驟S204包括:A,解析待分析程序的源程序代碼;B,在解析得到的代碼前插入跳轉(zhuǎn)指令,以跳轉(zhuǎn)到性能分析函數(shù);C,執(zhí)行性能分析函數(shù),然后再繼續(xù)執(zhí)行解析得到的代碼。
就本實施例而言,性能分析函數(shù),主要用于統(tǒng)計函數(shù)或代碼段的調(diào)用次數(shù),在其他實施例中,根據(jù)性能指標的不同,性能分析函數(shù)的功能也有所不同。這里解析所得到的代碼為匯編代碼。
同時,步驟C包括:統(tǒng)計所述源程序代碼中每一個函數(shù)或代碼段的調(diào)用次數(shù),并形成統(tǒng)計報告。
S205,將所述統(tǒng)計報告發(fā)送到接收統(tǒng)計結(jié)果端,以顯示所述統(tǒng)計報告。
具體地,本實施例中包括接受統(tǒng)計結(jié)果端和實施統(tǒng)計端,上述兩個步驟S201-S204是在實施統(tǒng)計端實行,則本步驟是將實行結(jié)果發(fā)送至接受統(tǒng)計結(jié)果端。在本實施例的待分析程序啟動前,可以預(yù)先創(chuàng)建文件映射表,當(dāng)本步驟輸出預(yù)設(shè)性能指標時,直接將預(yù)設(shè)性能指標作為對象發(fā)送至文件映射表中,待輸出的預(yù)設(shè)性能指標搜集完畢,將直接打開結(jié)果,使用戶對應(yīng)用程序性能有直觀的了解。
本發(fā)明實施例的技術(shù)方案在執(zhí)行待分析程序時,在待分析程序掛鉤自定義函數(shù),在但于在對待分析程序進行轉(zhuǎn)換時,插入跳轉(zhuǎn)指令,跳轉(zhuǎn)到性能分析函數(shù),由于自定義函數(shù)所掛鉤的導(dǎo)出函數(shù),而對于所有的.net版本的導(dǎo)出函數(shù)均相同,因此本發(fā)明可以兼容不同版本的.net程序。
圖3為本發(fā)明的應(yīng)用程序性能測試系統(tǒng)的實施例的示意圖,如圖3所示,本實施例的應(yīng)用程序性能測試系統(tǒng),具體可以包括定位模塊31、注入模塊32和輸出模塊33。
定位模塊31,用于執(zhí)行待分析程序;
注入模塊32,用于把實施統(tǒng)計預(yù)設(shè)性能指標的動態(tài)庫注入所述待分析程序,以對待分析程序中的將要統(tǒng)計預(yù)設(shè)性能指標的特征數(shù)據(jù)進行定位,進而對將要統(tǒng)計所述預(yù)設(shè)性能指標的特征數(shù)據(jù)進行解析;
輸出模塊34,用于當(dāng)所述待分析程序執(zhí)行完畢時,輸出所述預(yù)設(shè)性能指標。
本實施例的應(yīng)用程序性能測試裝置,通過采用上述模塊對應(yīng)用程序的性能進行測試的實現(xiàn)機制與上述圖1所示實施例的應(yīng)用程序性能測試方法的實現(xiàn)機制相同,詳細可以參考上述圖1所示實施例的記載,在此不再贅述。
本發(fā)明還提供一種應(yīng)用程序性能測試設(shè)備,系統(tǒng)包括如圖3所示的應(yīng)用程序性能測試系統(tǒng)。
以上實施例僅為本發(fā)明的示例性實施例,不用于限制本發(fā)明,本發(fā)明的保護范圍由權(quán)利要求書限定。本領(lǐng)域技術(shù)人員可以在本發(fā)明的實質(zhì)和保護范圍內(nèi),對本發(fā)明做出各種修改或等同替換,這種修改或等同替換也應(yīng)視為落在本發(fā)明的保護范圍內(nèi)。