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