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 上获取。