跳到主要內容

Statement Coverage 完全解析:白箱測試最基礎的覆蓋率指標與實務應用

在軟體測試中,Statement Coverage(陳述句覆蓋率)是白箱測試的入門指標,衡量測試案例是否執行了程式中每一條可執行陳述句,是評估測試完整性的最基礎基準。

什麼是 Statement Coverage?

Statement Coverage 的計算公式為:已執行陳述句數 ÷ 總可執行陳述句數 × 100%。目標是讓覆蓋率達到 100%,即程式內每一行可執行的程式碼至少被跑過一次。需要注意的是,註解、空白行、宣告語句不計入統計範圍,僅有具實際運算或流程控制意義的陳述句才納入計算。此指標在所有覆蓋率標準中門檻最低,能快速找出從未被執行過的死碼(Dead Code),是提升程式碼品質的第一步。

Statement Coverage 的限制與實務定位

Statement Coverage 最常被詬病的缺點是無法保證所有分支邏輯都被驗證。例如一段 if/else 結構,即使只走 if 分支,Statement Coverage 仍可能顯示 100%,但 else 的邏輯錯誤將被完全忽略。因此在實務上,Statement Coverage 通常作為測試的最低門檻,而非最終目標。大多數業界規範(如 DO-178C 航空軟體標準)會要求搭配 Branch CoverageMC/DC Coverage 來補強其不足,以達到更嚴謹的測試品質。

def calculate_discount(price, is_member):
    discount = 0                    # 陳述句 1
    if is_member:                   # 陳述句 2
        discount = price * 0.1      # 陳述句 3(僅 is_member=True 才執行)
    return price - discount         # 陳述句 4

# 只用 is_member=True 測試:Statement Coverage = 100%,但 else 路徑未驗證

💡 重點整理

  • 計算方式:已執行陳述句 ÷ 總可執行陳述句,目標 100%。
  • 最大價值:快速識別從未執行的死碼,降低程式碼冗餘風險。
  • 核心限制:無法覆蓋所有條件分支,100% 不代表邏輯無誤。
  • 實務建議:作為測試基線,搭配 Branch Coverage 共同使用。

Statement Coverage 是每位開發者都應掌握的測試基礎。理解它的能力邊界,才能在不同專案風險等級下,選擇最合適的覆蓋率策略,讓測試資源發揮最大效益。

📚 參考文獻

  1. ISTQB Glossary — Statement Coverage 官方定義與說明
  2. Paul Ammann & Jeff Offutt, Introduction to Software Testing — 覆蓋率指標的學術權威教材
  3. Martin Fowler — TestCoverage(測試覆蓋率實務觀點)

⚠️ 本文內容基於撰寫時的最新資訊,實際

留言