包曉安, 鮑 超, 滕賽娜, 張 唯, 張 娜, 錢俊彥
1(浙江理工大學(xué) 信息學(xué)院,杭州 310018)
2(桂林電子科技大學(xué) 廣西可信軟件重點實驗室,桂林 541004)
在測試工作過程中,在滿足測試需求的前提下應(yīng)當(dāng)盡可能的減少測試用例的數(shù)量同時確定測試用例的優(yōu)先級[1]順序,測試用例的數(shù)量和優(yōu)先級跟測試的成本緊密相關(guān),如何優(yōu)化測試用例一直是軟件測試研究領(lǐng)域的重點. 在該研究領(lǐng)域約簡方法和角度是多種多樣的,并各有其特點. 例如陳軍成、薛云志等人提出了一種基于事件處理函數(shù)的GUI測試用例集約簡技術(shù)[2].而在實際的測試工作當(dāng)中我們可以將一個測試任務(wù)轉(zhuǎn)化為具體的測試需求,于是顧慶、唐寶等人提出了一種面向測試需求部分覆蓋的測試用例約簡技術(shù)[3]. 測試需求之間除了部分覆蓋的關(guān)系外還存在著復(fù)雜的重疊和包含關(guān)系,通過約簡這些關(guān)系可以達到減小測試用例規(guī)模的目的,這就是徐寶文、聶長海等人提出的基于測試需求約簡的測試用例約簡技術(shù)[4,5]. 約簡過的測試需求集能在一定程度上縮減測試時測試的需求,這樣就減少了需求對應(yīng)的測試用例集的規(guī)模. 測試需求約簡模型只考慮了測試需求之間的冗余關(guān)系而并沒有考慮到約簡后的單個測試需求所對應(yīng)的測試用例集合內(nèi)部所存在的測試用例之間的冗余關(guān)系,這就是本文研究的重點.
關(guān)于用例約簡的研究一直都是一個重點,1979年VChvatal提出了基于貪心算法[6](Greey,簡稱G)的測試用例約簡方法. Harrold等人提出了一種約簡的啟發(fā)式算法[7](簡稱H算法),在G和H算法的基礎(chǔ)上,Chen和Lan提出了算法GRE[8,9],這些約簡方法都有各自的特點和局限性,怎樣去選擇相應(yīng)的約簡方法還要根據(jù)具體需求情況. DBSCAN(基于密度的聚類算法)算法,它在很多領(lǐng)域得到了應(yīng)用,例如郭世可、董槐林等人提出了一種結(jié)合密度聚類和區(qū)域生長的圖像分割方法[10]. 同時對于這一算法的研究和改進一直都在進行,于亞飛、周愛武提出了一種改進DBSCAN密度算法[11],馬帥、王騰蛟等人提出了一種基于參考點和密度的快速聚類算法[12]. 當(dāng)前關(guān)于該算法的研究雖然取得了一定的成果,但還是存在著很大的爭議,尤其在參數(shù)取值這方面,科學(xué)合理的參數(shù)取值方法是提高該算法效率和適應(yīng)度的關(guān)鍵. 本文結(jié)合測試需求約簡下測試用例集所存在的優(yōu)化空間,在參數(shù)取值方面做了深入的研究,提出了兩種有效的參數(shù)取值方法以及兩種約簡策略,結(jié)合改進的DBSCAN算法生成了更加精簡的測試用例集.
徐寶文等人提出的需求約簡模型確實起到了約簡用例規(guī)模的效果同時消除了測試需求之間的復(fù)雜關(guān)系.本文的理論研究基礎(chǔ)就是約簡后的測試需求所對應(yīng)的測試用例集合,目的就是為了減少包含復(fù)雜關(guān)系的測試需求對優(yōu)化結(jié)果的影響. 單個測試需求所對應(yīng)的用例集合中的測試用例存在屬性和維度的上的相似性,這種相似性就是用例間冗余現(xiàn)象的基礎(chǔ),利用這種相似性我們可以完成用例覆蓋替代即在相似性度較高的測試用例間提取核心用例進行替代覆蓋達到用例優(yōu)化約簡的效果.
圖1 需求和測試用例集的關(guān)系
DBSCAN (Density-Based Spatial Clustering of Applications with Noise) 由Ester等人在1996年提出,是一個比較有代表性的基于密度的聚類算法.
DBSCAN算法是通過利用密度連通性的原則去探索和發(fā)現(xiàn)不同形狀的類,這里的密度概念匹配于測試用例相似度概念,即密度值越高相似度越高. 它的基本思路是這樣: 一個類中的每個數(shù)據(jù)對象在給定的半徑e的領(lǐng)域中所包含的數(shù)據(jù)對象個數(shù)一定是不小于給定的某個數(shù)值,這個數(shù)值即領(lǐng)域密度閥值(MinPts). 為了去確定一個類,該算法首先從給定的數(shù)據(jù)集D(測試用例集合)中選擇任意一個數(shù)據(jù)對象O(測試用例),并搜索D中關(guān)于領(lǐng)域半徑e和領(lǐng)域密度閥值MinPts從O密度可以直接達到的所有數(shù)據(jù)對象. 如果O(例圖中A)是核心數(shù)據(jù)對象(核心測試用例),即在領(lǐng)域半徑e中所包含的數(shù)據(jù)對象個數(shù)不少于MinPts個測試用例,于是可以根據(jù)DBSCAN算法找到一個關(guān)于參數(shù)e和MinPts的類. 如果O(例圖中a)是一個邊界點,則在以領(lǐng)域半徑e的領(lǐng)域內(nèi)所包含的數(shù)據(jù)對象個數(shù)少于MinPts個,則將O被暫時標(biāo)注為噪點在這里我們把它定義為“流放用例”,然后DBSCAN繼續(xù)處理D中的下一個未被處理的數(shù)據(jù)對象. 圖2為一個集合D中半徑為e,MinPts為3的DBSCAN算法模型.
圖2 半徑為e,MinPts=3的DBSCAN算法模型
黑盒測試又稱功能性測試是軟件測試方法的重要組成部分,在軟件測試中可以把程序看作是一個不能打開的黑盒子,并且不用考慮程序內(nèi)部的情況和結(jié)構(gòu)只在程序接口進行測試,它能反映程序是否能夠按照需求規(guī)格說明書的要求正常使用,以及程序的輸入能否按照正常的運行輸出正確結(jié)果. 黑盒測試的方法有很多種主要包括等價類劃分法、邊界值分析法、錯誤推測法、因果圖法、判定表驅(qū)動法、正交試驗設(shè)計法、功能圖法、等等. 本文針對等價類劃分法以及邊界值分析法提出了兩種類似策略,能夠很好的結(jié)合DBSCAN算法完成測試用例的優(yōu)化約簡效果.
等價類是指某個輸入域的子集合. 在該子集合中,各個輸入數(shù)據(jù)對于揭露程序中的錯誤都是等效的,并合理地假定: 測試某等價類的代表值就等于對這一類其它值的測試. 因此,可以把全部輸入數(shù)據(jù)合理劃分為若干等價類,在每一個等價類中取一個數(shù)據(jù)作為測試的輸入條件,就可以用少量代表性的測試數(shù)據(jù). 取得較好的測試結(jié)果. 等價類是指某個輸入域的子集合. 在該子集合中,各個輸入數(shù)據(jù)對于揭露程序中的錯誤都是等效的,并合理地假定: 測試某等價類的代表值就等于對這一類其它值的測試. 因此,可以把全部輸入數(shù)據(jù)合理劃分為若干等價類,在每一個等價類中取一個數(shù)據(jù)作為測試的輸入條件,就可以用少量代表性的測試數(shù)據(jù). 取得較好的測試結(jié)果.
本文中DBSCAN算法能夠很好地聚類相似度極高的測試用例形成單個的類,這個類等價于等價劃分中的等價類. 本文提出一種類等價類劃分策略即可選取該類中最具代表性的核心測試用例完成用少量代表性的測試數(shù)據(jù)完成測試取得測試結(jié)果的過程.
大量的測試實踐中證明許多錯誤是發(fā)生在輸入和輸出的范圍邊界內(nèi)的,而不是在其內(nèi)部,于是黑盒測試中邊界值分析法就針對各種邊界情況設(shè)計測試用例,進而發(fā)現(xiàn)更多的錯誤. 由DBSCAN算法所生成的流放用例概念類似于邊界值概念,它是游離于各個類邊緣的數(shù)據(jù),并不屬于各個類介于類與類的之間或者集合的邊界位置. 本文提出一種基于邊界值分析法的類邊界值分析策略將流放用例作為測試的一個重點.
該算法涉及兩個非常重要的參數(shù)半徑e和領(lǐng)域密度閥值MinPts,這兩個參數(shù)十分敏感,對聚類的效果以及測試用例集的優(yōu)化起著關(guān)鍵的作用. 在目前的研究當(dāng)中大多數(shù)情況下都是憑借用戶的經(jīng)驗而得到,或者進行逆向推導(dǎo)確定一個最優(yōu)的值,但這樣做的成本和時間復(fù)雜度相當(dāng)?shù)拇? 本文提出了兩種效率較高的參數(shù)確定的方法,實驗證明這兩種方法所提供的參數(shù)值在改進后的算法中具有較高的問題適應(yīng)度和工作效率,能充分的聚類相似度較高的用例獲取核心用例以及流放用例.
DBSCAN算法本身就是基于密度的,該算法中的密度是一個基于一定范圍內(nèi)的概念. 本文提出把每個測試需求所對應(yīng)的測試用例集T看成是一個整體分布的大區(qū)間. 例如T3中的測試用例t由(x,y)確定,總體測試用例集T3的范圍是x∈(1,1000),y∈(10,2000).T3這個大區(qū)間可以劃分為許許多多的密集分布的子區(qū)間,例如可隨機劃分一個區(qū)間Ta,Ta即T3中的一個子區(qū)間,范圍為x∈(10,20),y∈(210,220). 在劃分的無數(shù)的子區(qū)間中選取點分布數(shù)量較多較密集的幾個區(qū)間作為本文確定半徑e的采樣區(qū)間. 由于這些數(shù)據(jù)點之間具有相似性,即數(shù)據(jù)點越接近相似性越高,我們可以利用點與點之間的距離來表現(xiàn)這種相似性. 計算每個采樣區(qū)間內(nèi)數(shù)據(jù)之間的距離標(biāo)準(zhǔn)差(dsd),選取最小的距離標(biāo)準(zhǔn)差dsdmin即相似性最高. 其目的就是為了在更大程度上使得到的類盡可能多的去覆蓋分布相對密集即相似度較高的測試用例區(qū)域,一個類囊括更多相似性較高的測試用例,從而起到約簡的效果降低測試的成本. 具體計算公式如下:
其中,μ為平均距離,N為集合大小.
通過確定半徑e我們可以確定最終的采樣區(qū)間Ta. 子區(qū)間Ta中所有的點可以用線段連接起來,我們可以把它看成是一個圖G=(V,E)(如圖3)其中V代表所有的點集,e表示圖G中點之間的關(guān)系(邊)集合,邊的權(quán)值可以用表示即點ui和ui+1之間的距離,具體的求解方法可以用歐式距離. 圖G中邊的權(quán)值確定后通過Prim算法或者Kruskal算法構(gòu)造圖G的最小生成樹Tree(圖3粗線連接樹),具體算法的選擇看圖G邊的稀疏程度,邊稠密的圖用Prim算法,邊稀疏而點較多的圖用Kruskal算法. 最小生成樹Tree的權(quán)值和是唯一的且是最小的,對于最小生成樹中權(quán)值明顯高于距離標(biāo)準(zhǔn)差值的進行斷開(圖3中點10即為第一個斷開點),在子區(qū)間Ta內(nèi)會形成許多最小生成樹的分段樹Ts,分段樹中度值最大的數(shù)值x即為領(lǐng)域密度閥值MinPts,圖 3中MinPts值為 8(①②③④⑥⑦⑧⑨⑩).e為距離標(biāo)準(zhǔn)差基本滿足了分布相對密集點的間距,實驗表明在較密集的區(qū)間內(nèi)以O(shè)為核心對象以e為半徑覆蓋點數(shù)數(shù)值基本滿足了大于或者等于x的要求.
圖3 圖G=(V,E)和最小生成樹Tree
算法1.MinPts算法實現(xiàn)
1. Prim(V,inti){
3. U={u0}; //隨機選取一個頂點
(ui,ui+1)使得ui∈U且ui+1∈(V-U)且最小;
5. T=T∪[(ui,ui+1)]; //邊歸入樹
6. U=U∪{ui+1)}; //點歸入樹
}
7. Return U;
8. Returni; //返回Tree點集,以及點集個數(shù)
}
9. MinPts(Ts,intj) {
10. Prim(U,inti);
11.Ts=U;j=i; //調(diào)用Prim算法的返回值
12. U={u0}; //任意選擇Tree中的一個點
13. While((Ts-U)!=) {
15.Ts=Ts-(ui+1,uj); //如果某一邊的權(quán)值遠(yuǎn)大于dsd進行斷開
16.xi=|Ts|;xi添加入X //求分段樹的度數(shù)并添加入集合X
17.Ts=(ui+1,uj); U={ui+1}
}//繼續(xù)搜索遠(yuǎn)大于dsd的權(quán)值
18. else
19.i++;
20. U=U∪ui; }
21. 取X中的最大值xi;
22.MinPts=xi} //分段樹中度數(shù)最大的數(shù)值即為領(lǐng)域密度閥值
MinPts算法旨在解決領(lǐng)域密度閥值參數(shù)的取值問題,本文提出的MinPts算法是在Prim算法的基礎(chǔ)上實現(xiàn)的,其根本的思想就是在最小的范圍和成本內(nèi)確定關(guān)鍵節(jié)點的數(shù)量問題,并提高取值的科學(xué)性而不是根據(jù)經(jīng)驗取得,保證最終算法的一個可靠和穩(wěn)定,從而解決了MinPts的取值問題. 本文提出的優(yōu)化方法重點就是基于密集分布的集合進行約簡優(yōu)化,所以在相對密集的集合中所取得MinPts值很具有代表性滿足了解決問題的實質(zhì)要求. 實驗表明這一算法實現(xiàn)對實現(xiàn)優(yōu)化約簡的目的具有重要的作用和意義.
傳統(tǒng)的DBSCAN算法[13]作為一種有效的聚類算法,主要作用是根據(jù)數(shù)據(jù)的屬性進行分類分簇排除噪點的,輸出的對象主要是類,從而達到聚類的效果. 本文對DBSCAN的改動主要是在算法中提取核心和噪點數(shù)據(jù)并消除輸出對象類,生成一個關(guān)于這些數(shù)據(jù)的集合,同時利用新的參數(shù)取值方法提高算法的問題適應(yīng)度,從而達到本文的研究需求和提高解決問題的能力,其輸出的結(jié)果是包含核心測試用例和流放測試用例的數(shù)據(jù)集合. 具體改進算法實現(xiàn)框架如下.
算法2. 改進的DBSCAN算法
輸入: D: 測試需求R3對應(yīng)測試用例集合T3所包含的n個數(shù)據(jù)對象;e:dsd值; MinPts:xi; T: 空集; N: 領(lǐng)域點集
輸出: T(核心數(shù)據(jù)對象、噪點集)
方法:
1. visited[D]=FAlSE;
2. Do
3. visited[O]=TRUE,O∈D;
4. 在半徑e內(nèi) If sizeof(NeighborPts[O])<MinPts;
5. T=T∪O
6. Create cluser C
7. Add O to C
8. For N中每個數(shù)據(jù)對象O
9. If visited[O]=FALSE
10. visited[O]=TRUE
11. If O的e半徑范圍內(nèi)至少有MinPts個數(shù)據(jù)對象,把這些數(shù)據(jù)對象添加入N中,
12. T=T∪O
14. C=C∪O
15. End for
16. Else mark O as nosie
17. T=T∪O
18. Until visited[D]=TRUE
測試用例集合我們可以看著是一個數(shù)據(jù)點集,每個測試用例對應(yīng)一個點,點集越集中表示測試用例密度分布越密集即測試用例相似性越高,改進的DBSCAN可以很好地將這些測試用例進行聚類劃分,從而確定核心用例和流放用例同時結(jié)合類等價劃分和類邊界值分析策略得到一個約簡的測試用例集. 核心用例O在滿足了測試需求的同時,因具有高度的相似性可以替代類中其他非核心用例完成覆蓋,一個測試用例小集合(即一個類)中以核心測試用例作為代表進行軟件測試,即滿足了測試需求同時也減少了測試用例的數(shù)量起到了優(yōu)化測試用例集的作用. 而流放用例獨立于任何類,處于邊界位置,對于這類測試用例,在通常的軟件測試工作中也是測試的重點
仿真實驗的主要步驟如下: (1) 隨機生成測試需求集R,在測試用例空間中生成測試用例集T,建立起測試需求和測試用例的滿足關(guān)系. (2) 利用需求約簡模型,獲得測試需求約簡集R'. (3) 基于R'利用DBSCAN獲得約簡后的測試用例集DT. (4) 基于R'分別利用G,H,GRE方法約簡測試側(cè)用例集獲得約簡測試用例集GT,HT,GRET(5)測試約簡集對比分析.
參數(shù)配置: |R|測試需求個數(shù),測試用例個數(shù)|T|,實驗中的具體參數(shù)取值為|R|=30,|T|=3000即初始測試需求集的個數(shù)為30,所對應(yīng)的測試用例集中測試用例的個數(shù)為3000. 嵌套閾值STRP,1-STRP表示測試需求集R中包含關(guān)系的測試需求的生成概率,即1-STRP的數(shù)值越大生成包含關(guān)系測試需求的可能性就越大.STRP的取值根據(jù)文獻[5]取值區(qū)間為[0.025,0.900]. 在實驗的進行中隨機生成一個實數(shù)β∈[0,1],如果β>STRP則當(dāng)前的測試需求r中生成一個被包含的r; 否則在當(dāng)前的r中停止生成被包含的r. 由于DBSCAN算法跟密度分布有很大的關(guān)系所以在實驗中設(shè)置一個密度參數(shù)ρ,ρ的取值范圍為[0,1],當(dāng)ρ的取值越接近1表示分布越密集,越接近0表示分布越稀疏. 為了有效驗證本文提出的理論,實驗中分別對ρ取三個值0.1,0.5,0.9即在密度稀疏,密度中等,密度密集的三種環(huán)境下進行實驗.
對于配置參數(shù)組(|R|,|T|,STRP,ρ)本文進行了30次的實驗,具體的實驗平均結(jié)果如下表:
表1說明在區(qū)間內(nèi)測試用例分布稀疏的環(huán)境下采用DBSCAN方法的效果并沒有傳統(tǒng)的方法G,H,GRE有效果,并不能達到優(yōu)化的結(jié)果.
表1 ρ=0.1,各種方法獲得的測試用例個數(shù)的比較
表2在密度分布較為均勻的環(huán)境下,方法DBSCAN和G,H,GRE方法的約簡結(jié)果在不同的STRP取值下各有優(yōu)劣,但總體上約簡效果差異性并不大.
表2 ρ=0.5,各種方法獲得的測試用例個數(shù)的比較
表3是在分布密集的環(huán)境下進行的,可以看出無論STRP的取值如何DBSCAN算法在總體上都是優(yōu)于傳統(tǒng)的約簡方法. 可見在滿足一定的條件下DBSCAN方法與傳統(tǒng)方法相比還是具有一定的優(yōu)越性.
表3 ρ=0.9,各種方法獲得的測試用例個數(shù)的比較
由于本文實驗中所有涉及的優(yōu)化方法均是在R'的前提下,所以對于參數(shù)STRP只是起到一個輔助觀察和研究的作用,具體的因為STRP的不同而體現(xiàn)出來傳統(tǒng)約簡方法之間的差異性本文不做贅述. 上述表格總體上凸顯出了DBSCAN方法的優(yōu)劣性,在不同的環(huán)境下DBSCAN有不同的適用性,在測試用例集足夠大且分布區(qū)間較密集的環(huán)境下DBSCAN方法具有一定的優(yōu)越性. 但在測試用例的分布較為稀疏的環(huán)境下該方法的適用性顯然降低了很多,在何種情況下選擇這種約簡方法還需要根據(jù)測試人員根據(jù)具體的測試工作環(huán)境進行選擇.
圖4表示在STRP分別取值0.025,0.25,0.9的情況下不同分布密度所對應(yīng)的測試用例平均個數(shù)比較,橫軸為分布密度取值,縱軸為用例個數(shù)取值. 可以很清晰的看出隨著ρ取值的遞增,用例個數(shù)逐漸變小,充分顯示了在高密度環(huán)境下DBSCAN約簡方法的有效性.同時我們也發(fā)現(xiàn)STRP的取值的大小并不直接影響用例個數(shù)的多少,即在相同密度下用例個數(shù)與STRP不存在直接影響關(guān)系.
圖4 不同閾值與密度下測試用例個數(shù)比較
綜上所述,在一定的環(huán)境條件下DBSCAN用例約簡方法比傳統(tǒng)約簡方法有效性更高,約簡效果更佳,同時也表明DBSCAN約簡法較適用于測試用例分布較為集中的測試用例集.
目前,軟件測試用例約簡方法大多數(shù)都是基于需求與測試用例的對應(yīng)關(guān)系進行的,很少是基于測試用例之間的關(guān)系進行的. 基于改進的DBSCAN算法的測試用例約簡是在用例之間關(guān)系下提出的一種聚類約簡方法,該方法具有一定的創(chuàng)新性,在一定壞境下約簡效果具有一定的優(yōu)勢. 豐富了測試用例的約簡方法,為今后的軟件測試約簡提供了一個新的思路.
基于改進的DBSCAN算法的約簡方法需要在滿足一定的條件下才能體現(xiàn)出其優(yōu)越性,尤其是在測試用例集合根據(jù)一定屬性分布比較密集的情況下才能體現(xiàn)出聚類的效果,從而達到更好的約簡效果. 如何在分布相對稀疏的環(huán)境下提高該方法的適應(yīng)度是未來研究的一個重點和難點,同時對于參數(shù)取值方法的合理優(yōu)化和改進也需要進行進一步的研究和探索.
1張娜,姚瀾,包曉安,等. 多目標(biāo)優(yōu)化的測試用例優(yōu)先級在線調(diào)整策略. 軟件學(xué)報,2015,26(10): 2451-2464. [doi: 10.13328/j.cnki.jos.004745]
2陳軍成,薛云志,陶秋銘,等. 基于事件處理函數(shù)的GUI測試用例集約簡技術(shù). 軟件學(xué)報,2015,26(8): 1871-1885.[doi: 10.13328/j.cnki.jos.004711]
3顧慶,唐寶,陳道蓄. 一種面向測試需求部分覆蓋的測試用例集約簡技術(shù). 計算機學(xué)報,2011,34(5): 879-888.
4章曉芳,陳林,徐寶文,等. 測試用例集約簡問題研究及其進展. 計算機科學(xué)與探索,2008,2(3): 235-247.
5章曉芳,徐寶文,聶長海,等. 一種基于測試需求約簡的測試用例集優(yōu)化方法. 軟件學(xué)報,2007,18(4): 821-831.
6Chvatal V. A greedy heuristic for the set-covering problem.Mathematics of Operations Research,1979,4(3): 233-235.[doi: 10.1287/moor.4.3.233]
7Harrold MJ,Gupta R,Soffa ML. A methodology for controlling the size of a test suite. Proceedings of Conference on Software Maintenance. San Diego,CA,USA. 1990.302-310.
8Chen TY,Lau MF. A new heuristic for test suite reduction.Information and Software Technology,1998,40(5-6):347-354. [doi: 10.1016/S0950-5849(98)00050-0]
9Chen TY,Lau MF. On the completeness of a test suite reduction strategy. The Computer Journal,1999,42(5):430-440. [doi: 10.1093/comjnl/42.5.430]
10郭世可,董槐林,龍飛,等. 一種結(jié)合密度聚類和區(qū)域生長的圖像分割方法. 計算機研究與發(fā)展,2007,44(S3):420-423.
11于亞飛,周愛武. 一種改進的DBSCAN密度算法. 計算機技術(shù)與發(fā)展,2011,21(2): 30-33,38.
12馬帥,王騰蛟,唐世渭,等. 一種基于參考點和密度的快速聚類算法. 軟件學(xué)報,2003,14(6): 1089-1095.
13周水庚,周傲英,曹晶. 基于數(shù)據(jù)分區(qū)的DBSCAN算法. 計算機研究與發(fā)展,2000,37(10): 1153-1159.