int function(bool a,bool b,bool c){ int x; x=0; if(a&&(b||c)){ x=1; return x; } }
1、語句覆蓋(SC)
選擇足夠多的測試數據,使得被測程序中的每條語句至少執行一次。
測試用例:a=T,b=T,c=T
2、判斷覆蓋(DC)
設計足夠的測試用例,使得程序中的每個判定至少都獲得一次真值或假值。或者使得程序中的每一個取真分支和取假分支至少經歷一次,因此判定覆蓋又稱為分支覆蓋。
序號 | a | b | c | a&&(b||c) | a||(b||c) | 判定覆蓋率 |
1 | T | T | T | T | T | 50 |
2 | F | F | F | F | F | 50 |
上述兩組測試用例不僅滿足了判定覆蓋,而且滿足了語句覆蓋,從這一點看,判定覆蓋要比語句覆蓋更強一些,但是同樣的,假如這一程序段中判定的邏輯運算有問題。判定的第一個運算符 && 錯寫成運算符 || 。或者第二個運算符 || 錯寫成運算符 &&,這時使用上面的測試用例可以達到100%的判定覆蓋,仍然無法發現上述的邏輯問題。
3、條件覆蓋(CC)
構造一組測試用例,使得每一判定語句中,每個邏輯條件的可能是至少滿足一次。
用例一:
a=F,b=T,c=F
a=T,b=F,c=T
用例一在滿足條件覆蓋的同時,把判定的兩個分支也覆蓋了。是否可以說,達到了條件覆蓋就必然實現了判定覆蓋呢?
用例二:
a=F,b=T,c=T
a=T,b=F,c=F
用例二覆蓋了條件的測試用例並沒有覆蓋分支。
4、條件判定組合覆蓋(CDC)
設計足夠的測試用例,使得判定中的每個條件的所有可能真或假,至少出現一次,並且每個判定本身的判定結果真或假也至少出現一次。
5、多條件覆蓋(MCC)
設計足夠多的測試用例,使得每個判定中條件的各種可能組合都至少出現一次。顯然,滿足多條件覆蓋的測試用例是一定滿足,判定覆蓋、條件覆蓋、條件判定組合覆蓋的。
測試用例指數級增加(2**conditions)
6、修正條件覆蓋(MCDC)
它要求滿足兩個條件,首先,每一個程序模塊的入口和出口都要考慮至少要被調用一次,每個程序的判定到所有可能的結果值要至少轉換一次;其次程序的判定被分解為通過邏輯操作符(and、or)連接的bool條件,每個條件對於判定的結果值是獨立的。
從表中我們可以看出,布爾變量a可以通過用例1和5達到MCDC的要求(用例2和6或者用例3和7也可以滿足相應要求)。變量b也可以通過用例2和4 達到MCDC的要求。變量c可以通過用例3和4達到MCDC的要求。因此用例集{1,2,3,4,5}即可滿足MCDC的要求。顯而易見,這不是唯一的用力結合
a 1,5 (TF) 2,6(TF) 3,7(TF) 4,8(FF) ---->符合條件:1,5 (TF) 2,6(TF) 3,7(TF)
b 1,3 (TT) 2,4(TF) 5,7(FF) 6,8(FF) ---->符合條件: 2,4(TF)
c 1,2(TT) 3,4(TF) 5,6(FF) 7,8(FF) ---->符合條件: 3,4(TF)
用例集:{1,2,3,4,5}
{2,3,4,6}
{2,3,4,7}