在軟體測試中,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 Coverage 或 MC/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 是每位開發者都應掌握的測試基礎。理解它的能力邊界,才能在不同專案風險等級下,選擇最合適的覆蓋率策略,讓測試資源發揮最大效益。
📚 參考文獻
- ISTQB Glossary — Statement Coverage 官方定義與說明
- Paul Ammann & Jeff Offutt, Introduction to Software Testing — 覆蓋率指標的學術權威教材
- Martin Fowler — TestCoverage(測試覆蓋率實務觀點)
⚠️ 本文內容基於撰寫時的最新資訊,實際
留言
張貼留言