專利名稱:一種多參量軟件測試方法
技術領域:
本發(fā)明涉及軟件工程領域中的組合測試技術,尤其涉及對使用的組合測試數(shù)據(jù)進 行優(yōu)化的軟件測試方法。
背景技術:
隨著信息技術的飛速發(fā)展,軟件在工業(yè)、服務業(yè)、金融、國防等各行各業(yè),以及人們 的日常生活中得到了廣泛應用。為了確保軟件的可靠性,在軟件發(fā)布前,通過軟件測試技術 盡可能多地發(fā)掘系統(tǒng)中潛在的錯誤,具有十分重要的意義。多參量軟件中隱藏的錯誤很可能是由兩個以上參量相互作用所觸發(fā)的。因此,如 果只是單獨對各個參量的可能取值進行測試,就很可能遺漏掉那些由多個參量相互作用引 起的軟件錯誤。理想狀態(tài)下的測試方案是對系統(tǒng)中全部參量的取值組合進行窮舉測試,檢 查系統(tǒng)能否正確運行。但是,執(zhí)行窮舉測試所需要的測試用例將隨著系統(tǒng)中的參量個數(shù)呈 指數(shù)增長。例如,對一個具有17個布爾參量的鐵路安全控制系統(tǒng)進行窮舉測試,共需要217 個測試用例,測試成本太高??梢?,窮舉測試是不切實際的。軟件工程的經(jīng)驗表明,實際應用中的大多數(shù)軟件隱藏的錯誤,往往是由少數(shù)幾個 參量互相作用觸發(fā)的。例如,美國國家標準和技術協(xié)會(NIST)的Kuhn等人曾采用四個軟 件系統(tǒng)進行了詳細研究,其結果表明,超過80%的錯誤是由不超過三個參量互相作用觸發(fā) 的。這意味著,在對系統(tǒng)進行測試時,如果測試數(shù)據(jù)覆蓋了全部參量中的任意幾個(例如任 意三個)參量的取值組合,便能檢查出大多數(shù)程序錯誤,保障測試的檢錯率和有效性。與此 同時,和窮舉測試相比,所需的測試用例數(shù)目將大幅消減,測試成本大大降低。例如,對于上 述鐵路安全控制系統(tǒng),只需要11個測試用例,就能保證17個參量中任意兩個參量的取值被 覆蓋到,只需要24個測試用例,就能保證任意三個參量的取值組合被覆蓋到。以上便是組合測試的動機和意義。所謂強度為t的組合測試,是指任意數(shù)目不超 過t個的參量之間所有可能的取值組合都至少在測試用例中出現(xiàn)一次。強度為2的組合測 試,又稱為成對測試(Pairwise Testing),并被廣泛采用。窮舉測試是強度等于全部參量個 數(shù)的一種特殊的組合測試。組合測試數(shù)據(jù)的生成問題是通過構造滿足一定強度的混合覆蓋數(shù)組(Mixed Covering Array)來解決的。下面是混合覆蓋數(shù)組的定義定義1混合覆蓋數(shù)組MCA (N ;t,k,V1V2…vk)是一個由ν個符號組成的NXk矩陣, 其中ν = Vl+V2+...+Vk,并具有以下性質(zhì)1、第i列的所有符號是一個大小為Vi的集合Vi中的元素。2、任意的NXt子矩陣包含了對應的t列的所有可能取值組合。在這里,t即上文提到的強度(strength)。例如,表1給出了一個強度為2的混合 覆蓋數(shù)組MCA (6 ;2,3,223),代表了一組對一個含有三個參量pQ、Pl和p2的系統(tǒng)進行強度為 2的組合測試的測試數(shù)據(jù)。其中Ptl和P1各有兩個不同的取值0、1,ρ2有三個不同的取值0、 1、2。
表1、MCA(6 ;2,3,223)
權利要求
一種多參量軟件測試方法,其步驟包括1)生成強度為t的組合測試數(shù)據(jù)TS,所述組合測試數(shù)據(jù)由N個測試用例組成,按照先后次序,其對應下標分別為0至N 1,其中每一測試用例為一個k元組(p0,p1,…,pk 1),強度t為自然數(shù);k為自然數(shù),表示待測軟件的參量個數(shù);pi代表各參量,分別取值于Vi;強度為t指該組合測試數(shù)據(jù)覆蓋任意不超過t個參量的所有可能的取值組合;2)識別所述組合測試數(shù)據(jù)的非敏感元素,所述非敏感元素指測試數(shù)據(jù)中取值的改變不影響所述組合測試數(shù)據(jù)強度t的那些元素;3)實例化上述非敏感元素,使得實例化后的組合測試數(shù)據(jù)中t+m元組覆蓋率得到提高,其中m可為1至k t中的任意自然數(shù);4)將上述提高t+m元組覆蓋率的組合測試數(shù)據(jù)作為優(yōu)化后的組合測試數(shù)據(jù);5)使用上述優(yōu)化后的組合測試數(shù)據(jù)對該待測軟件進行測試。
2.如權利要求1所述的方法,其特征在于,所述步驟2)中識別出所述組合測試數(shù)據(jù)的 非敏感元素,采用的方法如下對測試數(shù)據(jù)中的N個測試用例,按照一定的次序依次遍歷進行遍歷,遍歷過程中,如果 當前測試用例中,包含某一參量的某個取值的全部t元組都已被覆蓋過,則在所有后續(xù)測 試用例中,如遇到該參量取同樣的值,就標記為非敏感元素。
3.如權利要求2所述的多參量軟件測試方法,其特征在于,所述步驟2)包括以下步驟2-1)對組合測試數(shù)據(jù)中的每一個參量Pi,分別計算所有包含該參量的t元組,并保存 在相應的記錄集合Ri中;2-2)為TS中的N個測試用例,生成一個候選的排序序列集S ;2-3)根據(jù)S中的每種排序序列Sk對全部測試用例進行排序,得到TSk,按照先后順序, 遍歷TSk中的全部測試用例,查找非敏感元素;2-4)將TS替換為上述查找到非敏感元素最多的TSk。
4.如權利要求3所述的多參量軟件測試方法,其特征在于,重復進行步驟2-2)至 2-4),直到不能查找到新的非敏感元素為止。
5.如權利要求3所述的多參量軟件測試方法,其特征在于,所述步驟2-2)排序序列集 S生成具體采用以下步驟2-2-1)計算組合測試數(shù)據(jù)TS中任意兩個測試用例之間的漢明距離,存入表M中;2-2-2)隨機選擇某個測試用例,將其下標作為一個只含一個下標的序列,放入下標序 列集S ;2-2-3)遍歷S中的每一個序列Iisti,設Iisti的最后一個下標為X,查找表M,找到下 標值不包含在Iisti中,且和下標為χ的測試用例漢明距離最大的b個測試用例的下標,分 別作為Iisti的末端,放入S’,其中b為參數(shù),其取值為正整數(shù);2-2-4)將S替換為S’ ;2-2-5)如果步驟2-2-3)至2-2-5)已執(zhí)行c次,轉(zhuǎn)2_2_6),其中c為參數(shù),其取值為正 整數(shù),取5和N之間的較小值;2-2-6)如果S中的各序列包含的下標個數(shù)等于N,轉(zhuǎn)2-2-8);2-2-7)遍歷S中的每一個序列Iisti,設Iisti的最后一個下標為X,查找表M,找到下標值不包含在Iisti中,且和下標為χ的測試用例漢明距離最大的那個測試用例的下標,作 為Iisti的末端,重復執(zhí)行2-2-6); 2-2-8)返回序列集S。
6.如權利要求3所述的多參量軟件測試方法,其特征在于,所述步驟2-3)包括以下步驟2-3-1)從S中選取一種下標序列Sk,按下標序列順序依次選取測試用例,得到測試用 例集TSk ;2-3-2)將所有的Ri中的所有t元組標為0,表示未被覆蓋,以下開始按先后順序遍歷TSk;2-3-3)對每個參量Pi,依次枚舉出TSk的當前測試用例中涉及參量Pi的所有t元組, 并在相應的記錄集Ri中將相應的t元組標記為1,表示已被覆蓋;2-3-4)對每個參量Pi和其對應的全部取值\,檢查其記錄集合Ri中,所有Pi取值為Vj 的t元組,如果這些元組都已被標記為1,則將當前測試用例之后的所有測試用例中,Pi取 值為\的元素標記為非敏感元素;2-3-5)重復執(zhí)行2-3-3)至2-3-5),直到遍歷完TSk中的全部測試用例;2-3-6)重復執(zhí)行2-3-1)至2-3-6),直到S為空集。
7.如權利要求1所述的多參量軟件測試方法,其特征在于,所述步驟3)采用以下步驟3-1)枚舉k個參量的取值間所有的t+m元組,建立一個覆蓋表R,并將每個元組標為0, 表示尚未被覆蓋;3-2)遍歷全部測試用例,并將測試用例中出現(xiàn)的t+m元組,在覆蓋表R中標為1,表示已被覆蓋;3-3)再次遍歷測試用例集,從前至后、從左至右對非敏感元素依次進行實例化。
8.如權利要求7所述的多參量軟件測試方法,其特征在于,所述步驟3-3)進行實例化 具體包括以下步驟3-3-1)遍歷當前測試用例中的每個元素,如果已無非敏感元素,執(zhí)行3-3-4); 3-3-2)將遇到的非敏感元素,分別計算假如將其賦值為其對應參量的取值范圍\中的 每一個值Vi,該測試用例能夠覆蓋到的、在覆蓋表R中標為0的t+m元組的數(shù)目Iii ;3-3-3)將非敏感元素賦值為Iii最大的取值Vi,并將R中新覆蓋到的t+m元組標為1 ; 3-3-4)完成對非敏感元素的實例化,返回TS。
9.如權利要求1所述的多參量軟件測試方法,其特征在于,使用CATS、AETG、PICT、 FireEye或Jermy等工具,通過代數(shù)方法、貪心算法或元啟發(fā)式算法生成所述強度為t的組 合測試數(shù)據(jù)。
10.如權利要求1或2所述的多參量軟件測試方法,其特征在于,所述步驟4)中將最大 限度提高t+m元組取值組合覆蓋率的組合測試數(shù)據(jù)作為優(yōu)化后的組合測試數(shù)據(jù)。
全文摘要
本發(fā)明涉及了一種多參量軟件測試方法,其步驟包括1)生成強度為t的組合測試數(shù)據(jù);2)識別所述組合測試數(shù)據(jù)的非敏感元素,所述非敏感元素指該元素取值的改變不影響所述組合測試數(shù)據(jù)的強度t;3)實例化上述非敏感元素,使得實例化后的組合測試數(shù)據(jù)中t+m元組的取值組合覆蓋率盡可能高,其中m為自然數(shù),可為0至k-t中任意自然數(shù),建議取1;4)將上述提高t+m元組取值組合覆蓋率的組合測試數(shù)據(jù)作為優(yōu)化后的組合測試數(shù)據(jù);5)使用上述優(yōu)化后的組合測試數(shù)據(jù)對該待測軟件進行測試。該方法在確保不減小原有的測試強度和不增加任何測試成本的前提下,提高測試數(shù)據(jù)對高維度元組的覆蓋率,從而能以同樣的測試成本,達到更高的檢錯率。
文檔編號G06F11/36GK101986281SQ20101052699
公開日2011年3月16日 申請日期2010年10月26日 優(yōu)先權日2010年10月26日
發(fā)明者張健, 陳柏強 申請人:中國科學院軟件研究所