Sonarqube系列02:深入理解Sonarqube工作原理及概念

在开始具体代码的质量分析之前,还需要理解 Sonarqube 的工作流程才能更好的使用它。在这章内容中将详细介绍它的工作原理以及理解所需的概念。

1. 工作原理

1.1. 系统组件图

e31c17be8396dd3e1cf76502e3d654f3.png
Sonarqube 实例包括三个组件:

  1. Sonarqube server 提供质量管理服务,主要包括:
    • Web Server 用来提供用户界面
    • Search Server 基于 ES 的搜索服务
    • Compute Engine 负责处理代码分析报告,并将其保存在数据库中的计算引擎
  2. Database Server 存储数据:
    • 代码扫描期间生成的代码质量和安全性指标和问题
    • Sonarqube 实例配置 (规则、质量阀、用户、权限、项目等)
  3. Scanner 扫描分析代码问题

1.2. 理解要点

下面是一些理解要点,可以帮助你更好的理解 Sonarqube 是如何工作的。

  1. 具备扫描能力的是 Scanner,Scanner 通过 HTTP/HTTPS 协议获取 Sonarqube Server 配置的审查规则,在本地进行代码扫描并生成分析报告,然后将报告上传至 Sonarqube Server 计算。
  2. Sonarqube Server 接收到报告后进行报告解析,汇聚成各个维度的分析数据生成一个 Snapshot 并存储,用户可以通过 Web 界面查看对应的代码审查 Snapshot。
  3. Sonarqube 提供多种形式的 Scanner 便于不同语言开发者使用,包括 1 个通用的 CLI 工具: SonarScanner,以及匹配不同 CI 工具、语言的适配版本(Gradle、. NET、Maven、Jenkins、Azure DevOps、Ant 等)。
  4. 基于要点 1,可以使用三方代码分析工具进行分析并将其报告转换成 Sonarqube 报告格式,再通过 SonarScanner 上传,实现整合三方工具结果。
  5. Scanner 提供了丰富的参数定制分析过程满足个性化需求,例如如下几个场景:
    • sonar.qualitygate.wait=true 实现 Scanner 等待 Sonarqube Server 返回质量阀比对结果
    • sonar.externalIssuesReportPaths 指定待三方报告路径
    • sonar.exclusions 排除待检查的目录

2. 概念

在工作原理介绍中使用了一些概念术语,在 Sonarqube 的使用过程中需要理解这些关键性概念。

2.1. 核心概念

概念 说明
Bug 错误,指代码中出现的错误,可靠性维度
Vulnerability 漏洞,指代码中出现的后门,安全维度
Code Smell 代码异味,指使维护人员修改代码更加困难的用法实现,可维护性维度
Security Hotspot 安全热点,指需要人工复审确认是否存在安全风险,安全维度
Technical Debt 技术债务,指修复所有「Code Smell」所需的预估时间
Remediation Cost 修复成本,指修复「Bug」「Vulnerability」问题所需的预估时间
Rule 代码规则,应遵循的编码标准或实践。不遵守编码规则会导致错误、漏洞、安全热点和代码异味
Quality Profile 质量配置,一组代码规则,每个「Snapshot」都基于一个质量配置
Snapshot 质量快照,在特定时间对特定项目的代码质量问题一次审查结果
Quality Gate 质量阈或质量门,衡量代码审查结果的质量策略,达到「Quality Gate」要求表示待审查代码符合要求,支持两个维度:增量代码、全量代码
Project 审查项目,与代码仓库一一对应,支持多分支
Token 审查项目时所用授权验证

除此之外,还有其他的概念,可以查看这里

2.2. 理解概念

这里总结了对概念理解有帮助的要点,帮助你更快理解。

  1. Sonarqube 代码审查的问题类型主要包括:错误(Bug)、漏洞(Vulnerability)、安全热点(Security Hotspot)、代码异味(Code Smell) 。
  2. 审查问题的依据的是不同编程语言的代码规则(Rule),为了方便通常把一组规则组合到一起,称为质量配置(Quality Profile )。
  3. 如果审查结果不满足质量门(Quality Gate),则会判定本次审查失败,可以利用这个特性配合 CI 工具实现自动化机器审查。
  4. 针对每个项目(Project),可以设置不同的质量配置(Quality Profile)、质量门(Quality Gate)、授权验证(Token),当然也可以使用默认配置。
  5. 项目(Project)的一次审查将会生成一个质量快照(Snapshot),快照包含了审查问题以及其对应的修复成本(Remediation Cost)和技术债务(Technical Debt),修复成本和技术债务是在规则(Rule)中预定义的,并不是 AI 智能动态计算的,所以只是参考。

3. 写在最后

在动手之前,建议花点时间去理解上面的介绍内容,能够更好的帮助你去使用 Sonarqube。