Spiga

100%测试覆盖率真的有用吗?

2011-05-15 14:17 by Colin Han, 190 visits, 收藏, 编辑

背景

最近看到一篇博客,作者是一名ThoughtWorker,文中提到要在他的项目中贯彻100%单元测试覆盖率。我在留言中对100%测试覆盖提出了一些质疑。看到“透明"的回复并且阅读了他的《Why is 100% test coverage easier to achieve》(需翻墙)。有些想法,但是Blogbus的评论有字数限制。因此,贴在自己博客里面,希望和dreamhead透明继续讨论

@透明

拜读了你的博文。翻墙确实很辛苦。对ThoughtWorks的敬仰又进一层。

但是,对你的观点依然有一些质疑。你认为没有测试覆盖的代码就是不必要的(MUDA)。例如:getter, setter。我想还有一个例外,是健壮性代码(包括必要的断言检查和容错处理)。

我认为这里存在两类问题:1. 保持接口的语义清晰。2.保持模块健壮。

对于接口的语义清晰,我认为对于产品的可维护性会很有帮助。毕竟你写的模块,应该让使用者更易用。既然我们在产品的外部接口上应该精雕细琢。没理由在内部接口上如此惜墨如金啊。

对于模块的健壮性,理论上可以通过添加最够的单元测试后达到你所说的程度(没有单元测试覆盖的代码都是MUDA)。但是,添加单元测试也是成本,很多时候,我们添加这样的容错代码仅仅是两行代码。但是,为了证明这行容错是必要的,却要花费更多的时间和精力。这样真的值得吗?我们新写的这些单元测试是不是MUDA呢?

Add your comment

5 条回复

  1. #1楼 seek      2011-05-15 15:56
    你添加了两行代码,目的是为了容错,可是你怎么就能断定你添加的代码就一定不会有问题呢?
     回复 引用 查看   
  2. #2楼[楼主] Colin Han      2011-05-15 17:38
    @seek
    那,你又怎么确定你的单元测试不会有问题呢? :)
     回复 引用 查看   
  3. #3楼 greatghoul      2011-05-17 08:45
    MUDA是不是妈的的意思?
     回复 引用 查看   
  4. #4楼[楼主] Colin Han      2011-05-17 12:07
    @greatghoul
    其实,MUDA是“麻达”(陕西方言,有麻烦,坏了的意思)
    :)
     回复 引用 查看   
  5. #5楼 greatghoul      2011-05-17 13:20
    @Colin Han
    非常贴切
     回复 引用 查看