100% 測試涵蓋度真的是100%嗎?

100% Test Coverage?
http://www.infoq.com/news/2007/05/100_test_coverage

May 29, 2007
Posted by Amr Elssamadisy
Published in Info Queue

要測多少才足夠呢? 這答案會根據你所問的對象而有所不同. 不過其中一個答案, 應該會有人回答你要達到100%測試涵蓋度. 但是也會有人說那不重要, 重要的是你應該根據測試結果的品質來決定, 測試涵蓋度不會告訴你任何有測試結果或是程式碼的品質.

來自ObjectMentor的Tim Ottinger寫到:
http://blog.objectmentor.com/articles/2007/05/07/unit-tests-coverage-less-is-more

如果你真的遵照TDD的精神, 先寫測試, 再寫程式去讓失敗的測試通過, 這樣你的測試涵蓋度應該會非常高. 可惜的, 若是你已經有些現存的程式碼 (legacy code), 那TDD並不能讓測試涵蓋度變得很高.

Andy Glover 說到
http://thediscoblog.com/2007/04/21/short-circuiting-code-coverage/

測試涵蓋度會誤導我們對code的感覺, 因為測試涵蓋度只是告訴你哪些程式碼沒有涵蓋到, 但是不能準確告訴你哪些程式碼被測到. 因此會導致你誤解, 你已經測過所有程式碼, 但是事實上你並沒有測到它.

public void branchIt(int value){
 if((value > 100) || (HiddenObject.doWork() == 0)){
  this.doIt();
 }else{
  this.doItAgain();
 }

當你準備資料value = 200, 就可以讓if這行被涵蓋到. 用涵蓋度工具它會告訴你, this.doItAgain()這行沒有被測到. 但是....但是....他沒告訴你, 其實HiddenObject.doWork()並沒有被測到, 所以你會以為天下太平了, 只需測試else那部份的程式.

類似的, Tobias Schlitt也提到相同的概念, 測試涵蓋度只能告訴你哪些沒有涵蓋到.
http://schlitt.info/opensource/blog/0539_why_code_coverage_matters.html

所以, 測試涵蓋度高並不代表, 程式被測試的很完整. 但是, 從另一個角度來說, 涵蓋度低一定代表你測不夠.

arrow
arrow
    全站熱搜

    kojenchieh 發表在 痞客邦 留言(0) 人氣()