剛過完年,大家都懶散懶散的,計畫有點進行不下去... 索性暫時先不寫,來搞搞一直想弄的 Test Coverage。正好有人提到兩個 Open Source 的 Code Coverage 的工具。EMMA 之前有試過,可是覺得報表難看,就不想再試了。這次改試試 Cobertura,他的 setup 我摸了一整天才搞定,不是因為設定難,而是他的預設值在我的環境下不適用,結果繞了一大圈才知道是哪裡的問題... orz
我替我手上現在兩個專案加上 coverage 的分析,並且整合到 C.I. (continuous integration) 裡,見下圖。
圖中的那個 90%/95% 就是 code coverage,左邊是 Line Coverage,右邊是 Branch Coverage。2071 那個數字則是 Test Case 的總數。兩個專案的 coverage 都是 90% 以上,算是很好了吧?第一次看到這個數字時,還蠻得意的咧~~ 。不過越後面就越難升了,要升個 1% 都要加寫很多測試 (真像是打電動...)。100% 真的是很遠的目標。
詳細的 Coverage 報表如下,(點選圖,進入 flickr,可以看到一些註解。)
哈,真的很漂亮清楚,有哪個特別紅的就是該關照注意的,Cobertura 這個工具真的不錯。
Code coverage 的原理是替被測試的 class 裝上儀器,就是在 byte code 上動手腳 (instrumented)。在 Test 過程中,儀器會將跑過的次數抄錄下來。之後再用工具分析,並產生報表。在 byte code 多裝這些儀器,想當然爾,速度一定會變慢的... 下面是上面那兩個專案裝上儀器前後的 performance 差異:
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 就比較好,沒有實際試過不清楚。