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
所以, 測試涵蓋度高並不代表, 程式被測試的很完整. 但是, 從另一個角度來說, 涵蓋度低一定代表你測不夠.
留言列表