一般的白盒測試,用例設計的評估標準就是**覆蓋度。覆蓋度不能光靠條件湊,unit test的**也是有具體的分析方法的,不要有冗餘。
常見的覆蓋有六種:語句覆蓋,判定覆蓋,條件覆蓋,判定/條件覆蓋,組合覆蓋和路徑覆蓋
「最弱覆蓋」保證每個語句至少被執行一次,不考慮條件和分支
func foo(a , b int) int
那麼我們只需要乙個testcase:a=2, b=1
就能滿足**覆蓋率到100%,但是有明顯問題,當b=0時,會有panic: runtime error: integer divide by zero
判定覆蓋的測試用例要保證每乙個分支都被執行至少一次,所以我們需要以下3個testcase
testcase1: a=1,b=1
testcase2: a=-1,b=-1
testcase3: a=2,b=-1
這樣三個testcase就覆蓋了i分支,ii分支,iii分支。進行判斷分支覆蓋的情況,實際上就是對於最終結果進行判斷,因此我們可以根據最終結果的數量來判斷testcase數量(i、ii、iii分支)
條件覆蓋要求設計的測試用例能覆蓋每個判定的真假值情況。即每個條件有乙個真值,乙個假值
以上乙個流程圖為例,一共有4個條件判斷
a>0, a<0, b>0, b<0
在甲條件處,我們需要考慮a>0, a≤0, b>0, b≤0
在乙條件處,我們需要考慮a<0, a≥0, b≥0, b<0
因此需要4個testcase:
testcase1: a=1,b=1 甲條件的a>0 true和b>0 true, 乙條件的a<0 false和b<0 false
testcase2: a=-1,b=-1 甲條件的a>0 false和b>0 false, 乙條件的a<0 true和b<0 true
testcase3: a=-1,b=1 甲條件的a>0 false和b>0 true, 乙條件的a<0 true和b<0 false
testcase4: a=1,b=-1 甲條件的a>0 true和b>0 false, 乙條件的a<0 false和b<0 true
總的來說條件覆蓋比判定覆蓋更強,使得判定中的每個條件都取到了不同的結果。缺陷在於只考慮判定條件,沒有考慮判定結果。因此條件覆蓋不保證判定覆蓋
判定條件覆蓋就是條件覆蓋 + 判定覆蓋,彌補了兩者的缺點,包含了判定條件和判定結果兩部分。
但是沒有考慮到條件組合的情況,如果用笛卡爾乘積的方法進行組合,容易造成冗餘
簡單來說 組合覆蓋= 條件覆蓋 + 判定覆蓋 + 判定/條件覆蓋
就是設計出來的測試用例需要讓每個判定中的各個條件的可能組合至少出現一次。
testcase1: a=1, b=1
testcase1: a=-1, b=-1
testcase1: a=-1, b=1
testcase1: a=1, b=-1
相對來說,測試用例的數量比較多
覆蓋度最高,包含每條路徑。優缺點明顯,優點:對於所有可能路徑進行覆蓋。缺點:龐大且複雜的測試用例,用例數量呈指數級增長,實際工作中可操作性不強。
一般來說我們做到組合覆蓋就差不多了,測試用例多的問題很好解決。就是開發自己跑ut的時候多加點用例,發版本時候把ut刪去就行了。
同時我希望讀者能理解到乙個點,為什麼推薦程式裡面有if條件判斷巢狀越少越好。
白盒測試 六種覆蓋方法
定義 白盒測試又稱結構測試,透明盒測試 邏輯驅動測試或基於 的測試。白盒測試是一種測試用例設計方法,白盒指的是程式的內部結構和運作機制是可見的。白盒測試的目的 通過檢查軟體內部的邏輯結構,對軟體中的邏輯路徑進行覆蓋測試 在程式不同地方設定檢查點,檢查程式的狀態,以確定實際執行狀態與預期狀態是否一致。...
白盒測試哪種測試效果好 白盒測試之六種覆蓋有哪些?
1 語句覆蓋 使程式中的每個可執行語句都能執行一次的測試用例 2 判定覆蓋 分支覆蓋 對於判斷語句,在設計用例的時候,要設計判斷語句結果為true和false的兩種情況 3 條件覆蓋 設計用例時針對判斷語句裡面每個條件表示式true 和 false各取值一次,不考判斷語句的計算結果 4 判定條件覆蓋...
白盒測試中的六種覆蓋方法
1 語句覆蓋 語句覆蓋是最起碼的結構覆蓋要求,語句覆蓋要求設計足夠多的測試用例,使得程式中每條語句至少被 執行一次。2 判定覆蓋 判定覆蓋又稱為分支覆蓋,它要求設計足夠多的測試用例,使得程式中每個判定至少有一次為真值,有一次為假值,即 程式中的每個分支至少執行一次。每個判斷的取真 取假至少執行一次。...