【问题标题】:How to improve the branch coverage using gcovr tool如何使用 gcovr 工具提高分支覆盖率
【发布时间】:2020-07-16 14:09:08
【问题描述】:

我使用 C++ 编写了一个示例程序。我已经使用 GUNIT 框架编写了相应的单元测试。我成功地为每个源文件生成了 .gcda 和 .gcno 文件。我在生成 .gcno 文件的文件夹中使用了 (gcov -b -l -p -c *.gcno) 命令。我正在使用 gcov 7.5.0 。当我运行这个命令时,我看到它给了我 a) 覆盖百分比的行 b) 覆盖百分比的分支 c) 至少一次。接下来我运行 (gcovr --html -o Filename.html -r /path_to_C_sourceFiles/ .) 命令为这些数据生成 html 输出。在 html 文件中,我看到分支覆盖数据是从 gcov 生成的至少一次数据中提取的。为什么 html 没有从 gcov 数据中获取分支覆盖百分比并将其显示为分支覆盖率。与分支百分比相比,gcov 工具给出的至少数据是减少的数字。这至少被拍了一次?

【问题讨论】:

    标签: gcov lcov gcovr


    【解决方案1】:

    如果一个分支至少被占用一次,它就会被覆盖。如果一个分支被执行多次,它就不再被覆盖了。所以 gcovr 主要考虑行和分支的覆盖/未覆盖状态,而 GCC 的 gcov 工具显示执行计数和分支概率。

    访问分支概率可能很有用。不是在测试的上下文中,而是可能用于低级代码优化。如果您需要这些数据,您可能需要自己查看 gcov 文件。

    但是,gcovr 的下一个版本(预计是 gcovr 4.3)将在 HTML 报告中显示分支计数(而不是百分比):

    对于具有分支覆盖率数据的每一行,都会有一个弹出窗口显示完整的分支计数。

    如果您安装 gcovr 的开发版本,您现在可以使用此功能:

    pip install git+https://github.com/gcovr/gcovr.git
    

    【讨论】:

    • Gcov 生成(执行的分支 = 829 的 89.63%,至少执行一次 = 51.15% 0f 829)。这两个数据有何不同?为什么这两个数据不同,为什么 gcovr 显示至少一次数据作为 html 中的分支百分比?
    猜你喜欢
    • 2012-03-17
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 2020-02-26
    • 2013-12-19
    • 2012-01-11
    相关资源
    最近更新 更多