【问题标题】:Understanding SonarQube C code coverage measures了解 SonarQube C 代码覆盖率度量
【发布时间】:2017-01-24 08:01:16
【问题描述】:

我安装了 SonarQube 5.6,使用 C/C++ 插件 3.12 来分析我们的项目。我已经生成了覆盖结果 (gcov),但到目前为止仅针对其中一个应用程序 C 文件。覆盖率为 98.3%。 在分析整个项目时,应用程序覆盖结果被“导入”,我可以在 Web 界面上跟踪它们。

在顶级代码页面上,包含该文件的文件夹显示为 98.3%,在我看来这是不正确的,因为对于所有其他 C 文件,还没有可用的覆盖率。我试图在以下一系列快照中展示这一点:

(1) 顶级代码树:

(2) 沿着“实施”树向下:

(3) 沿着 'Implementation/ComponentTemplate' 树向下:

(4) 沿着“实施/组件模板/代码”树向下:

EXMPL.c 只有 (4):113 行代码。与“实施”(4):61k 的总代码行数相比,这仅约为 0.2%。 (1) 中 EXMPL.c 的 98.3% 的覆盖率是错误的!

我的项目包含多个应用程序,EXMPL 是项目中所有应用程序中最小的一个。所以我必须为每个应用程序生成单独的覆盖结果,并将它们分别“导入”到声纳中。因此,覆盖结果文件位于不同的文件夹中。

也许该项目结构或覆盖结果的“不完整导入”是导致“错误”覆盖措施的原因,但到目前为止,我还没有找到任何有关声纳如何处理提供的 gcov 覆盖措施的有用信息。

任何帮助或信息都将得到应用。 谢谢

【问题讨论】:

    标签: sonarqube code-coverage gcov sonarqube-scan measures


    【解决方案1】:

    您的第二个猜测是正确的:覆盖结果的不完整导入是导致数字倾斜的原因。覆盖率报告中未包含的行不包含在覆盖率计算中。由于当前的覆盖率报告仅包含一个覆盖率 93% 的文件,因此所有数字均以此为基础。

    【讨论】:

    • 嗯,这不是很有帮助。有没有办法告诉类似'假设默认覆盖率对于没有相应 .gcov 文件的源的默认覆盖率为 0%'?
    • 目前可按语言使用。我们有一个更广泛的解决方案,但我不能给你一个预计到达时间。 :-(
    • 好的,作为一种解决方法,我将在每个文件夹中放置“empty”.gcov 文件。在执行测试和生成覆盖率的地方,那些“empty”文件将被覆盖。这不好,但我会接受。谢谢
    • 那些'空'文件需要枚举目录中的文件(行?)才能得到你想要的结果。
    • :-/ 很遗憾,这是正确的。所以我没有解决方法,只能等待您的解决方案。
    猜你喜欢
    • 2018-01-11
    • 2016-07-08
    • 2021-06-04
    • 1970-01-01
    • 2017-01-25
    • 2020-09-22
    • 2014-08-19
    • 2015-12-28
    • 2019-07-15
    相关资源
    最近更新 更多