09 February 2006

剛過完年,大家都懶散懶散的,計畫有點進行不下去... 索性暫時先不寫,來搞搞一直想弄的 Test Coverage。正好有人提到兩個 Open Source 的 Code Coverage 的工具。EMMA 之前有試過,可是覺得報表難看,就不想再試了。這次改試試 Cobertura,他的 setup 我摸了一整天才搞定,不是因為設定難,而是他的預設值在我的環境下不適用,結果繞了一大圈才知道是哪裡的問題... orz

我替我手上現在兩個專案加上 coverage 的分析,並且整合到 C.I. (continuous integration) 裡,見下圖。

Anthill_code_coverage

圖中的那個 90%/95% 就是 code coverage,左邊是 Line Coverage,右邊是 Branch Coverage。2071 那個數字則是 Test Case 的總數。兩個專案的 coverage 都是 90% 以上,算是很好了吧?第一次看到這個數字時,還蠻得意的咧~~ 。不過越後面就越難升了,要升個 1% 都要加寫很多測試 (真像是打電動...)。100% 真的是很遠的目標。

詳細的 Coverage 報表如下,(點選圖,進入 flickr,可以看到一些註解。)

code_coverage_detail

哈,真的很漂亮清楚,有哪個特別紅的就是該關照注意的,Cobertura 這個工具真的不錯。

Code coverage 的原理是替被測試的 class 裝上儀器,就是在 byte code 上動手腳 (instrumented)。在 Test 過程中,儀器會將跑過的次數抄錄下來。之後再用工具分析,並產生報表。在 byte code 多裝這些儀器,想當然爾,速度一定會變慢的... 下面是上面那兩個專案裝上儀器前後的 performance 差異:

Performance degrade 13~15% after instrumented by Cobertura
Project No of Test Before Instrumented After Instrumented Performance Degrade
Antarctica 2049 7:17 (437 sec) 8:32 (512 sec) 15%
Esperanto 587 1:04 (64 sec) 1:13 (73 sec) 13%

所以 performance 大概是下降 10~15 % 左右吧,雖然還可以接受,Cobertura 這樣其實算是差的,聽說 EMMA 的 performance 就比較好,沒有實際試過不清楚。


回響

可以用 Tag <I>、<B>,程式碼請用 <PRE>