基于矩陣重復度的最小組合測試用例生成方法
【專利摘要】本發(fā)明公開了一種基于矩陣重復度的最小組合測試用例生成方法,首先根據(jù)因素個數(shù)和每個因素取值個數(shù)生成輸入矩陣,然后采用比較重復度的方法生成初步的解矩陣,再驗證生成的解矩陣是否能覆蓋所有的因素組合,將沒有覆蓋的因素組合記錄下來,最后采用貪心算法的思想覆蓋那些未被覆蓋的因素組合,得到最終的解矩陣,解矩陣中的每一行即為一個測試用例。本方法在保證因素組合全部覆蓋的情況下具有生成的測試用例個數(shù)少的優(yōu)勢,通過與現(xiàn)有的常用組合測試工具ACTS及PICT進行實驗比較,驗證了提出方法的有效性和生成的組合測試用例個數(shù)少的優(yōu)勢。
【專利說明】基于矩陣重復度的最小組合測試用例生成方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于軟件測試中的組合測試用例生成【技術(shù)領(lǐng)域】,涉及一種基于矩陣重復度的最小組合測試用例生成方法。
【背景技術(shù)】
[0002]通常軟件系統(tǒng)是一個復雜的邏輯系統(tǒng),其正常運行受到多因素的影響,這些因素包含系統(tǒng)配置、內(nèi)部事件、外部輸入及運行環(huán)境等,可以抽象表示為軟件系統(tǒng)的輸入因素。這些因素的相互作用通常會導致軟件的失效,在實際軟件測試中,可以通過測試這些系統(tǒng)參數(shù)的所有組合來對軟件系統(tǒng)進行充分的測試。對于一個具有η個輸入?yún)?shù)(因素),每個因素的取值個數(shù)為Vl,V2,…,Vn的軟件系統(tǒng),根據(jù)輸入?yún)?shù)組合完全測試這個軟件系統(tǒng)需要
Hnl個測試用例,對于一般的測試系統(tǒng)而言,這個組合是一個非常龐大的數(shù)字。為了盡可
能少地使用測試用例來有效地更早檢測出軟件錯誤,人們提出了基于組合覆蓋的軟件測試方法,簡稱組合測試(Combination Testing)。在工業(yè)界,IBM、微軟和Bell實驗室等國際知名企業(yè)都開發(fā)了相應的組合測試工具,這些組合測試工具在測試用例生成算法方面,普遍采用速度較快的貪心算法。貪心算法的思想是從空矩陣開始,逐行或者逐列擴展矩陣,直到所有的t組合都被覆蓋。按照擴展方式的不同,可以分成一維擴展和二維擴展兩類。一維擴展的算法框架最初由商業(yè)測試用例生成工具AETG實現(xiàn),AETG的貪心策略是非確定的,所以多次運行AETG得到的測試用例結(jié)果可能不同,故難以保證生成的組合測試用例集最小化,且結(jié)果不穩(wěn)定。微軟開發(fā)的工具PICT采用的方法類似AETG的方法,但是PICT的貪心策略是確定性的,多次運行PICT的結(jié)果相同,但同樣無法保證其生成的組合測試用例集最小化。在二維擴展的方式中,Lei等人提出了 IPO(in-parameter-order)算法,這種算法主要針對成對測試,最初只能產(chǎn)·生成對覆蓋數(shù)組,后來Lei等人將這種算法擴展,得到了一種能產(chǎn)生任意t組合測試用例的算法IPOG。IPOG算法雖然是貪心算法,但它采用了指數(shù)級復雜度的方法來選擇最少行進行垂直擴展,故在處理大規(guī)模實例時仍然需要花費大量時間。
[0003]為了進一步減少組合測試用例數(shù)量,節(jié)約軟件測試成本。我們把軟件輸入空間轉(zhuǎn)化成矩陣形式,然后通過判斷矩陣中測試用例行間的重復度來生成最小覆蓋解矩陣,最終生成最小的組合測試用例集。
【發(fā)明內(nèi)容】
[0004]上面所述的PICT、IPOG等貪心算法雖然效率較高,但是生成的測試用例數(shù)量比較多。本發(fā)明針對目前方法生成的測試用例數(shù)量較多的缺點,提出了一種基于矩陣重復度的最小組合測試用例生成方法,在保證組合覆蓋的覆蓋率不減少的情況下,使得生成的測試用例條數(shù)更少,從而提高軟件測試的效率,降低軟件測試的成本。并且將本方法的實驗結(jié)果與現(xiàn)有的組合測試工具ACTS和PICT的結(jié)果進行比較,驗證了提出方法的有效性和生成的測試用例個數(shù)少的優(yōu)勢。
[0005]本發(fā)明的構(gòu)思如下:[0006]步驟1,根據(jù)因素個數(shù)和每個因素取值個數(shù)生成輸入矩陣A ;
[0007]步驟2,采用比較重復度的方法生成初步的解矩陣B ;
[0008]步驟3,驗證生成的解矩陣B是否能覆蓋所有的因素組合,將沒有覆蓋的因素組合記錄到矩陣C中;
[0009]步驟4,采用貪心算法的思想覆蓋矩陣C,得到最終的解矩陣B。
[0010]上述步驟I的具體步驟如下:
[0011]步驟1.1,根據(jù)因素個數(shù)確定輸入矩陣A的列數(shù)和每個因素的最大值;
[0012]步驟1.2,將每個因素置為初始值,將這一行加入到輸入矩陣A中;
[0013]步驟1.3,因素的最低位加1,如果大于該位最大值,向前進位;
[0014]步驟1.4,如果最高位小于或者等于最高位的最大值,將剛剛生成的一行加入到輸出矩陣A中,然后轉(zhuǎn)到步驟1.3,如果最高位大于最高位的最大值,輸出得到的輸入矩陣A,算法結(jié)束。
[0015]上述步驟1.1-步驟1.4中,每個因數(shù)的初始值和取值范圍作如下約定,第I個因數(shù)的初始值為100,如果第一個因素的取值個數(shù)為3,則第I個因數(shù)的取值范圍是100?102的整數(shù),最大值為102,第二個因數(shù)的初始值為200,第三個初始值為300,以此類推。
[0016]上述步驟2的具體步驟如下:
[0017]步驟2.1,初始化解矩陣B,將步驟I中得到的輸入矩陣A的第一行加入到解矩陣B中;
[0018]步驟2.2,將輸入矩陣A的第一行設(shè)為當前處理行;
[0019]步驟2.3,將當前處理行與解矩陣B中的每一行逐一做比較,如果重復度都滿足要求,將當前行加入到解矩陣B中,然后從輸入矩陣A中刪除當前行;
[0020]步驟2.4,如果輸入矩陣A中還存在未處理行,將該行設(shè)為當前處理行,轉(zhuǎn)到步驟
2.3,否則輸出解矩陣B,算法結(jié)束。
[0021]上述步驟3的具體步驟如下:
[0022]步驟3.1,根據(jù)因素覆蓋度η選取η個因素,如果這η個因素的組合未被選取過,則轉(zhuǎn)到步驟3.2,否則轉(zhuǎn)到步驟3.4 ;
[0023]步驟3.2,生成這η個因素的值,如果這η個因素的值的組合未被生成過,則轉(zhuǎn)到步驟3.3,否則轉(zhuǎn)到步驟3.1 ;
[0024]步驟3.3,判斷生成的η個因素的值的組合是否被解矩陣B所覆蓋,如果沒有被覆蓋,將該因素組合加入到矩陣C中,轉(zhuǎn)到步驟3.2 ;
[0025]步驟3.4,輸出矩陣C,算法結(jié)束。
[0026]上述步驟4的具體步驟如下:
[0027]步驟4.1,計算輸入矩陣A中的每一行能夠覆蓋矩陣C中的行的個數(shù),記在數(shù)組A中,覆蓋的行的下標記在數(shù)組B中;
[0028]步驟4.2,如果矩陣C中未被覆蓋的行數(shù)大于0,轉(zhuǎn)到步驟4.3,否則轉(zhuǎn)到步驟4.5 ;
[0029]步驟4.3,選取數(shù)組A中最大的一個,將這一行加入解矩陣B中,再根據(jù)數(shù)組B中的記錄將矩陣C中的這些行狀態(tài)設(shè)為已覆蓋;
[0030]步驟4.4,更新數(shù)組A和數(shù)組B的信息,轉(zhuǎn)到步驟4.2 ;
[0031]步驟4.5,輸出解矩陣B,算法結(jié)束?!緦@綀D】
【附圖說明】
[0032]圖1是基于矩陣重復度的最小組合測試用例生成方法流程圖。
[0033]圖2是生成輸入矩陣A的流程圖。
[0034]圖3是生成初步的解矩陣B的流程圖。
[0035]圖4是生成矩陣C的流程圖。
[0036]圖5是生成最終解矩陣B的流程圖。
[0037]圖6是規(guī)模F=31Q時本方法與ACTS工具的IPOG、ACTS工具的IPOG-D、PICT工具的測試用例生成數(shù)量對比圖。
[0038]圖7是規(guī)模F=48時本方法與ACTS工具的IP0G、ACTS工具的IP0G_D、PICT工具的測試用例生成數(shù)量對比圖。
[0039]圖8是規(guī)模F=212時本方法與PICT工具的測試用例生成數(shù)量對比圖。
[0040]圖9是規(guī)模F=213時本方法與PICT工具的測試用例生成數(shù)量對比圖。
【具體實施方式】
[0041]為了能夠更清楚地理解本發(fā)明基于矩陣重復度的最小組合測試用例生成方法的技術(shù)內(nèi)容,下面結(jié)合附圖和一個實施案例對本發(fā)明作進一步說明,須指出的是,所描述給出的實施案例旨在便于對本發(fā)明的理解,而對其沒有任何限定要求。
[0042]本發(fā)明給出的基于矩陣重復度的最小組合測試用例生成方法的流程圖如圖1所示,第一步輸入因素個數(shù)和每個因素取值個數(shù);第二步生成輸入矩陣A,第三步采用比較重復度的方法生成初步的解矩陣B ;第四步驗證生成的解矩陣B是否能覆蓋所有的因素組合,將沒有覆蓋的因素組合記錄到矩陣C中;第五步采用貪心算法的思想覆蓋矩陣C,得到最終的解矩陣B。
[0043]首先,給出本發(fā)明所涉及到的幾個概念定義如下。
[0044]定義I (測試用例集):假設(shè)待測試軟件的輸入因素共有η個,形成輸入空間集合S=If1, f2,…,fn},其中因素fi包含Bi個取值,則該因素取值集合為ViCl ≤ i≤n),稱一個η元組t=^ v2,…,vn) (V1 e V1, v2 e V2,…,vn e Vn)為待測試軟件的一條測試用例,則多個η元組t便為待測試軟件的一個測試用例集,該測試用例集可以轉(zhuǎn)化成矩陣形式。
[0045]定義2 (最小N因素組合覆蓋矩陣):設(shè)軟件系統(tǒng)的輸入空間可以表示成一個mXn矩陣,記A=(aij)mXn。其第j列表示待測試軟件的因素fj,該列元素取自集合Vj(j=l,2,...,η),即e V」。若A的任N列,即第ip i2,…,iN列均滿足:Vn, Vi2,…,Vin中符號的所有的N維組合均在這N列所形成的N元有序組中至少出現(xiàn)一次,則稱A是一個N因素組合覆蓋矩陣。A的每一行就是一條測試用例,m是測試用例的個數(shù)。如果m是保證上述條件成立的最小正整數(shù),則稱A為最小N因素組合覆蓋矩陣。
[0046]定義3 (解矩陣):解矩陣是一個mXn矩陣,記Β=(1^)πιΧη。其中m是測試用例個數(shù),初始B中只含每個因素的第一個取值組成的一行(個)測試用例。兩因素覆蓋解矩陣為最小兩因素組合覆蓋矩陣,三因素覆蓋解矩陣為最小三因素組合覆蓋矩陣,而N因素覆蓋解矩陣為最小N因素組合覆蓋矩陣。
[0047]定義4 (重復度) :設(shè)tf (V1, V2,…,Vn)和!^(S1, S2,…,Sn)是待測試軟件的兩個測試用例。若ti和t2在h個位置上對應值相同,則稱兩個測試用例的重復度為h。
[0048]定義5 (矩陣解):設(shè)\=(νι,V2,…,vn),且,若ti與兩因素覆蓋解矩陣B中任一行測試用例的重復度小于等于1,則\為兩因素覆蓋解矩陣B的一個解。若\與三因素覆蓋解矩陣B中任一行測試用例的重復度h小于等于2,則\為三因素覆蓋解矩陣B的一個解。同理,若ti與N因素覆蓋解矩陣B中任一行測試用例的重復度h小于等于N-1jJ \為N因素覆蓋解矩陣B的一個解。
[0049]下面以第一步的輸入中軟件參數(shù)因素個數(shù)為5,每個因素取值個數(shù)均為2為實施案例,說明本發(fā)明方法的實施過程。 [0050]參照圖2,生成輸入矩陣A的過程如下:
[0051]步驟201確定輸入矩陣A的列數(shù)和每個因素最大值,在這個例子中由于因素個數(shù)為5,每個因素取值個數(shù)都為2,所以輸入矩陣A的列數(shù)為5列,每個因素的最大值分別為101,201,301,401,501 ;步驟202加入初始行到輸入矩陣A中,首先每個因素置為初始值,這里為100,200, 300, 400, 500,然后將這行加入到輸入矩陣A中;步驟203因素最低位加1,約定矩陣中每行的最左邊為最高位,最右邊為最低位,這里最低位加I后變成100,200, 300, 400, 501 ;步驟204判斷當前位是否大于該位最大值,若不大于轉(zhuǎn)到步驟205,否則轉(zhuǎn)到步驟206,此處當前位501不大于該位最大值501,轉(zhuǎn)到步驟205 ;步驟205將當前行加入到矩陣A中,然后轉(zhuǎn)到步驟203,這里將100,200, 300, 400, 501這行加入矩陣A中;步驟206向前進位,首先將當前位置為初始值,然后將前一位加1,并將前一位置為當前位,當因素行變成100,200,300,400,502時就需向前進位,變成100,200,300,401,500 ;步驟207判斷最高位是否大于最高位最大值,如果大于則算法結(jié)束否則轉(zhuǎn)到步驟204,這里當因數(shù)進位后變成102,200,300,400,500時最高位就大于最高位最大值了,算法結(jié)束。
[0052]參照圖3,生成初步的解矩陣B的過程如下:
[0053]步驟301初始化解矩陣B,將輸入矩陣A的第一行加入到矩陣B中;步驟302將輸入矩陣A中的第一行設(shè)為當前行;步驟303將當前處理行與解矩陣B中的行逐一比較重復度,這里重復度是指比較的兩行中因素取值相同的個數(shù),例如100,200, 300, 400, 500和100,200, 300,401,501的重復度為3 ;步驟304判斷重復度是否都滿足要求,滿足轉(zhuǎn)到步驟305,不滿足轉(zhuǎn)到步驟306,這里的重復度滿足要求是指:如果是求η因素組合覆蓋,則重復度必須小于η,這里以η=3為例,則矩陣A中100,200, 301, 401, 501與B中的唯一行100,200, 300, 400, 500重復度小于3,滿足要求;步驟305將當前行加入到解矩陣B中,并在A中刪除當前行;步驟306判斷A中是否還有為處理行,有則轉(zhuǎn)到步驟307,否則算法結(jié)束;步驟307將A中的下一個為處理行設(shè)為當前行。
[0054]參照圖4,生成矩陣C的過程如下:
[0055]步驟401判斷是否存在η個因素的組合未被選取過,如果是轉(zhuǎn)到步驟402,否則算法結(jié)束,這里η的取值與所要求的η因素組合覆蓋中η的值相同,例如當前例子中要求3因素覆蓋,則這里η取值為3 ;步驟402選取這η個未被選取過的因素;步驟403判斷是否存在這η個因素的值的組合未被選取過,如果是轉(zhuǎn)到步驟404,否則轉(zhuǎn)到步驟401,;步驟404生成這η個因素的值未被選取過的組合;步驟405判斷生成的η個因素的值的組合是否被矩陣B覆蓋,如果是轉(zhuǎn)到步驟403,否則轉(zhuǎn)到步驟406,;步驟406將剛剛找到的組合加入矩陣C。[0056]參照圖5,生成最終解矩陣B的過程如下:
[0057]步驟501計算數(shù)組A和B,A中紀錄輸入矩陣A中的每一行能夠覆蓋矩陣C中的行的個數(shù),B中紀錄這些行的下標,即這些行在C中的位置;步驟502判斷矩陣C中是否存在未覆蓋的行,如果存在轉(zhuǎn)到步驟503,否則算法結(jié)束;步驟503找到A中最大值的位置,即找到A中的哪一行能夠覆蓋C中最多的行,然后將A中的這一行加入到解矩陣B中;步驟504根據(jù)B數(shù)據(jù)將C中的相應行狀態(tài)設(shè)為已覆蓋;步驟505更新數(shù)組A和B。
[0058]為驗證本方法的有效性,搜集了 ACTS和PICT這兩個組合測試工具,將本方法與ACTS的IPOG算法、ACTS的IPOG-D算法和PICT算法進行了對比實驗。用例集的規(guī)模首先選擇了 F=3i°和F=48,分別從2因素組合覆蓋一直到6因素組合覆蓋,實驗結(jié)果如表1和表2所示,相對應的圖形化結(jié)果如圖6和圖7所示。結(jié)果顯示,本方法生成的測試用例數(shù)量與其他幾種方法相比明顯減少,但達到了同樣的組合覆蓋程度,驗證了本方法生成測試用例數(shù)量少的優(yōu)勢。然后用例集的規(guī)模選擇了 F=212和F=213,進行高因素覆蓋,分別從2因素組合覆蓋一直到全因素組合覆蓋(這里是12因素組合覆蓋和13因素組合覆蓋),由于IPOG和IPOG-D不支持6因素以上覆蓋,這里與IPOG、IPOG-D和PICT三種算法中效果較好的PICT相比較,實驗結(jié)果如表3和表4所示,相對應的圖形化結(jié)果如圖8和圖9所示。結(jié)果顯示,本方法不但能夠支持高因素覆蓋,而且依然保持生成測試用例數(shù)量少的優(yōu)勢。
[0059]表1用例集的規(guī)模F=3W時各算法生成的測試用例個數(shù)比較
[0060]
【權(quán)利要求】
1.基于矩陣重復度的最小組合測試用例生成方法,其特征在于,包括以下步驟: 步驟I,根據(jù)參數(shù)因素個數(shù)和每個因素取值個數(shù)生成輸入矩陣A ; 步驟2,采用比較重復度的方法生成初步的解矩陣B ; 步驟3,驗證生成的解矩陣B是否能覆蓋所有的參數(shù)因素組合,將沒有覆蓋的因素組合記錄到矩陣C中; 步驟4,采用貪心算法的思想覆蓋矩陣C,得到最終的解矩陣B。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述步驟I的具體步驟如下: 步驟1.1,根據(jù)因素個數(shù)確定輸入矩陣A的列數(shù)和每個因素的最大值; 步驟1.2,將每個因素置為初始值,將這一行加入到輸入矩陣A中; 步驟1.3,因素的最低位加1,如果大于該位最大值,向前進位; 步驟1.4,如果最高位小于或者等于最高位的最大值,將剛剛生成的一行加入到輸出矩陣A中,然后轉(zhuǎn)到步驟1.3,如果最高位大于最高位的最大值,輸出得到的輸入矩陣A,算法結(jié)束。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述步驟2的具體步驟如下: 步驟2.1,初始化解矩陣B,將步驟I中得到的輸入矩陣A的第一行加入到解矩陣B中; 步驟2.2,將輸入矩陣A的第一行設(shè)為當前處理行; 步驟2.3,將當前處理行與解矩陣B中的每一行逐一做比較,如果重復度都滿足要求,將當前行加入到解矩陣B中,然后從輸入矩陣A中刪除當前行; 步驟2.4,如果輸入矩陣A中還存在未處理行,將該行設(shè)為當前處理行,轉(zhuǎn)到步驟2.3,否則輸出解矩陣B,算法結(jié)束。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述步驟3的具體步驟如下: 步驟3.1,根據(jù)因素覆蓋度η選取η個因素,如果這η個因素的組合未被選取過,則轉(zhuǎn)到步驟3.2,否則轉(zhuǎn)到步驟3.4; 步驟3.2,生成這η個因素的值,如果這η個因素的值的組合未被生成過,則轉(zhuǎn)到步驟3.3,否則轉(zhuǎn)到步驟3.1 ; 步驟3.3,判斷生成的η個因素的值的組合是否被解矩陣B所覆蓋,如果沒有被覆蓋,將該因素組合加入到矩陣C中,轉(zhuǎn)到步驟3.2 ; 步驟3.4,輸出矩陣C,算法結(jié)束。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述步驟4的具體步驟如下: 步驟4.1,計算輸入矩陣A中的每一行能夠覆蓋矩陣C中的行的個數(shù),記在數(shù)組A中,覆蓋的行的下標記在數(shù)組B中; 步驟4.2,如果矩陣C中未被覆蓋的行數(shù)大于O,轉(zhuǎn)到步驟4.3,否則轉(zhuǎn)到步驟4.5 ;步驟4.3,選取數(shù)組A中最大的一個,將這一行加入解矩陣B中,再根據(jù)數(shù)組B中的記錄將矩陣C中的這些行狀態(tài)設(shè)為已覆蓋; 步驟4.4,更新數(shù)組A和數(shù)組B的信息,轉(zhuǎn)到步驟4.2 ; 步驟4.5,輸出解矩陣B,算法結(jié)束。
【文檔編號】G06F11/36GK103631714SQ201310556759
【公開日】2014年3月12日 申請日期:2013年11月11日 優(yōu)先權(quán)日:2013年11月11日
【發(fā)明者】陳錦富, 蘇晨飛, 趙小磊, 陳加梅, 楊鶴標 申請人:江蘇大學