White-Box Testing
白盒測(cè)試是關(guān)注測(cè)試用例覆蓋程序邏輯(源代碼)的程度。最終的白盒測(cè)試是執(zhí)行程序中的每個(gè)路徑。但對(duì)于大多數(shù)的程序(例如帶有循環(huán)的程序),完全意義上的全路徑覆蓋是不現(xiàn)實(shí)的。
Logic Coverage Testing
你可能會(huì)覺(jué)得一個(gè)值得追求的目標(biāo)是至少執(zhí)行程序中的每一條語(yǔ)句。不幸的是,這是一個(gè)很弱的標(biāo)準(zhǔn)。假設(shè)下面這個(gè)圖表示一個(gè)要測(cè)試的小程序。相應(yīng)的Java代碼片段如下:
你可以通過(guò)編寫一條單獨(dú)的測(cè)試用例來(lái)執(zhí)行到路徑ace。也就是說(shuō),在a點(diǎn)設(shè)置A=2,B=0和X=3,每個(gè)語(yǔ)句將被執(zhí)行一次。
不幸的是,這個(gè)標(biāo)準(zhǔn)相當(dāng)差。
第一個(gè)條件可能是或而不是與。如果是這樣,這個(gè)bug將不會(huì)被檢測(cè)到。
第二個(gè)條件如果是是X>0,這個(gè)bug也不會(huì)被檢測(cè)到。
此外,程序中有一條路徑,X沒(méi)有改變(路徑abd)。如果這里存在一個(gè)錯(cuò)誤,也不會(huì)被檢測(cè)到。
更強(qiáng)的邏輯覆蓋標(biāo)準(zhǔn)稱為條件覆蓋或分支覆蓋。這個(gè)標(biāo)準(zhǔn)規(guī)定,你必須編寫足夠的測(cè)試用例,使每個(gè)條件至少有一個(gè)true和一個(gè)false。以及每個(gè)分支方向必須至少遍歷一次。分支或條件語(yǔ)句的例子包括switch-case、do-while和if-else語(yǔ)句,以及在某些編程語(yǔ)言(如Fortran)中的多路徑GOTO語(yǔ)句。
在上圖中,分支覆蓋可以用兩個(gè)測(cè)試用例覆蓋路徑ace和abd,或者覆蓋路徑acd和abe。如果我們選擇后者,那么兩個(gè)測(cè)試用例的輸入分別是A=3, B=0, X=3和A=2, B=1, X=1。條件覆蓋是比語(yǔ)句覆蓋更強(qiáng)的標(biāo)準(zhǔn),但它仍然很弱。因?yàn)?,此時(shí)我們?nèi)匀粵](méi)有探索到x沒(méi)有改變的路徑(abd)。
如果第二個(gè)判斷有誤(寫成X<1而不是X>1),那么這個(gè)bug就不會(huì)被前面的測(cè)試用例(A=2, B=1, X=1)檢測(cè)到。
有時(shí)比分支覆蓋更強(qiáng)的標(biāo)準(zhǔn)是條件覆蓋。在這種情況下,你需要編寫足夠的測(cè)試用例來(lái)確保每個(gè)條件至少有一次取得所有可能的結(jié)果。上圖中有四個(gè)條件:A>1, B=0, A=2, 和X>1。因此,需要足夠多的測(cè)試用例來(lái)覆蓋以下情況:
在點(diǎn)a處A>1, A<=1, B=0, 和B!=0;
在點(diǎn)b處A=2, A!=2, X>1, 和X<=1。
盡管條件覆蓋標(biāo)準(zhǔn)乍一看似乎滿足分支覆蓋標(biāo)準(zhǔn),但并不總是如此。例如,兩個(gè)測(cè)試用例 A = 1,B = 0,X = 3 和A = 2,B = 1,X = 1 涵蓋了所有條件結(jié)果,但只涵蓋了四個(gè)分支中的兩個(gè)(它們都涵蓋了路徑abe,因此不會(huì)執(zhí)行第一個(gè)分支的true結(jié)果和第二個(gè)分支的false結(jié)果)。
擺脫這種困境的明顯方法是一種稱為分支+條件覆蓋的標(biāo)準(zhǔn)。它需要足夠的測(cè)試用例,以便每個(gè)分支判斷中的每個(gè)條件至少有一次取得所有可能的結(jié)果。
最后,大家再思考下,現(xiàn)有的仿真驗(yàn)證的代碼覆蓋率有哪些類型的代碼覆蓋率,其實(shí)是會(huì)考慮所有分支里面的所有條件的輸入和輸出結(jié)果的組合的。
另外請(qǐng)?jiān)偎伎枷?,功能覆蓋率能夠覆蓋哪些代碼覆蓋率無(wú)法描述的場(chǎng)景組合呢?
編輯:黃飛
-
軟件測(cè)試
+關(guān)注
關(guān)注
2文章
231瀏覽量
18606 -
白盒測(cè)試
+關(guān)注
關(guān)注
1文章
14瀏覽量
10625 -
芯片驗(yàn)證
+關(guān)注
關(guān)注
5文章
34瀏覽量
47238
原文標(biāo)題:從軟件測(cè)試看芯片驗(yàn)證-白盒測(cè)試
文章出處:【微信號(hào):數(shù)字芯片實(shí)驗(yàn)室,微信公眾號(hào):數(shù)字芯片實(shí)驗(yàn)室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論