1. 概述
SonarQube 是一项开源独立服务,通过测量代码质量和代码覆盖率来概述源代码的整体健康状况。
在本教程中,我们将介绍使用 SonarQube 和 JaCoCo 测量代码覆盖率的过程。
2. 说明
2.1.代码覆盖率
代码覆盖率,也称为 测试覆盖率 ,是衡量应用程序代码在测试中执行了多少的指标。从本质上讲,它 是许多团队用来检查测试质量的指标,因为它代表了已测试和执行的生产代码的百分比 。
这让开发团队确信他们的程序已经过广泛的错误测试,并且应该相对没有错误。
2.2. SonarQube 和 JaCoCo
SonarQube检查并评估影响我们代码库的所有内容,从微小的样式细节到关键的设计错误。这使开发人员能够访问和跟踪代码分析数据,范围从样式错误、潜在错误和代码缺陷到设计效率低下、代码重复、缺乏测试覆盖率和过度复杂性。
它还定义了质量门,这是一组基于测量的布尔条件。此外,SonarQube 还可以帮助我们了解我们的代码是否已准备好投入生产。
SonarQube 与JaCoCo集成使用,JaCoCo 是一个免费的 Java 代码覆盖率库。
3.Maven配置
3.1.下载 SonarQube
我们可以从其官方网站下载SonarQube。要启动 SonarQube,请在 Windows 计算机上执行名为 StartSonar.bat 的文件,或在 Linux 或 macOS 上执行名为 sonar.sh 的 文件。该文件位于解压下载的 bin 目录中。
3.2.设置 SonarQube 和 JaCoCo 的属性
让我们首先添加定义 JaCoCo 版本、插件名称、报告路径和声纳语言的必要属性:
<properties>
<!-- JaCoCo Properties -->
<jacoco.version>0.8.6</jacoco.version>
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
<sonar.language>java</sonar.language>
</properties>
属性 sonar.jacoco.reportPath 指定生成 JaCoCo 报告的位置。
3.3. JaCoCo 的依赖项和插件
JaCoCo Maven 插件提供对 JaCoCo 运行时代理的访问,该代理记录执行覆盖率数据并创建代码覆盖率报告。
现在,让我们看一下将添加到 pom.xml 文件中的依赖项:
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.6</version>
</dependency>
接下来,让我们配置将 Maven 项目与 JaCoCo 集成的插件:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-site</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
4. SonarQube 的实际应用
现在我们已经在 pom.xml 文件 中定义了所需的依赖项和插件,我们将执行 mvn clean install 来构建我们的项目。
然后,我们将 在执行命令 mvn sonar:sonar 之前启动 SonarQube 服务器 。 一旦此命令成功执行,它将为我们提供一个指向项目代码覆盖率报告的仪表板的链接:
我们还会注意到,它在项目的目标文件夹中创建了一个名为 jacoco.exec 的文件。该文件是 SonarQube 将进一步使用的代码覆盖率的结果:
它还在 SonarQube 门户中创建一个仪表板。此仪表板显示了覆盖率报告,其中包含在我们的代码中发现的所有问题、安全漏洞、可维护性指标和代码重复块:
5. 结论
SonarQube 和 JaCoCo 是两个我们可以一起使用的工具,可以轻松测量代码覆盖率。他们还通过查找代码中的代码重复、错误和其他问题来概述源代码的整体运行状况。这有助于我们了解我们的代码是否可以用于生产。
本文的完整源代码可在 GitHub 上获取。