Branch Coverage 深入解析
白箱測試中的分支覆蓋率原理與實踐指南
在白箱測試中,Branch Coverage(分支覆蓋率)是衡量測試完整性的關鍵指標。它比語句覆蓋率更嚴格,能有效揭露隱藏在條件判斷中的邏輯缺陷。
什麼是 Branch Coverage?
Branch Coverage 又稱決策覆蓋率(Decision Coverage),要求每個條件判斷的 True 與 False 分支都必須被至少一個測試案例執行過。舉例來說,一個 if-else 語句,兩條路徑都需走過才算覆蓋。與語句覆蓋率(Statement Coverage)相比,後者只需執行到該行程式碼即可,無法保證所有分支被測試。當程式含有複合條件(如 A && B),Branch Coverage 關注整體決策結果的 True/False,而非各子條件的獨立組合。
如何計算與提升分支覆蓋率?
計算公式為:已執行分支數 ÷ 總分支數 × 100%。一個含有 3 個 if 的函式共有 6 條分支,若測試案例只覆蓋 4 條,覆蓋率即為 67%。業界普遍以 80% 以上為基準門檻,關鍵模組(如金融、安全)則要求達 100%。提升覆蓋率的實務做法是:針對每個條件判斷,設計能分別觸發 True 與 False 的獨立測試案例,並搭配覆蓋率工具(如 Istanbul/nyc、JaCoCo)自動回報未覆蓋的分支。
function getDiscount(age) {
if (age >= 65) return 0.2; // Branch A: True
else return 0; // Branch A: False
}
// 測試案例 1:age = 70 → 覆蓋 True 分支
// 測試案例 2:age = 30 → 覆蓋 False 分支
💡 重點整理
- 定義:每個條件判斷的 True/False 兩條分支都必須被執行。
- 嚴格度:比 Statement Coverage 嚴格,但比 Condition Coverage 寬鬆。
- 覆蓋率門檻:一般專案 ≥ 80%,關鍵系統要求 100%。
- 工具支援:Istanbul(JavaScript)、JaCoCo(Java)可自動生成報告。
Branch Coverage 是提升程式品質的務實選擇。從今天起,在 CI/CD 流程中加入分支覆蓋率門檻,讓每一條邏輯路徑都經過驗證,防患於未然。
📚 參考文獻
- ISTQB Glossary — Branch Coverage 官方定義,國際軟體測試資格委員會標準詞彙。
- Istanbul / nyc — JavaScript 程式碼覆蓋率工具官方文件,支援分支覆蓋率報告。
- JaCoCo —