【发布时间】:2018-11-04 02:29:28
【问题描述】:
我正在使用商业 SonarQube 插件分析 C++ 项目。
在我看来,我的项目有一个人为的高代码覆盖率报告,因为“生产”源代码行和单元测试代码行都被计算在内。编写许多不作为单元测试的一部分运行的单元测试代码行是相当困难的,因此它们可以立即提高覆盖率报告。
是否仍然可以对单元测试代码进行代码异味分析,但不计入测试覆盖率指标?
我已经尝试设置sonar.tests=./Tests 参数(其中 ./Tests 是我的测试代码所在的目录。这似乎将测试代码排除在所有分析之外,从而无法检测到气味。我宁愿检查测试代码是否属于质量好于希望它遵守适用于项目的规则。
我尝试将sonar.test.inclusions=./Tests/* 与上述内容结合使用。但是,我要么文件路径语法不正确,要么设置此变量导致测试代码完全省略,因此它根本不再出现在“代码”选项卡下,也被排除在外。
documentation on Narrowing the Focus of what is analysed 并不是很清楚预期的行为是什么,至少对我来说是这样。任何帮助将不胜感激,因为通过每个排列都会非常混乱。
也许我应该接受这样的想法,即使用约 300 行“生产”代码和 900 行存根、模拟和单元测试,75% 的测试覆盖率值可能意味着运行 0 行“生产”代码。我检查了一下,目前,我非常简单的应用程序的测试代码与“生产”代码的比率大约是这个比例。我预计随着时间的推移,这个比例会更接近 50:50,但它可能不会。
【问题讨论】:
-
非常有趣的问题。您使用的是哪个代码覆盖框架?我知道 JaCoco 与 SonarQube 配合得很好
-
@RannLifshitz 我正在使用
lcov和genhtlm,我也尝试过gcov。 JaCoco 只是 Java,不是吗? -
JaCoco 仅是 Java:jacoco.org/jacoco/trunk/index.html 我会尝试找到一个 C++ 等价物。这就是我用谷歌搜索的:groups.google.com/forum/#!topic/jacoco/VBqOihjluME
-
@RannLifshitz 我确实有代码覆盖率报告工作。它限制了 SonarQube 对什么是测试代码和什么是我遇到问题的生产代码的解释。假设一个框架可以处理这个问题,但是我必须确保该框架能够处理我目前用于测试本身的 CppUTest 单元测试框架。
-
我需要更彻底地调查这个问题。如果您想离线与我联系,我会向您发送我的电子邮件。
标签: unit-testing sonarqube metrics software-quality