x,在通過(guò)該測(cè)試用例tx運(yùn)行程序時(shí)候只覆蓋語(yǔ)句k和h中的一條。
[0061] 以下通過(guò)一個(gè)具體實(shí)例對(duì)本實(shí)施例所提出的動(dòng)態(tài)DBB,以及后續(xù)提出的分組和最 大分組的概念予以說(shuō)明。如下表1所示,為通過(guò)圖1或圖2所示實(shí)施例獲取的對(duì)應(yīng)于pow 程序(程序的名稱)中每條語(yǔ)句的覆蓋信息。
[0062] 表 1
[0063]
[0065] 如表1所示,h為結(jié)果為失敗的測(cè)試用例,即為1\中的元素,表1所示實(shí)例的1\中 僅由一個(gè)元素,即t1;t2~15均為第二測(cè)試用例集T8中的元素,該pow程序具體為一個(gè)指 數(shù)運(yùn)算程序,用于計(jì)算x的y次方,表1的右側(cè)列出了運(yùn)行在pow程序上的第一測(cè)試用例集 T,共有5個(gè)測(cè)試用例,每個(gè)測(cè)試用例對(duì)應(yīng)的輸入顯示在該測(cè)試用例名稱下,每個(gè)測(cè)試用例 對(duì)應(yīng)于程序中每條語(yǔ)句的覆蓋信息的情況分別用"魯"和"空白"表示,如果測(cè)試用例在程 序執(zhí)行過(guò)程中覆蓋了對(duì)應(yīng)的語(yǔ)句,則在相應(yīng)的表格位置標(biāo)記上"魯",否則相應(yīng)的表格位置 為空白,測(cè)試用例的執(zhí)行結(jié)果顯示在表格的最后一行,符號(hào)P和F分別表示測(cè)試用例執(zhí)行結(jié) 果為正確和失敗,初始時(shí)刻,僅獲取測(cè)試用例^的執(zhí)行結(jié)果為失敗,其它測(cè)試用例均為未知 結(jié)果的測(cè)試用例。在本實(shí)施例中,可以根據(jù)表1所示的覆蓋信息將P〇w程序中的語(yǔ)句劃分 為動(dòng)態(tài)DBB,如下表2所示,為通過(guò)圖2所示實(shí)施例將表1所示pow程序的語(yǔ)句劃分出的動(dòng) 態(tài)DBB。
[0066] 表 2
[0067]
[0068] 如表2所示,每個(gè)動(dòng)態(tài)DBB中的所有語(yǔ)句具有相同覆蓋信息,請(qǐng)結(jié)合表1,例如b2 中的語(yǔ)句4和10,均被1:2和13所覆蓋,并且未被14和t5所覆蓋。
[0069] 需要說(shuō)明的是,由于現(xiàn)有技術(shù)中的DBB很難對(duì)程序中語(yǔ)句的被執(zhí)行情況進(jìn)行區(qū) 分,也就是無(wú)法通過(guò)測(cè)試用例的覆蓋信息劃分DBB,現(xiàn)有技術(shù)中的DBB僅能代表程序中一段 順序執(zhí)行的語(yǔ)句序列,其中只有一個(gè)入口和一個(gè)出口,入口就是DBB的第一條語(yǔ)句,出口就 是DBB的最后一條語(yǔ)句,即僅能體現(xiàn)出程序的結(jié)構(gòu),若采用該DBB來(lái)表示測(cè)試用例的覆蓋信 息,會(huì)產(chǎn)生偏差。因此,本實(shí)施例中提出了動(dòng)態(tài)DBB的概念,以該動(dòng)態(tài)DBB作為基本單位來(lái) 表示測(cè)試用例的覆蓋信息。
[0070] S112,根據(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è)試用例覆蓋。
[0071] 在通過(guò)覆蓋信息劃分動(dòng)態(tài)DBB的實(shí)際情況中,如果兩條語(yǔ)句被同等數(shù)量的失敗測(cè) 試用例和同等數(shù)量的正確測(cè)試用例覆蓋,那么難以通過(guò)上述覆蓋信息將這兩條語(yǔ)句區(qū)分開 來(lái);針對(duì)上述情況,為了進(jìn)一步地刻畫測(cè)試用例的覆蓋信息對(duì)程序語(yǔ)句的劃分能力,本實(shí)施 例通過(guò)分組和最大分組的概念來(lái)描述動(dòng)態(tài)DBB在第三測(cè)試用例集T,上的不可區(qū)分性。
[0072] 具體地,定義動(dòng)態(tài)DBB集合為分組,以g表示,分組g需要滿足以下條件:(1)、分組 g是DBBO;)的一個(gè)非空子集,DBBO;)為通過(guò)I;形成的DBB集合;(2)、記f(b)表示第三測(cè) 試用例集T,中覆蓋了動(dòng)態(tài)DBB的失敗測(cè)試用例的數(shù)量,p(b)表示第三測(cè)試用例集T,中覆 蓋了動(dòng)態(tài)DBB的正確測(cè)試用例的數(shù)量,則對(duì)于分組g中的任意兩個(gè)動(dòng)態(tài)DBB,例如u和V,滿 足f (U)=f (V)且p(U)=P (V)。
[0073] 上述分組的集合以G(T,)表示,若該G(T,)中的一個(gè)分組g滿足以下條件,則g為 該分組集合G(X)中的最大分組;條件為:對(duì)于G(TJ的任意一個(gè)分組g',若g'辛g,則對(duì) 于分組g中的任一個(gè)動(dòng)態(tài)DBB,例如為u,以及g'中的任一個(gè)動(dòng)態(tài)DBB,例如為V,需要滿足: f(u)辛f(v)或p(u)辛p(v);并且以最大分組形成的集合為最大分組集合,記為DG0;)。
[0074] 也就是說(shuō),對(duì)于分組&和g2,被同等數(shù)量的失敗測(cè)試用例和同等數(shù)量的正確測(cè)試 用例覆蓋,該gJP82可以為兩個(gè)獨(dú)立的分組,但是也可以為一個(gè)最大分組(gpg2)。
[0075] 在通過(guò)覆蓋信息獲取了上述動(dòng)態(tài)DBB后,可以生成通過(guò)T,形成的最大分組集合, 在初始時(shí)刻,1;為Ts,同樣以表1所示pow程序?yàn)槔枰哉f(shuō)明,I;中僅有一個(gè)已知執(zhí)行結(jié)果 的測(cè)試用例h,即Ts中僅包括元素t 覆蓋的動(dòng)態(tài)DBB包括:b^匕和b4,即bpbdPb4形 成一個(gè)最大分組,同時(shí),匕也形成了一個(gè)最大分組,因此,通過(guò)I\= {tj形成的最大分組集 合具體為:DG(Tr) =G(Tr) = (b3)}。
[0076] 在本實(shí)施例中,在獲取通過(guò)!;= {tj形成的最大分組集合后,進(jìn)行將第二測(cè)試用 例集Tg中的部分測(cè)試用例添加到第三測(cè)試用例集T,中的操作,即S120包括:
[0077] S121,從當(dāng)前第二測(cè)試用例集中選擇將當(dāng)前分組集合中的分組劃分為第一分組和 第二分組的測(cè)試用例,該已選擇的測(cè)試用例對(duì)所述第一分組和所述第二分組具有不同的覆 蓋信息,該當(dāng)前分組集合中的分組包括一個(gè)或多個(gè)動(dòng)態(tài)DBB,該當(dāng)前分組集合的初始值為通 過(guò)第三測(cè)試用例集的初始值生成的最大分組集合。
[0078] 本實(shí)施例在具體實(shí)現(xiàn)中,首次對(duì)分組集合中的分組進(jìn)行劃分,在初始時(shí)刻,實(shí)際上 是對(duì)通過(guò)T;=Ts形成的最大分組集合中的最大分組進(jìn)行劃分,如果第二測(cè)試用例集T8中 的一條測(cè)試用例t只覆蓋了分組g中部分的動(dòng)態(tài)DBB,依據(jù)分組的定義,測(cè)試用例t將分組 g劃分為兩個(gè)分組,例如為第一分組gi和第二分組g2。
[0079] 可選地,從第二測(cè)試用例集Tg中選擇可以劃分分組g的測(cè)試用例時(shí),優(yōu)先可以均 勻劃分分組g的測(cè)試用例,因?yàn)槿魷y(cè)試用例劃分分組g后產(chǎn)生的第一分組gl和第二分組g2 的大小相同或比較接近,那么第一分組&和第二分組g2再進(jìn)行劃分時(shí),則使用的測(cè)試用例 是較少的。
[0080] 在具體實(shí)現(xiàn)中,設(shè)定當(dāng)前的分組集合GO;)包括的分組可以表示為{gl,g2,…gu}, 當(dāng)考慮從第二測(cè)試用例集Tg中選擇一個(gè)測(cè)試用例t加入第三測(cè)試用例集時(shí),t可以滿足 以下條件:
[0081]
.其中,Split(t,gD=min(|gn|,|gi2|) (1)
[0082] 上述⑴式中的S(gi)表示被已選擇的測(cè)試用例t覆蓋的分組&中包含錯(cuò)誤語(yǔ)句 的程度,|G〇;) |表示根據(jù)當(dāng)前第三測(cè)試用例集I;形成的分組的數(shù)量。
[0083] 上述(1)式中S(gi)的具體計(jì)算方式為:
[0084]
[0085] 其中,上述(2)式中的aep(gi)表示&被1\中正確測(cè)試用例覆蓋的數(shù)量,aef(gi)表 示&被I中失敗測(cè)試用例覆蓋的數(shù)量,anp (gi)表示gi未被1\中正確測(cè)試用例覆蓋的數(shù)量。
[0086] 需要說(shuō)明的是,(1)式中的Split(t,gi)表示測(cè)試用例t對(duì)分組&劃分產(chǎn)生的第一 分組gn和第二分組gi2中較小的一個(gè)包含動(dòng)態(tài)DBB的數(shù)量;如果測(cè)試用例t沒(méi)有對(duì)gi產(chǎn)生 劃分,則Split(t,gi)為0,并且Split(t,gi)優(yōu)先考慮可以對(duì)gi盡可能產(chǎn)生均勻劃分的測(cè) 試用例t,即劃分后產(chǎn)生兩個(gè)包含動(dòng)態(tài)DBB數(shù)量盡可能接近的第一分組gn和第二分組gi2。
[0087] S122,獲取已選擇的測(cè)試用例的執(zhí)行結(jié)果,并將已選擇的測(cè)試用例添加到當(dāng)前第 三測(cè)試用例集中。
[0088] 在本實(shí)施例中,S121中選擇的測(cè)試用例通常夠?qū)撛诎e(cuò)誤語(yǔ)句的分組進(jìn)行劃 分,對(duì)于選擇添加到第三測(cè)試用例集I;中的測(cè)試用例,為后續(xù)進(jìn)行錯(cuò)誤定位時(shí)需要使用的 測(cè)試用例,因此,需要獲取已選擇的測(cè)試用例的執(zhí)行結(jié)果,從而滿足錯(cuò)誤定位的條件。
[0089] 進(jìn)一步地,若從第二測(cè)試用例集Tg中選擇一些加入第三測(cè)試用例集中的測(cè)試用 例,此時(shí),當(dāng)前分組集合中的每個(gè)分組均不能被當(dāng)前第二測(cè)試用例集中Tg測(cè)試用例劃分,然 而,可能存在上述情況,即分組集合中的一些分組可能被相同數(shù)量的失敗測(cè)試用例和相同 數(shù)量的正確測(cè)試用例覆蓋,這些分組內(nèi)的動(dòng)態(tài)DBB不可被區(qū)分,而當(dāng)前的第二測(cè)試用例集 Tg中仍可能存在一些測(cè)試用例只覆蓋了這些分組集合中的一部分分組,即可能需要繼續(xù)從 而當(dāng)前第二測(cè)試用例集1中選擇用于進(jìn)行錯(cuò)誤定位的測(cè)試用例,則本實(shí)施例提供的方法, S120中還包括:
[0090] S123,在當(dāng)前分組集合中的每個(gè)分組均不能被當(dāng)前第二測(cè)試用例集中測(cè)試用例劃 分時(shí),判斷當(dāng)前分組集合與通過(guò)當(dāng)前第三測(cè)試用例集生成的最大分組集合是否相同;若不 同,則執(zhí)行S124,若相同,則執(zhí)行S125。需要說(shuō)明的是,S123中執(zhí)行判斷時(shí)用于與當(dāng)前分組 集合對(duì)比的最大分組集合為,通過(guò)S112獲取的當(dāng)前第三測(cè)試用例集生成的最大分組集合, 并且此時(shí)的第三測(cè)試用例集為執(zhí)行S122后已添加的第三測(cè)試用例集。
[0091]S124,將當(dāng)前分組集合中的分組進(jìn)行合并以形成最大分組,其中,合并的分組為當(dāng) 前分組集合中被相同數(shù)量的正確測(cè)試用例和相同數(shù)量的失敗測(cè)試用例覆蓋的分組。在合并 后,根據(jù)第一測(cè)試用例集中每個(gè)測(cè)試用例的覆蓋信息,繼續(xù)執(zhí)行將第二測(cè)試用例集中的部 分測(cè)試用例添加到