跳到主要內容

Branch Coverage 深入解析:白箱測試中的分支覆蓋率原理與實踐指南

Branch Coverage 深入解析

白箱測試中的分支覆蓋率原理與實踐指南

在白箱測試中,Branch Coverage(分支覆蓋率)是衡量測試完整性的關鍵指標。它比語句覆蓋率更嚴格,能有效揭露隱藏在條件判斷中的邏輯缺陷。

什麼是 Branch Coverage?

Branch Coverage 又稱決策覆蓋率(Decision Coverage),要求每個條件判斷的 TrueFalse 分支都必須被至少一個測試案例執行過。舉例來說,一個 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 流程中加入分支覆蓋率門檻,讓每一條邏輯路徑都經過驗證,防患於未然。

📚 參考文獻

  1. ISTQB Glossary — Branch Coverage 官方定義,國際軟體測試資格委員會標準詞彙。
  2. Istanbul / nyc — JavaScript 程式碼覆蓋率工具官方文件,支援分支覆蓋率報告。
  3. JaCoCo —