本發(fā)明涉及測試領(lǐng)域,具體涉及一種應(yīng)用的性能優(yōu)化方法及服務(wù)器。
背景技術(shù):
目前,對應(yīng)用進行性能測試時,需要設(shè)計測試場景,然后通過進入測試場景,使用測試工具進行數(shù)據(jù)采集,根據(jù)采集的數(shù)據(jù)來分析應(yīng)用的代碼是否存在性能問題,若存在性能問題,則對性能問題進行分析從而在代碼中定位性能問題,并對引起性能問題的代碼進行優(yōu)化,從而達到優(yōu)化代碼性能的目的。
但是,設(shè)計測試場景和采集數(shù)據(jù)以及定位性能問題對應(yīng)的代碼的過程,非常耗時,性能優(yōu)化效率差。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種應(yīng)用的性能優(yōu)化方法及服務(wù)器,用于解決現(xiàn)有應(yīng)用在性能優(yōu)化存在耗時嚴重和效率低的問題,通過無需設(shè)計測試場景,有效提高應(yīng)用的性能優(yōu)化效率以及節(jié)約性能優(yōu)化所需的時間。
本發(fā)明第一方面提供一種應(yīng)用的性能優(yōu)化方法,包括:
確定待測試的目標應(yīng)用;
使用靜態(tài)代碼掃描規(guī)則對所述目標應(yīng)用進行掃描分析,所述靜態(tài)代碼掃描規(guī)則包括:對已存在的性能問題對應(yīng)的代碼特征進行提取后生成的問題代碼;
若所述目標應(yīng)用中存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼,則確定所述目標應(yīng)用存在性能問題;
獲取所述目標應(yīng)用的性能優(yōu)化策略,根據(jù)所述性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化。
本發(fā)明第二方面提供一種服務(wù)器,包括:
確定模塊,用于確定待測試的目標應(yīng)用;
分析模塊,用于使用靜態(tài)代碼掃描規(guī)則對所述確定模塊確定的所述目標應(yīng)用進行掃描分析,所述靜態(tài)代碼掃描規(guī)則包括:對已存在的性能問題對應(yīng)的代碼特征進行提取后生成的問題代碼;
判斷模塊,判斷所述目標應(yīng)用中是否存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼;
所述確定模塊,還用于若所述目標應(yīng)用中存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼,則確定所述目標應(yīng)用存在性能問題;
獲取模塊,用于獲取所述目標應(yīng)用的性能優(yōu)化策略;
性能優(yōu)化模塊,根據(jù)所述獲取模塊獲取的所述性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化。
從以上技術(shù)方案可以看出,首先確定待測試的目標應(yīng)用,然后使用靜態(tài)代碼掃描規(guī)則對所述目標應(yīng)用進行掃描分析,而所述靜態(tài)代碼掃描規(guī)則包括對已存在的性能問題對應(yīng)的代碼特征進行提取后生成的問題代碼。這樣,無需涉及測試場景,直接判斷目標應(yīng)用是否存在所述靜態(tài)代碼掃描規(guī)則中包括的所述問題代碼,若是,則確定所述目標應(yīng)用存在性能問題,然后獲取所述目標應(yīng)用的性能優(yōu)化策略,根據(jù)所述性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化,可見,直接通過靜態(tài)代碼掃描規(guī)則就可以確定出目標應(yīng)用的性能問題,從而對目標應(yīng)用進行性能優(yōu)化,無需設(shè)計測試場景,有效提高應(yīng)用的性能優(yōu)化效率以及節(jié)約性能優(yōu)化所需的時間。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例中應(yīng)用的性能優(yōu)化系統(tǒng)的一個框架示意圖;
圖2為本發(fā)明實施例中服務(wù)器的一個結(jié)構(gòu)示意圖;
圖3為本發(fā)明實施例中應(yīng)用的性能優(yōu)化方法的一個實施例示意圖;
圖4為本發(fā)明實施例中應(yīng)用的性能優(yōu)化方法的另一個實施例示意圖;
圖5為本發(fā)明實施例中應(yīng)用的性能優(yōu)化方法的另一個實施例示意圖;
圖6a為本發(fā)明實施例中應(yīng)用的性能優(yōu)化方法的一個應(yīng)景場景示意圖;
圖6b為本發(fā)明實施例中應(yīng)用的性能優(yōu)化方法的另一個應(yīng)景場景示意圖;
圖6c為本發(fā)明實施例中應(yīng)用的性能優(yōu)化方法的另一個應(yīng)景場景示意圖;
圖6d為本發(fā)明實施例中應(yīng)用的性能優(yōu)化方法的另一個應(yīng)景場景示意圖;
圖6e為本發(fā)明實施例中應(yīng)用的性能優(yōu)化方法的另一個應(yīng)景場景示意圖;
圖7為本發(fā)明實施例中服務(wù)器的另一個結(jié)構(gòu)示意圖;
圖8為本發(fā)明實施例中服務(wù)器的另一個結(jié)構(gòu)示意圖;
圖9本發(fā)明實施例中服務(wù)器的另一個結(jié)構(gòu)示意圖。
具體實施方式
本發(fā)明實施例提供了一種應(yīng)用的性能優(yōu)化方法及服務(wù)器,用于解決現(xiàn)有應(yīng)用在性能優(yōu)化存在耗時嚴重和效率低的問題,通過無需設(shè)計測試場景,有效提高應(yīng)用的性能優(yōu)化效率以及節(jié)約性能優(yōu)化所需的時間。
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”、“第三”、“第四”等(如果存在)是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當情況下可以互換,以便這里描述的實施例能夠以除了在這里圖示或描述的內(nèi)容以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
在介紹本發(fā)明實施例之前,先介紹一下本發(fā)明所涉及的應(yīng)用,所述應(yīng)用可以是即時通訊軟件應(yīng)用,例如:微信,微博,QQ等。也可以是一些游戲應(yīng)用,例如:unity引擎開發(fā)出的一些游戲應(yīng)用,包括網(wǎng)頁游戲,單機游戲,手機游戲等,其中,該網(wǎng)頁游戲包括QQ樂團,絕代雙驕等,該單機游戲包括:俠客風(fēng)云傳,搗蛋豬等,該手機游戲包括:神廟逃亡,王者之劍等,此處不做具體限定。其中,目前很多游戲應(yīng)用是unity3d引擎開發(fā)的,unity3d引擎是一個讓玩家輕松創(chuàng)建諸如三維視頻游戲、建筑可視化、實時三維動畫等類型的多平臺的綜合型游戲開發(fā)工具,是一個全面整合的專業(yè)游戲引擎。
unity3d引擎是一個用純C語言編寫的游戲開發(fā)工具,簡潔實用,用于各種規(guī)模的嵌入式項目,當然,只要是純C語言的項目,unity3d引擎都可以適用。unity3d引擎的編輯器運行于在Windows和Mac OS X下,可發(fā)布游戲至Windows、Mac、Wii、iPhone、Windows phone 8和Android平臺,也可以利用unity web player插件發(fā)布網(wǎng)頁游戲,支持Mac和Windows的網(wǎng)頁瀏覽,它的網(wǎng)頁播放器也被Mac widgets所支持。
下面,介紹一下本發(fā)明涉及的應(yīng)用的性能優(yōu)化系統(tǒng)。如圖1所示,所述應(yīng)用的性能優(yōu)化系統(tǒng)包括服務(wù)器和終端,其中,所述服務(wù)器與所述終端之間實現(xiàn)通信連接。其中,所述終端可以是電腦,手機,筆記本,個人數(shù)字助理(英文全稱:Personal Digital Assistant,縮寫:PDA)、車載電腦等任意終端設(shè)備,此處不做具體限定。所述服務(wù)器可以是網(wǎng)頁(Web)服務(wù)器,掃描服務(wù)器(例如:C#靜態(tài)代碼掃描TscSharp服務(wù)器)、數(shù)據(jù)存儲服務(wù)器等,在一些可能的場景中,可以利用這些服務(wù)器的功能集成于一個服務(wù)器,當然,在另一些可能的場景中,也可以分別通過這些服務(wù)器執(zhí)行相應(yīng)的功能,此處不做具體限定。在實際應(yīng)用中,在終端上安裝應(yīng)用,在終端上運行應(yīng)用時,可能涉及應(yīng)用的性能是否需要優(yōu)化的問題,而服務(wù)器判斷應(yīng)用的性能是否需要優(yōu)化體現(xiàn)在測試應(yīng)用的代碼,其中,可以是一個應(yīng)用對應(yīng)一套代碼,也可以是多個應(yīng)用對應(yīng)一套代碼,此處不做限定,通過測試應(yīng)用的代碼來判斷應(yīng)用是否需要性能優(yōu)化。
如圖2所示,對服務(wù)器的具體結(jié)構(gòu)進行介紹,所述服務(wù)器100包括:射頻(英文全稱:Radio Frequency,縮寫:RF)電路110、存儲器120、處理器130、以及電源140等部件。本領(lǐng)域技術(shù)人員可以理解,圖2中示出的服務(wù)器100的結(jié)構(gòu)并不構(gòu)成對服務(wù)器的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。
RF電路110可用于收發(fā)信息,例如:信號的接收和發(fā)送,通常,RF電路110包括但不限于天線、至少一個放大器、收發(fā)信機、耦合器、低噪聲放大器(英文全稱:Low Noise Amplifier,縮寫:LNA)、雙工器等。此外,RF電路110還可以通過無線通信與網(wǎng)絡(luò)和終端等其他設(shè)備通信。上述無線通信可以使用任一通信標準或協(xié)議,包括但不限于全球移動通訊系統(tǒng)(英文全稱:Global System of Mobile communication,縮寫:GSM)、通用分組無線服務(wù)(英文全稱:General Packet Radio Service,縮寫:GPRS)、碼分多址(英文全稱:Code Division Multiple Access,縮寫:CDMA)、寬帶碼分多址(英文全稱:Wideband Code Division Multiple Access,縮寫:WCDMA)、長期演進(英文全稱:Long Term Evolution,縮寫:LTE)、電子郵件、短消息服務(wù)(英文全稱:Short Messaging Service,縮寫:SMS)等。
存儲器120可用于存儲軟件程序以及模塊,處理器130通過運行存儲在存儲器120的軟件程序以及模塊,從而執(zhí)行服務(wù)器100的各種功能應(yīng)用以及數(shù)據(jù)處理。存儲器120可主要包括存儲程序區(qū)和存儲數(shù)據(jù)區(qū),其中,存儲程序區(qū)可存儲操作系統(tǒng)、至少一個功能所需的應(yīng)用程序(比如聲音播放功能、圖像播放功能等)等;存儲數(shù)據(jù)區(qū)可存儲根據(jù)服務(wù)器100的使用所創(chuàng)建的數(shù)據(jù)(比如音頻數(shù)據(jù)、電話本等)等。此外,存儲器120可以包括高速隨機存取存儲器,還可以包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他易失性固態(tài)存儲器件。
處理器130是服務(wù)器100的控制中心,利用各種接口和線路連接整個服務(wù)器100的各個部分,通過運行或執(zhí)行存儲在存儲器120內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲在存儲器120內(nèi)的數(shù)據(jù),執(zhí)行服務(wù)器100的各種功能和處理數(shù)據(jù),從而對服務(wù)器100進行整體監(jiān)控??蛇x的,處理器130可包括一個或多個處理單元;優(yōu)選的,處理器130可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無線通信。可以理解的是,上述調(diào)制解調(diào)處理器也可以不集成到處理器130中。
服務(wù)器100還包括給各個部件供電的電源140(比如電池),優(yōu)選的,電源可以通過電源管理系統(tǒng)與處理器130邏輯相連,從而通過電源管理系統(tǒng)實現(xiàn)管理充電、放電、以及功耗管理等功能。
盡管未示出,所述服務(wù)器100還可以包括輸入單元、顯示單元等,在此不再贅述。
在本發(fā)明實施例中,所述處理器130用于執(zhí)行以下步驟:
確定待測試的目標應(yīng)用;
使用靜態(tài)代碼掃描規(guī)則對所述目標應(yīng)用進行掃描分析,所述靜態(tài)代碼掃描規(guī)則包括:對已存在的性能問題對應(yīng)的代碼特征進行提取后生成的問題代碼;
若所述目標應(yīng)用中存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼,則確定所述目標應(yīng)用存在性能問題;
獲取所述目標應(yīng)用的性能優(yōu)化策略,根據(jù)所述性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化。
在一些可能的實現(xiàn)方式中,所述處理器130還用于確定待測試的目標應(yīng)用之前,從問題來源庫中獲取已存在的性能問題;
解析所述已存在的性能問題對應(yīng)的代碼特征,生成所述性能問題對應(yīng)的問題代碼;
將所述性能問題對應(yīng)的問題代碼存入性能問題經(jīng)驗庫。
在另一些可能的實現(xiàn)方式中,所述處理器130用于根據(jù)所述目標應(yīng)用存在的性能問題從所述性能問題經(jīng)驗庫中獲取所述目標應(yīng)用的所述性能優(yōu)化策略。
在另一些可能的實現(xiàn)方式中,所述處理器130用于確定所述目標應(yīng)用的代碼對應(yīng)的作用域函數(shù);
判斷所述作用域函數(shù)是否滿足預(yù)置的函數(shù)類型;
若所述作用域函數(shù)滿足所述預(yù)置的函數(shù)類型,獲取所述作用域函數(shù)的函數(shù)名;
判斷所述函數(shù)名是否為預(yù)置的函數(shù)名;
若是,對所述作用域函數(shù)包括的符號單元進行語法分析;
判斷所述符號單元是否存在語法錯誤,若是,確定所述目標應(yīng)用的代碼是問題代碼,若不是,確定所述目標應(yīng)用的代碼不是問題代碼。
在另一些可能的實現(xiàn)方式中,所述處理器130還用于根據(jù)所述性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化之后,使用所述靜態(tài)代碼掃描規(guī)則對性能優(yōu)化后的目標應(yīng)用進行掃描分析;
若所述性能優(yōu)化后的目標應(yīng)用中不存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼,則確定所述性能優(yōu)化后的目標應(yīng)用不存在性能問題。
請參閱圖3,本發(fā)明實施例中應(yīng)用的性能優(yōu)化方法的一個實施例示意圖,具體流程如下:
步驟301、確定待測試的目標應(yīng)用;
在本發(fā)明實施例中,所述待測試的目標應(yīng)用可以是任何用于安裝在終端上的應(yīng)用,例如:即時通訊軟件應(yīng)用,包括:微信,QQ,微博等,又如:游戲應(yīng)用,包括:王者之劍,神廟逃亡等,此處不做具體限定。
步驟302、使用靜態(tài)代碼掃描規(guī)則對所述目標應(yīng)用進行掃描分析,所述靜態(tài)代碼掃描規(guī)則包括:對已存在的性能問題對應(yīng)的代碼特征進行提取后生成的問題代碼;
本發(fā)明實施例中,所述靜態(tài)代碼掃描規(guī)則是服務(wù)器提前設(shè)置的,當確定待測試的目標應(yīng)用后,進一步使用靜態(tài)代碼掃描規(guī)則對所述目標應(yīng)用進行掃描分析。
在一些可能的實現(xiàn)方式中,所述使用靜態(tài)代碼掃描規(guī)則對所述目標應(yīng)用進行掃描分析,包括:
確定所述目標應(yīng)用的代碼對應(yīng)的作用域函數(shù);
判斷所述作用域函數(shù)是否滿足預(yù)置的函數(shù)類型;
若所述作用域函數(shù)滿足所述預(yù)置的函數(shù)類型,獲取所述作用域函數(shù)的函數(shù)名;
判斷所述函數(shù)名是否為預(yù)置的函數(shù)名;
若是,對所述作用域函數(shù)包括的符號單元進行語法分析;
判斷所述符號單元是否存在語法錯誤,若是,確定所述目標應(yīng)用的代碼是問題代碼,若不是,確定所述目標應(yīng)用的代碼不是問題代碼。
其中,所述預(yù)置的函數(shù)類型可以是所述作用域函數(shù)的語法中設(shè)置的函數(shù)類型,所述預(yù)置的函數(shù)名可以是update或FixedUpdate或LateUpdate等,此處不做具體限定。
在實際應(yīng)用中,服務(wù)器可以借助靜態(tài)代碼掃描工具(例如:TscSharp掃描工具,其中,TscSharp#是一款基于編譯器前端實現(xiàn)原理的C#語言靜態(tài)代碼掃描工具)對所述目標應(yīng)用進行掃描分析,進而輸出靜態(tài)掃描分析報告,其中,靜態(tài)代碼掃描工具由開發(fā)人員提前在對應(yīng)的掃描服務(wù)器上設(shè)置,整個測試過程無需設(shè)計應(yīng)用的性能優(yōu)化場景、無需采集性能數(shù)據(jù)、無需調(diào)試分析定位等步驟,通過靜態(tài)代碼掃描工具自動掃描輸出性能風(fēng)險點,直接定位到目標應(yīng)用的代碼行,從而有效提高了應(yīng)用性能測試的效率,也極大地降低了應(yīng)用性能測試的成本。
步驟303、判斷所述目標應(yīng)用中是否存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼,若是,執(zhí)行步驟304;
可見,對所述目標應(yīng)用掃描分析的結(jié)果就是確定出所述目標應(yīng)用中存在所述述靜態(tài)代碼掃描規(guī)則中包括的所述問題代碼,或者,所述目標應(yīng)用中不存在所述述靜態(tài)代碼掃描規(guī)則中包括的所述問題代碼。
步驟304、確定所述目標應(yīng)用存在性能問題;
與現(xiàn)有技術(shù)不同的是,當所述目標應(yīng)用中存在所述述靜態(tài)代碼掃描規(guī)則中包括的所述問題代碼,則直接定位出所述目標應(yīng)用存在性能問題,而無需通過發(fā)現(xiàn)應(yīng)用有性能問題,然后耗時、耗力的定位出所述性能問題對應(yīng)的代碼,整個過程簡單,快速,從而有效提高了確定應(yīng)用存在性能問題的效率。
步驟305、獲取所述目標應(yīng)用的性能優(yōu)化策略;
在本發(fā)明實施例中,當確定所述目標應(yīng)用存在性能問題后,則獲取所述目標應(yīng)用的性能高優(yōu)化策略,其中,所述性能優(yōu)化策略存儲于服務(wù)器中。
在一些可能的實現(xiàn)方式中,服務(wù)器根據(jù)所述目標應(yīng)用存在的性能問題從所述性能問題經(jīng)驗庫中獲取所述目標應(yīng)用的所述性能優(yōu)化策略。
步驟306、根據(jù)所述性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化。
在實際應(yīng)用中,由于定位性能問題直接定位到應(yīng)用的代碼行,無需很繁雜的定位流程,則可直接根據(jù)性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化。
請參閱圖4,本發(fā)明實施例中應(yīng)用的性能優(yōu)化方法的另一個實施例示意圖,具體流程如下:
步驟401、從問題來源庫中獲取已存在的性能問題;
在實際應(yīng)用中,以騰訊公司旗下的游戲應(yīng)用神廟逃亡為例,可通過騰訊的官方文檔,該神廟逃亡游戲應(yīng)用的相關(guān)技術(shù)論壇以及該神廟逃亡游戲應(yīng)用的項目案例等多種渠道對應(yīng)的問題來源庫中獲取已存在的多種性能問題。例如:在騰訊游戲應(yīng)用的官方文檔中記載神廟逃亡游戲應(yīng)用的代碼存在一些性能問題,例如:所述性能問題為更新數(shù)據(jù)(update)中使用循環(huán)(foreach)語句會造成大量的垃圾收集器(英文全稱:Garbage Collection,縮寫:gc)開銷。
步驟402、解析所述已存在的性能問題對應(yīng)的代碼特征,生成所述性能問題對應(yīng)的問題代碼;
在實際應(yīng)用中,以靜態(tài)掃描工具TscSharp為例,可通過預(yù)處理環(huán)節(jié),將目標應(yīng)用的代碼處理成相對規(guī)范的字節(jié)流和C#語言中的預(yù)處理命令,然后再由語法解析,輸出以token為單位的符號流,所述符號流中包括所述已存在的性能問題對應(yīng)的代碼特征。
例如:語法解析涉及的數(shù)據(jù)結(jié)構(gòu)包括:符號單元(token)和符號單元序列(tokenList)和作用域(scope)。其中,token是進行語法分析以及靜態(tài)代碼掃描規(guī)則中最基本的單位,除了包含該token的字符串值以外,還包含與該token相關(guān)聯(lián)的其他屬性特征,例如:token類型(數(shù)字、變量、函數(shù)、關(guān)鍵字等),token行號、指向上一個(或下一個)token的指針;tokenList屬于語法單元序列,本質(zhì)上是一個雙向鏈表,維護一個代碼中所有的token;Scope表示代碼作用域的數(shù)據(jù)結(jié)構(gòu),下面舉例說明一下scope函數(shù)的數(shù)據(jù)結(jié)構(gòu):
其中,Static用于表示scope函數(shù)的定義,{用于表示scope函數(shù)的開始,}用于表示scope函數(shù)的結(jié)束,Console用于表示scope函數(shù)的內(nèi)容。
在實際應(yīng)用中,通過語法解析出所述已存在的性能問題對應(yīng)的代碼特征,然后根據(jù)所述代碼特征直接生成性能問題對應(yīng)的問題代碼,或者根據(jù)所述代碼特征類推,擴大代碼特征的范圍,從而根據(jù)擴大范圍后的代碼特征生成性能問題對應(yīng)的問題代碼。
步驟403、將所述性能問題對應(yīng)的問題代碼存入性能問題經(jīng)驗庫;
在實際應(yīng)用中,為了后續(xù)直接從性能問題經(jīng)驗庫中獲取所述問題代碼,可將所述各種性能問題分別對應(yīng)的問題代碼存入性能問題經(jīng)驗庫,從而方便后續(xù)檢測目標應(yīng)用中是否存在問題代碼。
在實際應(yīng)用中,所述性能問題經(jīng)驗庫中除了保存問題代碼,還包括以下內(nèi)容,具體如下存儲列表:
在一些可能的實現(xiàn)方式中,將所述性能問題對應(yīng)的問題代碼存入性能問題經(jīng)驗庫之后,根據(jù)所述性能問題經(jīng)驗庫中保存的問題代碼創(chuàng)建所述靜態(tài)代碼掃描規(guī)則。
在實際應(yīng)用中,獲取所述性能問題經(jīng)驗庫中保存的問題代碼的代碼特性,例如:
根據(jù)上述void update、void FixedUpdate、void LateUpdate這3個代碼特性創(chuàng)建靜態(tài)代碼掃描規(guī)則,其中,所述掃描規(guī)則中包括新增的檢查項CS_ForeachInUpdate(update中調(diào)用foreach語句)。
步驟404、確定待測試的目標應(yīng)用;
步驟405、使用靜態(tài)代碼掃描規(guī)則對所述目標應(yīng)用進行掃描分析,所述靜態(tài)代碼掃描規(guī)則包括:對已存在的性能問題對應(yīng)的代碼特征進行提取后生成的問題代碼;
步驟406、判斷所述目標應(yīng)用中是否存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼,若是,執(zhí)行步驟407;
步驟407、確定所述目標應(yīng)用存在性能問題;
步驟408、獲取所述目標應(yīng)用的性能優(yōu)化策略;
步驟409、根據(jù)所述性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化。
需要說明的是,步驟404至步驟409與圖3所示的步驟301至步驟306相同或者相似,具體可參閱步驟301至步驟306的描述,此處不再贅述。
請參閱圖5,本發(fā)明實施例中應(yīng)用的性能優(yōu)化方法的另一個實施例示意圖,具體流程如下:
步驟501、從問題來源庫中獲取已存在的性能問題;
步驟502、解析所述已存在的性能問題對應(yīng)的代碼特征,生成所述性能問題對應(yīng)的問題代碼;
步驟503、將所述性能問題對應(yīng)的問題代碼存入性能問題經(jīng)驗庫;
在一些可能的實現(xiàn)方式中,將所述性能問題對應(yīng)的問題代碼存入性能問題經(jīng)驗庫之后,根據(jù)所述性能問題經(jīng)驗庫中保存的問題代碼創(chuàng)建所述靜態(tài)代碼掃描規(guī)則。
步驟504、確定待測試的目標應(yīng)用;
步驟505、使用靜態(tài)代碼掃描規(guī)則對所述目標應(yīng)用進行掃描分析,所述靜態(tài)代碼掃描規(guī)則包括:對已存在的性能問題對應(yīng)的代碼特征進行提取后生成的問題代碼;
在一些可能的實現(xiàn)方式中,所述使用靜態(tài)代碼掃描規(guī)則對所述目標應(yīng)用進行掃描分析,包括:
確定所述目標應(yīng)用的代碼對應(yīng)的作用域函數(shù);
判斷所述作用域函數(shù)是否滿足預(yù)置的函數(shù)類型;
若所述作用域函數(shù)滿足所述預(yù)置的函數(shù)類型,獲取所述作用域函數(shù)的函數(shù)名;
判斷所述函數(shù)名是否為預(yù)置的函數(shù)名;
若是,對所述作用域函數(shù)包括的符號單元進行語法分析;
判斷所述符號單元是否存在語法錯誤,若是,確定所述目標應(yīng)用的代碼是問題代碼,若不是,確定所述目標應(yīng)用的代碼不是問題代碼。
步驟506、判斷所述目標應(yīng)用中是否存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼,若是,執(zhí)行步驟507;
步驟507、確定所述目標應(yīng)用存在性能問題;
步驟508、獲取所述目標應(yīng)用的性能優(yōu)化策略;
在一些可能的實現(xiàn)方式中,根據(jù)所述目標應(yīng)用存在的性能問題從所述性能問題經(jīng)驗庫中獲取所述目標應(yīng)用的所述性能優(yōu)化策略。
步驟509、根據(jù)所述性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化;
需要說明的是,步驟501至步驟509與圖4所示的步驟401至步驟409相同或者相似,具體可參閱步驟401至步驟409的描述,此處不再贅述。
步驟510、使用所述靜態(tài)代碼掃描規(guī)則對性能優(yōu)化后的目標應(yīng)用進行掃描分析;
步驟511、判斷所述性能優(yōu)化后的目標應(yīng)用中是否存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼,若否,執(zhí)行步驟512。
步驟512、確定所述性能優(yōu)化后的目標應(yīng)用不存在性能問題。
在實際應(yīng)用中,根據(jù)所述性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化后,為了進一步判斷出所述性能優(yōu)化后的目標應(yīng)用是否還存在性能問題,則使用所述靜態(tài)代碼掃描規(guī)則對所述性能優(yōu)化后的目標應(yīng)用進行掃描分析,具體掃描分析的過程如上述對未進行性能優(yōu)化前的目標應(yīng)用掃描分析的描述,此處不再贅述。
在實際應(yīng)用中,可以從所述目標應(yīng)用的代碼塊中先提取出第一代碼,其中,代碼塊中包括至少一個代碼,服務(wù)器可以通過依次提取所述代碼塊中的各個代碼,進而執(zhí)行對所述各個代碼的測試,或者,服務(wù)器只提取某個代碼或者某類代碼,進而執(zhí)行對某個代碼或者某類代碼的測試,以提取第一代碼為例,所述第一代碼可以看作是所述代碼塊中的一個代碼,或者一類(同一類型的,例如:具有相同的數(shù)據(jù)結(jié)構(gòu)或者語法)代碼等,此處不做具體限定。然后,根據(jù)靜態(tài)代碼掃描規(guī)則對所述第一代碼進行掃描分析,確定所述第一代碼是否屬于所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼,若是,則從性能問題經(jīng)驗庫中獲取所述問題代碼的性能優(yōu)化策略,然后對所述第一代碼進行性能優(yōu)化,后繼續(xù)使用靜態(tài)代碼掃描規(guī)則對所述性能優(yōu)化后的第一代碼進行掃描分析,若性能優(yōu)化后的第一代碼不屬于所述問題代碼,則將性能優(yōu)化后的第一代碼替換到代碼塊中。
當然,在實際應(yīng)用中,從代碼塊中提取出第二代碼,進一步使用所述靜態(tài)代碼掃描規(guī)則對所述第二代碼進行掃描分析,判斷所述第二代碼是否屬于所述問題代碼,以此類推,所述服務(wù)器提取所代碼塊中的各個代碼,分別進行掃描分析,從而完成對整個代碼塊的掃描分析??梢?,通過靜態(tài)代碼掃描分析直接定位目標應(yīng)用的問題代碼,簡單,快速。
需要說明的是,上述方法實施例的步驟可以直接體現(xiàn)為服務(wù)器中的硬件處理器執(zhí)行完成,或者用服務(wù)器中的硬件及軟件模塊組合執(zhí)行完成。軟件模塊可以位于隨機存儲器,閃存、只讀存儲器,可編程只讀存儲器或者電可擦寫可編程存儲器、寄存器等本領(lǐng)域成熟的存儲介質(zhì)中。
下面介紹一下應(yīng)用的性能優(yōu)化方法的應(yīng)用場景,主要涉及以下三個內(nèi)容:
輸入:在終端的網(wǎng)頁(Web)上進行用戶操作界面(英文全稱:user interface,縮寫:UI)的操作,輸入應(yīng)用對應(yīng)的代碼,以應(yīng)用為某游戲為例,例如:在手游《王者榮耀》、《穿越火線》、《全民突擊》、《全民超神》等。
處理:自動獲取所述游戲的代碼,使用TscSharp靜態(tài)代碼掃描工具掃描所述代碼,靜態(tài)分析所述代碼中是否存在的非渲染層面的性能風(fēng)險。
輸出:輸出存在性能風(fēng)險的代碼文件、對應(yīng)行號,以及問題代碼片段等。例如:在手游《王者榮耀》、《穿越火線》、《全民突擊》、《全民超神》等中發(fā)現(xiàn)update中使用foreach,update中使用new等嚴重影響性能的問題代碼,進而輸出所述問題代碼。
本發(fā)明的具體操作流程如下:
步驟1、如圖6a所示,以終端為電腦為例,在電腦上用瀏覽器打開TscSharp的Web頁面:http://tscancode.oa.com/,點擊項目配置(例如:目標應(yīng)用),填寫項目信息,例如:開放源代碼的版本控制系統(tǒng)(英文全稱:Subversion,縮寫:svn)等信息。
步驟2、配置掃描任務(wù),如圖6b所示,所述當前項目為穿越火線(英文全稱:Cross Fire,縮寫:CF)手游Client,則進一步配置所述CF手游的掃描日期和掃描時間,當配置完成后可選擇“保存”進行保存所述掃描配置,若無需執(zhí)行所述掃描配置,可進行相應(yīng)的修改,例如:點擊“清空任務(wù)”。
需要說明的是,除步驟3中配置定時掃描任務(wù)外,可以手動觸發(fā)掃描,如圖6c所示,點擊左上角的“掃描”,通過掃描進一步判斷所述CF手游是否有已存在的性能問題。
步驟3、如圖6d所示,掃描完成后,通過社交工具通知用戶,用戶可在頁面上查看掃描結(jié)果,其中,所述社交工具包括郵件、短信、或者一些即時通訊軟件,例如:騰訊通(英文全稱:Real Time eXchange,縮寫:RTX)等。
步驟4、如圖6e所示,若步驟3中的掃描結(jié)果中發(fā)現(xiàn)所述CF手游的代碼存在性能問題,則用戶針對所述出現(xiàn)性能問題的代碼進行性能優(yōu)化,當執(zhí)行完性能優(yōu)化后,再次點擊“掃描”按鈕手動觸發(fā)掃描,驗證性能優(yōu)化后的代碼是否還存在性能問題。
為便于更好的實施本發(fā)明實施例的上述相關(guān)方法,下面還提供用于配合上述方法的相關(guān)裝置。
請參閱圖7,本發(fā)明實施例中服務(wù)器700的一個結(jié)構(gòu)示意圖,包括:確定模塊701,分析模塊702,判斷模塊703,獲取模塊704以及性能優(yōu)化模塊705。
確定模塊701,用于確定待測試的目標應(yīng)用;
分析模塊702,用于使用靜態(tài)代碼掃描規(guī)則對所述確定模塊701確定的所述目標應(yīng)用進行掃描分析,所述靜態(tài)代碼掃描規(guī)則包括:對已存在的性能問題對應(yīng)的代碼特征進行提取后生成的問題代碼;
判斷模塊703,判斷所述目標應(yīng)用中是否存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼;
所述確定模塊701,還用于若所述目標應(yīng)用中存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼,則確定所述目標應(yīng)用存在性能問題;
獲取模塊704,用于獲取所述目標應(yīng)用的性能優(yōu)化策略;
性能優(yōu)化模塊705,根據(jù)所述獲取模塊704獲取的所述性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化。
在圖7所示的基礎(chǔ)上,請參閱圖8,所述服務(wù)器700還包括:
所述獲取模塊704,還用于所述確定模塊701確定待測試的目標應(yīng)用之前,從問題來源庫中獲取已存在的性能問題;
解析模塊706,用于解析所述獲取模塊704獲取的所述已存在的性能問題對應(yīng)的代碼特征;
生成模塊707,用于根據(jù)所述解析模塊706解析出的所述已存在的性能問題對應(yīng)的代碼特征生成性能問題對應(yīng)的問題代碼;
保存模塊708,用于將所述生成模塊707生成的所述性能問題對應(yīng)的問題代碼存入性能問題經(jīng)驗庫。
在圖8所示的基礎(chǔ)上,請參閱圖9,所述服務(wù)器700還包括:
創(chuàng)建模塊709,用于所述保存模塊708將所述性能問題對應(yīng)的問題代碼存入性能問題經(jīng)驗庫之后,根據(jù)所述性能問題經(jīng)驗庫中保存的問題代碼創(chuàng)建所述靜態(tài)代碼掃描規(guī)則。
在一些可能的實現(xiàn)方式中,所述獲取模塊704具體用于根據(jù)所述目標應(yīng)用存在的性能問題從所述性能問題經(jīng)驗庫中獲取所述目標應(yīng)用的所述性能優(yōu)化策略。
在另一些可能的實現(xiàn)方式中,所述分析模塊702具體用于確定所述目標應(yīng)用的代碼對應(yīng)的作用域函數(shù);判斷所述作用域函數(shù)是否滿足預(yù)置的函數(shù)類型;若所述作用域函數(shù)滿足所述預(yù)置的函數(shù)類型,獲取所述作用域函數(shù)的函數(shù)名;判斷所述函數(shù)名是否為預(yù)置的函數(shù)名;若是,對所述作用域函數(shù)包括的符號單元進行語法分析;判斷所述符號單元是否存在語法錯誤,若是,確定所述目標應(yīng)用的代碼是問題代碼,若不是,確定所述目標應(yīng)用的代碼不是問題代碼。
在另一些可能的實現(xiàn)方式中,所述分析模塊702,還用于在所述性能優(yōu)化模塊705根據(jù)所述性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化之后,使用所述靜態(tài)代碼掃描規(guī)則對性能優(yōu)化后的目標應(yīng)用進行掃描分析;
所述判斷模塊703,還用于判斷所述性能優(yōu)化后的目標應(yīng)用中是否存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼;
所述確定模塊701,還用于若所述性能優(yōu)化后的目標應(yīng)用中不存在所述靜態(tài)代碼掃描規(guī)則中包括的問題代碼,則確定所述性能優(yōu)化后的目標應(yīng)用不存在性能問題。
綜上,首先確定待測試的目標應(yīng)用,然后使用靜態(tài)代碼掃描規(guī)則對所述目標應(yīng)用進行掃描分析,而所述靜態(tài)代碼掃描規(guī)則包括對已存在的性能問題對應(yīng)的代碼特征進行提取后生成的問題代碼。這樣,無需涉及測試場景,直接判斷目標應(yīng)用是否存在所述靜態(tài)代碼掃描規(guī)則中包括的所述問題代碼,若是,則確定所述目標應(yīng)用存在性能問題,然后獲取所述目標應(yīng)用的性能優(yōu)化策略,根據(jù)所述性能優(yōu)化策略對所述目標應(yīng)用進行性能優(yōu)化,可見,直接通過靜態(tài)代碼掃描規(guī)則就可以確定出目標應(yīng)用的性能問題,從而對目標應(yīng)用進行性能優(yōu)化,無需設(shè)計測試場景,有效提高應(yīng)用的性能優(yōu)化效率以及節(jié)約性能優(yōu)化所需的時間。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。