跳到主要內容

Function Coverage 解析:最高階卻最粗略的程式碼覆蓋率指標入門指南

在軟體測試中,Function Coverage(函式覆蓋率)是最容易達成、也最容易被誤解的指標。它只問一件事:這個函式有沒有被呼叫過?理解它的侷限,才能正確解讀覆蓋率數字。

什麼是 Function Coverage?

Function Coverage 追蹤測試執行期間,每個函式是否至少被呼叫一次。只要函式進入點被觸及,該函式即視為「已覆蓋」,無論內部邏輯是否完整執行。它是所有覆蓋率指標中層級最高、粒度最粗的一種,位於覆蓋率金字塔的頂端。相較於 Statement、Branch、Condition 覆蓋率,Function Coverage 提供的資訊量最少,但也最直觀:你可以快速發現哪些函式從未被測試觸及,作為測試盲區的第一道篩選器。

為何「高覆蓋率」不代表「高品質測試」?

Function Coverage 最大的陷阱在於:100% 的函式覆蓋率,不保證任何分支或邏輯被驗證。一個含有複雜條件判斷的函式,只需一次呼叫即可達到滿分,但內部的 edge case 可能完全未被測試。這使得開發者容易產生錯誤的安全感。正確的使用方式是將它視為最低門檻指標——Function Coverage 不足代表測試明顯缺失;但 Function Coverage 達標,僅是測試旅程的起點,而非終點。

function divide(a, b) {
  if (b === 0) return null; // 此分支可能從未被測試
  return a / b;
}
// 只要呼叫 divide(10, 2),Function Coverage 即達 100%

💡 重點整理

  • Function Coverage 僅確認函式是否被呼叫,不驗證內部邏輯。
  • 它是覆蓋率指標中粒度最粗的,適合快速定位完全未測試的函式。
  • 達到 100% 函式覆蓋率,不等於測試品質足夠。
  • 應與 Branch Coverage 或 Statement Coverage 搭配使用,才能全面評估測試品質。

Function Coverage 是測試覆蓋率的入門門檻,而非品質保證。善用它找出測試盲區,再以更細緻的指標深入驗證邏輯,才是務實的測試策略。

📚 參考文獻

  1. Istanbul (nyc) 官方文件 — JavaScript 主流覆蓋率工具,支援 Function / Statement / Branch Coverage 統計。
  2. Jest Coverage 官方文件 — Jest 內建覆蓋率配置說明,含各指標定義。
  3. Martin Fowler — Test Coverage — 說明覆蓋率指標的侷限性與正確使用觀念。

⚠️ 本文內容基於撰寫時的最新資訊,實際應用時請參考官方文件的最新版本。

留言