什麼是分支涵蓋率
要求程式中所有判斷(if 敘述等)的真與偽兩個分支至少各執行一次的白箱測試涵蓋基準。也稱為判定涵蓋率或 C1,是比要求所有敘述至少執行一次的敘述涵蓋率(C0)更強的基準。
日文名稱: 分岐網羅
「分支涵蓋率」出現在1領域的2道練習題中(軟體開發與專案管理等)。
這個名詞所屬的領域: 軟體開發與專案管理
要求程式中所有判斷(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 程式碼涵蓋率的形式使用相同的思維。
正確答案:B. 2
3個判斷都必須各走過真與偽兩邊。以(a、b、c 全為真)與(全為偽)這2個測試案例,每個判斷的真與偽各執行一次,因此最少為2個。只用1個(全為真)也能執行 S1~S3 的所有敘述,滿足敘述涵蓋,但偽側的分支(什麼都不做直接往下的路徑)沒有被執行。8是測試真偽組合 2³ = 8種全部的數量。
這是表示涵蓋基準的簡稱,C0 指敘述涵蓋率(所有敘述執行一次以上),C1 指分支涵蓋率(所有分支的真與偽各執行一次以上)。滿足 C1 也就滿足 C0。
在與安全相關的軟體中,標準或公司內部基準有時會規定分支涵蓋率或 MC/DC 的目標。除此之外,與其執著於100%,更重要的是確認沒有走到的分支是否真的不需要,還是測試不足。只有在異常時才會走到的處理,需要以故障注入等方式測試。
但「A 且 B」在兩個測試案例中都為偽,判斷為真的分支一次也沒有走過,因此不滿足分支涵蓋。
對於判斷「A 且 B」(A 與 B 是可彼此獨立決定真偽的條件),執行了測試案例(A = 真、B = 偽)與(A = …工作分解結構(WBS) 白箱測試 要徑法(CPM) 敏捷開發 測試驅動開發(TDD) 等價類劃分 黑箱測試 實獲值管理(EVM) 瀑布式模型 邊界值分析