判定覆蓋
出自 MBA智库百科(https://wiki.mbalib.com/)
判定覆蓋(Decision Coverage)
目錄 |
判定覆蓋是指設計若幹個測試用例,運行被測程式,使得程式中每個判定條件的取真分支和取假分支至少評價一次。
判定覆蓋具有比語句覆蓋更強的測試能力,而且具有和語句覆蓋一樣的簡單性,無需細分每個判定就可以得到測試用例。但是大部分的判定語句是由多個邏輯條件組合而成(如,判定語句中包含AND、OR、CASE),若僅僅判斷其整個最終結果,而忽略每個條件的取值情況,必然會遺漏部分測試路徑。
判定覆蓋是設計足夠多的測試用例,使得程式中的每一個判斷至少獲得一次“真”和一次“假”,即使得程式流程圖中的每一個真假分支至少被執行一次。
使設計的測試用例保證程式中每個判斷的每個取值分支(ture or false)至少經歷一次
【優點】:分支(判定)覆蓋具有比語句覆蓋更強的測試能力。同樣分支(判定)覆蓋也具有和語句覆蓋一樣的簡單性,無須細分每個判定就可以得到測試用例。
【缺點】:往往大部分的分支(判定)語句是由多個邏輯條件組合而成,若僅僅判斷其整個最終結果,而忽略每個條件的取值情況,必然會遺漏部分測試路徑。判定覆蓋仍是弱的邏輯覆蓋。
判定覆蓋
CASE讓判斷1和2都分別能出現 true, false .
CASE1:
A=TRUE, B=TRUE——判斷1= True;
C=TRUE,D=TRUE——判斷2=TRUE;
CASE2:
A=TRUE,B=TRUE——判斷1=TRUE
C=FALSE,D=FALSE——判斷2=FALSE
CASE3:
A=FALSE,B=TRUE——判斷1=FALSE
判斷2不執行,
這裡B=FALSE情況就沒覆蓋到。
修訂的條件/判定覆蓋(Modified Condition/Decision Coverage)
MC/DC(修訂的條件/判定覆蓋,Modified Condition/Decision Coverage)準則是一種實用的軟體結構覆蓋率測試準則, 已被廣泛地應用於軟體驗證和測試過程中
下舉例來詳細說明MC/DC下測試用例的設計準則:
if(A( ) || B ( ) && C( )){
do action1();
}else{
do action2( );
}
A( ),B( ),C( )都是一個條件,而(A( ) || B( ) && C( ))叫一個Decision,如果是判定覆蓋的話只需兩個case就能覆蓋,就是讓這個decision為true和false各一次
如果是MC/DC的話就得四個case,而且只比條件數目多一個而已,怎麼計算的呢?
定義: 在每個判定中的每個條件都曾獨立的影響判定的結果至少一次, (獨立影響意思是在其他的條件不變的情況下,改變一個條件)
那麼就有如下測試用例(true和false的順序就按照A( )、B( )、C( )來):
A( )對結果獨立影響,那麼就要求"B( )"和"C( )"中至少一個為false,於是有:
A( )獨立影響且decision為true:
true false false
true false true
true true false
A( )獨立影響且decision為false:
false false false
false false true
false true false
B( )對結果獨立影響,那麼就要求"A( )"為false,"C( )"為true,於是有:
B( )獨立影響且decision為true:
false true true
B( )獨立影響且decision為false:
false false true
C( )對結果獨立影響,那麼就要求"A( )"為false,"B( )"為true,於是有:
C( )獨立影響且decision為true:
false true true
C( )獨立影響且decision為false:
false true false
需要進一步補充說明的是,MC/DC測試的主要目的是為了防止在組合條件表達式中包含邊際效應(side effect),如以下語句:
if (A( )||B( )||C()){
statements...;
}
當B( )函數或C( )函數具備邊際效應時,MC/DC測試存在非常大的必要性;
原則上不應在組合條件表達式中調用包含邊際效應的函數。