白盒測試方法
1. 基本概念
白盒測試使用被測單元內(nèi)部如何工作的信息,允許測試人員對程序內(nèi)部邏輯結(jié)構(gòu)及有關(guān)信息來設(shè)計和選擇測試用例,對程序的邏輯路徑進(jìn)行測試。基于一個應(yīng)用代碼的內(nèi)部邏輯知識,測試是基于覆蓋全部代碼、分支、路徑、條件。
單元測試屬于白盒測試。
技術(shù)參數(shù)選取范圍
任務(wù)二,單元測試項目中明確了比賽考范圍,所以說需要了解和熟悉一下測試方法的概念和測試用例設(shè)計方法。
1)語句覆蓋法
2)判定覆蓋法
3)條件覆蓋法
4)判定條件覆蓋法
5)條件組合覆蓋法
6)路徑覆蓋法
7)基本路徑覆蓋法
2. 白盒測試的主要方法
2.1 邏輯驅(qū)動測試
① 語句覆蓋(Statement Coverage)
語句覆蓋是最基本的結(jié)構(gòu)覆蓋要求,語句覆蓋要求設(shè)計足夠多的測試用例,使得程序中每條語句至少被執(zhí)行一次。
測試用例設(shè)計過程
測試源代碼如下所示
第一步將源代碼轉(zhuǎn)換為程序流程圖

流程圖中綠色底紋的菱形框和矩形框是需要考慮的語句塊,其他菱形框和矩形框默認(rèn)都會執(zhí)行,所以不需要考慮。
接下來,我們需要設(shè)計測試用例,測試用例需要完成語句塊 ①②③④ 的覆蓋。
② 判定覆蓋(Decision Coverage)
設(shè)計足夠多的測試用例,在測試過程中保證每個判定至少有一次為真值,有一次為假值。
還是以上面的代碼和流程圖為例設(shè)計滿足判定覆蓋的測試用例
③ 條件覆蓋(Condition Coverage)
設(shè)計足夠多的測試用例,使判定語句中的每個邏輯條件取真值與取假值至少出現(xiàn)一次。
還是以上面的代碼和流程圖為例設(shè)計滿足判定覆蓋的測試用例
④ 判定條件覆蓋(Condition/Decision?Coverage)
設(shè)計足夠多的測試用例,使得判定語句中所有條件的可能取值至少出現(xiàn)一次,同時,所有判定語句的可能結(jié)果也至少出現(xiàn)一次。
還是以上面的代碼和流程圖為例設(shè)計滿足判定覆蓋的測試用例
⑤ 條件組合覆蓋(Multiple Condition Coverage)
通過執(zhí)行足夠的測試用例,使得程序中每個判定所有可能的條件取值組合都至少出現(xiàn)一次。
注意:一定區(qū)分判定和條件的區(qū)別,其中,(x>=80 && y>=80)是判定,x>=80 和 y>=80 是條件。
⑥ 路徑覆蓋(Path?Coverage)
選取足夠多測試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次(如果程序圖中有環(huán),則要求每個環(huán)至少經(jīng)過一次)。

針對上述測試代碼,設(shè)計的?語句覆蓋?測試用例和?路徑覆蓋?測試用例是一樣,但是這并不能說明兩者是等同的,可以嘗試通過語句覆蓋和路徑覆蓋設(shè)計如下測試代碼的測試用例。

2.2 基本路徑測試

????????在實踐中,一個不太復(fù)雜的程序,其路徑都是一個龐大的數(shù)字,要在測試中覆蓋所有的路徑是不現(xiàn)實的。為了解決這一難題,只得把覆蓋的路徑數(shù)壓縮到一定限度內(nèi)(例如,程序中的循環(huán)體只執(zhí)行一次)?;韭窂綔y試就是這樣一種測試方法,它在程序控制圖的基礎(chǔ)上,通過分析控制構(gòu)造的環(huán)行復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計測試用例的方法。設(shè)計出的測試用例要保證在測試中程序的每一個可執(zhí)行語句至少執(zhí)行一次。
2.21 測試流程

畫出程序的控制流圖。
計算程序的環(huán)形復(fù)雜度,導(dǎo)出程序基本路徑集中的獨立路徑條數(shù),這是確定程序中每個可執(zhí)行語句至少執(zhí)行一次所必須達(dá)到的測試用例數(shù)目。
導(dǎo)出基本路徑集,確定程序的獨立路徑。
根據(jù)(3)中的獨立路徑,設(shè)計測試用例的輸入數(shù)據(jù)和預(yù)期輸出。
測試代碼如下:
2.22?控制流圖

????????程序流程圖又稱框圖,是我們最熟悉,也是最容易理解的一種程序控制結(jié)構(gòu)的圖形表示,在這種圖上的框里面常常表明了處理要求或者條件,但是,這些標(biāo)注在做路徑分析時是不重要的。為了更加突出控制流的結(jié)構(gòu),需要對程序流程圖做一些簡化------稱作 "控制流圖",簡稱 "流圖"。在控制流圖中只有兩種圖形符號,它們是:節(jié)點和邊。
????????節(jié)點:① 標(biāo)有編號的圓圈 ② 程序流程圖中矩形所表示的處理 ③ 菱形表示的兩個甚至多個出口判斷 ④ 多條流線相交的匯合點。節(jié)點可代表一個活多個語句,一個處理框和一個判定框(假設(shè)不包含復(fù)合條件),在選擇或多分支結(jié)構(gòu)中,分支的匯聚處應(yīng)有一個匯聚節(jié)點。
????????邊:① 箭頭 ② 與程序流程圖中的流線一致,表明了控制的順序 ③ 控制流線通常標(biāo)有名字。
????????區(qū)域:邊和節(jié)點圍成的范圍叫做區(qū)域,當(dāng)對區(qū)域計數(shù)時,圖形外的區(qū)域也應(yīng)該記為一個區(qū)域。
參考代碼程序流程圖和控制流圖如下所示:

2.23 程序環(huán)路復(fù)雜度

? ? ? ? 程序環(huán)路復(fù)雜度 V(G) ,在進(jìn)行程序的基本路徑測試時,從程序的環(huán)路復(fù)雜性可導(dǎo)出程序基本路徑集合中的?獨立路徑條數(shù)(從控制流圖來看,一條獨立路徑是至少包含有一條在其他獨立路徑中從未有過的邊的路徑)。程序的環(huán)路復(fù)雜性給出了程序基本路徑集中的獨立路徑條數(shù),這是確保程序中每個可執(zhí)行語句至少執(zhí)行一次所必須的 測試用例數(shù)目?的上界。
程序環(huán)路復(fù)雜度計算方法(三種):
① 流圖中區(qū)域的數(shù)量 ② V(G) = E-N+2(E 是流圖中邊的數(shù)量,N 是流圖中節(jié)點的數(shù)量)③ V(G) = P+1(P 是流圖中判定節(jié)點的數(shù)量)。
參考代碼程序環(huán)路復(fù)雜度:V(G) = 4
2.24 導(dǎo)出基本路徑集,確定程序的獨立路徑

上述控制流圖環(huán)路復(fù)雜度 V(G) = 4,所以可以導(dǎo)出 4 條獨立路徑:
(4-10-11)
(4-5-6-10-11)
(4-5-7-8-12-4-10-11)
(4-5-7-9-12-4-10-11)
2.25 根據(jù)獨立路徑設(shè)計測試用例

根據(jù)測試路徑集設(shè)計測試用例如下: