什麼是分支涵蓋率

要求程式中所有判斷(if 敘述等)的真與偽兩個分支至少各執行一次的白箱測試涵蓋基準。也稱為判定涵蓋率或 C1,是比要求所有敘述至少執行一次的敘述涵蓋率(C0)更強的基準。

日文名稱: 分岐網羅

「分支涵蓋率」出現在1領域的2道練習題中(軟體開發與專案管理等)。

這個名詞所屬的領域: 軟體開發與專案管理

與敘述涵蓋率的差異

敘述涵蓋率(C0)只要所有敘述至少執行一次就算滿足。對沒有 else 的 if (a) { S1; },只要執行1個 a 為真的測試案例就會走過 S1,滿足敘述涵蓋,但 a 為偽、什麼都不做直接往下的分支不會被執行。分支涵蓋率(C1)也要求這個偽的一側,因此容易找出 a 為偽時缺少必要處理之類的錯誤。滿足分支涵蓋,也就滿足敘述涵蓋。

與條件涵蓋及複合條件的關係

判斷像「A 且 B」這樣由多個條件構成時,要求個別條件各取真與偽的是條件涵蓋。以(A = 真、B = 偽)與(A = 偽、B = 真)這2個測試案例雖能滿足條件涵蓋,但判斷兩次都為偽,因此不滿足分支涵蓋。所以會使用同時滿足兩者的判斷/條件涵蓋,或確認各條件獨立影響判斷結果的 MC/DC(修正條件/判定涵蓋)等。MC/DC 在航空機軟體標準 DO-178C 的最高安全等級中是必要條件,在車輛功能安全標準 ISO 26262 中也在 ASIL D 被強烈建議。

涵蓋率數值的解讀

涵蓋率以「已執行的分支數 ÷ 全部分支數」表示,可用編譯器或測試工具的功能量測。即使涵蓋率為100%,也無法發現規格中有卻未實作的處理遺漏,或結果隨數值改變的錯誤。涵蓋率應作為找出「測試沒有走到之部分」的工具,並與黑箱測試組合使用。硬體驗證中也以 RTL 程式碼涵蓋率的形式使用相同的思維。

練習分支涵蓋率的題目

a、b、c 的真偽可彼此獨立決定。對於處理「if (a) { S1; } if (b) { S2; } if (c) { S3; }」,要滿足分支涵蓋(所有判斷的真與偽至少各執行一次)所需的最少測試案例數為下列何者?

  1. A1
  2. B2
  3. C8
查看答案與解析

正確答案:B. 2

3個判斷都必須各走過真與偽兩邊。以(a、b、c 全為真)與(全為偽)這2個測試案例,每個判斷的真與偽各執行一次,因此最少為2個。只用1個(全為真)也能執行 S1~S3 的所有敘述,滿足敘述涵蓋,但偽側的分支(什麼都不做直接往下的路徑)沒有被執行。8是測試真偽組合 2³ = 8種全部的數量。

常見問題

C0 與 C1 是什麼?

這是表示涵蓋基準的簡稱,C0 指敘述涵蓋率(所有敘述執行一次以上),C1 指分支涵蓋率(所有分支的真與偽各執行一次以上)。滿足 C1 也就滿足 C0。

應該以分支涵蓋率100%為目標嗎?

在與安全相關的軟體中,標準或公司內部基準有時會規定分支涵蓋率或 MC/DC 的目標。除此之外,與其執著於100%,更重要的是確認沒有走到的分支是否真的不需要,還是測試不足。只有在異常時才會走到的處理,需要以故障注入等方式測試。

解析中的「分支涵蓋率」

出現「分支涵蓋率」的題目(2題)

  1. a、b、c 的真偽可彼此獨立決定。對於處理「if (a) { S1; } if (b) { S2; } if (c) { S3; }」,要滿足分支涵蓋(所有判斷的真與偽至少各執行一次)所需的最少測試案例數為下列何者?
  2. 對於判斷「A 且 B」(A 與 B 是可彼此獨立決定真偽的條件),執行了測試案例(A = 真、B = 偽)與(A = 偽、B = 真)這2個。關於涵蓋基準,下列何者正確?

相關名詞

工作分解結構(WBS) 白箱測試 要徑法(CPM) 敏捷開發 測試驅動開發(TDD) 等價類劃分 黑箱測試 實獲值管理(EVM) 瀑布式模型 邊界值分析

前往名詞解釋列表