我正在尝试使用SonarQube扫描仪(版本3.1.0.1141)分析java代码。
我已经用这些属性填充了声纳项目属性:
# Sonar sources and metadata
sonar.language=java
sonar.sources=src/main
sonar.java.source=1.8
sonar.sourceEncoding=UTF-8
sonar.java.binaries=target/classes
sonar.java.libraries=target/lib
sonar.tests=src/test
sonar.java.coveragePlugin=jacoco
sonar.junit.reportsPath=target/surefire-reports
sonar.surefire.reportsPath=target/surefire-reports
而Jacoco报告给我一个类的结果:
SonarQube显示度量值:
根据声纳指标定义页面,声纳用于条件覆盖的关键branch_coverage,因此我认为条件和分支覆盖是相同的。
如何解释不同的结果?
假设你有一些结构
if(a == 1 && b == 2) {
//do this
} else {
//do that
}
你有两个分支
和两个条件
如果你有两个测试用例
你覆盖了两个分支,因为(cond1的组合条件
但是你只完全覆盖了cond1,只有一半的cond2,这是75%的条件覆盖率。
要获得全面的条件覆盖,您需要额外的测试
这两种工具都使用每条线路的分支信息来计算覆盖范围。我对我的一些代码进行了测试,并且“要覆盖的条件”(Sonarqube)的数量与Jacoco报告中的总“分支”数量相匹配 - 但我使用了最新版本的雅各和声纳库/声纳-java。因此,除了名称之外,但措施是/应该是相同的。
但是从你提供的数字来看,你的分析似乎有些奇怪。不仅百分比值不同,而且绝对值也不同(Jacoco有9个未覆盖的分支,Sonarqube有15个未覆盖的分支)。
所以我检查了你正在使用的版本——雅各科0.8.0和使用雅各科0.7.9的声纳java插件v4.11.0.11033。
Jacoco 0.8.0的发行说明如下:
在创建报告的过程中,各种编译器生成的工件被过滤掉,否则需要不必要的、有时是不可能的技巧来避免部分覆盖或遗漏覆盖:
因此,我的最佳猜测是,Jacoco0.8.0生成的报告过滤掉了一些提到的生成工件,有效地减少了分支的总数。然而,SonarJava使用的是Jacoco0.7.9,它不过滤生成的工件,因此数量更高(覆盖率更低)。
也许您应该将您的Jacoco版本降级为0.7.9或升级sonar-java插件。
我使用jacoco来获取代码覆盖率指标,并使用声纳qube以及它来可视化它。 Jacoco拥有多个“子”覆盖范围 行 方法 分支 类 指示 但如果我们查看sonarqube,它只显示了一个“覆盖”信息。 sonarqube指的是上述5个覆盖范围中的哪一个?
几天来,我一直在努力将JaCoCo的报告集成到SonarQube 5.0.1中。我总是在声纳曲中阅读0.0%的覆盖率。 TeamCity 9生成了一个testresults.xml和一个jacoco.exec文件,我将其用于声纳转轮。TeamCity显示覆盖范围,因此exec文件接缝很好。Java代码分析基本上在SonarQube(FindBugs、PMD等)中工作。 我有一个仍在使用Ant构建的
我有一些使用try-with-resources的代码,在jacoco中,它只覆盖了一半。所有的源代码行都是绿色的,但我得到一个黄色的小符号,告诉我8个分支中只有4个被覆盖。 我无法弄清楚所有分支是什么,以及如何编写涵盖它们的代码。三个可能的地方抛出。这些是、和隐含的 不抛出任何异常, 我想不出任何其他案例,但我仍然只有8个案例中的4个。 有人能给我解释一下为什么它是8个中的4个,还有没有其他方法
主要内容:如何计算分支覆盖范围?分支覆盖技术用于覆盖控制流图的所有分支。它至少涵盖决策点的每个条件的所有可能结果(真和假)。分支覆盖技术是一种白盒测试技术,可确保每个决策点的每个分支都必须执行。 然而,分支覆盖技术和决策覆盖技术非常相似,但两者之间存在关键差异。决策覆盖技术涵盖每个决策点的所有分支,而分支测试涵盖代码的每个决策点的所有分支。 换句话说,分支覆盖遵循决策点和分支覆盖边缘。许多不同的指标可用于查找分支覆盖范围和决策覆
我需要一些帮助来估计某种形态学操作(最好使用skimage或scipy image或通常使用python),这些操作可以帮助我隔离由所有边包围的区域(参见Images.)问题是外壳可以有不同的形状和大小。封闭区域的形状和大小也各不相同。图像的例子,其中封闭的(由白色区域)黑色区域需要隔离。 通过隔离,我的意思是获得封闭的黑色区域中的所有像素坐标。 实施例1
当我运行mvn干净测试时,我希望覆盖输出被写入目标/覆盖报告,但是当我打开index.html构建后它是空的。 我检查了以下内容,jacoco.exec文件存在,其中有一组类名-在覆盖率html中有一个链接“Sessions ”,当我单击它时,我看到一组我的类似乎已经被执行-当我运行maven命令时,我没有看到错误或警告 我很困惑为什么报告是空的。从我看到的所有例子来看,这似乎应该行得通。我错过了