對(duì)模糊測(cè)試中的測(cè)試用例進(jìn)行優(yōu)化的方法,裝置和系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種對(duì)測(cè)試用例進(jìn)行排序的方法,裝置和系統(tǒng)。所述方法包括:執(zhí)行以下步驟一輪或多輪:按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序,使用所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試,監(jiān)視每個(gè)測(cè)試用例的攻擊效果,并且根據(jù)相應(yīng)于每個(gè)測(cè)試用例的攻擊效果來確定每個(gè)測(cè)試用例的優(yōu)先級(jí);根據(jù)所確定的每個(gè)測(cè)試用例的優(yōu)先級(jí),對(duì)所述測(cè)試用例集合中的多個(gè)測(cè)試用例重新排序;其中,在當(dāng)前輪次中得到的重新排序后的測(cè)試用例的集合能夠作為在下一輪次的執(zhí)行中使用的初始測(cè)試用例集合。
【專利說明】對(duì)模糊測(cè)試中的測(cè)試用例進(jìn)行優(yōu)化的方法,裝置和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明總體上涉及軟件測(cè)試【技術(shù)領(lǐng)域】,更具體地涉及對(duì)模糊測(cè)試中使用的測(cè)試用例進(jìn)行優(yōu)化。
【背景技術(shù)】
[0002]軟件(包括應(yīng)用程序、通信軟件等)的安全性測(cè)試實(shí)際上是在軟件輸入空間中的一種探測(cè)。軟件的輸入空間由該軟件的所有可能的輸入或所有可能的輸入的組合構(gòu)成。窮舉是驗(yàn)證軟件行為正確性的一種最極端的方法,然而,窮舉對(duì)大部分案例來說不具備可操作性,因?yàn)橥ǔG闆r下,軟件程序的輸入空間非常巨大,甚至可能是無窮大。
[0003]相比于窮舉的方法來說,模糊測(cè)試(Fuzz Testing)作為一種隨機(jī)樣本方法,是一種更具可行性的黑盒測(cè)試方法。模糊測(cè)試通過以下方式來工作:自動(dòng)地為測(cè)試對(duì)象(即應(yīng)用程序、通信軟件等)提供隨機(jī)的或半有效的輸入(即測(cè)試用例(Test Case)),以嘗試觸發(fā)故障指示以及使測(cè)試對(duì)象崩潰。這種程序故障或錯(cuò)誤可以指示存在安全脆弱性。作為一種黑盒測(cè)試方法,模糊測(cè)試通常用于大型軟件開發(fā)項(xiàng)目。目前,最常用的模糊測(cè)試是基于字符的,基于字符的模糊測(cè)試提供隨機(jī)數(shù)據(jù)流(從文件或其他數(shù)據(jù)流中提供,例如,從套接字中提供)作為被測(cè)軟件程序的輸入?;谧址哪:郎y(cè)試正廣泛應(yīng)用于協(xié)議或網(wǎng)絡(luò)服務(wù)的安全性測(cè)試。模糊測(cè)試被認(rèn)為能夠提高軟件的安全性,這是因?yàn)?模糊測(cè)試總是能檢測(cè)出一些測(cè)試人員未能發(fā)現(xiàn)的漏洞(bug),這些漏洞往往會(huì)被軟件測(cè)試工程師所忽略。模糊測(cè)試的主要優(yōu)勢(shì)在于:進(jìn)行測(cè)試的成本相對(duì)較低,并且完全可以自動(dòng)實(shí)現(xiàn);此外,模糊測(cè)試經(jīng)常能找出比較嚴(yán)重的且可被利用的漏洞,這些漏洞可以被攻擊者加以利用。
[0004]使用模糊測(cè)試的一個(gè)挑戰(zhàn)是,如何利用有限的測(cè)試資源來選擇能夠有效地檢測(cè)漏洞的測(cè)試用例。有許多方法用來選擇用于模糊測(cè)試的測(cè)試用例。一個(gè)簡(jiǎn)單的方法叫作隨機(jī)模糊測(cè)試(RFT),該方法隨機(jī)地從輸入域(S卩,所有可能的輸入的集合)中選擇測(cè)試用例。RFT具有以下優(yōu)點(diǎn):成本低;能夠自動(dòng)地生成大量測(cè)試用例;以及在無需軟件規(guī)范和源代碼的情況下生成測(cè)試用例。除此以外,RFT將“隨機(jī)性”引入測(cè)試過程。這種隨機(jī)性能夠最好地反映系統(tǒng)運(yùn)行環(huán)境的混亂。因此,RFT能夠檢測(cè)到通過確定性的方法所不能暴露的某些漏洞。所有這些優(yōu)點(diǎn)使得RFT在發(fā)現(xiàn)軟件漏洞的行業(yè)中被廣泛的使用。
[0005]然而,在RFT中,并不嘗試使用任何可用的信息來引導(dǎo)測(cè)試。由于現(xiàn)在的軟件至少具有基本的機(jī)制來檢查輸入的有效性,所以與合法輸入顯著不同的過于特別的“模糊”數(shù)據(jù)將被容易地檢測(cè)到并被丟棄。此外,在RFT中,非常可能具有重復(fù)的測(cè)試用例,因?yàn)橐恍y(cè)試用例對(duì)于目標(biāo)軟件具有相同的攻擊效果。因此,RFT的主要缺點(diǎn)是效率差。
【發(fā)明內(nèi)容】
[0006]根據(jù)本發(fā)明的一個(gè)方面,提供了一種用于對(duì)測(cè)試用例進(jìn)行排序的方法,包括:執(zhí)行以下步驟一輪或多輪:按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序,使用所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試,監(jiān)視每個(gè)測(cè)試用例的攻擊效果,并且根據(jù)相應(yīng)于每個(gè)測(cè)試用例的攻擊效果來確定每個(gè)測(cè)試用例的優(yōu)先級(jí);根據(jù)所確定的每個(gè)測(cè)試用例的優(yōu)先級(jí),對(duì)所述測(cè)試用例集合中的多個(gè)測(cè)試用例重新排序;其中,在當(dāng)前輪次中得到的重新排序后的測(cè)試用例的集合能夠作為在下一輪次的執(zhí)行中使用的初始測(cè)試用例集合。
[0007]進(jìn)一步地,在所述方法中,所述一個(gè)或多個(gè)標(biāo)準(zhǔn)至少包括以下各項(xiàng)之一:測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,測(cè)試用例與能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障的測(cè)試用例的類似度達(dá)到預(yù)定程度,以及測(cè)試用例導(dǎo)致測(cè)試對(duì)象響應(yīng)延遲。
[0008]進(jìn)一步地,在所述方法中,通過優(yōu)先級(jí)值來表示優(yōu)先級(jí),當(dāng)測(cè)試用例的攻擊效果滿足所述一個(gè)或多個(gè)標(biāo)準(zhǔn)時(shí),在測(cè)試用例的當(dāng)前優(yōu)先級(jí)值上增加相應(yīng)的優(yōu)先級(jí)值。
[0009]進(jìn)一步地,在所述方法中,增加相應(yīng)的優(yōu)先級(jí)值包括:當(dāng)一測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障時(shí),為該測(cè)試用例增加第一高的優(yōu)先級(jí)值;當(dāng)一測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障時(shí),為該測(cè)試用例增加第二高的優(yōu)先級(jí)值;當(dāng)一測(cè)試用例與能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障的測(cè)試用例的類似度達(dá)到預(yù)定程度時(shí),為該測(cè)試用例增加第三高的優(yōu)先級(jí)值;當(dāng)一測(cè)試用例導(dǎo)致測(cè)試對(duì)象響應(yīng)延遲時(shí),為該測(cè)試用例增加第四高的優(yōu)先級(jí)值。
[0010]進(jìn)一步地,在所述方法中,按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序,使用所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試具體為:按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序連續(xù)應(yīng)用測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試,直至應(yīng)用一個(gè)測(cè)試用例后所述測(cè)試對(duì)象發(fā)生故障,則重新所述啟動(dòng)測(cè)試對(duì)象并使用應(yīng)用的最后一個(gè)所述測(cè)試用例重新測(cè)試該測(cè)試對(duì)象,如果所述測(cè)試對(duì)象再次發(fā)生故障,則判斷所述應(yīng)用的最后一個(gè)測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,否則判斷所述應(yīng)用的最后一個(gè)測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障。
[0011]進(jìn)一步地,在所述方法中,所述判斷該測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障包括:(a)重新啟動(dòng)測(cè)試對(duì)象;(b)使用該測(cè)試用例之前的j個(gè)測(cè)試用例以及該測(cè)試用例重新測(cè)試該測(cè)試對(duì)象;循環(huán)執(zhí)行以上步驟(a)和(b),直到測(cè)試對(duì)象發(fā)生故障為止,此時(shí)判斷該測(cè)試用例以及該測(cè)試用例之前的j個(gè)測(cè)試用例能夠共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,其中,j的初始值為1,并且每次循環(huán)后j的值加I。
[0012]進(jìn)一步地,在所述方法中,在向測(cè)試對(duì)象應(yīng)用測(cè)試用例后,如果沒有接收到測(cè)試對(duì)象的響應(yīng),則向測(cè)試對(duì)象發(fā)送正常輸入,如果仍然沒有接收到響應(yīng),則判斷測(cè)試對(duì)象發(fā)生故障;如果接收到相應(yīng),則根據(jù)響應(yīng)時(shí)間來判斷當(dāng)前測(cè)試用例是否導(dǎo)致響應(yīng)延遲。
[0013]進(jìn)一步地,在所述方法中,所述測(cè)試對(duì)象是通信軟件。
[0014]根據(jù)本發(fā)明的另一個(gè)方面,提供了一種用于對(duì)測(cè)試用例進(jìn)行排序的裝置,包括:故障監(jiān)視模塊,用于監(jiān)視按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序,使用所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行的測(cè)試的攻擊效果,并且根據(jù)相應(yīng)于每個(gè)測(cè)試用例的攻擊效果,來確定每個(gè)測(cè)試用例的優(yōu)先級(jí);優(yōu)化模塊,用于根據(jù)所確定的每個(gè)測(cè)試用例的優(yōu)先級(jí),對(duì)所述多個(gè)測(cè)試用例重新排序。
[0015]進(jìn)一步地,在所述裝置中,所述一個(gè)或多個(gè)標(biāo)準(zhǔn)至少包括以下各項(xiàng)之一:測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,測(cè)試用例與能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障的測(cè)試用例的類似度達(dá)到預(yù)定程度,以及測(cè)試用例導(dǎo)致測(cè)試對(duì)象響應(yīng)延遲。
[0016]進(jìn)一步地,在所述裝置中,通過優(yōu)先級(jí)值來表示優(yōu)先級(jí),當(dāng)測(cè)試用例的攻擊效果滿足所述一個(gè)或多個(gè)標(biāo)準(zhǔn)中的一個(gè)標(biāo)準(zhǔn)時(shí),在測(cè)試用例的當(dāng)前優(yōu)先級(jí)值上增加相應(yīng)的優(yōu)先級(jí)值。
[0017]進(jìn)一步地,在所述裝置中,增加相應(yīng)的優(yōu)先級(jí)值包括:當(dāng)一測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障時(shí),為該測(cè)試用例增加第一高的優(yōu)先級(jí)值;當(dāng)一測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障時(shí),為該測(cè)試用例增加第二高的優(yōu)先級(jí)值;當(dāng)一測(cè)試用例與能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障的測(cè)試用例的類似度達(dá)到預(yù)定程度時(shí),為該測(cè)試用例增加第三高的優(yōu)先級(jí)值;當(dāng)一測(cè)試用例導(dǎo)致測(cè)試對(duì)象響應(yīng)延遲時(shí),為該測(cè)試用例增加第四高的優(yōu)先級(jí)值。
[0018]進(jìn)一步地,在所述裝置中,所述故障監(jiān)視模塊包括:自動(dòng)重啟模塊,用于當(dāng)測(cè)試對(duì)象發(fā)生故障時(shí),重新啟動(dòng)測(cè)試對(duì)象;其中,當(dāng)應(yīng)用一測(cè)試用例時(shí)測(cè)試對(duì)象發(fā)生故障,則在通過所述自動(dòng)重啟模塊重新啟動(dòng)測(cè)試對(duì)象并使用該測(cè)試用例重新測(cè)試該測(cè)試對(duì)象后,如果該測(cè)試對(duì)象再次發(fā)生故障,則所述故障監(jiān)視模塊判斷該測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,否則判斷該測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障。
[0019]進(jìn)一步地,在所述裝置中,所述判斷該測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障包括:(a)重新啟動(dòng)測(cè)試對(duì)象;(b)使用該測(cè)試用例之前的j個(gè)測(cè)試用例以及該測(cè)試用例重新測(cè)試該測(cè)試對(duì)象;循環(huán)執(zhí)行以上步驟(a)和(b),直到測(cè)試對(duì)象發(fā)生故障為止,此時(shí)判斷該測(cè)試用例以及該測(cè)試用例之前的j個(gè)測(cè)試用例能夠共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,其中,j的初始值為1,并且每次循環(huán)后j的值加I。
[0020]進(jìn)一步地,在所述裝置中,所述故障監(jiān)視模塊包括存活性探測(cè)模塊,用于在向測(cè)試對(duì)象應(yīng)用測(cè)試用例后,如果沒有接收到測(cè)試對(duì)象的響應(yīng),則向測(cè)試對(duì)象發(fā)送正常輸入,如果仍然沒有接收到響應(yīng),則判斷測(cè)試對(duì)象發(fā)生故障;如果接收到響應(yīng),則根據(jù)響應(yīng)時(shí)間來判斷當(dāng)前測(cè)試用例是否導(dǎo)致響應(yīng)延遲。
[0021]進(jìn)一步地,在所述裝置中,所述測(cè)試對(duì)象是通信軟件。
[0022]根據(jù)本發(fā)明的又一個(gè)方面,提供了一種用于模糊測(cè)試的方法,包括:生成多個(gè)測(cè)試用例;執(zhí)行以下步驟一輪或多輪:監(jiān)視按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序,使用所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行的測(cè)試的攻擊效果,并且根據(jù)相應(yīng)于每個(gè)測(cè)試用例的攻擊效果,來確定每個(gè)測(cè)試用例的優(yōu)先級(jí);根據(jù)所確定的每個(gè)測(cè)試用例的優(yōu)先級(jí),對(duì)所述多個(gè)測(cè)試用例重新排序;其中,在當(dāng)前輪次中得到的重新排序后的測(cè)試用例的集合能夠作為在下一輪次的執(zhí)行中使用的初始測(cè)試用例集合。
[0023]根據(jù)本發(fā)明的另一個(gè)方面,提供了一種用于模糊測(cè)試的系統(tǒng),包括:測(cè)試用例生成器,用于隨機(jī)地生成多個(gè)測(cè)試用例;測(cè)試用例存儲(chǔ)器,用于按順序存儲(chǔ)生成的所述多個(gè)測(cè)試用例;模糊測(cè)試器,用于按照所述多個(gè)測(cè)試用例的存儲(chǔ)順序,使用所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例來對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試;故障監(jiān)視器,用于監(jiān)視測(cè)試過程,并且根據(jù)相應(yīng)于每個(gè)測(cè)試用例的攻擊效果,來確定每個(gè)測(cè)試用例的優(yōu)先級(jí);優(yōu)化器,用于根據(jù)所確定的所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例的優(yōu)先級(jí),對(duì)所述多個(gè)測(cè)試用例重新排序,并且將重新排序后的所述多個(gè)測(cè)試用例存儲(chǔ)回所述測(cè)試用例存儲(chǔ)器。
[0024]通過使用本發(fā)明提供的方法,能夠自動(dòng)地優(yōu)化隨機(jī)生成的測(cè)試用例,以使得能夠極大地改進(jìn)RFT的漏洞檢測(cè)效率。本申請(qǐng)的優(yōu)化方法的優(yōu)化過程是自適應(yīng)的,并且能夠根據(jù)攻擊效果來優(yōu)化測(cè)試用例。
[0025]本發(fā)明的這些及其他特性、特征和優(yōu)勢(shì)將在參考附圖描述的說明書中變得明顯,其中附圖以示例的方式圖示說明了本發(fā)明的原理。說明書僅是出于示例目的,而不限制本發(fā)明的范圍。下文所引用的參考圖都是指附圖。
【專利附圖】
【附圖說明】
[0026]通過參考下面結(jié)合附圖給出的說明,本文描述的各個(gè)方面將變得更加顯而易見,其中:
[0027]圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法的流程圖;
[0028]圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的裝置的示意圖;
[0029]圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法的流程圖;
[0030]圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的回溯測(cè)試的方法的流程圖;
[0031]圖5是根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)的示意圖。
[0032]應(yīng)當(dāng)理解的是,在所有上述附圖中,同樣的附圖標(biāo)記指代同樣、相似或?qū)?yīng)的特征或功能。
【具體實(shí)施方式】
[0033]本申請(qǐng)將針對(duì)具體實(shí)施例并且參考特定附圖進(jìn)行描述,但是本申請(qǐng)并不局限于此,本申請(qǐng)僅是通過權(quán)利要求進(jìn)行限定。所描述的附圖僅為示意性的而非限制性的。在附圖中,為便于說明,一些元件的尺寸可能被放大而未按比例繪制。對(duì)于在提到單數(shù)名詞時(shí)使用的不定冠詞或定冠詞,例如“一”、“一個(gè)”和“該/所述”,除另有明確規(guī)定外,這包括該名詞的復(fù)數(shù)形式。
[0034]在以前的對(duì)隨機(jī)模糊測(cè)試的研究中,最經(jīng)常使用兩種尺度來評(píng)估測(cè)試用例集合的有效性,一種尺度是檢測(cè)到至少一個(gè)漏洞的可能性(稱為PF尺度),另一種是預(yù)計(jì)檢測(cè)到的漏洞的數(shù)量(稱為EF尺度)。盡管這兩種尺度非常流行,但是他們?nèi)杂性S多不足。例如,對(duì)于EF尺度來說,更高的EF尺度并不必然意味著可以檢測(cè)到更多的失效或更多不同的漏洞;對(duì)于PF尺度來說,其沒有反映能夠檢測(cè)到不同數(shù)量的漏洞的用例之間的區(qū)別。因此,上述兩種評(píng)估有效性的尺度在許多情況下并不很理想。
[0035]在本發(fā)明中,使用一種與前述兩種有效性尺度不同的尺度來評(píng)估有效性,即,使用“檢測(cè)到第一個(gè)漏洞所需的測(cè)試用例的預(yù)計(jì)數(shù)量”這一有效性尺度(稱為FF尺度)。FF尺度能夠更自然地、更直接地反映測(cè)試策略的有效性。如果FF尺度的值越低,則意味著相應(yīng)的測(cè)試策略更有效,這是因?yàn)橹恍枰俚臏y(cè)試用例就可以揭露出第一個(gè)漏洞。在實(shí)際中,當(dāng)檢測(cè)到漏洞時(shí),通常會(huì)停止測(cè)試并開始進(jìn)行調(diào)試,只有當(dāng)修復(fù)所述漏洞后才重新開始測(cè)試階段。因此,在實(shí)際的模糊測(cè)試中,能夠更快的檢測(cè)到第一個(gè)漏洞的測(cè)試用例集合往往是更有效的。
[0036]本發(fā)明提供了一種自適應(yīng)方法,對(duì)于隨機(jī)模糊測(cè)試,該方法能夠?qū)崿F(xiàn)更小的FF。本發(fā)明的總體構(gòu)思是:基于隨機(jī)測(cè)試用例的攻擊效果來對(duì)這些測(cè)試用例進(jìn)行排序,從而使得在隨后的測(cè)試中能夠盡快使用最可能揭露軟件脆弱性的測(cè)試用例來進(jìn)行測(cè)試。[0037]圖1示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的對(duì)測(cè)試用例進(jìn)行排序的方法100的流程圖。給定包含隨機(jī)生成的多個(gè)測(cè)試用例的一個(gè)集合,以及作為測(cè)試對(duì)象的軟件程序,例如測(cè)試對(duì)象可以為一個(gè)通信協(xié)議,通過圖1所示的方法來對(duì)測(cè)試用例進(jìn)行排序。
[0038]在步驟SlOl中,按照測(cè)試用例的排列順序(第一次時(shí)測(cè)試用例的排列順序是隨機(jī)生成時(shí)的排列順序),使用所有測(cè)試用例來對(duì)待測(cè)軟件程序進(jìn)行測(cè)試,檢測(cè)每個(gè)測(cè)試用例的攻擊效果,并且根據(jù)相應(yīng)于每個(gè)測(cè)試用例的攻擊效果為集合中的每個(gè)測(cè)試用例確定相應(yīng)的優(yōu)先級(jí)??梢允褂靡环N或多種標(biāo)準(zhǔn)來評(píng)估攻擊效果,例如,一個(gè)測(cè)試用例是否能夠單獨(dú)地導(dǎo)致被測(cè)軟件的發(fā)生故障(例如對(duì)請(qǐng)求無響應(yīng)),以及一個(gè)測(cè)試用例是否能夠與其他測(cè)試用例共同導(dǎo)致被測(cè)軟件的發(fā)生故障。另外,可以將測(cè)試用例劃分為兩個(gè)或更多個(gè)優(yōu)先級(jí)。
[0039]在步驟S102中,根據(jù)所確定的每個(gè)測(cè)試用例的優(yōu)先級(jí),對(duì)測(cè)試用例重新排序,從而得到重新排序后的測(cè)試用例的集合。當(dāng)按照重新排序后的順序,使用所述生成的測(cè)試用例來測(cè)試同類型的軟件程序時(shí),將能夠更快地發(fā)現(xiàn)第一處漏洞。例如,當(dāng)使用排序后的測(cè)試用例集合對(duì)運(yùn)行在另一臺(tái)機(jī)器上的同一個(gè)軟件程序或者另一個(gè)版本的軟件程序進(jìn)行測(cè)試時(shí),將能夠更快地發(fā)現(xiàn)第一處漏洞。。
[0040]在以上實(shí)施例中,只描述了對(duì)測(cè)試用例進(jìn)行一輪排序的步驟。在另一個(gè)實(shí)施例中,可以對(duì)測(cè)試用例進(jìn)行兩輪或更多輪的排序,并且在每一輪排序中執(zhí)行相同的步驟。也就是說,可以循環(huán)地執(zhí)行步驟SlOl和S102,在每一次循環(huán)中,將前一輪次中得到的重新排序后的測(cè)試用例的集合作為在下一輪次的排序中使用的初始的測(cè)試用例的集合,來對(duì)另一個(gè)被測(cè)軟件程序進(jìn)行測(cè)試,并依據(jù)測(cè)試結(jié)果再次排序。通常,如果循環(huán)的輪次越多,則對(duì)初始生成的測(cè)試用例的集合的優(yōu)化越準(zhǔn)確,即使得越可能導(dǎo)致被測(cè)軟件發(fā)生故障的測(cè)試用例將排在越靠前的位置。使用由此得到的按順序排列的測(cè)試用例來對(duì)軟件程序進(jìn)行測(cè)試時(shí),將能夠通過更少數(shù)量的測(cè)試用例、更快地揭露漏洞。
[0041]圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的對(duì)測(cè)試用例進(jìn)行排序的裝置200,其能夠?qū)崿F(xiàn)如圖1所示的方法。如圖所示,裝置200包括故障監(jiān)視模塊201和優(yōu)化模塊202。故障監(jiān)視模塊201用于監(jiān)視按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序,使用所述多個(gè)測(cè)試用例中的每一個(gè)測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試的攻擊效果,并且根據(jù)相應(yīng)于每個(gè)測(cè)試用例的攻擊效果,來確定每個(gè)測(cè)試用例的優(yōu)先級(jí)。優(yōu)化模塊202用于根據(jù)所確定的所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例的優(yōu)先級(jí),對(duì)所述多個(gè)測(cè)試用例重新排序。
[0042]圖3示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的對(duì)測(cè)試用例進(jìn)行排序的方法300。在圖3中,示出了使用m個(gè)隨機(jī)測(cè)試用例的集合T=Itpt2,…,tm}進(jìn)行第& (j≥I)輪測(cè)試的具體流程。在測(cè)試過程中,將根據(jù)測(cè)試用例的攻擊效果,為每一個(gè)測(cè)試用例ti確定相應(yīng)的優(yōu)先級(jí)??梢允褂脙?yōu)先級(jí)值來表示優(yōu)先級(jí),并且可以采用多個(gè)標(biāo)準(zhǔn)來衡量測(cè)試用例的攻擊效果。在該實(shí)施例的每一輪測(cè)試中,可以為各個(gè)測(cè)試用例分配對(duì)應(yīng)于如下所述的四種標(biāo)準(zhǔn)的優(yōu)先級(jí)值:
[0043](1)單獨(dú)地導(dǎo)致發(fā)生故障:能夠單獨(dú)的導(dǎo)致被測(cè)軟件發(fā)生故障的測(cè)試用例被分配最高優(yōu)先級(jí)值PRI_IDV ;
[0044](2)共同地導(dǎo)致發(fā)生故障:有時(shí)軟件故障是由多個(gè)個(gè)測(cè)試用例共同導(dǎo)致的,為這些測(cè)試用例分配對(duì)應(yīng)的第二高優(yōu)先級(jí)值PRI_CLB ;
[0045](3)與單獨(dú)地導(dǎo)致發(fā)生故障的測(cè)試用例類似:具有與能夠單獨(dú)地導(dǎo)致發(fā)生故障的測(cè)試用例類似的內(nèi)容的測(cè)試用例將被分配對(duì)應(yīng)的第三高優(yōu)先級(jí)值PRI_IDV_SM (可以將所有的測(cè)試用例看作是字符串,因此可以采用例如序列對(duì)齊算法來測(cè)量?jī)蓚€(gè)測(cè)試用例之間的相似度,如果相似度達(dá)到預(yù)定的閾值,那么測(cè)試用例可以被標(biāo)記為該優(yōu)先級(jí));
[0046](4)響應(yīng)延遲:導(dǎo)致延遲的響應(yīng)的測(cè)試用例被認(rèn)為有可能觸發(fā)故障,為該測(cè)試用例分配對(duì)應(yīng)的第四高優(yōu)先級(jí)值PRI_RSP (當(dāng)被測(cè)程序是通信協(xié)議軟件時(shí),這一標(biāo)準(zhǔn)特別有用,例如,如果軟件程序的響應(yīng)時(shí)間超過了上一輪測(cè)試的平均響應(yīng)時(shí)間,那么可以認(rèn)為發(fā)生了響應(yīng)延遲)。
[0047]在一輪測(cè)試中為一個(gè)測(cè)試用例分配的優(yōu)先級(jí)值可以被累加到該測(cè)試用例當(dāng)前具有的優(yōu)先級(jí)值上,每個(gè)測(cè)試用例的初始優(yōu)先級(jí)值可以被設(shè)置為相同的數(shù)值,例如O??梢圆捎貌煌臄?shù)值來表示不同的優(yōu)先級(jí),在圖3的實(shí)施例中,為每個(gè)測(cè)試用例分配對(duì)應(yīng)的優(yōu)先級(jí)值 Pi,Pi 值?1?1_10¥、?1?1_0^、?1?1_10¥_5頂以及 PRI_RSP 可以分別為 4、3、2、1,也可以為
8、6、4、2 等等。
[0048]如圖3所示,每一輪測(cè)試開始于步驟S301,例如當(dāng)前測(cè)試為第Rj輪。在步驟S301,從其中具有按Pi值大小排序的多個(gè)測(cè)試用例的測(cè)試用例集合τ中,按順序選擇一個(gè)測(cè)試用例\來應(yīng)用于被測(cè)軟件程序,然后執(zhí)行步驟S302。
[0049]在步驟S302判斷應(yīng)用了測(cè)試用例的被測(cè)軟件程序是否還在活動(dòng)狀態(tài),例如通過向被測(cè)軟件程序發(fā)送正常輸入(例如標(biāo)準(zhǔn)的文件或數(shù)據(jù)包),來觀察被測(cè)軟件程序是否有響應(yīng)。如果沒有響應(yīng),則表明被測(cè)軟件程序發(fā)生故障并且繼續(xù)執(zhí)行步驟S305 ;如果有響應(yīng),則表明被測(cè)軟件程序未發(fā)生故障并且繼續(xù)執(zhí)行步驟S303。正常輸入是只要被測(cè)軟件存活著就必然會(huì)做出響應(yīng)的輸入,獲得正常輸入的方法很多,一種方法是使用一個(gè)合法的、標(biāo)準(zhǔn)的軟件(除被測(cè)軟件外)與被測(cè)軟件通訊。這期間,他們的通訊肯定是正常的(因?yàn)榉蠀f(xié)議規(guī)范)。使用量Wireshark或者Tcpdump等工具可以捕捉到正常的輸入。另外還可以手工構(gòu)造符合被測(cè)軟件協(xié)議規(guī)范的正常 輸入。
[0050]在步驟S305,判斷被測(cè)軟件程序的故障是否由單獨(dú)的測(cè)試用例引起的。如果是的話,則將當(dāng)前測(cè)試用例\的優(yōu)先級(jí)值Pi更新為Pi=Pi+PRI_IDV,然后執(zhí)行步驟S310 ;如果不是的話,則將當(dāng)前測(cè)試用例\的優(yōu)先級(jí)值Pi更新為Pi=Pi+PRI_CLB,然后執(zhí)行步驟S310。例如,可以通過如下方式來判斷故障是否由單獨(dú)的測(cè)試用例引起:按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序連續(xù)應(yīng)用測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試,直至應(yīng)用一個(gè)測(cè)試用例后所述測(cè)試對(duì)象發(fā)生故障。此時(shí),重新所述啟動(dòng)測(cè)試對(duì)象并使用應(yīng)用的最后一個(gè)所述測(cè)試用例重新測(cè)試該測(cè)試對(duì)象,如果所述測(cè)試對(duì)象再次發(fā)生故障,則判斷所述應(yīng)用的最后一個(gè)測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,否則判斷所述應(yīng)用的最后一個(gè)測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障。
[0051]在步驟S303,判斷當(dāng)前測(cè)試用例是否與能夠單獨(dú)地觸發(fā)故障的測(cè)試用例類似。如果類似,則執(zhí)行步驟S308,否則執(zhí)行步驟S304。
[0052]在步驟S308,將當(dāng)前測(cè)試用例\的優(yōu)先級(jí)值Pi更新為Pi=Pi+PRI_SM_CLB,然后執(zhí)行步驟S310。
[0053]在步驟S304,判斷響應(yīng)時(shí)間是否超過閾值RIVlt5例如,值RIV1可以是上一輪測(cè)試中計(jì)算的測(cè)試用例的平均響應(yīng)時(shí)間。如果超過了閾值RIV1,則在步驟S309將當(dāng)前測(cè)試用例
的優(yōu)先級(jí)Pi更新為Pi=Pi+PRI_RSP,然后執(zhí)行步驟S310。如果未超過閾值,則直接執(zhí)行步驟 S310。
[0054]在步驟S310,判斷當(dāng)前測(cè)試用例是否是集合T中的、在本輪測(cè)試中應(yīng)用的最后一個(gè)測(cè)試用例。如果不是最后一個(gè)測(cè)試用例,則返回到步驟S301,以選擇下一個(gè)測(cè)試用例進(jìn)行測(cè)試;如果是最后一個(gè)測(cè)試用例,則執(zhí)行步驟S311。
[0055]在步驟S311,計(jì)算在本輪測(cè)試中集合T中的所有測(cè)試用例\的平均響應(yīng)時(shí)間RIr然后執(zhí)行步驟S312。在實(shí)際計(jì)算時(shí),例如可以只根據(jù)產(chǎn)生了響應(yīng)的測(cè)試用例的響應(yīng)時(shí)間來計(jì)算RTj。
[0056]在步驟S312,根據(jù)每個(gè)測(cè)試用例\的當(dāng)前的優(yōu)先級(jí)值Pi,將集合T中的測(cè)試用例重新排序,然后結(jié)束第&輪的測(cè)試。
[0057]以上描述了對(duì)測(cè)試用例集合T應(yīng)用一輪測(cè)試的詳細(xì)方法流程,但是在其他實(shí)施例中,可以對(duì)測(cè)試用例集合T應(yīng)用多輪測(cè)試。當(dāng)進(jìn)行第&輪的測(cè)試時(shí),將按照在第Rp1輪測(cè)試后對(duì)T中的測(cè)試用例重新排序后得到的順序來應(yīng)用T中的測(cè)試用例。
[0058]在執(zhí)行圖3所示方法的一個(gè)實(shí)施例中,啟動(dòng)測(cè)試對(duì)象,然后向運(yùn)行中的測(cè)試對(duì)象應(yīng)用測(cè)試用例,如果在應(yīng)用一個(gè)測(cè)試用例后測(cè)試對(duì)象沒有發(fā)生故障,則可以在保持測(cè)試對(duì)象運(yùn)行的情況下繼續(xù)應(yīng)用下一個(gè)測(cè)試用例,而無須重啟該測(cè)試對(duì)象。如果在應(yīng)用一個(gè)測(cè)試用例后測(cè)試對(duì)象發(fā)生故障,則重新啟動(dòng)該測(cè)試對(duì)象,并使用該測(cè)試用例重新測(cè)試該測(cè)試對(duì)象,如果該測(cè)試對(duì)象再次發(fā)生故障,則判斷該測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,否則判斷該測(cè)試用例能夠與其他先前使用的測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障。也可以回溯多個(gè)測(cè)試用例來確定共同導(dǎo)致測(cè)試對(duì)象發(fā)生故障的測(cè)試用例,下面結(jié)合圖4用一個(gè)例子來說明回溯多個(gè)測(cè)試用例的測(cè)試過程。
[0059]例如,用一個(gè)測(cè)試用例集合中的第i個(gè)測(cè)試用例測(cè)試一個(gè)通信軟件,如果通信軟件有響應(yīng),則應(yīng)用第i+Ι個(gè)測(cè)試用例繼續(xù)運(yùn)行該通信軟件進(jìn)行測(cè)試。如果應(yīng)用第i個(gè)測(cè)試用例后軟件無響應(yīng),則向該軟件發(fā)送正常的輸入,如果軟件對(duì)發(fā)送的正常輸入無響應(yīng),則確定軟件產(chǎn)生故障。
[0060]在此情況下,重新啟動(dòng)該被測(cè)通信軟件,再單獨(dú)應(yīng)用第i個(gè)測(cè)試用例測(cè)試軟件。此時(shí),如果通信軟件無響應(yīng),則向該軟件發(fā)送正常的輸入,如果軟件對(duì)發(fā)送的正常輸入無響應(yīng),則確定軟件產(chǎn)生故障,并且得出結(jié)論當(dāng)前故障是由第i個(gè)測(cè)試用例單獨(dú)地觸發(fā)的,因此為其增加第一高的優(yōu)先級(jí)值。反之,如果單獨(dú)應(yīng)用第i個(gè)測(cè)試用例時(shí),通信軟件對(duì)第i個(gè)測(cè)試用例有響應(yīng),則重新啟動(dòng)軟件連續(xù)應(yīng)用第i_l個(gè)和第i個(gè)測(cè)試用例。如果軟件無響應(yīng),則發(fā)送正常的輸入,如果軟件對(duì)發(fā)送的正常輸入無響應(yīng),則確定軟件產(chǎn)生故障,并且得出結(jié)論當(dāng)前故障是由第i_l個(gè)和第i個(gè)測(cè)試用例共同觸發(fā)的,因此為二者都增加第二高的優(yōu)先級(jí)值。
[0061]如果軟件對(duì)第i_l個(gè)和第i個(gè)測(cè)試用例有響應(yīng),則重新啟動(dòng)軟件,并連續(xù)應(yīng)用第1-2個(gè)、第1-Ι個(gè)和第i個(gè)測(cè)試用例。如果軟件無響應(yīng),則發(fā)送正常的輸入,如果軟件對(duì)正常的輸入也無響應(yīng),則確定軟件產(chǎn)生故障,并且確定當(dāng)前故障是由第i_2個(gè)、第1-Ι個(gè)和第i個(gè)測(cè)試用例共同觸發(fā)的,從而賦予第i_2個(gè)、第1-Ι個(gè)和第i個(gè)測(cè)試用例第二高的優(yōu)先級(jí)值。
[0062]反之,如果軟件對(duì)第i_2個(gè)、第1-Ι個(gè)和第i個(gè)測(cè)試用例有響應(yīng),則重新啟動(dòng)軟件,從第i_3個(gè)測(cè)試用例開始重新應(yīng)用測(cè)試用例,重復(fù)上述步驟,直至找到共同觸發(fā)故障的所有測(cè)試用例,并賦予他們第二高的優(yōu)先級(jí)值。但是,為防止測(cè)試循環(huán)太長(zhǎng),兼顧到測(cè)試效率,可以設(shè)定此循環(huán)的上限數(shù)目。例如如果將循環(huán)的上限數(shù)目設(shè)定為10,則在上述例子中,僅僅回溯到第1-ΙΟ個(gè)測(cè)試用例。
[0063]在結(jié)合圖3描述的實(shí)施例中,采用如上所述的四個(gè)標(biāo)準(zhǔn)來評(píng)估所述測(cè)試用例的攻擊效果,從而分配對(duì)應(yīng)的優(yōu)先級(jí)值。但是,評(píng)估標(biāo)準(zhǔn)并不限于以上四種類型。在其他實(shí)施例中,可以采用其他數(shù)量或其他類型的標(biāo)準(zhǔn)來評(píng)估攻擊效果,因而所劃分的優(yōu)先級(jí)的數(shù)量也可以不同。
[0064]在結(jié)合圖3描述的實(shí)施例中,通過向被測(cè)軟件程序發(fā)送正常輸入,來確定被測(cè)軟件程序是否真正地發(fā)生了故障。但是,在其他實(shí)施例中,可以采用其他方式來判斷被測(cè)對(duì)象是否發(fā)生故障。
[0065]在結(jié)合圖3描述的實(shí)施例中,利用上一輪測(cè)試中計(jì)算的測(cè)試用例的平均響應(yīng)時(shí)間作為響應(yīng)時(shí)間的閾值。但是,在其他實(shí)施例中,可以采用其他值作為閾值。
[0066]下面以集合T=為例,說明應(yīng)用圖3所示的方法后所可能得到的結(jié)果。h至t6的順序是這些測(cè)試用例初始生成的順序,在使用它們進(jìn)行測(cè)試前,它們各自的優(yōu)先級(jí)值Pi都為O。在第一輪測(cè)試時(shí),按照它們初始生成的順序來將這些測(cè)試用例逐個(gè)應(yīng)用于被測(cè)軟件程序。在經(jīng)過一輪測(cè)試后,測(cè)試用例至t6的優(yōu)先級(jí)值分別變?yōu)镻1 = O,P2=O, ps=3, p4=4, p5=2, p6 = 1也就是說,當(dāng)使用h和t2,測(cè)試第一個(gè)被測(cè)軟件程序時(shí),它們都無法導(dǎo)致如上所述的四種標(biāo)準(zhǔn)中的任意一種情況發(fā)生;當(dāng)使用t3測(cè)試第一個(gè)被測(cè)軟件程序時(shí),程序發(fā)生故障,并且該故障可能與之前運(yùn)行的測(cè)試用例有關(guān);當(dāng)使用t4測(cè)試第一個(gè)被測(cè)軟件程序時(shí),會(huì)單獨(dú)地導(dǎo)致程序發(fā)生故障;而測(cè)試用例t5與t4非常類似;當(dāng)使用t6測(cè)試第一個(gè)被測(cè)軟件程序時(shí),導(dǎo)致被測(cè)程序響應(yīng)延遲。因此,按照上述優(yōu)先級(jí)值,測(cè)試用例集合T中的測(cè)試用例將被重新排序?yàn)閧t4,t3, t5, t6, t1; t2}。使用重新排序后的測(cè)試用例來對(duì)其他測(cè)試對(duì)象進(jìn)行測(cè)試時(shí),將有可能更快地發(fā)現(xiàn)第一個(gè)漏洞,從而提高了測(cè)試效率。
[0067]在對(duì)上述測(cè)試集合T進(jìn)行第一輪測(cè)試并排序后,還可以在其基礎(chǔ)上,再次應(yīng)用集合T進(jìn)行第二輪測(cè)試。在第二輪測(cè)試中,按照t4,t3, t5, t6, t1; t2的順序向第二個(gè)被測(cè)軟件程序(例如通過修改第一個(gè)被測(cè)軟件程序得到的程序,或與第一個(gè)被測(cè)軟件程序版本不同的程序等)應(yīng)用測(cè)試用例。在第二輪測(cè)試中,分配給測(cè)試用例t4,t3, t5, t6, t1; t2的優(yōu)先級(jí)值將分別為4,0,2,4,0,1。也就是說,在第二輪測(cè)試中,當(dāng)使用14和16測(cè)試第二個(gè)被測(cè)軟件程序時(shí),都會(huì)單獨(dú)地導(dǎo)致程序發(fā)生故障;而測(cè)試用例t5與t4非常類似;當(dāng)使用t3和h測(cè)試第二個(gè)被測(cè)軟件程序時(shí),都無法導(dǎo)致如上所述的四種標(biāo)準(zhǔn)中的任意一種情況發(fā)生;當(dāng)使用t2測(cè)試第二個(gè)被測(cè)軟件程序時(shí),導(dǎo)致被測(cè)程序響應(yīng)延遲。從而,在經(jīng)過兩輪測(cè)試后,對(duì)應(yīng)于各個(gè)測(cè)試用例的總的優(yōu)先級(jí)值將變?yōu)镻1=O, P2=I, p3=3, p4=8, p5=4, p6=5o因此,在經(jīng)過兩輪測(cè)試后,各個(gè)測(cè)試用例的優(yōu)先級(jí)的順序?qū)?duì)應(yīng)于如上的總的優(yōu)先級(jí)值的大小的順序。因此,此時(shí),對(duì)測(cè)試用例集合T中的測(cè)試用例按優(yōu)先級(jí)重新排序后的順序?qū)閧t4,t6, t5, t3, t2, tj。使用重新排序后的測(cè)試用例來對(duì)其他測(cè)試對(duì)象進(jìn)行測(cè)試時(shí),將可能比使用第一輪排序后的測(cè)試用例更快地發(fā)現(xiàn)第一個(gè)漏洞,從而提高了測(cè)試效率。
[0068]以上描述了兩輪測(cè)試或排序,在實(shí)踐中,可以對(duì)測(cè)試用例集合T進(jìn)行更多輪的排序。
[0069]圖5不出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于模糊測(cè)試的系統(tǒng)500的不意圖。如圖5所示,系統(tǒng)500包括測(cè)試用例生成器510,用于隨機(jī)地生成多個(gè)測(cè)試用例,該多個(gè)測(cè)試用例構(gòu)成測(cè)試用例集合T,例如在上述各個(gè)實(shí)施例中描述的測(cè)試用例集合T。
[0070]系統(tǒng)500還包括測(cè)試用例存儲(chǔ)器520,用于按順序來存儲(chǔ)所述生成的多個(gè)測(cè)試用例。
[0071 ] 系統(tǒng)500還包括模糊測(cè)試器530,用于按照測(cè)試用例存儲(chǔ)器520中的多個(gè)測(cè)試用例的存儲(chǔ)順序,逐個(gè)使用所述多個(gè)測(cè)試用例中的每一個(gè)測(cè)試用例來對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試,例如,運(yùn)行被測(cè)軟件程序,并向被測(cè)軟件程序輸入上述測(cè)試用例。
[0072]系統(tǒng)500還包括故障監(jiān)視器540,用于監(jiān)視模糊測(cè)試過程,并且根據(jù)相應(yīng)于每個(gè)測(cè)試用例的攻擊效果,來確定每個(gè)測(cè)試用例相應(yīng)的優(yōu)先級(jí)。所述故障監(jiān)視器540可以進(jìn)一步包括存活性探測(cè)模塊541和自動(dòng)重啟模塊542。其中,自動(dòng)重啟模塊542用于當(dāng)測(cè)試對(duì)象發(fā)生故障時(shí)(例如,被測(cè)軟件程序沒有任何響應(yīng)時(shí)),重新啟動(dòng)測(cè)試對(duì)象。存活性探測(cè)模塊541用于在所述測(cè)試期間(例如向測(cè)試對(duì)象輸入了測(cè)試用例之后),向測(cè)試對(duì)象發(fā)送正常輸入,并且如果接收到響應(yīng),則根據(jù)響應(yīng)時(shí)間來判斷當(dāng)前測(cè)試用例是否導(dǎo)致響應(yīng)延遲;如果沒有接收到響應(yīng),則判斷當(dāng)前測(cè)試用例導(dǎo)致測(cè)試對(duì)象發(fā)生故障。當(dāng)應(yīng)用一測(cè)試用例時(shí)測(cè)試對(duì)象發(fā)生故障,則可以使用自動(dòng)重啟模塊542來重新啟動(dòng)測(cè)試對(duì)象,并使用該測(cè)試用例重新測(cè)試該測(cè)試對(duì)象,如果該測(cè)試對(duì)象再次發(fā)生故障,則判斷該測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,否則判斷該測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障。
[0073]此外,系統(tǒng)500還包括優(yōu)化器550,用于根據(jù)分配給所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例的優(yōu)先級(jí),對(duì)所述多個(gè)測(cè)試用例重新排序,并且將重新排序后的所述多個(gè)測(cè)試用例存儲(chǔ)回所述測(cè)試用例存儲(chǔ)器520,從而完成一輪對(duì)測(cè)試用例排列順序的更新。下一次使用更新后的順序排列的測(cè)試用例來對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試,并且還可以對(duì)存儲(chǔ)器520中存儲(chǔ)的測(cè)試用例進(jìn)行更多輪的更新。
[0074]以上結(jié)合具體實(shí)施例描述了本發(fā)明。本領(lǐng)域的技術(shù)人員還應(yīng)認(rèn)識(shí)到,可以將結(jié)合本文公開的各方面描述的各種示例性邏輯框、模塊、單元、裝置、電路和算法步驟實(shí)現(xiàn)為電子硬件、由處理器執(zhí)行的各種形式的包含指令的程序或設(shè)計(jì)代碼(本文為了方便起見可以將其稱為“軟件”或“軟件模塊”)或兩者的組合。為了清楚地說明硬件和軟件的這種可互換性,上文一般從它們功能性的角度來描述各種示例性部件、框、模塊、單元和步驟。將這些功能實(shí)現(xiàn)為硬件、固件還是軟件取決于特定的應(yīng)用和施加在整個(gè)系統(tǒng)上的設(shè)計(jì)約束條件。技術(shù)人員可以針對(duì)每種特定應(yīng)用以不同的方式實(shí)現(xiàn)所述的功能,但不應(yīng)將這種實(shí)現(xiàn)決定解釋為導(dǎo)致脫離本公開的范圍。
[0075]應(yīng)該注意的是,給出上述實(shí)施例是為了描述本發(fā)明而非限制本發(fā)明,在上述各個(gè)實(shí)施例中包括的特定特征并不限于僅包括在該特定實(shí)施例中,對(duì)于不同實(shí)施例中的特征可以進(jìn)行適當(dāng)組合,而不脫離本發(fā)明的范圍。并且要理解的是,本領(lǐng)域技術(shù)人員很容易想到在不脫離本發(fā)明的精神和范圍的情況下可以采取修改和變更。這種修改和變更被視為在本發(fā)明和權(quán)利要求書的范圍內(nèi)。本發(fā)明的保護(hù)范圍由權(quán)利要求書進(jìn)行限定。另外,權(quán)利要求書中的任何附圖標(biāo)記均不應(yīng)被解釋為對(duì)權(quán)利要求的限制。
【權(quán)利要求】
1.一種用于對(duì)測(cè)試用例進(jìn)行排序的方法,包括: 執(zhí)行以下步驟一輪或多輪: 按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序,使用所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試,監(jiān)視每個(gè)測(cè)試用例的攻擊效果,并且根據(jù)相應(yīng)于每個(gè)測(cè)試用例的攻擊效果來確定每個(gè)測(cè)試用例的優(yōu)先級(jí); 根據(jù)所確定的每個(gè)測(cè)試用例的優(yōu)先級(jí),對(duì)所述測(cè)試用例集合中的多個(gè)測(cè)試用例重新排序; 其中,在當(dāng)前輪次中得到的重新排序后的測(cè)試用 例的集合能夠作為在下一輪次的執(zhí)行中使用的初始測(cè)試用例集合。
2.如權(quán)利要求1所述的方法,其中,采用一個(gè)或多個(gè)標(biāo)準(zhǔn)來評(píng)估所述攻擊效果,所述一個(gè)或多個(gè)標(biāo)準(zhǔn)至少包括以下各項(xiàng)之一:測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,測(cè)試用例與能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障的測(cè)試用例的類似度達(dá)到預(yù)定程度,以及測(cè)試用例導(dǎo)致測(cè)試對(duì)象響應(yīng)延遲。
3.如權(quán)利要求2所述的方法,其中,通過優(yōu)先級(jí)值來表示優(yōu)先級(jí),當(dāng)測(cè)試用例的攻擊效果滿足所述一個(gè)或多個(gè)標(biāo)準(zhǔn)時(shí),在測(cè)試用例的當(dāng)前優(yōu)先級(jí)值上增加相應(yīng)的優(yōu)先級(jí)值。
4.如權(quán)利要求3所述的方法,其中,在測(cè)試用例的當(dāng)前優(yōu)先級(jí)值上增加相應(yīng)的優(yōu)先級(jí)值包括: 當(dāng)一測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障時(shí),為該測(cè)試用例增加第一高的優(yōu)先級(jí)值; 當(dāng)一測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障時(shí),為該測(cè)試用例增加第二高的優(yōu)先級(jí)值; 當(dāng)一測(cè)試用例與能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障的測(cè)試用例的類似度達(dá)到預(yù)定程度時(shí),為該測(cè)試用例增加第三高的優(yōu)先級(jí)值; 當(dāng)一測(cè)試用例導(dǎo)致測(cè)試對(duì)象響應(yīng)延遲時(shí),為該測(cè)試用例增加第四高的優(yōu)先級(jí)值。
5.如權(quán)利要求2-4中任一項(xiàng)所述的方法,其中,按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序,使用所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試具體為:按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序連續(xù)應(yīng)用測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試,直至應(yīng)用一個(gè)測(cè)試用例后所述測(cè)試對(duì)象發(fā)生故障,則重新所述啟動(dòng)測(cè)試對(duì)象并使用應(yīng)用的最后一個(gè)所述測(cè)試用例重新測(cè)試該測(cè)試對(duì)象,如果所述測(cè)試對(duì)象再次發(fā)生故障,則判斷所述應(yīng)用的最后一個(gè)測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,否則判斷所述應(yīng)用的最后一個(gè)測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障。
6.如權(quán)利要求5所述的方法,其中,所述判斷應(yīng)用的最后一個(gè)測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障進(jìn)一步包括: (a)重新啟動(dòng)測(cè)試對(duì)象; (b)使用所述應(yīng)用的最后一個(gè)測(cè)試用例和其之前的j個(gè)測(cè)試用例測(cè)試所述測(cè)試對(duì)象; 循環(huán)執(zhí)行以上步驟(a)和(b),直到測(cè)試對(duì)象發(fā)生故障為止,此時(shí)判斷所述應(yīng)用的最后一個(gè)測(cè)試用例以及其之前的j個(gè)測(cè)試用例能夠共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,其中,j的初始值為I,并且每次循環(huán)后j的值加I。
7.如權(quán)利要求2所述的方法,其中,在向測(cè)試對(duì)象應(yīng)用測(cè)試用例后,如果沒有接收到測(cè)試對(duì)象的響應(yīng),則向測(cè)試對(duì)象發(fā)送正常輸入,如果仍然沒有接收到響應(yīng),則判斷測(cè)試對(duì)象發(fā)生故障;如果接收到響應(yīng),則根據(jù)響應(yīng)時(shí)間來判斷當(dāng)前測(cè)試用例是否導(dǎo)致響應(yīng)延遲。
8.如權(quán)利要求1所述的方法,其中,所述測(cè)試對(duì)象是通信軟件。
9.一種用于對(duì)測(cè)試用例進(jìn)行排序的裝置,包括: 故障監(jiān)視模塊,用于監(jiān)視按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序,使用所述多個(gè)測(cè)試用例中每個(gè)測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試的攻擊效果,并且根據(jù)相應(yīng)于每個(gè)測(cè)試用例的攻擊效果,來確定每個(gè)測(cè)試用例的優(yōu)先級(jí); 優(yōu)化模塊,用于根據(jù)所確定的每個(gè)測(cè)試用例的優(yōu)先級(jí),對(duì)所述測(cè)試用例集合中的多個(gè)測(cè)試用例重新排序。
10.如權(quán)利要求9所述的裝置,其中,采用一個(gè)或多個(gè)標(biāo)準(zhǔn)來評(píng)估所述攻擊效果,所述一個(gè)或多個(gè)標(biāo)準(zhǔn)至少包括以下各項(xiàng)之一:測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,測(cè)試用例與能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障的測(cè)試用例的類似度達(dá)到預(yù)定程度,以及測(cè)試用例導(dǎo)致測(cè)試對(duì)象響應(yīng)延遲。
11.如權(quán)利要求9或10所述的裝置,其中,通過優(yōu)先級(jí)值來表示優(yōu)先級(jí),當(dāng)測(cè)試用例的攻擊效果滿足所述一個(gè)或多個(gè)標(biāo)準(zhǔn)時(shí),在測(cè)試用例的當(dāng)前優(yōu)先級(jí)值上增加相應(yīng)的優(yōu)先級(jí)值。
12.如權(quán)利要求11所述的裝置,其中,增加相應(yīng)的優(yōu)先級(jí)值包括: 當(dāng)一測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障時(shí),為該測(cè)試用例增加第一高的優(yōu)先級(jí)值; 當(dāng)一測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障時(shí),為該測(cè)試用例增加第二高的優(yōu)先級(jí)值; 當(dāng)一測(cè)試用例與能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障的測(cè)試用例的類似度達(dá)到預(yù)定程度時(shí),為該測(cè)試用例增加第三高的優(yōu)先級(jí)值; 當(dāng)一測(cè)試用例導(dǎo)致測(cè)試對(duì)象響應(yīng)延遲時(shí),為該測(cè)試用例增加第四高的優(yōu)先級(jí)值。
13.如權(quán)利要求9所述的裝置,所述故障監(jiān)視模塊包括自動(dòng)重啟模塊,其用于當(dāng)測(cè)試對(duì)象發(fā)生故障時(shí),重新啟動(dòng)測(cè)試對(duì)象;所述故障監(jiān)視模塊按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序使用所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試具體為,按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序連續(xù)應(yīng)用測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試,直至應(yīng)用一個(gè)測(cè)試用例后所述測(cè)試對(duì)象發(fā)生故障,則利用自動(dòng)重啟模塊重新所述啟動(dòng)測(cè)試對(duì)象,并使用應(yīng)用的最后一個(gè)所述測(cè)試用例重新測(cè)試該測(cè)試對(duì)象,如果所述測(cè)試對(duì)象再次發(fā)生故障,則判斷所述應(yīng)用的最后一個(gè)測(cè)試用例能夠單獨(dú)地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,否則判斷所述應(yīng)用的最后一個(gè)測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障。
14.如權(quán)利要求13所述的裝置,其中,所述判斷該測(cè)試用例能夠與其他測(cè)試用例共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障包括: Ca)重新啟動(dòng)測(cè)試對(duì)象;, (b)使用該測(cè)試用例和其之前的j個(gè)測(cè)試用例測(cè)試該測(cè)試對(duì)象; 循環(huán)執(zhí)行以上步驟(a)和(b),直到測(cè)試對(duì)象發(fā)生故障為止,此時(shí)判斷該測(cè)試用例以及該測(cè)試用例之前的j個(gè)測(cè)試用例能夠共同地導(dǎo)致測(cè)試對(duì)象發(fā)生故障,其中,j的初始值為1,并且每次循環(huán)后j的值加1。
15.如權(quán)利要求9所述的裝置,所述故障監(jiān)視模塊包括: 存活性探測(cè)模塊,用于在向測(cè)試對(duì)象應(yīng)用測(cè)試用例后,如果沒有接收到測(cè)試對(duì)象的響應(yīng),則向測(cè)試對(duì)象發(fā)送正常輸入,如果仍然沒有接收到響應(yīng),則判斷測(cè)試對(duì)象發(fā)生故障;如果接收到響應(yīng),則根據(jù)響應(yīng)時(shí)間來判斷當(dāng)前測(cè)試用例是否導(dǎo)致響應(yīng)延遲。
16.如權(quán)利要求9所述的裝置,其中,所述測(cè)試對(duì)象是通信軟件。
17.—種用于模糊測(cè)試的方法,包括: 生成多個(gè)測(cè)試用例; 執(zhí)行以下步驟一輪或多輪: 按照初始測(cè)試用例集合中多個(gè)測(cè)試用例的排列順序,使用所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試,監(jiān)視每個(gè)測(cè)試用例的攻擊效果,并且根據(jù)相應(yīng)于每個(gè)測(cè)試用例的攻擊效果來確定每個(gè)測(cè)試用例的優(yōu)先級(jí); 根據(jù)所確定的每個(gè)測(cè)試用例的優(yōu)先級(jí),對(duì)所述測(cè)試用例集合中的多個(gè)測(cè)試用例重新排序; 其中,在當(dāng)前輪次中得到的重新排序后的測(cè)試用例的集合能夠作為在下一輪次的執(zhí)行中使用的初始測(cè)試用例集合。
18.—種用于模糊測(cè)試的系統(tǒng),包括: 測(cè)試用例生成器,用于隨機(jī)地生成多個(gè)測(cè)試用例; 測(cè)試用例存儲(chǔ)器,用于按順序存儲(chǔ)生成的所述多個(gè)測(cè)試用例; 模糊測(cè)試器,用于按照所述多個(gè)測(cè)試用例的存儲(chǔ)順序,使用所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例來對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試; 故障監(jiān)視器,用于監(jiān)視測(cè)試過程,并且根據(jù)相應(yīng)于每個(gè)測(cè)試用例的攻擊效果確定每個(gè)測(cè)試用例的優(yōu)先級(jí); 優(yōu)化器,用于根據(jù)所確定的所述多個(gè)測(cè)試用例中的每個(gè)測(cè)試用例的優(yōu)先級(jí),對(duì)所述多個(gè)測(cè)試用例重新排序,并且將重新排序后的所述多個(gè)測(cè)試用例存儲(chǔ)回所述測(cè)試用例存儲(chǔ)器。
【文檔編號(hào)】G06F11/36GK103699475SQ201210365720
【公開日】2014年4月2日 申請(qǐng)日期:2012年9月27日 優(yōu)先權(quán)日:2012年9月27日
【發(fā)明者】劉玉恒 申請(qǐng)人:西門子公司