100% 测试涵盖度真的是100%吗?

2014-09-17   出处: kojenchieh.pixnet.net  作/译者:kojenchieh

要测多少才足够呢? 这答案会根据你所问的对象而有所不同. 不过其中一个答案, 应该会有人回答你要达到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

所以, 测试涵盖度高并不代表, 程序被测试的很完整. 但是, 从另一个角度来说, 涵盖度低一定代表你测不够.


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
307° /3073 人阅读/0 条评论 发表评论

登录 后发表评论