第三測(cè)試用例集的操作,即執(zhí)行S124之后,返回S121繼續(xù)執(zhí)行。
[0092]S125,完成第三測(cè)試用例集的添加操作。
[0093] 在本實(shí)施例中,在當(dāng)前分組集合中的每個(gè)分組均不能被當(dāng)前第二測(cè)試用例集中測(cè) 試用例劃分時(shí),需要進(jìn)一步通過(guò)當(dāng)前已選擇的第三測(cè)試用例集I;生成的最大分組集合與此 時(shí)經(jīng)過(guò)多次劃分后的分組集合是否相同,若不同,則說(shuō)明第二測(cè)試用例集Tg中可能存在一 些測(cè)試用例只覆蓋了當(dāng)前分組集合中的部分分組,因此需要考慮將這些測(cè)試用例選擇加入 第三測(cè)試用例集T,中,若相同,則說(shuō)明當(dāng)前分組集合已不能再被劃分,即當(dāng)前第三測(cè)試用例 集I;為最終需要選擇的第三測(cè)試用例集。
[0094] 同樣以上述表1所示pow程序和上述表2所示對(duì)pow程序劃分的動(dòng)態(tài)DBB為例, 說(shuō)明本實(shí)施例中分組的劃分方式,在通過(guò)初始{tj形成的最大分組集合DG0;)=G(Tr) =Kbpb"、),(b3M后,開(kāi)始選擇需要添入第三測(cè)試用例集Tr中的測(cè)試用例,例如, 先選擇測(cè)試用例t2,通過(guò)判斷將測(cè)試用例t2的執(zhí)行結(jié)果將其標(biāo)記為失敗測(cè)試用例,用測(cè)試 用例t2進(jìn)行測(cè)試,1^4的覆蓋信息不同,因此b4從最大分組(bpb2,b4)中劃分被分出,此 時(shí),Tr= (b3), (b4)};隨后,本實(shí)例中選擇了測(cè)試用例t4,繼續(xù)對(duì) 測(cè)試用例1:4的執(zhí)行結(jié)果標(biāo)記完后,Tr= {tphtj,此時(shí)G(Tr) = {(b), (b2), (b3), (b4)}。 由于第二測(cè)試用例集1;中的任一測(cè)試用例均不能再對(duì)G〇\)中的分組進(jìn)行劃分,并且 |G〇;)| = |DG〇;)|,因而測(cè)試用例的選擇過(guò)程完成,即最終選擇的第三測(cè)試用例集為 ={tphtj。需要說(shuō)明的是,選擇測(cè)試用例14時(shí)若選用測(cè)試用例15可以實(shí)現(xiàn)相同的效果。
[0095] 在獲取已選擇的第三測(cè)試用例集T,后,可以將該已選擇的第三測(cè)試用例集T,用于 錯(cuò)誤定位,采用錯(cuò)誤定位技術(shù)Ochiai計(jì)算語(yǔ)句可疑度,可以得到各個(gè)語(yǔ)句的可疑度排名, 如表3所示,為通過(guò)圖2所示實(shí)施例生成的pow程序的語(yǔ)句可疑度值及其排行;可以看到, 語(yǔ)句^和s1(|的可疑度排行為2,排行時(shí)若存在幾個(gè)結(jié)果相同的語(yǔ)句,均取最壞的結(jié)果,由于 8 4和s1(|的可疑度相同,說(shuō)明最多只需檢查兩條語(yǔ)句就能夠發(fā)現(xiàn)錯(cuò)誤代碼,而在測(cè)試用例選 擇過(guò)程中也只需檢查2條測(cè)試用例的執(zhí)行結(jié)果。
[0096]表 3
[0097]
[0098] 需要說(shuō)明的是,對(duì)上述表1所示pow程序生成的最大分組集合進(jìn)行劃分中, 在完成劃分后,對(duì)分組集合劃分的結(jié)果為,每個(gè)動(dòng)態(tài)DBB為一個(gè)分組,并且無(wú)法對(duì)分組 合并進(jìn)行劃分,也就是說(shuō),通過(guò)1={tpt2,t4}形成的最大分組集合D(X) =G(X)= {(、),(b2), (b3), (b4)h因此,Tr= 為最終選擇的第三測(cè)試用例集合,無(wú)需再對(duì)分 組集合中的分組進(jìn)行合并后繼續(xù)選擇測(cè)試用例。
[0099] 以下通過(guò)一段具體的代碼說(shuō)明圖2所示實(shí)施例的執(zhí)行過(guò)程,如表4所示,為圖2所 示實(shí)施例的算法過(guò)程。
[0100] 表 4
[0101]
[0102]
[0103] 算法的輸入是失敗測(cè)試用例集Ts和大量執(zhí)行結(jié)果未知的第二測(cè)試用例集Tg及其 語(yǔ)句覆蓋信息MS,輸出是用于錯(cuò)誤定位的第三測(cè)試用例集T,。算法主要包含如下主要的步 驟:
[0104] (1)、算法1~4行首先將初始失敗測(cè)試用例Ts加入,同時(shí)根據(jù)第一測(cè)試用例集 T=TgUTs的覆蓋信息生成動(dòng)態(tài)DBB,即DBB(T),對(duì)應(yīng)表2中的橫向,動(dòng)態(tài)DBB被測(cè)試用例 覆蓋的信息,并以動(dòng)態(tài)DBB為單位表示測(cè)試用例,對(duì)應(yīng)表2中的縱向,測(cè)試用例被動(dòng)態(tài)DBB 覆蓋的信息。
[0105] (2)、算法6行首先生成初始第二測(cè)試用例集!;=Ts時(shí)的最大分組集合DG〇\),接 著用該最大分組集合作為當(dāng)前的分組集合GO;)。
[0106] (3)、算法7~16行迭代從Tg中選擇測(cè)試用例加入1\;具體地,11~12行判斷當(dāng) 前選擇的測(cè)試用例是否對(duì)當(dāng)前分組集合中的分組進(jìn)行了劃分,如果沒(méi)有產(chǎn)生劃分,則停止 測(cè)試用例的選擇過(guò)程,否則對(duì)選擇的測(cè)試用例標(biāo)記執(zhí)行結(jié)果后,將該測(cè)試用例加入I;,并重 復(fù)再次選擇新的測(cè)試用例。
[0107] (4)、上述已經(jīng)說(shuō)明,當(dāng)分組集合G(T,)中的每個(gè)分組不可再被劃分時(shí),由于G(T,) 中的一些分組可能被相同數(shù)量的失敗測(cè)試用例和相同數(shù)量的正確測(cè)試用例覆蓋,這些分組 內(nèi)的動(dòng)態(tài)DBB不可被區(qū)分,而當(dāng)前Tg仍可能存在一些測(cè)試用例只覆蓋了這些分組集合中的 部分分組,因而算法的下一步也考慮將這些測(cè)試用例選擇加入到I;中,即算法的17~19 行,首先可以根據(jù)當(dāng)前I;獲取當(dāng)前最大分組集合,從而判斷當(dāng)前分組集合與獲取的當(dāng)前最 大分組集合是否相同,若不相同,可以將當(dāng)前分組集合中的分組進(jìn)行合并,這里的分組合并 是指將分組集合中被相同數(shù)量的正確和相同數(shù)量的失敗測(cè)試用例覆蓋的分組合并到同一 個(gè)分組中以形成最大分組;若判斷為相同的,則說(shuō)明當(dāng)前的分組集合已不能再被測(cè)試用例 劃分,算法收斂,返回已選擇的第三測(cè)試用例集I;。需要說(shuō)明的是,算法判斷不相同后的執(zhí) 行方式為跳至第6行重新對(duì)最大分組集合再進(jìn)行劃分。
[0108] 本發(fā)明上述實(shí)施例通過(guò)提出基于覆蓋信息的動(dòng)態(tài)DBB、以及分組和最大分組的劃 分方式,可以將程序中的各語(yǔ)句以動(dòng)態(tài)DBB和分組進(jìn)行劃分,并通過(guò)對(duì)分組的劃分進(jìn)一步 對(duì)通過(guò)現(xiàn)有技術(shù)中難以區(qū)分開(kāi)的語(yǔ)句進(jìn)行劃分,以實(shí)現(xiàn)通過(guò)少量的測(cè)試用例,即可以進(jìn)行 高效的錯(cuò)誤定位效果,同時(shí)可以保證錯(cuò)誤定位的準(zhǔn)確性。
[0109] 圖3為本發(fā)明實(shí)施例提供的一種測(cè)試用例選擇裝置的結(jié)構(gòu)示意圖。本實(shí)施例提供 的測(cè)試用例選擇裝置適用于從大量未知結(jié)果的測(cè)試用例中選擇用于進(jìn)行錯(cuò)誤定位的測(cè)試 用例,該裝置通常以硬件和軟件的方式來(lái)實(shí)現(xiàn),可以集成在終端設(shè)備的處理器中,例如集成 在處理器芯片的存儲(chǔ)單元中,供處理器調(diào)用執(zhí)行。如圖3所示,本實(shí)施例的測(cè)試用例選擇裝 置具體包括:獲取模塊11、添加模塊12和錯(cuò)誤定位模塊13。
[0110] 其中,獲取模塊11,用于通過(guò)第一測(cè)試用例集中每個(gè)測(cè)試用例運(yùn)行程序,獲取第一 測(cè)試用例集中每個(gè)測(cè)試用例對(duì)應(yīng)于程序中每條語(yǔ)句的覆蓋信息,其中,第一測(cè)試用例集包 括至少一個(gè)失敗測(cè)試用例和第二測(cè)試用例集。
[0111] 添加模塊12,用于根據(jù)獲取模塊11獲取的第一測(cè)試用例集中每個(gè)測(cè)試用例的覆 蓋信息,將第二測(cè)試用例集中的部分測(cè)試用例添加到第三測(cè)試用例集中。
[0112] 在本實(shí)施例中,第二測(cè)試用例集中包括的各測(cè)試用例均為未知結(jié)果的測(cè)試用例, 第三測(cè)試用例集的初始值同樣僅包括上述至少一個(gè)失敗測(cè)試用例。
[0113] 錯(cuò)誤定位模塊13,用于通過(guò)添加模塊12添加的第三測(cè)試用例集中的每個(gè)測(cè)試用 例定位出程序中錯(cuò)誤的語(yǔ)句,以計(jì)算出程序中每條語(yǔ)句的可疑度。
[0114] 本發(fā)明實(shí)施例提供的測(cè)試用例選擇裝置用于執(zhí)行本發(fā)明圖1所示實(shí)施例提供的 測(cè)試用例選擇方法,具備相應(yīng)的功能模塊,其實(shí)現(xiàn)原理和技術(shù)效果類似,此處不再贅述。
[0115] 圖4為本發(fā)明實(shí)施例提供的另一種測(cè)試用例選擇裝置的結(jié)構(gòu)示意圖,在上述圖3 所示實(shí)施例的基礎(chǔ)上,本實(shí)施例提供的裝置還包括:第一生成模塊14,用于在添加模塊12 根據(jù)獲取模塊11獲取的第一測(cè)試用例集中每個(gè)測(cè)試用例的覆蓋信息,將第二測(cè)試用例集 中的部分測(cè)試用例添加到第三測(cè)試用例集中之前,根據(jù)獲取模塊11獲取的第一測(cè)試用例 集中每個(gè)測(cè)試用例的覆蓋信息將程序的語(yǔ)句劃分為動(dòng)態(tài)DBB,動(dòng)態(tài)DBB中的語(yǔ)句具有相同 覆蓋信息;第二生成模塊15,用于根據(jù)當(dāng)前第三測(cè)試用例集中每個(gè)測(cè)試用例的覆蓋信息, 生成動(dòng)態(tài)DBB的當(dāng)前最大分組集合,當(dāng)前最大分組集合中的最大分組包括一個(gè)或多個(gè)動(dòng)態(tài) DBB,當(dāng)前最大分組集合中的每個(gè)最大分組被當(dāng)前第三測(cè)試用例集中相同的測(cè)試用例覆蓋。
[0116] 相應(yīng)地,本實(shí)施例中的添加模塊12可以包括:選擇單元16,用于從當(dāng)前第二測(cè)試 用例集中選擇將當(dāng)前分組集合中的分組劃分為第一分組和第二分組的測(cè)試用例,該已選擇 的測(cè)試用例對(duì)第一分組和第二分組具有不同的覆蓋信息,當(dāng)前分組集合中的分組包括一個(gè) 或多個(gè)動(dòng)態(tài)DBB;添加單元17,用于獲取選擇單元16已選擇的測(cè)試用例的執(zhí)行結(jié)果,并將已 選擇的測(cè)試用例添加到當(dāng)前第三測(cè)試用例集中。需要說(shuō)明的是,本實(shí)施例在首次對(duì)當(dāng)前分 組集合中的分組進(jìn)行劃分時(shí),劃分的對(duì)象,也就是待劃分的當(dāng)前分組集合為通過(guò)第三測(cè)試 用例集的初始值生成的最大分組集合。
[0117] 可選地,本實(shí)施例中的選擇單元16,具體用于從當(dāng)前第二測(cè)試用例集中選擇將分 組集合中的分組均勻的劃分為第一分組和第二分組的測(cè)試用例。例如同樣通過(guò)上述(1)式 和(2)式對(duì)分組進(jìn)行劃分。
[0118] 進(jìn)一步地,本實(shí)施例在對(duì)分組集合中的分組進(jìn)行劃分之后,同樣存在分組集合中 的一些分組可能被相同數(shù)量的失敗測(cè)試用例和相同數(shù)量的正確測(cè)試用例覆蓋,此時(shí),這些 分組內(nèi)的動(dòng)態(tài)DBB不可被區(qū)分,然而,當(dāng)前的第二測(cè)試用例集仍可能存在一些測(cè)試用例只 覆蓋了這些分組集合中的一部分分組,即可能需要繼續(xù)從而當(dāng)前第二測(cè)試用例集中選擇用 于進(jìn)行錯(cuò)誤定位的測(cè)試用例,因此本實(shí)施例提供的裝置中,添加模塊1