Cobertura改变了声纳的违规行为

时间:2016-01-07 18:43:48

标签: java sonarqube cobertura

我的同事今天早上发现用Cobertura编译项目可以改变同一项目的声纳结果。

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

比较中的声纳结果现在表明,如果没有Cobertura,我们会7/78/153/24/0违反5个严重程度,但Cobertura会更改为7/81/94/24/0,特别是发现3个新的严重违规行为和15个没有Cobertura就找不到新的重大违法行为。

最大的变化之一是,如果没有Cobertura,有60个违反空方法的规则(其中许多是构造函数),而Cobertura只报告了其中的3个。

如果Cobertura仅阻止发现违规行为,我们可以独立运行这两项违规行为,但由于某些违规行为仅在Cobertura启用时才会发现,因此我们似乎必须进行两次单独的声纳分析。

这是一种已知的互动吗?除了在不同的构建中做Cobertura和Sonar之外,还有其他解决方法吗?并使用两组结果来获得最佳数据?

2 个答案:

答案 0 :(得分:1)

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

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

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

  • Cobertura:覆盖工具:这是如何工作的?它检测字节码以放置探针,并在运行测试时跟踪哪些探针在哪里被击中。

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

为了避免这个问题,你必须确保在使用FindBugs分析它们时,你的字节码文件没有被检测但是(免责声明,我开发了声纳java插件,所以我可能在这里有点偏见;))我建议你去停止使用FindBugs支持SonarQube Java Analyzer,因为它的分析器处理方式略有不同,因此不会遇到此问题(请参阅blog post关于此问题)

答案 1 :(得分:1)

用户错误。 :-(

事实证明,用户在运行声纳之前已经运行了mvn clean:声纳有cobertura的声纳,正如benzonico暗示的那样,必须分析编译代码的findbugs规则并没有运行。只有在源代码上运行的规则(如java插件)才会生成结果。这就是为什么我们错过了一堆规则和结果。

我们仍然在Bamboo和手动构建之间存在不一致,但这将是一个单独帖子的主题。