Andrew Glover在最近的developerWorks上发表了一篇文章《
追求代码质量: 不要被覆盖报告所迷惑》,我觉得又是一篇防止被忽悠的好文章。当然,作为单元测试的狂热分子,作者在文章中反复强调的不是不要单元测试和达到较高的测试覆盖率,而是苦口婆心地劝告大家,
高的测试覆盖率并不代表测试良好的代码。所以,作为项目经理的你当被项目成员拿着极高测试覆盖率报告来交差时,你得留个心眼;而当你拿着覆盖报告去忽悠客户的时候,是不是也要想想客户也有可能会读这篇文章呢?这又让我想起几位热心读者在《
我为什么讨厌框架》中的
留言,所以,我得声明一下:没采用框架的系统,80%不是架构良好的系统,但反过来不一定成立,所以不要因为采用了框架而高枕无忧;没有单元测试或者极低覆盖率的代码,80%是难以维护的代码,同样反过来也不一定成立,所以,不要为了高测试覆盖率而逼着项目成员编写无用的单元测试。
稍稍记录一下文章的主要内容:
测试覆盖度量行覆盖也叫
语句覆盖,用以指出代码的哪些行被执行了
分支覆盖 则试图度量决策点(比如包含逻辑
AND
或
OR
的条件块)的覆盖率
测试覆盖的作用
- 估计修改已有代码所需的时间
- 评估代码质量
- 评定功能测试
文中用
Cobertura工具来生成测试覆盖度报告,我一直认为没有可执行代码的技术文章不是好的文章,但原文没有给出相应的例子下载,而如果你没有使用
Ant甚或
JUnit的经验,那么搞定Cobertura可能也还是要花点工夫的,所以,如果你想偷懒的话,那就到
这里下载吧。