代码改变世界

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

2011-05-15 14:17 by Colin Han, ... 阅读, ... 评论, 收藏, 编辑

背景

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

@透明

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

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

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

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

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