要测多少才足够呢? 这答案会根据你所问的对象而有所不同. 不过其中一个答案, 应该会有人回答你要达到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
所以, 测试涵盖度高并不代表, 程序被测试的很完整. 但是, 从另一个角度来说, 涵盖度低一定代表你测不够.