張 彤
(成都理工大學(xué)工程技術(shù)學(xué)院,四川 樂山 614000)
普遍應(yīng)用的軟件測試方法可分為模塊測試、系統(tǒng)測試和集成測試。模塊測試主要是測試軟件模塊的功能,屬于最低層次的測試。系統(tǒng)測試主要是對軟件、硬件和其它影響因素的功能測試。集成測試又稱組裝測試,是在模塊測試的基礎(chǔ)上,對各個模塊接口進行檢測的一種測試方法,主要是為證明模塊組合后能夠正確且穩(wěn)定地對接和交互,起到承上啟下的作用,是軟件測試的重要部分。
謝肖飛等人[1]提出基于符號執(zhí)行與模糊測試的混合測試方法,運用模糊測試方法生成可以大量覆蓋的待測試數(shù)據(jù),基于得到的覆蓋信息進行全局搜索,選取標準程序集和實際項目作為評測對象,進行有效性驗證。通過構(gòu)建虛擬設(shè)備的軟件測試環(huán)境證明了該方法的可行性,但是該方法在測試的準確度方面還有所欠缺。姜蘋等人[2]提出了一種基于正交試驗法的故障診斷軟件測試方法,該方法對故障診斷軟件測試過程中需要考慮的特征因素進行分析,同時對正交檢測法的理論依據(jù)進行了闡述。在軟件測試過程運用正交實驗法來提取代表性推理規(guī)則,并且對提取出的規(guī)則信息進行測試。根據(jù)測試效果可知,該方法解決了測試耗時過長的問題,但測試的可信度較低。
因此,本文提出基于切片技術(shù)的應(yīng)用軟件集成測試方法,在獲取切片的過程中,將可信度和節(jié)點同時當(dāng)作切片生成指標,通過定義網(wǎng)絡(luò)拓撲帶權(quán)圖、權(quán)值矩陣、資源可信判定函數(shù)、切片可信度等相關(guān)因素,獲得切片數(shù)據(jù)自動生成器框架。并采用結(jié)構(gòu)驅(qū)動集成測試模式,實現(xiàn)應(yīng)用軟件測試。對比實驗表明,本文方法具有較強的可行性,且測試速度和準確率與現(xiàn)有方法相比具有明顯優(yōu)勢性。
程序切片技術(shù)是通過程序依賴圖獲取切片的技術(shù),該技術(shù)通過程序分解成不同的切片來縮小測試范圍,從而提高軟件測試速度。軟件切片[3]的構(gòu)造大致可分為三部分,其結(jié)構(gòu)框架如下圖1所示。
定義程序P中的切片S為一個可執(zhí)行程序。對于S處的變量v而言,S由可能影響變量數(shù)值的全部語句構(gòu)成??蓤?zhí)行程序和程序P具有等效功能。以軟件中數(shù)據(jù)依賴和控制依賴為基礎(chǔ),去除無用或重復(fù)語句后,獲得切片。則定義集Def(s)和引用集Ref(s)分別為:Def(s)={m},Ref(s)={n}。
變量v滿足v∈def(m)∩ref(n),節(jié)點m到節(jié)點n的路徑p上的其它節(jié)點表示為m′∈p·{m,n},其中v?def(m′)。路徑p上的其它節(jié)點表示為m′∈p·{m,n},當(dāng)n是m的后必經(jīng)點,n不是m的后必經(jīng)點時,n控制依賴于m。
在獲取切片的過程中,將可信度[4]和節(jié)點同時作為切片生成指標,在構(gòu)造可信切片時,對各個相關(guān)因素作如下定義:
定義1:拓撲帶權(quán)圖G=(V,E),其中,V表示節(jié)點,E為鏈路。則E的權(quán)值w表示m到n之間的鏈路代價,可以表示為
(1)
定義2:權(quán)值矩陣[5]M,該矩陣表示帶全無向圖的權(quán)值分布。則M可以表示為
(2)
定義3:切片NS={VN,VL.PN,PL},VN={vn1,vn2,…,vnn}代表虛擬節(jié)點集合;VL={vl1,vl2,…,vln}代表虛擬鏈路[6]集合;PN={pn1,pn2,…,pnn}代表實際節(jié)點集合;PL={pl1,pl2,…,pln}代表實際鏈路集合的映射。
定義4:資源可信判定函數(shù)judge_ns_pre(x,y,t)如式(3),其中x是待判定資源集合,y是資源集合可信度,t為切片的可信需求。
(3)
(4)
將切片技術(shù)運用到軟件測試的過程中,重點關(guān)注程序中特定路徑上的興趣點[7,8],便可以提高測試效率。程序切片測試的基本流程如下:
1)通過黑盒測試確定輸出結(jié)果,并檢查是否產(chǎn)生錯誤,對產(chǎn)生的錯誤進行定位,確定其影響區(qū)域,從而對錯誤進行排除。
2)在不同層次上對依賴關(guān)系進行分析。
3)利用切片算法確定錯誤根源。
4)進行回歸測試排除和修復(fù)程序,直到不再發(fā)生錯誤為止。
5)生成模塊自動測試數(shù)據(jù)報告。
其測試數(shù)據(jù)生成系統(tǒng)框架如圖2所示。
圖2 切片數(shù)據(jù)自動生成器框架
圖2中,切片獲取模塊主要用于計算軟件中的各類切片,該過程包括對詞法和語法進行分析,檢測軟件中詞法或語法錯誤,并生成抽象語法樹,根據(jù)語法樹構(gòu)建依賴關(guān)系圖,最后利用切片生成器產(chǎn)生切片;測試模塊是基于切片結(jié)果的測試過程,其中包括測試用例生成模塊、靜態(tài)分析模塊和動態(tài)測試模塊。靜態(tài)分析主要的方法如下:對數(shù)據(jù)流和控制流的分析和研究;對程序中各種依賴關(guān)系的分析;對函數(shù)的靜態(tài)調(diào)用關(guān)系及全局變量的分析;動態(tài)測試模塊主要是通過程序動態(tài)切片技術(shù),根據(jù)程序的數(shù)據(jù)結(jié)構(gòu)合理性來測試各個模塊的實際功能性,從而檢測模塊組合形成后的較大模塊;錯誤處理主要是從各個模塊中發(fā)現(xiàn)錯誤、然后通過后向切片技術(shù)將錯誤定位,最后利用前切片技術(shù)判定錯誤會影響的范圍,將錯誤排除并且對程序進行修復(fù)[9]。
以上述步驟為基礎(chǔ),實現(xiàn)回歸測試?;貧w測試是在程序修改后進行的,由于在程序修改過程中,很可能又發(fā)生了新的錯誤,用前期使用的測試用例對軟件程序進行回歸測試更有利于檢測出修改后產(chǎn)生的新錯誤。反復(fù)進行回歸測試,直至檢測不出錯誤為止[10]。
切片測試只保證了軟件局部的準確性,但是組裝后不能保證其整體協(xié)調(diào)性,影響軟件的正常運行。因此,在程序切片測試后,需要根據(jù)設(shè)計要求對軟件進行集成測試,來檢測各模塊接口之間的故障。傳統(tǒng)的集成測試方法把模塊結(jié)合后的程序作為一個整體來進行測試。但是當(dāng)在檢測中發(fā)現(xiàn)錯誤時,難以準確定位具體的錯誤位置,由于在改正錯誤的同時可能會出現(xiàn)新的錯誤,導(dǎo)致新舊錯誤混合,增加了判定錯誤位置和原因的難度,因此不被廣泛應(yīng)用。
針對該問題,本文根據(jù)獲取的軟件測試范圍和數(shù)據(jù),對軟件進行集成測試[11,12]。對軟件進行集成測試的最終目的是能夠保證各個單元組合后能夠按設(shè)計要求運行,并且保證在運行過程中存在正常的增量運行。軟件測試模型如圖3所示。
圖3 軟件測試模型
集成測試的主要針對內(nèi)容為各單元間的接口和軟件集成后的功能性。在測試過程中,首先度量軟件的動態(tài)復(fù)雜度,運用式(5)進行描述
(5)
式中,?表示軟件組件的失效概率;f表示組件復(fù)雜度總和。通過軟件的動態(tài)復(fù)雜度衡量軟件組件之間的動態(tài)耦合度,得到下式
(6)
式中,q表示軟件組件的使用頻率;Ia表示使用頻較高的組件;Ir表示使用頻較低的組件。對軟件中的組件進行層次劃分,并對每個組件進行排序,從使用概率最高的組件開始集成測試,并在集成測試之前將已經(jīng)集成過的組件進行剔除,具體可以通過下面的公式實現(xiàn)
(7)
式中,c0表示高風(fēng)險組件;p表示剔除無效組件后的測試集;t表示時間變量。
在結(jié)構(gòu)驅(qū)動模式下,軟件組件的集成是建立在固定功能線程基礎(chǔ)上的。因為軟件中各個模塊的質(zhì)量和開發(fā)周期會有明顯的差異,導(dǎo)致集成測試是一個漫長的漸進過程。為了減少測試時間,本文將集成測試與切片測試同時進行。測試過程中,需要人員和機器同時運作,程序員需要對檢測過程中出現(xiàn)的錯誤類型和數(shù)量進行分析,總結(jié)出發(fā)生錯誤的原因和具體位置,提高應(yīng)用軟件集成測試結(jié)果的精準度。
實驗以軟件版本升級測試為例,以分析軟件實際問題、問題的修改以及其它關(guān)聯(lián)性問題為基礎(chǔ),驗證基于符號執(zhí)行與模糊測試的混合測試方法(方法1)、基于正交試驗法的故障診斷軟件測試方法(方法2)和基于切片技術(shù)的應(yīng)用軟件集成測試方法的性能。
實驗環(huán)境為MATLAB R2012a,計算機配置為:32位Windows7系統(tǒng),Pentium雙核2.8GHz,運行內(nèi)存8GB。軟件基本規(guī)模為124M字節(jié),在升級過程中,修改和新增功能約占軟件的10%,測試組需要修改的測試大綱大約占總體的13%。表1給出了各測試版在測試周期中產(chǎn)生的錯誤數(shù)量分布。
表1 軟件問題分類及其數(shù)量
由于軟件修正問題的延遲時間與問題數(shù)量、問題修改用時、問題提交密度等成正比。因此,想要對軟件進行有效的測試,不僅需要明確軟件問題分類及其數(shù)量,還必須有效解決測試中存在的大量程序錯誤問題。
在測試過程中,軟件的穩(wěn)定性和問題及時間曲線的波峰成反比,主要有以下幾點:
1)軟件升級后新加功能的起始集成時間離散度。
2)軟件的測試過程和產(chǎn)品開發(fā)過程的并行度。
3)被檢測的各項功能域檢測時間的離散度。該因素與測試計劃相關(guān),常規(guī)的操作方法會產(chǎn)生較多問題的功能域,對其進行優(yōu)先強化測試。
4)修改程序的波及效應(yīng)。測試組測試時應(yīng)及時發(fā)現(xiàn)程序引入的修改錯誤,并將其拒絕,從而防止產(chǎn)品質(zhì)量發(fā)生波動。
在本實驗中,解決軟件問題的平均延遲時間如圖4所示。
圖4 軟件問題發(fā)現(xiàn)及解決曲線
回歸測試的總時長受問題曲線波峰和平均周期長度影響,并且與二者成正比。由圖4可以看出在回歸測試的過程中,每個測試周期發(fā)現(xiàn)的程序錯誤數(shù)量普遍較低,改正問題的延遲時間較短。
為了驗證本文軟件集成測試的有效性,將程序的響應(yīng)時間和測試準確率作為評價指標,對比不同方法的響應(yīng)時間,對比結(jié)果如圖5所示。
圖5 不同方法的響應(yīng)時間對比
從圖5可以看出,針對不同的拓撲結(jié)構(gòu),本文方法的響應(yīng)時間均低于基于符號執(zhí)行與模糊測試的混合測試方法和基于正交試驗法的故障診斷軟件測試方法,其最高用時不到6ms,說明該方法測試運行速度較快,能夠做到測試結(jié)果的及時獲取。這是由于該方法為了減少測試時間,通過切片技術(shù)縮小測試范圍,并將集成測試與切片測試同時進行,從而達到了提升測試效率的目的。
三種方法的數(shù)據(jù)丟包率對比結(jié)果如圖6所示。
圖6 數(shù)據(jù)丟包率測試結(jié)果對比圖
分析圖6可知,本文方法在應(yīng)用軟件集成測試過程中的數(shù)據(jù)丟包率明顯低于現(xiàn)有方法,其最高值僅為22%,而當(dāng)實驗次數(shù)達到200次時,方法1的數(shù)據(jù)丟包率達到了最高值,為90%,方法2的數(shù)據(jù)丟包率達到了最高值,為70%。上述數(shù)據(jù)說明本文方法有效抑制了數(shù)據(jù)丟包率,提升了軟件測試的可信度。得出的測試結(jié)果更加可靠,準確性更高。這是由于該方法在考慮節(jié)點的同時將可信度作為切片的生成指標,從而提高降低了數(shù)據(jù)丟包率。
上述實驗證明了本文方法測試結(jié)果更準確,檢測速度較快,具有較強的可行性。
為解決現(xiàn)有方法存在的檢測效率不高和結(jié)果可信度不高的問題,本文提出的一種基于切片技術(shù)的應(yīng)用軟件集成測試方法,該方法通過切片技術(shù)縮小測試范圍、提高應(yīng)用軟件集成測試效率。通過將可信度作為切片的生成指標,提高測試結(jié)果的準確性。在實驗條件下,首先進行測試的特征分析,然后通過與現(xiàn)有方法的集成測試對比結(jié)果分析可知,本文方法的測試速度和測試結(jié)果準確度比傳統(tǒng)方法更高,可以廣泛用于應(yīng)用軟件的集成測試中。
雖然該方法有效提升了應(yīng)用軟件的測試效果,但是存在持續(xù)性不足的問題,同時,在面向路徑的測試數(shù)據(jù)自動生成方面同樣存在不足,因此需要進一步優(yōu)化該方法,為軟件測試研究領(lǐng)域提供更全面的測試方法。