一般认为单元测试是一种白盒测试,覆盖率则是白盒测试的重要统计指标。Windows平台下常见的测试覆盖率统计工具是rational purify,可惜是要付费的(D版不在讨论范围之内)。GNU GCC编译工具集提供了测试覆盖率的解决方案——GCOV,基于此想到了一种在windows环境下测试覆盖率的解决方法。
windows环境下的gcc版本可以多种渠道获得,最直接的方法是去gnu的网站上下载,但最方便的方法是安装Dev C(集成mingw),还有一种方法是安装cygwin。选择Dev C不仅是因为它集成了mingw,更重要的是因为它是一个IDE。
怎样使用gcc的测试覆盖率统计功能可以在网上找到不少资料。这里也简单重复一下,大致分这么几步:
- 编译时带上两个参数-ftest-coverage -fprofile-arcs,得到.gcno。如果版本比较老得到的是.bb和.bbg。
- 链接时带上-lgcov(gcc4以后可以不用)
- 执行程序后,得到.gcda。如果版本比较老得到的是.da
- 使用GCOV得到覆盖率数据。GCOV得到的数据可能不太好阅读,可以使用LCOV(http://ltp.sourceforge.net/coverage/lcov.php )工具集将文字数据转换成HTML版本的图形数据。
上面这些步骤对gcc的各种平台版本都是一样的。
在使用mingw版本gcc时遇到了一点小问题。以前版本在测试覆盖率时得到的中间文件是.bb/.bbg和.da,而mingw版本得到的是.gcno和.gcda,后经确认应该是gcc版本新旧导致(早一点的cygwin得到的结果只是前面那个)。新的输出文件lcov不能很好识别(网上有人说lcov的CVS上有这个patch,但我访问不了),需要先用gcov生成结果,然后再用lcov来分析。
技术问题都解决之后剩下的就是怎么与dev c集成了。
增加编译和链接选项很容易,在Tools->Compile Options里修改即可。
自动统计覆盖率也应该很容易,因为dev c可以自定义命令。