【Sonar】<sonar.coverge.exclusions>跟<sonar.exclusions>的区别

342 阅读3分钟

一、<sonar.coverage.exclusions>的解释

  • 含义

    • <sonar.coverage.exclusions> 主要用于排除某些文件或代码部分不被代码覆盖率分析工具考虑。代码覆盖率分析工具通常会统计代码中被测试用例覆盖的部分,而使用 <sonar.coverage.exclusions> 可以指定哪些代码不参与代码覆盖率的统计。
  • 示例

    • 假设你有一个 GlobalNav 前端项目,其中包含一些配置文件、自动生成的代码或者一些第三方库代码,这些部分可能不需要进行代码覆盖测试。例如,你可以在 sonar-project.properties 中这样配置:
sonar.coverage.exclusions=**/config/*.js,**/generated/*.js,**/node_modules/**/*.js
  • 在这个例子中,**/config/*.js 排除了 config 目录下的所有 .js 文件,**/generated/*.js 排除了 generated 目录下的所有 .js 文件,**/node_modules/**/*.js 排除了 node_modules 目录及其子目录下的所有 .js 文件不参与代码覆盖率的统计。这是因为这些文件可能不是你自己开发的核心业务逻辑代码,或者不适合进行单元测试。

二、<sonar.exclusions>的解释

  • 含义

    • <sonar.exclusions> 更广泛地用于排除文件或代码部分不被 SonarQube 分析。SonarQube 会进行多项代码质量检查,如代码规范检查、潜在问题发现、代码重复检查等,而使用 <sonar.exclusions> 可以让某些文件或代码部分不参与 SonarQube 的任何分析。
  • 示例

    • 继续以 GlobalNav 前端项目为例,如果你有一些旧的代码,暂时不想对其进行任何 SonarQube 分析,或者某些特定的脚本文件、测试数据文件等。你可以这样配置:
sonar.exclusions=**/old/*.js,**/scripts/*.js,**/testdata/*.js
  • 这里的 **/old/*.js 排除了 old 目录下的所有 .js 文件,**/scripts/*.js 排除了 scripts 目录下的所有 .js 文件,**/testdata/*.js 排除了 testdata 目录下的所有 .js 文件不参与 SonarQube 的任何分析,包括代码质量检查、代码重复度检查、潜在问题发现等。

三、区别总结

  • 范围不同

    • <sonar.coverage.exclusions> 主要聚焦于代码覆盖率的排除,只影响代码覆盖率分析部分。它允许你将一些代码排除在测试覆盖度的检查范围之外,而其他的 SonarQube 分析(如代码质量检查、潜在问题发现等)可能仍然会对这些代码进行分析。
    • <sonar.exclusions> 具有更广泛的排除范围,它会将文件或代码部分从 SonarQube 的所有分析中排除,包括代码质量检查、代码重复度检查、潜在问题发现、代码覆盖率分析等。
  • 目的不同

    • 使用 <sonar.coverage.exclusions> 的主要目的是避免对某些代码的代码覆盖率分析,可能是因为这些代码无法或无需进行单元测试,比如第三方库、配置文件或自动生成的代码等。
    • 使用 <sonar.exclusions> 的目的是将某些代码完全排除在 SonarQube 的检查范围之外,可能是因为这些代码是过时的、实验性的、临时的,或者有其他特殊原因不希望进行任何 SonarQube 检查。

在实际项目中,根据你的具体需求,合理使用这两个排除项可以帮助你更好地利用 SonarQube 工具,避免对不必要的代码进行不必要的分析,同时更准确地评估核心业务代码的代码质量和测试覆盖情况。例如,在 GlobalNav 项目中,如果你只想关注核心导航逻辑代码的代码覆盖率和质量,就可以将配置文件、旧代码、第三方库代码等通过这两个排除项进行合理排除。