覆盖率(code coverage rate)是反映测试用例对被测软件覆盖程度的重要指标,也是衡量测试工作进展情况的重要指标。在代码逻辑比较复杂的情况下,测试工作往往只能覆盖到显而易见的逻辑分支,而更多的深层次的逻辑分支则不容易被测试人员发现。为了保证测试的覆盖率,有些开发人员会尝试协助测试人员写出所有的测试用例,这不仅会牺牲大量的宝贵的开发时间,同时也拥有一定的难度,最重要原因就是因为测试难以量化。而代码覆盖工具就是用来量化代码测试的覆盖率,让测试人员可以直观的发现那些没有覆盖到的代码分支。
代码覆盖率是评价单元测试的效果的一个重要指标。在实际的工作中,通常使用代码覆盖率来评价单元测试的效果。
代码覆盖率可以由语句覆盖率和分析分析率两个方面来进行评估。
OpenCppCoverage是Windows平台下开源的C++代码覆盖率工具,使用简单,功能齐全而强大。
使用起来非常简单,它不需要在编译时插桩,只需要有pdb文件,运行时插桩,通过OpenCppCoverage启动进程即可。功能也比较全,主要特点有:
OpenCppCoverage 是与Visual Studio 配合使用的一个代码覆盖率分析工具,当测试程序使用Visual Studio编译时,就可以使用这个工具进行代码覆盖率分析,为了能够进行分析,应用程序必须编译为Debug版本。
源码地址:https://github.com/OpenCppCoverage/OpenCppCoverage
OpenCppCoverage可以单独下载安装,也可以作为插件在VisualStudio的进行安装。这里以单独下载安装为例。
OpenCppCoverage下载地址:https://github.com/OpenCppCoverage/OpenCppCoverage/releases
根据自身环境选择x86或者x64版本进行安装。
安装过程比较简单,只需要注意一点:勾选将运行目录添加到环境变量中(默认也是勾选)。
OpenCppCoverage最简单的运行格式为:
OpenCppCoverage.exe --sources MySourcePath* -- YourProgram.exe arg1 arg2
以如下的TestOpenCppCoverage工程为例,工程由utils.c、utils.h和main.c组成。
工程的代码目录为:
C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\TestOpenCppCoverage\\src
工程的输出程序为:
C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\Debug\\TestOpenCppCoverage.exe
运行CMD,运行命令:
OpenCppCoverage --sources C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\TestOpenCppCoverage\\src -- C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\Debug\\TestOpenCppCoverage.exe
输出信息说明,生成的html文件(index.html)位于:
C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\CoverageReport-2022-12-09-11h47m10s。
单击C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\Debug\\TestOpenCppCoverage.exe即可对文件进一步分析。
绿色部分表示已覆盖到的部分,红色部分表示未覆盖的部分。
打开VisualStudio --> 工具 --> 扩展和更新 --> 联机 --> 右上角输入OpenCppCoverage,在下面的结果会出现“OpenCppCoverage Plugin”点击安装即可(安装中需要将VisualStudio重启)。
程序写好,编译执行之后,点击“工具 --> Run OpenCppCoverage”,程序运行。
将命令行窗口关掉,则代码会出现红色或者绿色的阴影,下面会出现Coverage的报告,如下图。
gcov是一个测试代码覆盖率的程序,正确地使用它搭配 gcc 可以分析、帮助你将代码写得更高效。帮助你优化程序。类似于一个profiling tool,使用 gcov 或者 gprof,可以收集到一些基础的性能统计数据。比如:
gcov创建一个logfile叫做 源文件名称.gcxx (这里的源文件名称指的是.c或者.cc文件的文件名),表示的是这个 源文件.c 中每一行所被执行的次数。这些文件可以配合gprof使用。
gcov要工作只能用gcc编译这些代码。和其他的profiling 或者 测试代码覆盖率的机制不兼容。
fprofile-arcs参数使gcc创建一个程序的流图,之后找到适合图的生成树。只有不在生成树中的弧被操纵(instrumented):gcc添加了代码来清点这些弧执行的次数。当这段弧是一个块的唯一出口或入口时,操纵工具代码(instrumentation code)将会添加到块中,否则创建一个基础块来包含操纵工具代码。
Lcov是GCC覆盖率测试工具gcov的前端图形工具。它通过收集多个源文件的 行、函数和分支的代码覆盖信息并且将收集后的信息生成HTML页面。生成HTML需要使用genhtml命令。
在Linux 中安装 lcov 非常简单,只要使用如下命令即可完成 lcov 的安装。
$ sudo apt-get install lcov
安装完成后,后续就可以使用 lcov 生成代码覆盖率报告。
Step1 : 使用 GCC 以 -fprofile-arcs 和-ftest-coverage 选项编译程序。
$ gcc -fprofile-arcs -ftest-coverage -o test test.c
则会在当前目录下生成test.gcno和test.gcda文件
注:一般情况,gcda和gcno会在同一个目录,假如在编译机器上面是test/path,编译的时候会在这个目录下生成*.gcno文件,那么在执行机器上也会生成*.gcda文件在test/path目录下。如果要使用lcov统计覆盖率,必须将gcno和gcda放在同一个目录,并且有源代码,且源代码的目录和编译时的目录一样,否则不能生成。
Step2: 运行程序
$ ./test
Step3: 然后该目录下执行lcov
$ lcov --directory . --capture --output-file app.info
其中:
--directory 或者-d 表示的是目录,也就是gcno和gcda目录
--capture 或者 -c 表示获取覆盖率信息
--output-file 或者 -o 表示输出文件
Step4: 获取 HTML 输出
生成 html 格式的报告比较简单, 只要在 coverage 目录下使用以下的命令就可以生成html 格式的报告。
$ genhtml -o results app.info
results是一个目录,index.html为导航文件,使用 web 浏览器打开 index.html 文件查看代码覆盖结果。
也可查看更加详细的信息。
如要查看某个文件具体的信息,点击对应的文件名即可,打开的文件详细信息页面。
全部0条评论
快来发表一下你的评论吧 !