本發(fā)明屬于計算機(jī)技術(shù)領(lǐng)域,尤其涉及一種應(yīng)用程序的模糊測試方法、裝置及系統(tǒng)。
背景技術(shù):
現(xiàn)有的計算機(jī)技術(shù)越來越普及,各種終端的應(yīng)用程序也被更多的用戶運(yùn)用,但是應(yīng)用程序的安全也越來越受到重視,應(yīng)用程序的監(jiān)控技術(shù)也更加重要。目前,通過向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來發(fā)現(xiàn)軟件漏洞的方法,也就是自動或半自動的生成隨機(jī)數(shù)據(jù)輸入到一個應(yīng)用程序中,并監(jiān)視應(yīng)用程序異常,如崩潰,斷言失敗,日志異常等,以發(fā)現(xiàn)可能的程序錯誤。然而,采用上述方法測試時,由于缺少一定的有效手段和度量指標(biāo),往往會產(chǎn)生大量相同效果的無效測試數(shù)據(jù),使整個測試過程耗時長,效果也不明顯。因此,提供一種更有效的應(yīng)用程序的測試方案是迫切需求的。
技術(shù)實現(xiàn)要素:
本發(fā)明提供了一種應(yīng)用程序的模糊測試方法、裝置及系統(tǒng),可以將有效測試數(shù)據(jù)進(jìn)行存儲,達(dá)到對測試數(shù)據(jù)的有效精簡且不影響測試效果的目的。
本發(fā)明實施例提供一種應(yīng)用程序的模糊測試方法,所述方法包括以下步驟:
選擇與被測應(yīng)用程序?qū)?yīng)的數(shù)據(jù)生成規(guī)則,并根據(jù)所述數(shù)據(jù)生成規(guī)則與被測應(yīng)用程序的協(xié)議特征生成本次測試數(shù)據(jù);
根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試;
在所述根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試的測試過程中進(jìn)行代碼覆蓋率搜集;
判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相比是否存在有效變化;以及
若所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相對于所述上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率存在有效變化,則將所述本次測試數(shù)據(jù)寫入基線庫。
本發(fā)明實施例還提供一種應(yīng)用程序的模糊測試裝置,所述裝置包括:
測試數(shù)據(jù)生成模塊,用于選擇與被測應(yīng)用程序?qū)?yīng)的數(shù)據(jù)生成規(guī)則,并根據(jù)所述數(shù)據(jù)生成規(guī)則與被測應(yīng)用程序的協(xié)議特征生成本次測試數(shù)據(jù);
測試執(zhí)行模塊,用于根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試;
覆蓋率搜集模塊,用于在所述根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試的測試過程中進(jìn)行代碼覆蓋率搜集;
第一判斷模塊,用于判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相比是否存在有效變化;以及
數(shù)據(jù)寫入模塊,用于若所述第一判斷模塊判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相對于所述上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率存在有效變化,則將所述本次測試數(shù)據(jù)寫入基線庫。
一種應(yīng)用程序的模糊測試系統(tǒng),所述系統(tǒng)包括:測試數(shù)據(jù)生成服務(wù)器、測試服務(wù)器、覆蓋率搜集服務(wù)器以及基線庫;
所述測試數(shù)據(jù)生成服務(wù)器,用于選擇與被測應(yīng)用程序?qū)?yīng)的數(shù)據(jù)生成規(guī)則,并根據(jù)所述數(shù)據(jù)生成規(guī)則與被測應(yīng)用程序的協(xié)議特征生成本次測試數(shù)據(jù);
所述測試服務(wù)器,用于根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試;
所述覆蓋率搜集服務(wù)器,用于在所述測試服務(wù)器根據(jù)所述本次測試數(shù)據(jù) 對所述被測應(yīng)用程序進(jìn)行測試的測試過程中搜集代碼覆蓋率;還用于判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相比是否存在有效變化;以及
若所述覆蓋率搜集服務(wù)器判斷所述本次測試數(shù)據(jù)測試對應(yīng)的代碼覆蓋率相對于上次測試數(shù)據(jù)測試對應(yīng)的代碼覆蓋率存在有效變化,所述測試服務(wù)器還用于將所述本次測試數(shù)據(jù)寫入所述基線庫。
本發(fā)明實施例所提供的應(yīng)用程序的模糊測試方法、裝置及系統(tǒng),通過在測試過程中,針對測試數(shù)據(jù)對應(yīng)的代碼覆蓋率進(jìn)行搜集,并將本次測試數(shù)據(jù)測試對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)測試對應(yīng)的代碼覆蓋率進(jìn)行比對以判斷本次測試數(shù)據(jù)是否有效,將有效的測試數(shù)據(jù)進(jìn)行存儲,達(dá)到對測試數(shù)據(jù)的有效精簡且不影響測試效果的目的。
為讓本發(fā)明的上述和其他目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附圖式,作詳細(xì)說明如下。
附圖說明
圖1示出了一種服務(wù)器在一個實施例中的結(jié)構(gòu)框圖。
圖2為第一實施例提供的應(yīng)用程序的模糊測試方法流程圖。
圖3為第二實施例提供的應(yīng)用程序的模糊測試方法流程圖。
圖4為第三實施例提供的應(yīng)用程序的模糊測試方法流程圖。
圖5為第四實施例提供的應(yīng)用程序的模糊測試裝置結(jié)構(gòu)框圖。
圖6為第五實施例提供的應(yīng)用程序的模糊測試裝置結(jié)構(gòu)框圖。
圖7為第六實施例提供的應(yīng)用程序的模糊測試裝置結(jié)構(gòu)框圖。
圖8為第七實施例提供的應(yīng)用程序的模糊測試系統(tǒng)示意圖。
具體實施方式
為更進(jìn)一步闡述本發(fā)明為實現(xiàn)預(yù)定發(fā)明目的所采取的技術(shù)手段及功效,以下結(jié)合附圖及較佳實施例,對依據(jù)本發(fā)明的具體實施方式、結(jié)構(gòu)、特征及其功效,詳細(xì)說明如后。
本發(fā)明實施例所提供的應(yīng)用程序的模糊測試方法、裝置及系統(tǒng)可用于服務(wù)器。
圖1為一種服務(wù)器100的一個實施例的結(jié)構(gòu)框圖。如圖1所示,服務(wù)器100包括:存儲器102、處理器104以及網(wǎng)絡(luò)模塊106??梢岳斫猓瑘D1所示的結(jié)構(gòu)僅為示意,其并不對服務(wù)器100的結(jié)構(gòu)造成限定。例如,服務(wù)器100還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。
存儲器102可用于存儲軟件程序以及模塊,如本發(fā)明實施例中的應(yīng)用程序的模糊測試處理方法、裝置及系統(tǒng)對應(yīng)的程序指令/模塊,處理器104通過運(yùn)行存儲在存儲器102內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實現(xiàn)上述的應(yīng)用程序的模糊測試方法。存儲器102可包括高速隨機(jī)存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器102可進(jìn)一步包括相對于處理器104遠(yuǎn)程設(shè)置的存儲器,這些遠(yuǎn)程存儲器可以通過網(wǎng)絡(luò)連接至服務(wù)器100。上述網(wǎng)絡(luò)的實例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動通信網(wǎng)及其組合。
網(wǎng)絡(luò)模塊106用于接收以及發(fā)送網(wǎng)絡(luò)信號。上述網(wǎng)絡(luò)信號可包括無線信號或者有線信號。在一個實例中,上述網(wǎng)絡(luò)信號為有線網(wǎng)絡(luò)信號。此時,網(wǎng)絡(luò)模塊106可包括處理器、隨機(jī)存儲器、轉(zhuǎn)換器、晶體振蕩器等元件。
上述的軟件程序以及模塊包括:操作系統(tǒng)108、測試數(shù)據(jù)生成管理模塊110、測試執(zhí)行管理模塊112以及覆蓋率搜集管理模塊114。其中操作系統(tǒng)108例如可為LINUX,UNIX,WINDOWS,其可包括各種用于管理系統(tǒng)任務(wù)(例如內(nèi)存管理、存儲設(shè)備控制、電源管理等)的軟件組件和/或驅(qū)動,并可與各種硬件或軟件組件相互通訊,從而提供其他軟件組件的運(yùn)行環(huán)境。測試數(shù)據(jù) 生成管理模塊110、測試執(zhí)行管理模塊112以及覆蓋率搜集管理模塊114運(yùn)行在操作系統(tǒng)108的基礎(chǔ)上,并通過操作系統(tǒng)108的網(wǎng)絡(luò)服務(wù)監(jiān)聽來自網(wǎng)絡(luò)的請求,根據(jù)請求完成相應(yīng)的數(shù)據(jù)處理。
此外,在上述的實施例中,測試數(shù)據(jù)生成管理模塊110、測試執(zhí)行管理模塊112以及覆蓋率搜集管理模塊114是部署在同一服務(wù)器中,然后,其實施方式并不限于此。例如,還可將測試數(shù)據(jù)生成管理模塊110、測試執(zhí)行管理模塊112以及覆蓋率搜集管理模塊114分別部署在獨立的服務(wù)器中;或者將測試數(shù)據(jù)生成管理模塊110及測試執(zhí)行管理模塊112部署在同一服務(wù)器中,而覆蓋率搜集管理模塊114部署在另一服務(wù)器。總之,本領(lǐng)域普通技術(shù)人員可以根據(jù)具體的需求以及硬件環(huán)境靈活部署。
第一實施例
本實施例提供一種應(yīng)用程序的模糊測試方法,本實施例的方法可用于圖1所示的服務(wù)器中,如圖2所示,本實施例的方法包括以下步驟:
步驟S101、選擇與被測應(yīng)用程序?qū)?yīng)的數(shù)據(jù)生成規(guī)則,并根據(jù)所述數(shù)據(jù)生成規(guī)則與被測應(yīng)用程序的協(xié)議特征生成本次測試數(shù)據(jù)。
所述測試數(shù)據(jù)可以理解為可應(yīng)用在所述被測應(yīng)用程序中,使所述被測應(yīng)用程序運(yùn)行的測試用例。所述數(shù)據(jù)生成規(guī)則可包括多種規(guī)則類型,例如所述多種規(guī)則類型可包括:分隔符、隨機(jī)數(shù)、二進(jìn)制數(shù)據(jù)量、字符型、bit型、byte型以及float型等,其中,分隔符包括如\r、\n、=、>、<等分隔符;隨機(jī)數(shù)包括各種長度的隨機(jī)數(shù);二進(jìn)制數(shù)據(jù)量包括各種二進(jìn)制數(shù)據(jù)流的組合;字符型包括ascii、unicode在內(nèi)的各種字符型數(shù)據(jù)??梢灾赖氖?,上述規(guī)則類型僅為列舉例子,并不包括全部的規(guī)則類型。所述測試數(shù)據(jù)由所述多種規(guī)則類型組成,例如,可以是用于測試的日期,指定長度內(nèi)的字母數(shù)字組合字符串等。
進(jìn)一步地,所述數(shù)據(jù)生成規(guī)則是可擴(kuò)充的,在實際運(yùn)用中,技術(shù)人員可 根據(jù)需求進(jìn)行擴(kuò)充。
進(jìn)一步地,所述數(shù)據(jù)生成規(guī)則可以存儲在數(shù)據(jù)生成規(guī)則數(shù)據(jù)庫中,也可以直接存儲在服務(wù)器100中。
詳細(xì)地,步驟S101可包括:解析所述被測應(yīng)用程序的協(xié)議,在協(xié)議管理庫中查詢所述被測應(yīng)用程序的協(xié)議,生成所述協(xié)議對應(yīng)的描述文件;調(diào)度所述描述文件中對應(yīng)的所述數(shù)據(jù)生成規(guī)則;以及根據(jù)所述數(shù)據(jù)生成規(guī)則生成所述本次測試數(shù)據(jù),并將所述本次測試數(shù)據(jù)作為待用測試數(shù)據(jù)進(jìn)行存儲。
所述協(xié)議包括但不限于:HTTP協(xié)議TCP/IP協(xié)議、Rpc協(xié)議、SOAP協(xié)議等。具體地,可使用服務(wù)器100中的協(xié)議適配器與所述被測應(yīng)用程序?qū)?yīng)的協(xié)議的有效調(diào)用。進(jìn)一步地,服務(wù)器100可提供可供擴(kuò)展的接口,可以定義新的協(xié)議并開發(fā)新的協(xié)議適配器,但是應(yīng)該遵循以下協(xié)議規(guī)范,其中擴(kuò)展協(xié)議包括:協(xié)議名稱:所述協(xié)議的名稱;訪問方式:所述協(xié)議的服務(wù)地址或者訪問地址;訪問參數(shù):訪問所述協(xié)議需要提供的請求參數(shù);等等。
進(jìn)一步地,通過服務(wù)器100中的協(xié)議解析器,調(diào)用所述被測應(yīng)用程序及所述被測應(yīng)用程序?qū)?yīng)的協(xié)議,解析出所述被測應(yīng)用程序的協(xié)議以及被測接口和輸入?yún)?shù),并將解析出來的所述被測應(yīng)用程序的協(xié)議以及被測接口和輸入?yún)?shù)轉(zhuǎn)存為服務(wù)器100可處理的所述協(xié)議對應(yīng)的描述文件,所述描述文件中包括所述協(xié)議下的數(shù)據(jù)生成規(guī)則。在一個實例中,所述描述文件可以為如下代碼:
1 import sys
2 ……
3 s_initialize("HTTP REQUEST")
4 s_static("GET http://www.****.com/tws/apiextusercash/CashOut?")
5 s_static("bankId=")
6 s_no_appoint_datatype("102",name="bankId")
7 s_static("&")
8 s_static("cashOut=")
9 s_no_appoint_datatype("12100",name="cashOut")
……
上面的代碼示例展示了一份基于HTTP協(xié)議的協(xié)議描述文件,第三行初始化一個http的請求;第四行展示該http請求的類型(get)以及請求的url;第五行定義第一個參數(shù)bankId;第六行定義所述參數(shù)bankId的測試數(shù)據(jù)生成規(guī)則,本實例中的測試數(shù)據(jù)生成規(guī)則為s_no_appoint_datatype所定義內(nèi)容。測試數(shù)據(jù)生成過程中,若不特別指定任何規(guī)則,則將所有的規(guī)則遍歷一遍,生成所有的可能的測試數(shù)據(jù)??梢灾赖氖?,若不特別指定任何規(guī)則,僅根據(jù)數(shù)據(jù)生成規(guī)則的規(guī)則類型生成所有可能的測試數(shù)據(jù),生成的測試數(shù)據(jù)量將會非常大。
詳細(xì)地,通過一個服務(wù)器100中的規(guī)則調(diào)度器調(diào)度所述描述文件中對應(yīng)的所述數(shù)據(jù)生成規(guī)則。例如上述描述文件中的數(shù)據(jù)生成規(guī)則,包括一個由字母組成的名稱字符串以及由數(shù)字組成的字符串。進(jìn)一步地,將生成的測試數(shù)據(jù)進(jìn)行存儲。在一個實例中,所生成的測試數(shù)據(jù)的存儲內(nèi)容包括:用例編號;用例數(shù)據(jù);及所屬測試用例數(shù)據(jù)生成規(guī)則。
步驟S102、根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試。
詳細(xì)地,步驟S102可包括:將所述本次測試數(shù)據(jù)注入所述被測應(yīng)用程序中;在所述根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試時,對所述測試過程進(jìn)行異常監(jiān)控;輸出根據(jù)所述本次測試數(shù)據(jù)得到的測試報告。
具體地,所述被測應(yīng)用程序,可以是存儲在不同于服務(wù)器100的另外的服務(wù)器,可以是存儲在電子終端中的應(yīng)用程序,本申請的實施例中并不限制所述被測應(yīng)用程序與測試模塊的存儲終端,當(dāng)然,所述被測應(yīng)用程序也可以存儲在服務(wù)器100中的待測應(yīng)用程序。
具體地,在測試時,還包括監(jiān)控所述被測應(yīng)用程序的反應(yīng),并記錄本次測試狀況。在一個實例中,主要監(jiān)控內(nèi)容包括:core dump;用例執(zhí)行有無返回;日志異常。所述core dump又叫做核心轉(zhuǎn)儲,當(dāng)程序運(yùn)行過程中發(fā)生異常, 程序異常退出時,由操作系統(tǒng)把程序當(dāng)前的內(nèi)存狀況存儲在一個core文件中。
具體地,所述測試報告包括:上述異常監(jiān)控監(jiān)測到的問題,測試用例匯總數(shù)據(jù)等。詳細(xì)地,所述異常監(jiān)控監(jiān)測到的問題,包括相應(yīng)問題以及引起所述相應(yīng)問題的對應(yīng)測試數(shù)據(jù)。詳細(xì)地,所述測試用例匯總數(shù)據(jù)為前面所有針對所述被測應(yīng)用程序的測試產(chǎn)生的數(shù)據(jù)。
步驟S103、在所述根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試的測試過程中進(jìn)行代碼覆蓋率搜集。
具體地,步驟S103可包括:在所述測試之前,對被測應(yīng)用程序進(jìn)行插樁;根據(jù)所述本次測試數(shù)據(jù)完成測試之后,搜集所述代碼覆蓋率。
詳細(xì)地,所述插樁是在保證所述被測應(yīng)用程序原有邏輯完整性的基礎(chǔ)上在程序中插入一些探針或“探測儀”,通過探針的執(zhí)行并拋出程序運(yùn)行的特征數(shù)據(jù),通過對所述特征數(shù)據(jù)的分析,可以獲得程序的控制流和數(shù)據(jù)流信息,進(jìn)而得到邏輯覆蓋等動態(tài)信息,從而實現(xiàn)測試目的的方法。所述搜集代碼覆蓋率,為增加本次測試后所述被測應(yīng)用程序的代碼覆蓋率的總值。例如,若本次測試為第四次測試所述被測應(yīng)用程序。所述本次測試所對應(yīng)的代碼覆蓋率為四次全部測試后的總的代碼覆蓋率,而所述上次測試數(shù)據(jù)對應(yīng)代碼覆蓋率則為前三次全部測試后的總的代碼覆蓋率。所述分析本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)代碼覆蓋率的差距,則可以理解為,增加本次測試后代碼覆蓋率產(chǎn)生的變化。
步驟S104、判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相比是否存在有效變化。
在本步驟中,分析本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)代碼覆蓋率的差距,若存在差距則表示所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率存在有效變化,若不存在差距則表示所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率不存在有效變化。所述代碼覆蓋率的差距為兩次測試得到的代碼覆蓋率的差值。
詳細(xì)地,若本次測試為所述被測應(yīng)用程序第一次被測試,則所述上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率默認(rèn)為零,本次測試直接搜集所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率,若所述代碼覆蓋率為零或者小于某個指定的極限值,則表示根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序的源代碼中的代碼測試的比例為零,所述本次測試數(shù)據(jù)為無效測試數(shù)據(jù)。若本次測試不是第一次測試所述被測應(yīng)用程序,則統(tǒng)計本次測試的代碼覆蓋率,并與上次測試所述被測應(yīng)用程序的代碼覆蓋率進(jìn)行比較,若兩次覆蓋率的差值為零,或者小于某個指定值,則視本次測試數(shù)據(jù)為無效測試數(shù)據(jù)。
步驟S105、若所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相對于所述上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率存在有效變化,則將所述本次測試數(shù)據(jù)寫入基線庫。
詳細(xì)地,若所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相對于上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率存在有效變化,也就是說,使用本次測試后,若所述代碼覆蓋率有增加,則表示所述本次測試數(shù)據(jù)為有效測試數(shù)據(jù)。
進(jìn)一步地,將有效測試數(shù)據(jù)存儲至所述基線庫中。詳細(xì)地,將所述有效測試數(shù)據(jù)與對應(yīng)的被測應(yīng)用程序進(jìn)行關(guān)聯(lián)以數(shù)據(jù)文件的形式進(jìn)行存儲。進(jìn)一步地,下次測試所述被測應(yīng)用程序時,在所述應(yīng)用程序未更新的情況下,可直接調(diào)用所述基線庫中的測試數(shù)據(jù)進(jìn)行測試。
詳細(xì)地,基線庫中存儲的測試數(shù)據(jù)也可以當(dāng)成是所述被測應(yīng)用程序的一個特殊的測試數(shù)據(jù)生成規(guī)則。
根據(jù)本實施例的方法,通過對應(yīng)用程序測試時,能夠?qū)Σ煌瑴y試數(shù)據(jù),測試的代碼覆蓋率的變化進(jìn)行統(tǒng)計,因此來判斷對應(yīng)的測試數(shù)據(jù)是否對被測的應(yīng)用程序有效,有效的測試數(shù)據(jù)進(jìn)行存儲,無效的測試數(shù)據(jù)丟棄,以此來達(dá)到對測試數(shù)據(jù)的有效精簡且不影響測試效果的目的。
第二實施例
本實施例提供一種應(yīng)用程序的模糊測試方法,本實施例的方法可用于圖 1所示的服務(wù)器中,本實施例的方法與第一實施例類似,如圖3所示,所述方法包括:
步驟S101、選擇與被測應(yīng)用程序?qū)?yīng)的數(shù)據(jù)生成規(guī)則,并根據(jù)所述數(shù)據(jù)生成規(guī)則與被測應(yīng)用程序的協(xié)議特征生成本次測試數(shù)據(jù)。
步驟S102、根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試。
步驟S103、在所述根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試的測試過程中進(jìn)行代碼覆蓋率搜集。
步驟S104、判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相比是否存在有效變化。
其中,上述步驟S101至步驟S104可參考第一實施例,在此不再贅述。
步驟S201、判斷所述本次測試數(shù)據(jù)與所述上次測試數(shù)據(jù)是否來自同一數(shù)據(jù)生成規(guī)則。
若步驟S104判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相對于上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率無有效變化,則執(zhí)行步驟S201。
在本步驟中,若所述本次測試數(shù)據(jù)與所述上次測試數(shù)據(jù)來自同一數(shù)據(jù)生成規(guī)則,則所述被測應(yīng)用程序的測試跳過所述本次測試數(shù)據(jù)與所述上次測試數(shù)據(jù)對應(yīng)的數(shù)據(jù)生成規(guī)則下生成的所有測試數(shù)據(jù)。
在一個實例中,所述數(shù)據(jù)生成規(guī)則包括生成兩個字符串,其一為三位數(shù)的數(shù)字組成的字符串;其二為若干字母組成的字符串。若上述規(guī)則下生成的其一三位數(shù)組成的數(shù)字,前后兩次的測試數(shù)據(jù)均為三位數(shù)字符串和字母字符串組成的測試數(shù)據(jù),且兩次測試得到的代碼覆蓋率沒有變化,則跳過在所述數(shù)據(jù)生成規(guī)則下生成的所有測試數(shù)據(jù)的測試。
進(jìn)一步地,也可以預(yù)設(shè)跳過指定數(shù)量的所述數(shù)據(jù)生成規(guī)則下生成的測試數(shù)據(jù)的執(zhí)行步驟。例如,指定上述規(guī)則下生成的十個測試數(shù)據(jù)或測試用例。從本次測試數(shù)據(jù)測試后,使用后接的第十一個測試用例進(jìn)行下次測試。
步驟S202、刪除所述本次測試數(shù)據(jù)。
在本步驟中,若判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相比不存在有效變化,且進(jìn)一步判斷所述本次測試數(shù)據(jù)與所述上次測試數(shù)據(jù)來自同一數(shù)據(jù)生成規(guī)則,則刪除先前在步驟S101(請參考第一實施例)中存儲的所述本次測試數(shù)據(jù)。
根據(jù)本實施例的方法,通過比較兩次測試代碼覆蓋率來判斷測試數(shù)據(jù)對于被測應(yīng)用程序是否有效,若判斷測試數(shù)據(jù)對于被測應(yīng)用程序無效,且前后兩次測試來自于同一數(shù)據(jù)生成規(guī)則,則所述被測應(yīng)用程序的測試跳過所述本次測試數(shù)據(jù)與所述上次測試數(shù)據(jù)對應(yīng)的數(shù)據(jù)生成規(guī)則下生成的所有測試數(shù)據(jù),如此可以有效提高測試速度,并且進(jìn)一步將無效測試用例刪除,能夠提高下次測試所述被測應(yīng)用程序時的效率。
第三實施例
本實施例提供一種應(yīng)用程序的模糊測試方法,本實施例的方法可用于圖1所示的服務(wù)器中,本實施例的方法與第一實施例類似,如圖4所示,所述方法包括:
步驟S101、選擇與被測應(yīng)用程序?qū)?yīng)的數(shù)據(jù)生成規(guī)則,并根據(jù)所述數(shù)據(jù)生成規(guī)則與被測應(yīng)用程序的協(xié)議特征生成本次測試數(shù)據(jù)。
步驟S102、根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試。
步驟S103、在所述根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試的測試過程中進(jìn)行代碼覆蓋率搜集。
步驟S104、判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相比是否存在有效變化。
步驟S105、若所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相對于所述上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率存在有效變化,則將所述本次測試數(shù)據(jù)寫入基線庫。
其中,上述步驟S101至步驟S105可參考第一實施例,在此不再贅述。
步驟S301、若檢測到所述被測應(yīng)用程序的源代碼有更新,則對所述被測 應(yīng)用程序的源代碼變更的部分所對應(yīng)的接口建立所述被測應(yīng)用程序?qū)?yīng)的基線庫。
舉例說明,若所述被測應(yīng)用程序增加了新的時間識別功能,則對接收時間的對應(yīng)接口,或者所述被測應(yīng)用程序顯示界面中接收時間輸入的窗口建立所述被測應(yīng)用程序?qū)?yīng)的基線庫。
詳細(xì)地,根據(jù)變更的部分所對應(yīng)的接口對應(yīng)的協(xié)議生成對應(yīng)的描述文件,所述描述文件中包括對應(yīng)的數(shù)據(jù)生成規(guī)則。根據(jù)所述數(shù)據(jù)生成規(guī)則生成對應(yīng)變更部分的測試數(shù)據(jù),根據(jù)所述測試數(shù)據(jù)對變更部分進(jìn)行測試。將所述有效測試數(shù)據(jù)與對應(yīng)的被測應(yīng)用程序進(jìn)行關(guān)聯(lián)以數(shù)據(jù)文件的形式存儲至所述基線庫,從而實現(xiàn)所述基線庫的建立。
此外,若所述被測應(yīng)用程序未更新,且所述基線庫中已存儲所述被測應(yīng)用程序的測試數(shù)據(jù),則可直接調(diào)用所述測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試。
根據(jù)本實施例的方法,在所述被測應(yīng)用程序的源代碼有更新時,重新建立基線庫中的數(shù)據(jù),能夠在測試時免于做一些無用的測試,從而避免浪費(fèi)測試時間,也提高測試的準(zhǔn)確性。
第四實施例
本實施例提供一種應(yīng)用程序的模糊測裝置,本實施例的裝置可用于圖1所示的服務(wù)器中,如圖5所示,所述裝置包括:測試數(shù)據(jù)生成模塊401、測試執(zhí)行模塊402、覆蓋率搜集模塊403、第一判斷模塊404以及數(shù)據(jù)寫入模塊405。
測試數(shù)據(jù)生成模塊401,用于選擇與被測應(yīng)用程序?qū)?yīng)的數(shù)據(jù)生成規(guī)則,并根據(jù)所述數(shù)據(jù)生成規(guī)則與被測應(yīng)用程序的協(xié)議特征生成本次測試數(shù)據(jù)。
測試數(shù)據(jù)生成模塊401可包括:協(xié)議解析單元、調(diào)度單元、數(shù)據(jù)生成單 元以及存儲單元。
協(xié)議解析單元,用于解析所述被測應(yīng)用程序的協(xié)議,在協(xié)議管理庫中查詢所述被測應(yīng)用程序的協(xié)議,生成所述協(xié)議對應(yīng)的描述文件。
調(diào)度單元,用于調(diào)度所述描述文件中對應(yīng)的所述數(shù)據(jù)生成規(guī)則。
數(shù)據(jù)生成單元,用于根據(jù)所述數(shù)據(jù)生成規(guī)則生成所述本次測試數(shù)據(jù)。
存儲單元,用于將所述本次測試數(shù)據(jù)作為待用測試數(shù)據(jù)進(jìn)行存儲。
測試執(zhí)行模塊402,用于根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試。
測試執(zhí)行模塊402可包括:測試數(shù)據(jù)注入單元、輸出報告單元以及異常監(jiān)控單元。
測試數(shù)據(jù)注入單元,用于將所述本次測試數(shù)據(jù)注入所述被測應(yīng)用程序中。
輸出報告單元,用于輸出根據(jù)所述本次測試數(shù)據(jù)得到的測試報告。
異常監(jiān)控單元,用于在根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試時,對所述測試過程進(jìn)行異常監(jiān)控。
覆蓋率搜集模塊403,用于在所述根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試的測試過程中進(jìn)行代碼覆蓋率搜集。
覆蓋率搜集模塊403可包括:插樁單元以及搜集覆蓋率單元。
插樁單元,用于在所述測試之前,對所述被測應(yīng)用程序進(jìn)行插樁;
搜集覆蓋率單元,用于根據(jù)所述本次測試數(shù)據(jù)執(zhí)行完成之后,搜集所述代碼覆蓋率。
第一判斷模塊404,用于判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)代碼覆蓋率相比是否存在有效變化。
第一判斷模塊404還用于分析所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與所述上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率的差距,若存在差距則表示所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與所述上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率存在有效變 化,若不存在差距則表示所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與所述上次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率不存在有效變化。
數(shù)據(jù)寫入模塊405,用于若第一判斷模塊404判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相對于所述上次測試數(shù)據(jù)對應(yīng)代碼覆蓋率存在有效變化,則將所述本次測試數(shù)據(jù)寫入基線庫。
關(guān)于本實施例的其它細(xì)節(jié),可進(jìn)一步參考第一實施例,在此不再贅述。
根據(jù)本實施例的裝置,通過對應(yīng)用程序測試時,能夠?qū)Σ煌瑴y試數(shù)據(jù),測試的代碼覆蓋率的變化進(jìn)行統(tǒng)計,因此來判斷對應(yīng)的測試數(shù)據(jù)是否對被測的應(yīng)用程序有效,有效的測試數(shù)據(jù)進(jìn)行存儲,無效的測試數(shù)據(jù)丟棄,以此來達(dá)到對測試數(shù)據(jù)的有效精簡且不影響測試效果的目的。
第五實施例
本實施例提供一種應(yīng)用程序的模糊測裝置,本實施例的裝置可用于圖1所示的服務(wù)器中,本實施例與第四實施例類似,其不同之處在于,如圖6所示,若第一判斷模塊404判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率相對于所述上次測試數(shù)據(jù)對應(yīng)代碼覆蓋率無有效變化,則本實施例的裝置還包括:
第二判斷模塊501,用于判斷所述本次測試數(shù)據(jù)與所述上次測試數(shù)據(jù)是否來自同一數(shù)據(jù)生成規(guī)則;
若第二判斷模塊501判斷為本次測試數(shù)據(jù)與所述上次測試數(shù)據(jù)來自同一數(shù)據(jù)生成規(guī)則,則測試執(zhí)行模塊402,還用于使所述被測應(yīng)用程序的測試跳過所述本次測試數(shù)據(jù)與所述上次測試數(shù)據(jù)對應(yīng)的數(shù)據(jù)生成規(guī)則下生成的所有測試數(shù)據(jù)。
刪除模塊502,用于刪除所述基線庫中存儲的所述被測應(yīng)用程序?qū)?yīng)的上述被選擇的所述對應(yīng)數(shù)據(jù)生成規(guī)則下生成的所有測試數(shù)據(jù)。
關(guān)于本實施例的其它細(xì)節(jié),可進(jìn)一步參考第二實施例,在此不再贅述。
根據(jù)本實施例的裝置,通過比較兩次測試代碼覆蓋率來判斷測試數(shù)據(jù)對 于被測應(yīng)用程序是否有效,若判斷測試數(shù)據(jù)對于被測應(yīng)用程序無效,且前后兩次測試來自于同一數(shù)據(jù)生成規(guī)則,則所述被測應(yīng)用程序的測試跳過所述本次測試數(shù)據(jù)與所述上次測試數(shù)據(jù)對應(yīng)的數(shù)據(jù)生成規(guī)則下生成的所有測試數(shù)據(jù),如此可以有效提高測試速度,并且進(jìn)一步將無效測試用例刪除,能夠提高下次測試所述被測應(yīng)用程序時的效率。
第六實施例
本實施例提供一種應(yīng)用程序的模糊測裝置,本實施例的裝置可用于圖1所示的服務(wù)器中,本實施例與第四實施例類似,其不同之處在于,如圖7所示,所述裝置還包括:
基線庫重建模塊601,用于若檢測到所述被測應(yīng)用程序的源代碼有更新,則對所述被測應(yīng)用程序的源代碼變更的部分所對應(yīng)的接口建立所述被測應(yīng)用程序?qū)?yīng)的基線庫。
關(guān)于本實施例的其它細(xì)節(jié),可進(jìn)一步參考第三實施例,在此不再贅述。
根據(jù)本實施例的裝置,在所述被測應(yīng)用程序的源代碼有更新時,重新簡歷基線庫中的數(shù)據(jù),能夠在測試時免于做一些無用的測試,從而避免浪費(fèi)測試時間,也提高測試的準(zhǔn)確性。
第七實施例
本實施例提供一種應(yīng)用程序的模糊測試系統(tǒng),如圖8所示,所述系統(tǒng)包括:測試數(shù)據(jù)生成服務(wù)器11、測試服務(wù)器12、覆蓋率搜集服務(wù)器13以及基線庫200;
測試數(shù)據(jù)生成服務(wù)器11,用于選擇與被測應(yīng)用程序?qū)?yīng)的數(shù)據(jù)生成規(guī)則,并根據(jù)所述數(shù)據(jù)生成規(guī)則與被測應(yīng)用程序的協(xié)議特征生成本次測試數(shù)據(jù)。
測試服務(wù)器12,用于根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測 試。
覆蓋率搜集服務(wù)器13,用于在測試服務(wù)器12根據(jù)所述本次測試數(shù)據(jù)對所述被測應(yīng)用程序進(jìn)行測試的測試過程中搜集代碼覆蓋率;還用于判斷所述本次測試數(shù)據(jù)對應(yīng)的代碼覆蓋率與上次測試數(shù)據(jù)對應(yīng)代碼覆蓋率相比是否存在有效變化。
若覆蓋率搜集服務(wù)器13判斷所述本次測試數(shù)據(jù)測試對應(yīng)的代碼覆蓋率相對于上次測試數(shù)據(jù)測試對應(yīng)的代碼覆蓋率存在有效變化,測試服務(wù)器12還用于將所述本次測試數(shù)據(jù)寫入基線庫200。
關(guān)于本實施例的其它細(xì)節(jié),可進(jìn)一步參考上述方法實施例,在此不再贅述。
根據(jù)本實施例的系統(tǒng),通過對應(yīng)用程序測試時,能夠?qū)Σ煌瑴y試數(shù)據(jù),測試的代碼覆蓋率的變化進(jìn)行統(tǒng)計,因此來判斷對應(yīng)的測試數(shù)據(jù)是否對被測的應(yīng)用程序有效,有效的測試數(shù)據(jù)進(jìn)行存儲,無效的測試數(shù)據(jù)丟棄,以此來達(dá)到對測試數(shù)據(jù)的有效精簡且不影響測試效果的目的。
此外,本發(fā)明實施例還提供一種計算機(jī)可讀存儲介質(zhì),其內(nèi)存儲有計算機(jī)可執(zhí)行指令,上述的計算機(jī)可讀存儲介質(zhì)例如為非易失性存儲器例如光盤、硬盤、或者閃存。上述的計算機(jī)可執(zhí)行指令用于讓計算機(jī)或者類似的運(yùn)算裝置完成上述的應(yīng)用程序的模糊測試方法中的各種操作。
需要說明的是,本說明書中的各個實施例采用遞進(jìn)的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對于裝置類實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者 暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括要素的過程、方法、物品或者裝置中還存在另外的相同要素。
以上該,僅是本發(fā)明的較佳實施例而已,并非對本發(fā)明作任何形式上的限制,雖然本發(fā)明已以較佳實施例揭露如上,然而并非用以限定本發(fā)明,任何熟悉本專業(yè)的技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍內(nèi),當(dāng)可利用上述揭示的技術(shù)內(nèi)容做出些許更動或修飾為等同變化的等效實施例,但凡是未脫離本發(fā)明技術(shù)方案內(nèi)容,依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施例所作的任何簡單修改、等同變化與修飾,均仍屬于本發(fā)明技術(shù)方案的范圍內(nèi)。