Sonarqube安装配置及基本使用

以Python项目为例

环境安装配置

本地配置环境

按照官网文档入门教程,Sonarqube服务需要Java17环境,否则无法启动服务,报错如下。

  1. 下载安装Java17,Java下载地址: Java Archive Downloads - Java SE 17

  2. 配置环境变量JAVA_HOME, CLASSPATH

  3. 尝试启动 sonarqube服务,依然报如上错误,需要设置java虚拟机内存(设置为512M)后方解决上述错误。

    但启动时报新错误(与elasticsearch有关 ):

    由于sonarqube官方文档未明确说明需要配置elasticsearch,因此不考虑配置。

基于Docker(推荐)

  1. 下载安装Docker 安装完毕后需要重启 Windows

  2. 启动容器镜像 若无,则会自动拉取镜像,拉取完毕后自动启动容器

    docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
    

     容器启动成功后可通过浏览器访问localhost:9000访问sonarqube服务,默认用户名和密码均为admin

基本使用

基本步骤:

  1. 登录SonarQube,使用初始密码登录后更改密码

  2. 创建新项目

    新项目可以通过各种流行DevOps平台(Azure、Butbucket Server、Github、Gitlab等)导入 ,也可以手动导入。

  3. 分析项目

  4. 查看报告

  5. 修改代码、项目迭代

分析项目

一些术语

  • Technical debt:技术负债/技术债务

    根据维基百科的定义:

    技術負債(英語:Technical debt),又譯技術債,也稱為設計負債(design debt)、
    程式碼負債(code debt),是程式設計及軟體工程中的一個比喻。指開發人員為了加速軟
    件開發,在應該採用最佳方案時進行了妥協,改用了短期內能加速軟件開發的方案,從而在
    未來給自己帶來的額外開發負擔。這種技術上的選擇,就像一筆債務一樣,雖然眼前看起來
    可以得到好處,但必須在未來償還。軟體工程師必須付出額外的時間和精力持續修復之前的
    妥協所造成的問題及副作用,或是進行重構,把架構改善為最佳實作方式。
    

    常见技术负债原因:

    不充足的事前定义
    商务压力
    缺少流程或理解
    紧耦合组件
    缺少测试套件
    缺少文档 
    缺乏合作
    拖延重构
    缺少知识
    技术领导力差
    ...
    
  • Code Smell:代码异味/代码坏味道

    根据维基百科的定义:

    程式開發領域,代碼中的任何可能導致深層次問題的症狀都可以叫做代碼異味。 通常,在對
    代碼做簡短的回饋迭代時,代碼異味會暴露出一些深層次的問題,這裡的回饋迭代,是指以
    一種小範圍的、可控的方式重構代碼。基於這些暴露的問題,人們會進一步的檢查設計和代碼
    中是否還存在別的代碼異味,然後再做進一步的重構。
    

    常见代码异味:

    代码重复
    长方法
    巨类
    参数过多
    特性依赖
    人为的复杂
    ......
    
  • Vulnerability, 脆弱性/漏洞; HotSpot,热点

    热点和漏洞的主要区别在于,在是否修改程序之前是否需要进行审查。
    
    热点会突出显示对安全敏感的代码片段,但可能不会影响整个应用程序的安全性,只是对可能存在
    的风险提出警示。是否有害安全性取决于开发人员对代码进行审查后的决定,确保不影响程序
    安全性的情况下可以不修改代码。
    
    漏洞意味着发现了影响应用程序安全性的问题,需要立即修复。
    

质量指标及合格基准

SonarQube主要针对以下维度对代码进行评价,每一个维度都有细分的评价子维度(与指定 的规则库相关)

  • 可靠性

  • 安全性

  • 安全热点回顾

    突出需要检查的安全敏感代码段

  • 可维护性

  • 测试覆盖率

  • 重复行数

分析步骤

1. 下载扫描工具SonarScanner
2. 在项目目录中执行代码扫描脚本

示例命令如下:

C:\Users\Administrator\Downloads\sonar-scanner-cli-4.8.0.2856-windows\sonar-scanner-4.8.0.2856-windows\bin\sonar-scanner.bat -D"sonar.projectKey=RSDataGet" -D"sonar.sources=." -D"sonar.host.url=http://localhost:9000" -D"sonar.token=sqp_0709400c95442657a158cfbe9104c7213b4007e6"
3. 查看分析报告

SonarQube通过统计数据和可视化图表展示代码审计结果。

4. 解决问题
审查安全热点

如果确认代码无安全性问题,更改代码状态为“Safe”

代码测试覆盖率提高
  1. 使用测试覆盖率工具生成测试报告文档,如使用coverage

    coverage run <program> args
    coverage xml -o coverage.xml
    
  2. 在项目根目录的sonar-project.properties文件指定测试报告文档地址(详情参考文档Python-test-coverage

    sonar.projectKey=<sonar-project-key>
    ...
    sonar.python.coverage.reportPaths=coverage.xml
    
  3. 使用SonarQube执行代码审查 可以看到,代码覆盖率信息也被纳入到测试报告中

参考资料

SonarQube User-Guide

[Coverage & Test Data](Generate Reports for Apex, C/C++, Objective-C, Go, JS/TS and Python](https://community.sonarsource.com/t/coverage-test-data-generate-reports-for-apex-c-c-objective-c-go-js-ts-and-python/9687)

CoolCats
CoolCats
理学学士

我的研究兴趣是时空数据分析、知识图谱、自然语言处理与服务端开发