用户您好!请先登录!

SonarQube那点事

SonarQube那点事

SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检测。

SonarQube特性

持续检查

  • 项目整体的健康程度
    项目的主页面会给出,项目整体的Bugs、Vulnerabilities、Code Smells
  • 专注于漏洞
    water-leak-paradigm可以有效的管理代码质量:新特性,增加的,改变的
    (water-leak-paradigm是sonarqube研究的一种代码管理方法)
    在项目监测报告中,需要密切关注:New Bugs、New Vulnerabilities
  • 实施质量阈值
    在团队项目中,可以设置质量阈值(Quality Gate),用于监管质量
  • 分支分析
    确保干净的代码才会被合并到主分支中

监测棘手的问题

多语言

支持:ABAP、C/C++、C#、CSS、COBOL、Flex、Go、HTML、Java、JavaScript、Kotlin、Objective-C、PL/SQL、PL/I、PHP、Python、RPG、Ruby、Swift、T-SQL、TypeScript、VB.NET、VB6
XML

集成DevOps

集中质量

七个维度检测代码质量:

  • 复杂度分布(complexity):代码复杂度过高将难以理解
  • 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方
  • 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
  • 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范
  • 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
  • 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug
  • 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度
  • 用户本地使用IDE的插件进行代码分析
  • 用户上传到源代码版本控制服务器
  • 持续集成,使用Sonar Scanner进行扫描
  • 将扫描结果上传到SonarQube服务器
  • SonarQube server将结果写入db
  • 用户通过web ui查看扫描结果
  • SonarQube导出结果到其他需要的服务

下面将会介绍这个工具的安装、配置以及使用。
默认电脑中已安装JDK和MySQL数据库(Sonar7.4支持的版本:Java1.8, MySQL5.6/5.7 关于支持的基础环境可以参照https://docs.sonarqube.org/latest/requirements/requirements/),JDK已配置环境变量,MySQL服务已启动。

1. SonarQube安装

目前SonarQube最新的版本是7.4,该版本对比以往增加了:DevOps工具、Cognitive Complexity等。会以该版本为例。

1.1 下载

在SonarQube的下载页面:https://www.sonarqube.org/downloads/,下载需要的版本。一般会下载社区版本,如下图所示:

1.2 安装

下载完成后,解压缩直接可以使用,打开bin目录下对应OS的StartSonar.bat,例如本人的电脑是windows64位

可能出现的意外情况:StartSonar.bat打开后,运行几秒钟后退出,此时Sonar服务并没有成功启动。
解决办法:打开任务管理器(Ctrl+Alt+Delete),找到 Java(TM) Platform SE binary,通常情况下会有2-3个,结束任务,之后重新双击启动StartSonar.bat,界面会有提示SonarQube is up,即成功启动。

浏览器中打开:http://localhost:9000,可以进入web界面。

1.3 注册

点击右上角Log in在web页面注册账号,并登录

备注:保存账号及密码,后面会用到

2. 配置

SonarQube工具需要数据库的支持,Scanner(后续会讲到)扫描项目时,会将分析结果存入数据库,web页面生成报告时会读取数据库的数据。

SonarQube目前支持Oracle、MySQL、PostgreSQL、MS SQL,数据库版本以及要求,参照:https://docs.sonarqube.org/latest/requirements/requirements/,本次安装使用的是MySQL

2.1 新建数据库

命令行 窗口:mysql -u root -p //登录数据库
create database sonar7 default character set utf8 collate utf8_general_ci;
//创建数据库,默认编码utf8
MySQL数据库必须是InnoDB存储引擎,不支持MyISAM

2.2 配置 sonar.properties

打开安装目录下的conf文件,找到sonar.properties,编辑mysql节点的配置文件(不同的数据库对应不同的节点,sonar.properties中有guide)

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar7?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false  #数据库连接地址
sonar.jdbc.username=root  #数据库账号
sonar.jdbc.password=admin #数据库密码
sonar.sorceEncoding=UTF-8
sonar.login=admin #web页面注册的账号
sonar.password=admin #web页面注册的密码

配置完成后,重新启动StartSonar.bat, 如果启动不成功,可以结束Java(TM) Platform SE binary。
启动成功的标志,下述三项,缺一不可

  • sonarqube is up
  • localhost:9000 可以打开
  • 数据库中,生成了十几张表

3. 使用

3.1 下载配置Scanner

SonarQube Scanner 是默认Scanner,Sonar为Maven、Gradle等都开发了Scanner

这里我们使用default的Scanner,可以通过下面链接下载:
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
下载完成后,配置conf文件夹下的sonar-scanner.properties

#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8

为安装目录配置环境变量

  • 新建变量,name=SONAR_SCANNER_HOME。value=G:\develop\sonarqube-7.4\sonar-scanner-3.2.0.1227-windows
  • 打开path,输入%SONAR_SCANNER_HOME%\bin;
  • sonar-scanner -h,出现以下信息,则表示环境变量设置成功

3.2 项目配置

进入待检测的项目目录中,新建sonar-project.properties,增加以下内容:

# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=My project
sonar.projectVersion=1.0 
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set. 
sonar.sources=.
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8

打开命令行窗口,切换目录到项目目录,输入sonar-scanner
运行成功后,打开web界面,即可看到对当前项目的分析。

此时查看web界面,可以看到当前项目的代码质量情况

4. 插件

sonar市场在线下载中文语言包Chinese Pack本文参考以下博客:
https://www.cnblogs.com/qiumingcheng/p/7253917.html
https://blog.csdn.net/u012448904/article/details/81706283

行走的code
行走的code

要发表评论,您必须先登录