C 代码覆盖率
2018-11-28 Wednesday
我们已经提供了一些测试用例,但是这些测试用例的好坏如何评估?是否已经覆盖了所有的函数?函数中的分支以及边界条件是否都已经覆盖?
这就需要通过代码覆盖率进行查看,这里简单介绍其使用方法。
简介
在 GCC 中,提供了一个代码覆盖率的分析工具 gcov ,除此之外,还可以使用 lcov genhtml 等工具生成最终的展示页面。
CentOS 中可以通过如下命令安装。
# yum install --enablerepo=epel lcov
使用
在使用 gcc 或者 g++ 后面添加参数 --fprofile-arcs --ftest-coverage ,必须同时在编译器和链接器上设置,在 Makefile 里面可以加在 CFLAGS 和 LDFLAGS 上。
编译完成之后,会生成相关的 *.gcno 文件,运行之后生成 *.gcda 文件,然后可以使用 gcov *.c 生成 *.c.gcov 代码覆盖信息,参数如下。
不过这个是文本的,可以将生成的文件 main.c.gcov 通过编辑器打开,会发现在代码前有很多的符号标记,简介如下:
##### 没有被执行过。
- 不计入统计。
N 被调用执行的此时。
文件文件观察起来不太方便,可以通过 lcov 生成图形化的代码覆盖数据。
$ lcov -d . -t 'Main Test' -o 'main_test.info' -b . -c
会生成一个 main_test.inf