简介

SonarQube为静态代码检查工具,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java、C、C++、JavaScripe等等二十几种编程语言的代码质量管理与检测。

通过客户端插件分析源代码,sonar客户端可以采用IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式,并通过各种不同的分析机制对项目源代码进行分析和扫描,并把分析扫描后的结果上传到sonar的数据库,通过sonar web界面对分析结果进行管理

架构图

java代码质量检查工具 VScode 代码质量扫描工具_bc

可以从七个维度检测代码质量:

(1)复杂度分布(complexity):代码复杂度过高将难以理解
(2) 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方

(3) 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
(4) 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范
(5) 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
(6) 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug

(7) 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度

准备工作

JDK1.8需要安装和环境变量
mysql数据库:安装方式如下

sonar安装

下载安装文件
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.3.zip

创建数据库sonar,和用户密码,并授权

CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; 
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;

修改配置文件

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

sonar.web.port=9000
sonar.search.port=9001

注意这里的端口我修改了,web端口是9000,es的端口是9001

WIN系统启动服务

CMD命令行下执行,初始化创建数据库和启动es等服务
E:\sonarqube-7.3\bin\windows-x86-64>StartSonar.bat

主要端口不要被占用,如果占用请关闭。
cmd查看端口占用

netstat -aon|findstr "9000"

centos利用netstat -tpnl查看的端口开放情况

centos系统启动服务

不能用root用户启动es
创建sonar 用户并赋权

[root@i-vzdytl5t linux-x86-64]# adduser sonar
[root@i-vzdytl5t linux-x86-64]# passwd sonar
[root@i-vzdytl5t sonarqube]# chown -R sonar:sonar  sonarqube-7.3

然后启动服务

[root@i-vzdytl5t linux-x86-64]# su sonarUser
[sonarUser@i-vzdytl5t linux-x86-64]$ ./sonar.sh console
//后台启动
[sonarUser@i-vzdytl5t linux-x86-64]$ ./sonar.sh start
Starting SonarQube...
Started SonarQube.

[sonarUser@i-vzdytl5t linux-x86-64]$ netstat -tlnp

#./sonar.sh start 启动服务
#./sonar.sh stop 停止服务
#./sonar.sh restart 重启服务

浏览器打开web服务安装插件

http://localhost:9000/projects 默认管理账号和密码都是admin

汉化插件安装
直接访问下面的地址,就可以看到,列表中有Chinese Pack,
点击Install安装,安装完成后菜单栏下方会提示你重启,点击重启即可
http://localhost:9457/admin/marketplace?search=Chinese

Checkstyle 插件安装
admin 登录,点击 配置 -> 系统 -> 更新中心 -> Available -> Search,输入 CheckStyle,在搜素结果中找到 CheckStyle 插件点击 Install,等待下载完成后,按照页面提示点击 Restart 自动重启服务即可完成安装。

代码检测

代码检测需要客户端把检测的报告提交到服务中去
前面已经说了客户端可以通过IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式进行扫描分析

maven 插件方式

在安装maven后的setting.xml文件的profiles标签下面贴如下配置信息

<profile>
      <id>sonar</id>
      <activation>
          <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
          <!-- 配置 Sonar Host地址,默认:http://localhost:9000 -->
          <sonar.host.url>
            http://localhost:9000
          </sonar.host.url>
      </properties>
  </profile>

进入该java项目根目录 执行如下命令,最后BUILD SUCCESS则检测成功完成

>mvn clean install sonar:sonar

Scanner安装

参照资料:

下载Scanner
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

1.解压后,打开sonar-scanner-2.8目录下的conf目录,找到sonar-scanner.properties文件

#----- Default SonarQube server
sonar.host.url=http://localhost:9000

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

2.命令查看是否可用,配置环境变量
配置环境配量
Windows下新增一个变量SONAR-RUNNER,值为sonar-scanner的解缩地址,
如E:\Program File\sonar-scanner-2.8
然后在PATH变量后面追加%SONAR-RUNNER%\bin;

centos下直接在/etc/profile下参考jdk的方式

sonar-scanner -v

测试源码分析

1、配置sonar-project.properties

在要进行代码质量检测的项目根目录下新建一个名为sonar-project.properties的配置文件

# 项目唯一标识符key
sonar.projectKey=com.demo             
# 项目名称
sonar.projectName=demo          
#  项目版本
sonar.projectVersion=1.0               

# //分析的代码文件目录
sonar.sources=src                          
sonar.sourceEncoding=UTF-8

2.cd进入你的工作空间,某个工程的代码路径,
3、敲入sonar-scanner,即可进行分析