探究 Branch Coverage 的計算方式

之前曾經使用過 EclEmma 來針對 Java 程式計算涵蓋率,那時對 Branch Coverage 的計算方式一直深感不解。以下面的例子,條件判斷式中有 2 個「||」的判斷,為什麼會產生 6 條 branch?

螢幕快照 2014-05-17 下午11.05.57

上網查了一下,有人提到這個計算方式是針對 Java 產生的 Bytecode 去計算涵蓋率,並非用原始碼去計算。那我就來看看它的 Bytecode?

額外安裝了 Bytecode Visualizer 這個 plug-in,可以看到產生的 Bytecode 與程式執行的流程,但跑出來的這個流程並沒有什麼特別,如果要完整涵蓋整個流程,總共應該只有 4 條 Branch 才對?

螢幕快照 2014-05-17 下午11.04.04

最後,我終於豁然開朗,這邊說的 Branch,不過就是每一個判斷的 True or False,其實沒有我們想像的那麼複雜。

以下圖來說,每個 Yes、No 都是 1 條 Branch,分別是 B1、B2、B3、B4、B5、B6。

Branch Coverage Rate

想通了這點,就可以完全了解涵蓋率的計算方式了。以這個判斷式來說,它的 Branch 數為 6,但確實只要 4 條 Test Case 就可以達成 100% 的涵蓋率,下面的程式碼結果證明了這一點。

螢幕快照 2014-05-17 下午11.41.25
(這邊為了方便解釋,將 Assert.assertEquals() 拿掉)

參考資料

Bytecode Visualizer

廣告

One thought on “探究 Branch Coverage 的計算方式

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s