版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第4章章 白盒測試及其實(shí)例設(shè)計(jì)白盒測試及其實(shí)例設(shè)計(jì)第第4章章 白盒測試及其實(shí)例設(shè)計(jì)白盒測試及其實(shí)例設(shè)計(jì)4.1 邏輯覆蓋測試4.2 途徑分析測試4.3 其他白盒測試方法4.4 實(shí)例設(shè)計(jì)小結(jié)習(xí)題本章概述本章概述 白盒測試是軟件測試實(shí)際中最為有效和適用的白盒測試是軟件測試實(shí)際中最為有效和適用的方法之一。白盒測試是基于程序的測試,檢測產(chǎn)方法之一。白盒測試是基于程序的測試,檢測產(chǎn)品的內(nèi)部構(gòu)造能否合理以及內(nèi)部操作能否按規(guī)定品的內(nèi)部構(gòu)造能否合理以及內(nèi)部操作能否按規(guī)定執(zhí)行,覆蓋測試與途徑測試是其兩大根本戰(zhàn)略。執(zhí)行,覆蓋測試與途徑測試是其兩大根本戰(zhàn)略。本章重點(diǎn)圍繞邏輯覆蓋和途徑分析展開引見常見本章重點(diǎn)圍繞邏輯
2、覆蓋和途徑分析展開引見常見的白盒測試方法,并經(jīng)過實(shí)例闡明如何實(shí)踐運(yùn)用的白盒測試方法,并經(jīng)過實(shí)例闡明如何實(shí)踐運(yùn)用白盒測試技術(shù)。白盒測試技術(shù)。4.1 邏輯覆蓋測試邏輯覆蓋測試 l覆蓋測試覆蓋測試: : 是利用程序的邏輯構(gòu)造設(shè)計(jì)相應(yīng)的測試用例。測是利用程序的邏輯構(gòu)造設(shè)計(jì)相應(yīng)的測試用例。測試人員要深化了解被測程序的邏輯構(gòu)造特點(diǎn),完全掌握源代試人員要深化了解被測程序的邏輯構(gòu)造特點(diǎn),完全掌握源代碼的流程,才干設(shè)計(jì)出恰當(dāng)?shù)挠美4a的流程,才干設(shè)計(jì)出恰當(dāng)?shù)挠美?。l根據(jù)不同的測試要求根據(jù)不同的測試要求, ,可分為可分為: :覆覆 蓋蓋 測測 試試語句覆蓋語句覆蓋判別覆蓋判別覆蓋條件覆蓋條件覆蓋判別判別/條件覆蓋
3、條件覆蓋條件組合覆蓋條件組合覆蓋途徑覆蓋途徑覆蓋下面是一段簡單的C言語程序,作為公共程序段來闡明五種覆蓋測試的各自特點(diǎn)。 程序4-1:1If (x100& y500) then2 score=score+13If (x=1000| z5000) then4 score=score+5圖4-1 程序流程圖l語句覆蓋語句覆蓋l語句覆蓋語句覆蓋Statement Coverage是指設(shè)計(jì)假設(shè)干是指設(shè)計(jì)假設(shè)干個(gè)測試用例,程序運(yùn)轉(zhuǎn)時(shí)每個(gè)可執(zhí)行語句至少被執(zhí)行一次。個(gè)測試用例,程序運(yùn)轉(zhuǎn)時(shí)每個(gè)可執(zhí)行語句至少被執(zhí)行一次。在保證完成要求的情況下,測試用例的數(shù)目越少越好。在保證完成要求的情況下,測試用例的數(shù)
4、目越少越好。l以下是針對公共程序段設(shè)計(jì)的兩個(gè)測試用例:以下是針對公共程序段設(shè)計(jì)的兩個(gè)測試用例:lTest Case 1:x=2000,y=600,z=6000 lTest Case 2:x=900,y=600,z=6000 測試用例測試用例 x,y,z x,y,z(x100)and(x100)and(y500)(y500)(x=1000)or(x=1000)or(z5000)(z5000)執(zhí)行路徑執(zhí)行路徑Tc1Tc22000,600,6000900,600,5000TrueTrueTrueFalseaceacd測試用例組測試用例組1最弱的邏輯覆蓋方法最弱的邏輯覆蓋方法l判別覆蓋判別覆蓋l判別覆
5、蓋判別覆蓋Branch CoverageBranch Coverage是指設(shè)計(jì)假設(shè)干個(gè)測試用例,是指設(shè)計(jì)假設(shè)干個(gè)測試用例,執(zhí)行被測試程序時(shí),程序中每個(gè)判別條件的真值分支和假值分執(zhí)行被測試程序時(shí),程序中每個(gè)判別條件的真值分支和假值分支至少被執(zhí)行一遍。在保證完成要求的情況下,測試用例的數(shù)支至少被執(zhí)行一遍。在保證完成要求的情況下,測試用例的數(shù)目越少越好。判別覆蓋又稱為分支覆蓋。目越少越好。判別覆蓋又稱為分支覆蓋。l以下是針對公共程序段設(shè)計(jì)的兩個(gè)測試用例:以下是針對公共程序段設(shè)計(jì)的兩個(gè)測試用例: lTest Case 1Test Case 1:x=2000,y=600,z=6000 x=2000,y=
6、600,z=6000 lTest Case 3Test Case 3:x=50,y=600,z=2000 x=50,y=600,z=2000 測試用例測試用例 x,y,z x,y,z(x100)and(x100)and(y500)(y500)(x=1000)or(x=1000)or(z5000)(z5000)執(zhí)行路徑執(zhí)行路徑Tc1Tc32000,600,600050,600,2000TrueFalseTrueFalseaceabd測試用例組測試用例組2 測試用例測試用例 x,y,z x,y,z(x100)and(x100)and(y500)(y500)(x=1000)or(x=1000)or(
7、z5000)(z5000)執(zhí)行路徑執(zhí)行路徑Tc4Tc52000,600,2000 900,600,20002000,200,6000TrueTrueFalseTrueFalseTrueaceacdabe測試用例組測試用例組3l條件覆蓋條件覆蓋l條件覆蓋條件覆蓋Condition Coverage是指設(shè)計(jì)假設(shè)干個(gè)測試用例,執(zhí)行被測是指設(shè)計(jì)假設(shè)干個(gè)測試用例,執(zhí)行被測試程序時(shí),程序中每個(gè)判別條件中的每試程序時(shí),程序中每個(gè)判別條件中的每個(gè)判別式的真值和假值至少被執(zhí)行一遍。個(gè)判別式的真值和假值至少被執(zhí)行一遍。測試測試用例用例 x,y,z x,y,z(x100)(x100)(y500)(y500)(x=1
8、000) (x=1000) (z5000)(z5000) 執(zhí)行路徑執(zhí)行路徑Tc1Tc3Tc52000,600,6000 50,600,20002000,200,6000TrueFalseTrueTrueTrueFalseTrueFalseTrueTrue FalseTrueaceabdabe測試用例組測試用例組4abe abeTrueTrueFalseFalse50,600,60002000,200,1000Tc6Tc7執(zhí)行途徑執(zhí)行途徑(x=1000)or(z5000)(x=1000)or(z5000)(x100)and(y500)(x100)and(y500) x,y,z x,y,z測試測試
9、用例用例測試用例組測試用例組5(b)測試用例組測試用例組5(a)測試測試用例用例 x,y,z x,y,z(x100)(x100)(y500)(y500)(x=1000) (x=1000) (z5000)(z5000) 執(zhí)行路徑執(zhí)行路徑Tc6Tc750,600,60002000,200,1000FalseTrueTrueFalseFalseTrueTrue Falseabe abel 判別判別/ /條件覆蓋條件覆蓋l 判別判別/ /條件覆蓋是指設(shè)計(jì)假設(shè)干個(gè)測試用例,執(zhí)行被測試程序時(shí),程序中條件覆蓋是指設(shè)計(jì)假設(shè)干個(gè)測試用例,執(zhí)行被測試程序時(shí),程序中每個(gè)判別條件的真假值分支至少被執(zhí)行一遍,并且每個(gè)判
10、別條件的內(nèi)部每個(gè)判別條件的真假值分支至少被執(zhí)行一遍,并且每個(gè)判別條件的內(nèi)部判別式的真假值分支也要被執(zhí)行一遍。判別式的真假值分支也要被執(zhí)行一遍。l 測試用例組測試用例組6 6:l Test Case 1Test Case 1:x=2000, y=600, z=2000 x=2000, y=600, z=2000l Test Case 6Test Case 6:x=2000, y=200, z=6000 x=2000, y=200, z=6000l Test Case 7Test Case 7:x=2000, y=600, z=2000 x=2000, y=600, z=2000l Test Ca
11、se 8Test Case 8:x=50, y=200, z=2000 x=50, y=200, z=2000測試測試用例用例 x,y,z x,y,z(x100)(x100)(y500)(y500) (x=1000) (x=1000) (z5000)(z5000) 執(zhí)行路徑執(zhí)行路徑Tc1Tc82000,600,600050,200,2000True FalseTrueFalseTrueFalseTrue FalseaceabdaceabdTrueFalseTrue False2000,600,600050,200,2000Tc1Tc8執(zhí)行途徑執(zhí)行途徑(x=1000)or(z5000)(x=10
12、00)or(z5000)(x100)and(y50(x100)and(y500)0) x,y,z x,y,z測試測試用例用例測試用例組測試用例組6abl 條件組合覆蓋條件組合覆蓋l條件組合覆蓋是指設(shè)計(jì)假設(shè)干個(gè)測試用例,執(zhí)條件組合覆蓋是指設(shè)計(jì)假設(shè)干個(gè)測試用例,執(zhí)行被測試程序時(shí),程序中每個(gè)判別條件的的內(nèi)部判行被測試程序時(shí),程序中每個(gè)判別條件的的內(nèi)部判別式的各種真假組合能夠都至少被執(zhí)行一遍??梢?,別式的各種真假組合能夠都至少被執(zhí)行一遍??梢姡瑵M足條件組合覆蓋的測試用例組一定滿足判別覆蓋、滿足條件組合覆蓋的測試用例組一定滿足判別覆蓋、條件覆蓋和判別條件覆蓋和判別/條件覆蓋。條件覆蓋。l 測試用例組測試
13、用例組7:l Test Case 1:x=2000, y=600, z=2000l Test Case 6:x=2000, y=200, z=6000l Test Case 7:x=2000, y=600, z=2000l Test Case 8:x=50, y=200, z=2000測試測試用例用例 x,y,z x,y,z(x100)(x100) (y500)(y500)(x=1000) (x=1000) (z5000)(z5000) 執(zhí)行路徑執(zhí)行路徑Tc1Tc6Tc7Tc82000,600,600050,600,60002000,200,100050,200,2000True FalseT
14、rue FalseTrueTrue FalseFalseTrueFalseTrueFalseTrue True FalseFalseaceabeabeabd測試用例組測試用例組7(a)aceabeabeabdTrueTrueTrueFalseTrueFalseFalseFalse2000,600,600050,600,60002000,200,100050,200,2000Tc1Tc6Tc7Tc8執(zhí)行途徑執(zhí)行途徑(x=1000)or(x=1000)or(z5000)(z5000)(x100)and(x100)and(y500)(y500) x,y,z x,y,z測試測試用例用例測試用例組測試用
15、例組7(b)l 途徑覆蓋途徑覆蓋l途徑覆蓋途徑覆蓋Path Coverage要求設(shè)計(jì)假設(shè)干測試用例,要求設(shè)計(jì)假設(shè)干測試用例,執(zhí)行被測試程序時(shí),可以覆蓋程序中一切的能夠途徑。執(zhí)行被測試程序時(shí),可以覆蓋程序中一切的能夠途徑。l 測試用例組測試用例組8:l Test Case 1:x=2000,y=600,z=6000 l Test Case 3:x=50,y=600,z=2000l Test Case 4:x=2000,y=600,z=2000l Test Case 7:x=2000,y=200,z=1000測試測試用例用例 x,y,z x,y,z(x100)(x100) (y500)(y500)
16、 (x=1000) (x=1000) (z5000)(z5000) 執(zhí)行路徑執(zhí)行路徑Tc1Tc3Tc4Tc72000,600,600050,600,2000900,600,20002000,200,1000True FalseTrue True TrueTrue True FalseTrueFalseFalse TrueTrue FalseFalseFalseaceabdacdabe測試用例組測試用例組8(a) 應(yīng)該留意的是,上面應(yīng)該留意的是,上面6種覆蓋測試方法所援用的公共程序只需短短種覆蓋測試方法所援用的公共程序只需短短4行,是一段非常簡單的例如代碼。然而在實(shí)踐測試程序中,一個(gè)簡行,是一段
17、非常簡單的例如代碼。然而在實(shí)踐測試程序中,一個(gè)簡短的程序,其途徑數(shù)目是一個(gè)龐大的數(shù)字。要對其實(shí)現(xiàn)途徑覆蓋測短的程序,其途徑數(shù)目是一個(gè)龐大的數(shù)字。要對其實(shí)現(xiàn)途徑覆蓋測試是很難的。所以,途徑覆蓋測試是相對的,盡能夠把途徑數(shù)緊縮試是很難的。所以,途徑覆蓋測試是相對的,盡能夠把途徑數(shù)緊縮到一個(gè)可接受范圍。到一個(gè)可接受范圍。 當(dāng)然,即使對某個(gè)簡短的程序段做到了途徑覆蓋測試,也不能保證當(dāng)然,即使對某個(gè)簡短的程序段做到了途徑覆蓋測試,也不能保證源代碼不存在其他軟件問題了。其他的軟件測試手段也必要的,它源代碼不存在其他軟件問題了。其他的軟件測試手段也必要的,它們之間是相輔相成的。沒有一個(gè)測試方法可以找盡一切軟
18、件缺陷,們之間是相輔相成的。沒有一個(gè)測試方法可以找盡一切軟件缺陷,只能說是盡能夠多地查找軟件缺陷。只能說是盡能夠多地查找軟件缺陷。aceabdacdabeTrueFalse False TrueTrueFalseTrue False2000,600,600050,600,2000900,600,20002000,200,1000Tc1Tc3Tc4Tc7執(zhí)行途徑執(zhí)行途徑(x=1000)or(x=1000)or(z5000)(z5000)(x100)and(x100)and(y500)(y500) x,y,z x,y,z測試測試用例用例測試用例組測試用例組8(b)4.2 途徑分析測試途徑分析測試4
19、.2.1 4.2.1 控制流圖控制流圖白盒測試是針對軟件產(chǎn)品內(nèi)部邏輯構(gòu)造進(jìn)展測試的,測試人白盒測試是針對軟件產(chǎn)品內(nèi)部邏輯構(gòu)造進(jìn)展測試的,測試人員必需對測試中的軟件有深化的了解,包括其內(nèi)部構(gòu)造、各員必需對測試中的軟件有深化的了解,包括其內(nèi)部構(gòu)造、各單元部分及之間的內(nèi)在聯(lián)絡(luò),還有程序運(yùn)轉(zhuǎn)原理等等。因此單元部分及之間的內(nèi)在聯(lián)絡(luò),還有程序運(yùn)轉(zhuǎn)原理等等。因此這是一項(xiàng)龐大并且復(fù)雜的任務(wù)。為了更加突出程序的內(nèi)部構(gòu)這是一項(xiàng)龐大并且復(fù)雜的任務(wù)。為了更加突出程序的內(nèi)部構(gòu)造,便于測試人員了解源代碼,可以對程序流程圖進(jìn)展簡化,造,便于測試人員了解源代碼,可以對程序流程圖進(jìn)展簡化,生成控制流圖生成控制流圖Control
20、 Flow GraphControl Flow Graph。簡化后的控制流圖。簡化后的控制流圖是由節(jié)點(diǎn)和控制邊組成的。是由節(jié)點(diǎn)和控制邊組成的??刂屏鲌D有以下幾個(gè)特點(diǎn):控制流圖有以下幾個(gè)特點(diǎn):具有獨(dú)一入口節(jié)點(diǎn),即源節(jié)點(diǎn),表示程序段的開場語句;具有獨(dú)一入口節(jié)點(diǎn),即源節(jié)點(diǎn),表示程序段的開場語句;具有獨(dú)一出口節(jié)點(diǎn),即匯節(jié)點(diǎn),表示程序段的終了語句;具有獨(dú)一出口節(jié)點(diǎn),即匯節(jié)點(diǎn),表示程序段的終了語句;節(jié)點(diǎn)由帶有標(biāo)號的圓圈表示,表示一個(gè)或多個(gè)無分支的源程節(jié)點(diǎn)由帶有標(biāo)號的圓圈表示,表示一個(gè)或多個(gè)無分支的源程序語句;序語句;控制邊由帶箭頭的直線或弧表示,代表控制流的方向??刂七呌蓭Ъ^的直線或弧表示,代表控制流的
21、方向。圖4-2 常見的控制流圖 程序環(huán)路復(fù)雜性程序環(huán)路復(fù)雜性 是一種描畫程序邏輯復(fù)雜度的規(guī)范,該規(guī)范是一種描畫程序邏輯復(fù)雜度的規(guī)范,該規(guī)范運(yùn)用根本途徑方法,給出了程序根本途徑集中運(yùn)用根本途徑方法,給出了程序根本途徑集中的獨(dú)立途徑條數(shù),這是確保程序中每個(gè)可執(zhí)行的獨(dú)立途徑條數(shù),這是確保程序中每個(gè)可執(zhí)行語句至少執(zhí)行一次所必需的測試用例數(shù)目的上語句至少執(zhí)行一次所必需的測試用例數(shù)目的上界。界。 給定一個(gè)控制流圖給定一個(gè)控制流圖G,設(shè)其環(huán)形復(fù)雜度為,設(shè)其環(huán)形復(fù)雜度為V(G),在這里引見三種常見的計(jì)算方法來求解在這里引見三種常見的計(jì)算方法來求解V(G)。 (1) V(G)=E-N+2,其中,其中E是控制流圖
22、是控制流圖G中邊的中邊的數(shù)量,數(shù)量,N是控制流圖中節(jié)點(diǎn)的數(shù)目。是控制流圖中節(jié)點(diǎn)的數(shù)目。 (2) V(G)=P+1,其中,其中P是控制流圖是控制流圖G中判別節(jié)中判別節(jié)點(diǎn)的數(shù)目。點(diǎn)的數(shù)目。 (3) V(G)=A,其中,其中A是控制流圖是控制流圖G中區(qū)域的數(shù)中區(qū)域的數(shù)目。由邊和結(jié)點(diǎn)圍成的區(qū)域叫做區(qū)域,當(dāng)在控目。由邊和結(jié)點(diǎn)圍成的區(qū)域叫做區(qū)域,當(dāng)在控制流圖中計(jì)算區(qū)域的數(shù)目時(shí),控制流圖外的區(qū)制流圖中計(jì)算區(qū)域的數(shù)目時(shí),控制流圖外的區(qū)域也應(yīng)記為一個(gè)區(qū)域。域也應(yīng)記為一個(gè)區(qū)域。 4.2.2 獨(dú)立途徑測試獨(dú)立途徑測試 從前面學(xué)過的覆蓋測試一節(jié)中可知,對于一個(gè)較為復(fù)雜的程序要做到完全的途徑覆蓋測試是不能夠?qū)崿F(xiàn)的。既然
23、途徑覆蓋測試無法到達(dá),那么可以對某個(gè)程序的一切獨(dú)立途徑進(jìn)展測試,也就是說檢驗(yàn)了程序的每一條語句,從而到達(dá)語句覆蓋,這種測試方法就是獨(dú)立途徑測試方法。從控制流圖來看,一條獨(dú)立途徑是至少包含有一條在其它獨(dú)立途徑中從未有過的邊的途徑。途徑可以用控制流圖中的節(jié)點(diǎn)序列來表示。例如,在如圖4-3所示的控制流圖中,一組獨(dú)立的途徑是path1:1 - 11path2:1 - 2 - 3 - 4 - 5 - 10 - 1 - 11path3:1 - 2 - 3 - 6 - 8 - 9 - 10 - 1 - 11path4:1 - 2 - 3 - 6 - 7 - 9 - 10 - 1 - 11 途徑 path1,
24、path2,path3,path4組成了控制流圖的一個(gè)根本途徑集。 圖4-3 控制流圖例如獨(dú)立途徑測試的步驟包括3個(gè)方面:導(dǎo)出程序控制流圖求出程序環(huán)形復(fù)雜度設(shè)計(jì)測試用例Test Case程序4-2:1 main ()2 3 int num1=0, num2=0, score=100;4 int i;5 char str;6 scanf (“%d, %cn, &i, &str);7 while (i187-18途徑途徑2 2:7-9-10-16-7-187-9-10-16-7-18途徑途徑3 3:7-9-11-15-16-7-187-9-11-15-16-7-18途徑途徑4 4:
25、7-9-11-13-14-15-16-7-187-9-11-13-14-15-16-7-18根據(jù)上述根據(jù)上述4 4條獨(dú)立途徑,設(shè)計(jì)了測試用例組條獨(dú)立途徑,設(shè)計(jì)了測試用例組9 9,如表,如表4-94-9所示。測試用例組所示。測試用例組9 9中的中的4 4個(gè)測試用例作為程序輸入數(shù)據(jù),個(gè)測試用例作為程序輸入數(shù)據(jù),可以遍歷這可以遍歷這4 4條獨(dú)立途徑。對于源程序中的循環(huán)體,測試條獨(dú)立途徑。對于源程序中的循環(huán)體,測試用例組用例組9 9中的輸入數(shù)據(jù)使其執(zhí)行零次或一次。中的輸入數(shù)據(jù)使其執(zhí)行零次或一次。表4-9 測試用例組9 測試用例測試用例輸入輸入期望輸出期望輸出執(zhí)行路徑執(zhí)行路徑i istrstrnum1n
26、um1num2num2scorescoreTest Case 15 5TT0 00 0100100路徑路徑1 1Test Case 24 4TT1 10 0100100路徑路徑2 2Test Case 34 4AA0 00 0100100路徑路徑3 3Test Case 44 4FF0 01 19090路徑路徑4 4程序4-3:1if (a or b)2then 3 procedure x4else 5 procedure y;6 對應(yīng)的控制流圖如圖4-5所示,程序行1的a,b都是獨(dú)立的判別節(jié)點(diǎn),還有程序行4也是判別節(jié)點(diǎn),所以合計(jì)3個(gè)判別節(jié)點(diǎn)。圖4-5的環(huán)形復(fù)雜度為V(G)=3+1,其中3是圖
27、4-5中判別節(jié)點(diǎn)的數(shù)目。圖4-5 程序4-3的控制流圖 4.2.3 Z途徑覆蓋測試途徑覆蓋測試 Z途徑覆蓋是途徑覆蓋面的一種變體。對于語句較少的簡單程序,途徑覆蓋是具有可行性的。但是對于源代碼很多的復(fù)雜程序,或者對于含有較多條件語句和較多循環(huán)體的程序來說,需求測試的途徑數(shù)目會成倍增長,到達(dá)一個(gè)宏大數(shù)字,以致于無法實(shí)現(xiàn)途徑覆蓋。為理處理這一問題,采用簡化循環(huán)方法的途徑覆蓋就是Z途徑覆蓋。所謂簡化循環(huán)就是減少循環(huán)的次數(shù)。不思索循環(huán)體的方式和復(fù)雜度如何,也不思索循環(huán)體實(shí)踐上需求執(zhí)行多少次,只思索經(jīng)過循環(huán)體零次和一次這兩種情況。這里的零次循環(huán)是指跳過循環(huán)體,從循環(huán)體的入口直接到循環(huán)體的出口。經(jīng)過一次循
28、環(huán)體是指檢查循環(huán)初始值。如圖4-6a和圖4-6b所示表示了兩種最典型的循環(huán)控制構(gòu)造。圖4-6a是先比較循環(huán)條件后執(zhí)行循環(huán)體,循環(huán)體B能夠執(zhí)行也能夠不被執(zhí)行。限定循環(huán)體B執(zhí)行零次和一次,這樣就和圖4-6c的條件構(gòu)造一樣了。圖4-6b是先執(zhí)行循環(huán)體后比較循環(huán)條件。假設(shè)循環(huán)體B被執(zhí)行一次,在經(jīng)過條件判別跳出循環(huán),那么其效果就和圖4-6c的條件構(gòu)造只執(zhí)行右分支的效果一樣了。一旦將循環(huán)構(gòu)造簡化為選擇構(gòu)造后,途徑的數(shù)量將大大減少,這樣就可以實(shí)現(xiàn)途徑覆蓋測試了。對于實(shí)現(xiàn)簡化循環(huán)的程序,可以將程序用途徑樹來表示。當(dāng)?shù)玫侥骋怀绦虻耐緩綐浜螅瑥钠涓?jié)點(diǎn)開場,一次遍歷,再回到根節(jié)點(diǎn)時(shí),將所閱歷的葉節(jié)點(diǎn)名陳列起來,就
29、得到一個(gè)途徑。假設(shè)曾經(jīng)遍歷了一切葉子節(jié)點(diǎn),那就得到了一切的途徑。當(dāng)?shù)玫揭磺械耐緩胶螅擅總€(gè)途徑的測試用例,就可以實(shí)現(xiàn)Z途徑覆蓋測試。圖4-6 循環(huán)構(gòu)造和條件構(gòu)造4.3 其他白盒測試方法其他白盒測試方法 4.3.1 循環(huán)測試循環(huán)測試循環(huán)測試是一種著重循環(huán)測試是一種著重循環(huán)構(gòu)造有效性測試循環(huán)構(gòu)造有效性測試的白盒測試方法。循的白盒測試方法。循環(huán)構(gòu)造測試用例的設(shè)環(huán)構(gòu)造測試用例的設(shè)計(jì)有以下計(jì)有以下4種方式,種方式,如圖如圖4-7所示。所示。圖4-7 循環(huán)測試的方式4.3.2 變異測試變異測試 變異測試是一種缺點(diǎn)驅(qū)動測試,即針對某一類特定程序變異測試是一種缺點(diǎn)驅(qū)動測試,即針對某一類特定程序缺點(diǎn)進(jìn)展的測試
30、,變異測試也是一種比較成熟的排錯(cuò)性測缺點(diǎn)進(jìn)展的測試,變異測試也是一種比較成熟的排錯(cuò)性測試方法。它可以經(jīng)過檢驗(yàn)測試數(shù)據(jù)集的排錯(cuò)才干來判別軟試方法。它可以經(jīng)過檢驗(yàn)測試數(shù)據(jù)集的排錯(cuò)才干來判別軟件測試的充分性。件測試的充分性。假設(shè)對程序假設(shè)對程序P P進(jìn)展一些微小改動而得到程序進(jìn)展一些微小改動而得到程序MPMP,程序,程序MPMP就就是程序是程序P P的一個(gè)變異體。的一個(gè)變異體。假設(shè)程序假設(shè)程序P P在測試集在測試集T T上是正確的,設(shè)計(jì)某一變異體集合:上是正確的,設(shè)計(jì)某一變異體集合:M=MP|MPM=MP|MP是是P P的變異體的變異體 ,假設(shè)變異體集合,假設(shè)變異體集合M M中的每一個(gè)元中的每一個(gè)元
31、素在素在T T上都存在錯(cuò)誤,那么以為源程序上都存在錯(cuò)誤,那么以為源程序P P的正確度較高,否的正確度較高,否那么假設(shè)那么假設(shè)M M中的某些元素在中的某些元素在T T上運(yùn)轉(zhuǎn)正確,那么能夠存在以上運(yùn)轉(zhuǎn)正確,那么能夠存在以下一些情況:下一些情況:lM中的這些變異體在功能上與源程序P是等價(jià)的;l現(xiàn)有的測試數(shù)據(jù)缺乏以找出源程序P與其變異體之間的差別;l源程序P能夠產(chǎn)生缺點(diǎn),而其某些變異體卻是正確的。l可見,測試集T和變異體集合M中的每一個(gè)變異體MP的選擇都是很重要的,它們會直接影響變異測試的測試效果。l總之,對程序進(jìn)展變換的方法多種多樣,詳細(xì)操作要靠測試人員的實(shí)踐閱歷。經(jīng)過變異分析構(gòu)造測試數(shù)據(jù)集的過程是
32、一個(gè)循環(huán)過程,當(dāng)對源程序及其變異體進(jìn)展測試后,假設(shè)發(fā)現(xiàn)某些變異體并不理想,就要適當(dāng)添加測試數(shù)據(jù),直到一切變異體到達(dá)理想形狀,即變異體集合中的每一個(gè)變異體在T上都存在錯(cuò)誤。 4.3.3 程序插裝程序插裝 程序插裝是借助于在被測程序中設(shè)置斷點(diǎn)或打印語句來進(jìn)展測試的方法,在執(zhí)行測試的過程中可以了解一些程序的動態(tài)信息。這樣在運(yùn)轉(zhuǎn)程序時(shí),既能檢驗(yàn)測試的結(jié)果數(shù)據(jù),又能借助插入語句給出的信息掌握程序的動態(tài)運(yùn)轉(zhuǎn)特性,從而把程序執(zhí)行過程中所發(fā)生的重要事件記錄下來。程序插裝設(shè)計(jì)時(shí)主要需求思索三方面要素:(1)需求探測哪些信息;(2)在程序的什么位置設(shè)立插裝點(diǎn);(3)方案設(shè)置多少個(gè)插裝點(diǎn)。 插裝技術(shù)在軟件測試中主要
33、有以下幾個(gè)運(yùn)用:(1)覆蓋分析:程序插裝可以估計(jì)程序控制流圖中被覆蓋的程度,確定測試執(zhí)行的充分性,從而設(shè)計(jì)更好的測試用例,提高測試覆蓋率。(2)監(jiān)控在程序的特定位置設(shè)立插裝點(diǎn),插入用于記錄動態(tài)特性的語句,用來監(jiān)控程序運(yùn)轉(zhuǎn)時(shí)的某些特性,從而排除軟件缺點(diǎn)。(3)查找數(shù)據(jù)流異常程序插裝可以記錄在程序執(zhí)行中某些變量值的變化情況和變化范圍。掌握了數(shù)據(jù)變量的取值情況,就能準(zhǔn)確地判別能否發(fā)生數(shù)據(jù)流異常。雖然數(shù)據(jù)流異??梢杂渺o態(tài)分析器來發(fā)現(xiàn),但是運(yùn)用插裝技術(shù)可以更經(jīng)濟(jì)更簡便,畢竟一切信息的獲取是隨著測試過程附帶得到的。4.4 實(shí)例設(shè)計(jì)實(shí)例設(shè)計(jì) 實(shí)例1運(yùn)用邏輯覆蓋的方法測試程序程序4-4:1 If (x1&am
34、p; y1) then2 z=z*23 If (x=3| z1) then4 y+;運(yùn)用邏輯覆蓋的方法設(shè)計(jì)測試用例組,如表4-10所示。實(shí)例2 運(yùn)用途徑分析的方法測試程序,程序4-5:1 main ()2 3 int flag, t1, t2, a=0, b=0;4 scanf (“%d, %d, %dn, &flag, &t1, &t2);5 while (flag0)6 7 a=a+1;8 if (t1=1)9 then 10 11 b=b+1;12 flag=0;13 14 else 15 16 if (t2=1)17 then b=b-1;18 else a=a
35、-2;19 flag-;20 2122 printf(“a=%d, b=d%n, a, b);23 程序的流程圖如圖4-8所示:圖4-8 程序4-5的流程圖 2.程序的控制流圖如圖4-9所示,其中R1、R2、R3和R4代表控制流圖的4個(gè)區(qū)域。R4代表的是控制流圖外的區(qū)域,也算作控制流圖的一個(gè)區(qū)域。圖4-9 程序4-5的控制流圖 3.運(yùn)用途徑分析的方法設(shè)計(jì)測試用例組。運(yùn)用途徑分析的方法設(shè)計(jì)測試用例組。(1) 根據(jù)程序環(huán)形復(fù)雜度的計(jì)算公式,求出程序途徑集合中根據(jù)程序環(huán)形復(fù)雜度的計(jì)算公式,求出程序途徑集合中的獨(dú)立途徑數(shù)目。的獨(dú)立途徑數(shù)目。公式公式1:V(G)=11-9+2,其中,其中10是控制流圖是控制流圖G中邊的數(shù)量,中邊的數(shù)量,8是控制流圖中節(jié)點(diǎn)的數(shù)目。是控制流圖中節(jié)點(diǎn)的數(shù)目。公式公式2:V(G)=3+1,其中,其中3是控制流圖是控制流圖G中判別節(jié)點(diǎn)的數(shù)中判別節(jié)點(diǎn)的數(shù)目。目。公式公式3:V(G)=4,其中,其中4是控制流圖是控制流圖G中區(qū)域的數(shù)目。中區(qū)域的數(shù)目。因此,控制流圖因此,控制
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園教師工作鑒定多篇
- 區(qū)塊鏈項(xiàng)目合伙協(xié)議書
- 建設(shè)工程招標(biāo)代理公司內(nèi)部管理制度
- 幼兒園消防安全培訓(xùn)制度
- 物流行業(yè)員工請休假制度案例
- 社團(tuán)活動打架調(diào)解協(xié)議書
- 2024至2030年中國鍍鋅電焊網(wǎng)片行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年中國提速降噪型機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年中國切皮輥機(jī)數(shù)據(jù)監(jiān)測研究報(bào)告
- 三人合伙股份分配協(xié)議書
- 浮動碼頭施工方案
- Poka-Yoke防錯(cuò)技術(shù)(完整版)
- 保安交接班記錄表(2)
- 神明—EZflame火焰檢測系統(tǒng)
- 個(gè)人簡歷求職簡歷課件.ppt
- 2018年江蘇高考滿分作文:在母語的屋檐下
- 新青島版五四制2021-2022四年級科學(xué)上冊實(shí)驗(yàn)指導(dǎo)
- 小學(xué)四年級音樂課程標(biāo)準(zhǔn)
- 民用機(jī)場竣工驗(yàn)收質(zhì)量評定標(biāo)準(zhǔn)
- 雙向細(xì)目表和單元測試卷及組卷說明
- 離子色譜法測定空氣中二氧化硫
評論
0/150
提交評論