java - Cobertura 改变了 Sonar 违规行为

标签 java sonarqube cobertura

我的同事今天早上发现,在启用 Cobertura 的情况下编译项目会更改同一项目的 Sonar 结果。

在这个特定项目中,我们使用 sonar:sonar 运行构建,然后使用 cobertura:cobertura sonar:sonar 再次运行它。

比较中的 Sonar 结果现在显示,如果没有 Cobertura,我们会出现 7/78/153/24/0 违反 5 种严重程度的情况,但使用 Cobertura 后,它会更改为 7/81/94/24/0,特别是发现了 3 个新的严重违规行为和 15 个新的重大违规行为,这些违规行为在没有 Cobertura 的情况下是找不到的。

最大的变化之一是,如果没有 Cobertura,则会出现 60 起针对空方法(其中许多是构造函数)的违反规则的情况,而使用 Cobertura 时,只会报告其中 3 起。

如果 Cobertura 仅阻止发现违规行为,我们可以独立运行这两个分析,但由于只有在启用 Cobertura 的情况下才能发现某些违规行为,因此我们似乎必须进行两次单独的 Sonar 分析。

这是已知的交互吗?除了在单独的构建中进行 Cobertura 和 Sonar 之外,还有其他解决方法吗?并使用两组结果来获得最佳数据?

最佳答案

根据您的评论,让我解释一下似乎发生了什么: 您正在通过 SonarQube 使用 FindBugs(您提到的规则是 findbugs 规则)

首先让我们考虑一下这里涉及的两个工具以及它们的工作原理(大致):

  • FindBugs:它是一个基于字节码的静态分析工具:它会读取字节码并在检测到不良模式时提出问题。

  • Cobertura:覆盖率工具:它是如何工作的?它通过字节码来放置探测器,并在运行测试时跟踪哪些探测器命中或未命中。

然后您就可以了解问题可能出在哪里:FindBugs 最终分析 Cobertura 检测的字节码。这可以解释为什么您会遇到一些新问题,以及为什么在使用 cobertura 进行分析时会删除一些空方法问题。

为了避免这个问题,你必须确保你的字节码文件在使用 FindBugs 分析时没有被检测,但是(免责声明,我开发了 Sonar java 插件,所以我在这里可能有点偏见;))我建议你停止使用 FindBugs,转而使用 SonarQube Java 分析器,该分析器不会出现此问题,因为其分析器的处理方法略有不同(请参阅此 blog post 关于此内容)

关于java - Cobertura 改变了 Sonar 违规行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34662788/

相关文章:

java - java HH :mm and hh:mm on SimpleDateFormat之间的区别

java - 为多模块项目设置 Sonar Runner + cobertura

java - 使用GitHub api和java连接GitHub有什么要求

apache - SonarQube 4.x only with embedded Tomcat -> 你能为 Apache 的代理添加 AJP 支持吗

email - 不支持使用 SMTP 和 TLS 从 Sonar 发送邮件?

sonarqube - 如何配置 Sonar 以导入新规则集?

c# - C#/Jenkins 的代码覆盖率

Jenkins 构建失败,Cobertura 错误

java - 在 Selenium webdriver 中跳过 SVG 条形图上的元素

java - 如何从 Intellij 中的 src 文件夹访问 Gradle 项目的 build 文件夹中生成的类