一種基于組合測試的軟件故障調(diào)試方法的相關(guān)分析研究
王瑞鳳,宋玲玲
(煙臺職業(yè)學(xué)院,山東 煙臺 264670)
摘要:對于軟件的功能測試來說,它是一個構(gòu)建高可信軟件的關(guān)鍵環(huán)節(jié)。組合測試作為一種重要的軟件測試方法,往往能以簡單高效的測試用例來對測試系統(tǒng)進行有效完整的測試,可以達到事半功倍的效果?;诮M合測試的原理與算法對軟件的故障調(diào)試進行一系列技術(shù)方面的分析,找到故障的原因所在并證明組合測試方法的有效性。
關(guān)鍵詞:軟件測試;組合測試;故障調(diào)試
收稿日期:2015-03-19
作者簡介:王瑞鳳(1968-),女,山東招遠人,煙臺職業(yè)學(xué)院講師.
中圖分類號:TP311.5文獻標識碼:A
軟件的制成都要經(jīng)歷軟件測試這個過程,它能夠保障軟件的質(zhì)量。軟件測試是一項復(fù)雜的計算過程,在軟件測試的研究中要面臨例如建模分析、準則設(shè)定、測試用例生成、變異測試和回歸測試等諸多挑戰(zhàn)。關(guān)于測試用例生成,我們常常會用到組合測試這種技術(shù)手段,它是近年來被世界各地軟件應(yīng)用領(lǐng)域關(guān)注熱議的一項話題技術(shù)。
1組合測試
1.1 組合測試的概念
組合測試作為一種軟件測試方法,它的主要特點就是在保證錯誤檢出率的前提下用極少的測試用例就能夠測試系統(tǒng)。在軟件測試過程中,當建模分析完畢后,測試人員就可以獲得一些由因素和因素取值聯(lián)合構(gòu)成的測試用例實例,組合測試可以通過極少數(shù)的因素間取值組合構(gòu)造出一個組合測試用例集,然后自動分配最優(yōu)組合測試用例,通過測試用例集來測試軟件。
1.2 覆蓋數(shù)組
目前,關(guān)于傳統(tǒng)的組合測試方法研究,其中大部分都是基于覆蓋數(shù)組的,只有一小部分針對特殊的軟件測試。
覆蓋數(shù)組簡稱CA,它是一個值域為v的n×t矩陣,n×t上則包含了v值域上所有大小為t的排列,形成一個矩形陣列。t即是矩陣的強度,而v是序,在一個覆蓋數(shù)組里,如果行數(shù)最小,就是最優(yōu)的排列,這個最小的行數(shù)就被稱為是覆蓋數(shù)(covering array number),被記作CAN。在覆蓋數(shù)組中,強度如果是t,就稱為t覆蓋數(shù)組(t-covering array),如果有t=2的特別情況,那么就稱為成對覆蓋數(shù)組(pairwise covering array)。在覆蓋數(shù)組中,它所要求的矩陣的每一列的值域都有著相同的大小。
一般在真實的程序中,不是每個覆蓋數(shù)組都能滿足每一個參數(shù)具有相同值域這個要求,所以就會出現(xiàn)混合覆蓋數(shù)組。混合覆蓋數(shù)組簡稱MCA,它由v個符號組成一個n×t的矩形陣。在此矩形陣里,v=Ek(i=1)xVi。其中第i列的所有符號都是一個大小為vi的集合Si的元素,并且任意的n×t子矩陣都包含了相應(yīng)值域的t元組。所以,在混合覆蓋數(shù)組中我們就可以合理的定義它的強度t和覆蓋數(shù)MCAN了[1]3。
在這些矩形陣的構(gòu)造過程中,可以發(fā)現(xiàn)某些數(shù)學(xué)構(gòu)造方式只能用于CA。而利用其它構(gòu)造法尤其是利用計算機自動化搜索的時候,就能得知CA會以MCA的一個特殊范例出現(xiàn),并且在處理時MCA和CA并沒有任何區(qū)別,所以覆蓋數(shù)組中應(yīng)該包含了CA和MCA。
1.3 非經(jīng)典組合測試
在覆蓋數(shù)組組合測試中,所有數(shù)量為t的任意個參數(shù)組合都應(yīng)該被覆蓋,但是這樣的做法并沒有考慮到具體參數(shù)的特殊性質(zhì)。所以近年來世界上一些學(xué)者對組合測試的方法進行了一些修改和延展,例如對測試用例集合中的每個參數(shù)取值組合都加入一些限制,這就是非經(jīng)典組合測試法。這種測試法可以進一步的減少測試用例數(shù)目,讓組合測試的過程更為簡易。
因為在測試的時候某些取值組合必須被測試,所以一般把這種必須經(jīng)歷測試的取值組合稱為種子。這種測試一般用貪心算法來完成并能夠很好的支持參數(shù)中所有的限制。例如我們舉例說明一段約束,如(a,b,c,d)=(2,4,8,3),表示例如這樣的組合形式會在測試用例集合中至少出現(xiàn)1次。
一般情況下在簡單的計算器中非十進制運算中并不支持浮點數(shù)運算,所以十六進制和浮點數(shù)的組合應(yīng)該禁止出現(xiàn)在組合測試中,因為它們是一組無效組合。在非經(jīng)典組合測試中規(guī)定沒有意義的無效組合不應(yīng)該出現(xiàn)在參數(shù)組合中。這種情況就說明了參數(shù)之間的沖突。在微軟的免費測試工具PICT(pairwise independent combinatorial testing)就支持這種較為復(fù)雜的約束。
在另外一種組合測試方法中,它允許不同參數(shù)之間的覆蓋強度也不同,這就是變強度組合測試。變強度組合測試的目的就是將覆蓋數(shù)組擴展。如果VCA表示為一個強度為2的混合覆蓋數(shù)組,它的其中如果包含3個子數(shù)組,每個數(shù)組又包含了3個值域大小為3的參數(shù)的話,那么它的每個子數(shù)組內(nèi)部就都應(yīng)該滿足所有參數(shù)組合滿足3的覆蓋這個條件,這種特殊的測試方法適用于在系統(tǒng)的重點測試中某些關(guān)鍵參數(shù)的測試。
一般的測試程序中雖然有多個輸入,但是輸出很少,經(jīng)常以單個輸出為具體形態(tài)。但是某些被測程序中可能具有多個輸出,這會復(fù)雜化測試用例集的生成。因為如果每個輸出都是由幾個參數(shù)影響,那么測試集合就需要覆蓋影響任意一個輸出的所有輸入?yún)?shù)的取值組合。在這種情況下,如果能利用變強度組合的方式就可以解決多輸出帶來的問題。比如在一個鐵路信號系統(tǒng)中,如果火車到來前一個信號燈的狀態(tài)取決于之前3個區(qū)間的狀態(tài)的話,那么就可以采用強度為3的相鄰因素組合測試方法來測試系統(tǒng),這是一種比較自然的自動測試生成方法,它可以在多種時間區(qū)間內(nèi)產(chǎn)生最優(yōu)的測試用例集合[1]5。
1.4 貪心算法
貪心算法可以將空矩陣逐行逐列擴展,擴展到所有強度t組合全部被覆蓋的地步。它包含了一維擴展和二維擴展兩種方式,它還可以結(jié)合其他的測試算法并應(yīng)用于測試中。一維測試即為(one test at a time)方法。它在構(gòu)造覆蓋數(shù)組時會給數(shù)組依次增加一行,這多覆蓋的一行恰好覆蓋了某些未覆蓋的t元組,然后以此類推直到所有的t元組全部被覆蓋。覆蓋的t元組越多,就代表這種策略程度越直接。一般大部分的貪心策略都是從一個較小的測試用例集合中選擇下一個測試用例而得來的。
它的具體方法是首先要隨機選擇50個左右的候選測試用例。通過計算機隨機指定一個矩形列陣的次序,再在這個次序依次賦予每個參數(shù)數(shù)值,這些參數(shù)賦值要保證新的參數(shù)賦值和用例中的已有參數(shù)賦值要能夠覆蓋最多的t元組。賦值之后從這些測試用例中選擇覆蓋了最多的未覆蓋t元組作為數(shù)組的下一行。而在類似于成對測試這種特殊問題的計算中,根據(jù)組合測試的性質(zhì),應(yīng)該保持新加入用例與測試集中已有元素的重疊數(shù)量不能超過2。比如在兩個數(shù)列中,(1,3,4)和(1,3,5)這兩個數(shù)列中第一個和第二個參數(shù)的取值相同,所以它的重疊數(shù)就是2。這種計算方法可以為一部分測試用例提供最優(yōu)的計算結(jié)果。
對于二維擴展(in parameter order)來說,它的計算主要就是針對成對測試?;驹瓌t就是首先構(gòu)造前兩個參數(shù)的所有組合并形成一個小規(guī)模的矩陣,然后重復(fù)二維擴展。首先是水平擴展,水平擴展就是在矩形列陣中增加一列參數(shù),然后為列上的每一個參數(shù)都賦值,目的就是盡可能覆蓋最多的t元組;其次是垂直擴展,它建立于水平擴展的基礎(chǔ)上,如果有些t元組沒有被覆蓋,那么新的測試用例就會生成。
ABA1B1A1B2A2B1A2B2ABCA1B1C1A1B2C2A2B1C3A2B2C1HorizontalgrowthABCA1B1C1A1B2C2A2B1C3A2B2C1A2B1C2A1B2C3Verticalgrowth
圖1二維擴展算法的水平擴展和垂直擴展
圖1就是一個二維擴展的算法實例。如果有A和B兩個參數(shù),以下是它們的所有4組取值組合。經(jīng)過水平擴展到第3列,這一列的取值為C1、C2、C3,其中C1能夠覆蓋2個元組。在計算中就可以發(fā)現(xiàn)(A1,-,C3)、(-,B1,C2)這些元組沒有被覆蓋,所以通過二維擴展算法的垂直擴展就可以將這些2元組全部合并得到圖1這樣的結(jié)果。
2組合測試的故障診斷算法應(yīng)用
在利用組合測試用例對系統(tǒng)進行測試時,目的主要是檢測排查系統(tǒng)中的故障。如果沒有故障就不需要進行診斷。當某一個測試用例集合中的測試用例在運行時發(fā)生了故障,那么就應(yīng)該按照:分析用例集合中用例本身——生成附加的測試用例幫助故障診斷——觀察附加測試用例的運行情況并根據(jù)它重新進行分析驗證這三個步驟進行故障的計算和檢驗。根據(jù)組合測試故障的診斷算法,應(yīng)該在故障診斷和計算時注意以下幾點[2]。
①組合測試一般會把故障總結(jié)為測試用例中某些取值模式所引發(fā)的,所以系統(tǒng)的故障有可能是在組合測試中被測試組合的某些取值模式引起的。
②一般導(dǎo)致系統(tǒng)故障原因集合的因素就是在組合測試用例集合中所有共同含有的模式所導(dǎo)致的。這時注意分析集合中的元素可以進一步的確認故障的原因并遏制更多故障的發(fā)生。
③可以通過生成附加測試用例的方式來輔助故障的診斷。這種方法通過發(fā)現(xiàn)故障的測試用例,由它生成相應(yīng)的多個(設(shè)置為n個)附加測試用例,這樣一個測試用例集合就會生成nl個附加測試用例,這時候?qū)ο到y(tǒng)重新進行測試,根據(jù)附加測試用例的運行情況就可以重新分析和驗證系統(tǒng)的故障原因。
3實際應(yīng)用分析
如果要測試一臺交換機的通信功能,通過交換機的呼叫模式、資費方式、接入方式和通信狀態(tài)作為4個參數(shù)進行測試。在這4個參數(shù)中,每一個參數(shù)都應(yīng)該具有3種不同的狀態(tài)。按照組合測試的原則,如果要測試每一個參數(shù)的所有情況,就需要3的四次方也就是81個測試來完成。對于1個參數(shù)利用81次測試顯然是不切實際的,所以通過組合測試的方法,隨機組成一個測試用例合集,就可以實現(xiàn)對兩個參數(shù)之間所有變量組合的完全覆蓋,并且能夠保證每個例子中組合出現(xiàn)的頻率保持相同和統(tǒng)一,這些頻率且只出現(xiàn)1次[3]。
CallTypeBillingAccessStatusLocalCollectPbxLbusyLongDistanceFreecallLoopBusyInternationalCallerlsdnBusyLocalFreecallIsdnBlockedLongDistanceCallerPbxBlockedInternationalCollectLoopBlockedLocalCallerLoopSuccessLongDistanecCollectIsdnSuccessInternationalFreecallPbxSuecess
圖2組合測試的用例表
這種測試兼顧了一般性,所以是一種很全面的測試方法。對上述交換機進行的測試只會用到一個測試用例在系統(tǒng)中運行時發(fā)生故障的情況。用圖2這組測試用例再對交換機進行測試,根據(jù)測試的結(jié)果基本可以確定出現(xiàn)故障可能的原因。
由于這幾個測試用例從未發(fā)生過故障,因此此時它們的模式都是極小元,即Mt=(International,Collect,Loop,Blocked),(Long distance,Free call,Loop,Busy),所以它們就是導(dǎo)致故障發(fā)生的原因。另外,如果某一個測試用例或者某幾個測試用例發(fā)生了原來發(fā)生的故障,也可以發(fā)現(xiàn)用例之間的極小元,從而排查出導(dǎo)致故障發(fā)生的原因。所以在組合測試中,如果輔之以必要的相關(guān)測試用例,就可以對導(dǎo)致系統(tǒng)故障的因素進行有效的定位和相關(guān)的解決措施。從組合測試我們可以看出,如果某個系統(tǒng)出現(xiàn)錯誤的測試用例數(shù)量少,那就說明這是一個高質(zhì)量的測試用例集合,也反映了軟件系統(tǒng)的優(yōu)秀品質(zhì)。所以對于軟件質(zhì)量測試來說,基于組合測試的高質(zhì)量測試用例對系統(tǒng)的故障原因進行合理的分析是軟件系統(tǒng)創(chuàng)建中相當重要和必要的一個環(huán)節(jié)。
4總結(jié)
組合測試是一個重要的實驗方法,它不僅僅應(yīng)用于軟件測試行業(yè),在各大領(lǐng)域都有廣泛的應(yīng)用。因為它可以通過最少的測試發(fā)現(xiàn)影響系統(tǒng)正常運行的最多不利因素,以以點帶面的效率影響著軟件行業(yè)的發(fā)展,是一個高能的軟件技術(shù),在軟件測試領(lǐng)域具有相當?shù)拇硇浴W鳛橐环N基于數(shù)理化和統(tǒng)計學(xué)的科學(xué)實驗方法,組合測試應(yīng)該在更多科技領(lǐng)域得到更廣泛的重視、應(yīng)用和發(fā)展。
參考文獻:
[1]嚴俊,張健.組合測試:原理與方法[J].軟件學(xué)報,2009,20(6).
[2]陳翔.組合測試技術(shù)及應(yīng)用研究[D].南京:南京大學(xué),2011.
[3]徐寶文,聶長海,史亮,等.一種基于組合測試的軟件故障調(diào)試方法[J].計算機學(xué)報,2006,29(1).
Relevant Analysis and Research on Software Failure Debugging
Method Based on Combinatorial Test
WANG Rui-feng, SONG Ling-ling
(YantaiVocationalCollege,Yantai264670,China)
Abstract:It is a key link for the functional test of software to construct highly reliable software. As an important method to test the software, the combinatorial test can test the test system effectively and integrally with simple and efficient test cases to attain the result with half effort. We have carried out a series of technical analyses based on the theory and algorithm of the combinatorial test and found the cause of the failure and certified the effectiveness of the combinatorial test.
Key words:software test; combinatorial test; failure debugging
(責任編輯侯中巖)