基本介紹
- 中文名:邏輯覆蓋
- 外文名:Logic cover
- 術語拼音:Luójí Fùgài
- 分類:白盒測試
術語概述,術語分類,舉例,術語詳解與舉例,語句覆蓋,判定覆蓋(分支覆蓋),條件覆蓋,判定條件覆蓋,條件組合覆蓋,路徑覆蓋,修正條件判定覆蓋,
術語概述
術語分類
邏輯覆蓋是通過對程式邏輯結構的遍歷實現程式的覆蓋。它是一系列測試過程的總稱,這組測試過程逐漸進行越來越完整的通路測試。
根據覆蓋目標的不同和覆蓋源程式語句的詳盡程度,邏輯覆蓋又可分為:
1.語句覆蓋(SC)
2. 判定覆蓋(DC)
3. 條件覆蓋(CC)
4. 條件/判定覆蓋(CC)
5. 條件組合覆蓋(CDC)
6.多條件覆蓋(MCC)
7.修正判定條件覆蓋(MCDC)
8. 點覆蓋
9. 邊覆蓋
10.路徑覆蓋
幾種邏輯覆蓋標準發現錯誤的能力呈由弱至強的變化。
舉例
public class Coverage
{
public void Main()
{
1 System.out.println("start main function:path a...");
2 int A,B,X;
3 if(A>1 and B==0){
4 X=X/A;
5 System.out.println("path c");
5 } else {
6 System.out.println("path b");
7 }
8 if(A==2 or X>1){
9 X=X+1;
10 System.out.println("path e");
11 } else {
12 System.out.println("path d");
13 }
14 System.out.println("end main function.");
}
}
術語詳解與舉例
語句覆蓋
語句覆蓋 SC(Statement Coverage),就是設計若干個測試用例,運行被測程式,使得程式中每一可執行語句至少執行一次。這裡的“若干個”,意味著使用測試用例越少越好。語句覆蓋在測試中主要發現缺陷或錯誤語句。
例如上邊的Coverage類代碼,從path a到path c再到path e的路徑就是所有可執行的語句路徑,所以選擇path ace路徑設計測試用例即可覆蓋所有可執行語句。
語句覆蓋率的公式:語句覆蓋率=被評價到的語句數量/可執行的語句總數 x 100%
語句覆蓋的缺點:對程式執行邏輯的覆蓋很低。
判定覆蓋(分支覆蓋)
判定覆蓋DC(Decision coverage),有時也稱分支覆蓋,就是指設計若干測試用例,運行被測程式,使得每個判定的取真分支和取假分支至少評價一次。例如上邊的Coverage類代碼,path ace,path abd,path abe,path acd 四條路徑均是符合判定覆蓋要求的路徑。
判定覆蓋的公式: 判定覆蓋率=被評價到的判定分支個數/判定分支的總數X100%
判定路徑覆蓋率(DDP)=被評價到的判定路徑數量/判定路徑的總數X100%
例如上邊的Coverage類代碼的第8行“if(A==2 or X>1)”,
條件覆蓋
條件覆蓋率的公式:條件覆蓋率=被評價到的條件取值的數量/條件取值的總數X100%
判定條件覆蓋
判定條件覆蓋CDC(Condition/ Decision Coverage),設計足夠多的測試用例,使得判定中的每個條件的所有可能(真/假)至少出現一次,並且每個判定本身的判定結果也至少出現一次。
判定條件覆蓋率的公式: 條件判定覆蓋率=被評價到的條件取值和判定分支的數量/(條件取值總數+判定分支總數)
例如上邊的Coverage類代碼,不僅考慮到path ace,path abd,path abe,path acd 四條分支路徑(判定覆蓋),也考慮到了“(A>1 and B==0)”和“(A==2 or X>1)”兩個條件中的每個表達式的取值(條件覆蓋)。
判定條件覆蓋的缺點:沒有考慮單個判定對整體結果的影響,無法發現邏輯錯誤。
補充:修正判定條件覆蓋
修正判定條件覆蓋單元的入口與出口必須至少被調用一次,程式中判斷的每一個分支必須至少被執行一次。對於程式中通過邏輯運算(AND,OR等)組成判斷的基本布爾條件,每個條件必須取遍所有可能的值且每一個條件對判斷的結果具有獨立的作用。
條件組合覆蓋
例如上邊的Coverage類中第8行“if(A==2 or X>1)”代碼,所有可能的條件組合為:
條件組合覆蓋率的公式:條件組合覆蓋率=被評價到的條件取值組合的數量/條件取值組合的總數
條件組合覆蓋的缺點:判定語句較多時,條件組合值比較多。
路徑覆蓋
路徑覆蓋率的公式:路徑覆蓋率=被執行到的路徑數/程式中總的路徑數。
優點:路徑覆蓋是覆蓋率最高的一種覆蓋技術。
路徑覆蓋測試步驟:
3. 生成路徑圖;
4. 進行路徑編碼;
5. 經過解碼得到執行的路徑;
7. 修正的條件判斷覆蓋率(MC/DC)
修正條件判定覆蓋
每一個程式模組的入口和出口點都要考慮至少要被調用一次,每個程式的判定到所有可能的結果值要至少轉換一次;程式的判定被分解為通過邏輯操作符(and,or)連線的bool條件,每個條件對於判定的結果值是獨立的。