Sonar-代码质量检测搭建

下载安装SonarQube

下载官网路径:https://www.sonarqube.org/downloads/

研究搭建使用版本:SonarQube7.8  (7.8以上不支持mysql数据库)mysql版本(5.6-5.8)软件环境JDK1.8

下载链接:https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.8.zip

 

Sonar-代码质量检测搭建

windows安装

解压目录:D:\xxx\sonarqube-7.8

Sonarqube内置集成elasticsearch

./elasticsearch/conf/elasticsearch-.yml 集群配置

集群配置参考链接说明:https://www.cnblogs.com/zlslch/p/6419948.html

此次研究单机部署,无需修改配置

 

Sonar-代码质量检测搭建

sonar配置 ./conf/sonar.properties

数据库配置

#--------------------------------------------------------------------------------------------------

# DATABASE

#

# IMPORTANT:

# - The embedded H2 database is used by default. It is recommended for tests but not for

#   production use. Supported databases are MySQL, Oracle, PostgreSQL and Microsoft SQLServer.

# - Changes to database connection URL (sonar.jdbc.url) can affect SonarSource licensed products.

 

# User credentials.

# Permissions to create tables, indices and triggers must be granted to JDBC user.

# The schema must be created first.

sonar.jdbc.username=root

sonar.jdbc.password=root

 

#----- Embedded Database (default)

# H2 embedded database server listening port, defaults to 9092

#sonar.embeddedDatabase.port=9092

 

#----- DEPRECATED

#----- MySQL >=5.6 && <8.0

# Support of MySQL is dropped in Data Center Editions and deprecated in all other editions

# Only InnoDB storage engine is supported (not myISAM).

# Only the bundled driver is supported. It can not be changed.

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?serverTimezone=GMT%2B8&tinyInt1isBit=false&useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=60000&autoReconnect=true&failOverReadOnly=false&useSSL=false

 

#----- Oracle 11g/12c

#sonar.jdbc.url=jdbc:oracle:thin:@localhost:1521/XE

 

 

#----- PostgreSQL 9.3 or greater

#sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube?currentSchema=my_schema

 

 

#----- Microsoft SQLServer 2014/2016/2017 and SQL Azure

#sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar;integratedSecurity=true

 

# Use the following connection string if you want to use SQL Auth while connecting to MS Sql Server.

#sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar

 

#----- Connection pool settings

sonar.jdbc.maxActive=60

 

# The maximum number of connections that can remain idle in the

# pool, without extra ones being released, or negative for no limit.

sonar.jdbc.maxIdle=5

 

# The minimum number of connections that can remain idle in the pool,

# without extra ones being created, or zero to create none.

sonar.jdbc.minIdle=2

 

# The maximum number of milliseconds that the pool will wait (when there

# are no available connections) for a connection to be returned before

# throwing an exception, or <= 0 to wait indefinitely.

sonar.jdbc.maxWait=5000

 

sonar.jdbc.minEvictableIdleTimeMillis=600000

sonar.jdbc.timeBetweenEvictionRunsMillis=30000

注:数据库配置开启后每次sonar项目同步结果很慢,扫描后要等几分钟,进行数据处理落库

 

访问参数配置

# Web context. When set, it must start with forward slash (for example /sonarqube).

# The default value is root context (empty value).

sonar.web.context=

# TCP port for incoming HTTP connections. Default value is 9000.

sonar.web.port=9000

 

 

# The maximum number of connections that the server will accept and process at any given time.

# When this number has been reached, the server will not accept any more connections until

# the number of connections falls below this value. The operating system may still accept connections

# based on the sonar.web.connections.acceptCount property. The default value is 50.

sonar.web.http.maxThreads=50

 

# The minimum number of threads always kept running. The default value is 5.

sonar.web.http.minThreads=5

 

# The maximum queue length for incoming connection requests when all possible request processing

# threads are in use. Any requests received when the queue is full will be refused.

# The default value is 25.

sonar.web.http.acceptCount=25

 

注:其他参数忽略

windows环境下启动

 cd  D:\xxxx\sonarqube-7.8\sonarqube-7.8\bin\windows-x86-64

双击启动:StartSonar.bat

Sonar-代码质量检测搭建

启动成功结果:

Sonar-代码质量检测搭建

访问页面:http:localhost:9000/

Sonar-代码质量检测搭建

登录:http://localhost:9000/sessions/new

默认admin/admin

Sonar-代码质量检测搭建

 

linux安装

./elasticsearch/conf/elasticsearch-.yml 集群配置

同windows

sonar配置 ./conf/sonar.properties

同windows

Linux环境下启动

cd /xxx/sonarqube-7.8/bin/linux-x86-64

./sonar.sh start

访问页面:http://192.168.xxx.xxx:9000/about

后续同window

Linux遇到启动问题

1.can not run elasticsearch as root 

Sonarqube 内置 elasticsearch , elasticsearch 启动不能使用root 用户

#解决方案:

#root 用户创建子账号

#新建用户,设置密码

adduser sonar

passwd sonar 

#es目录赋权

chown -R sonar:sonar ./sonarqube-7.8/*

 

2.max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

 

#解决方案:

#root 用户

vi /etc/sysctl.conf

#增加配置

vm.max_map_count=262144

#生效命令:

/sbin/sysctl -p

 

3.max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536] 

 

#解决方案:

#root 用户

vi /etc/security/limits.conf

 

#最下面增加

  * soft nofile 65536

  * hard nofile 65536

 

#切换用户重新登录

#检测当前用户句柄数

ulimit -a

 

IDEA集成SonarLint

插件安装

File ->Setings -> Pluins -> sonarLint

Sonar-代码质量检测搭建

安装后重启IDEA服务

Eclipse 集成SonarLint

插件安装

help -> eclipse marketplace...,搜索sonarlint, Install

Sonar-代码质量检测搭建

 

Sonar-代码质量检测搭建

从Window -> show view 中查看SonarLint

Sonar-代码质量检测搭建

注:Eclipse低版本不支持插件安装

离线安装

下载地址:

https://bintray.com/sonarsource/SonarLint-for-Eclipse/download_file?file_path=releases%2Forg.sonarlint.eclipse.site-3.6.0.201806071228-RELEASE.zip

Sonar-代码质量检测搭建

Sonar-代码质量检测搭建

安装后restart,重启Eclipse

Maven Settings sonar同步全局配置

Settings配置

#找到maven 环境使用的settings.xml 文件 增加如下配置

<profile>

<id>sonar</id>

<activation>

<activeByDefault>true</activeByDefault>

</activation>

<properties>

<sonar.host.url>

  http://192.168.xxx.xxx:9000

</sonar.host.url>

 </properties>

</profile>

Sonar扫描结果将会同步至:http://192.168.xxx.xxx:9000 服务器

注:IDEA,Eclipse也可以内部集成配置同步地址,此处只做Maven全局配置

 

Maven项目POM配置Sonar

<plugin>
  <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.6.0.1398</version>
</plugin>

 

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <encoding>utf-8</encoding>
        <skip>true</skip>
    </configuration>
</plugin>

注:maven-compiler-plugin -> configuration 去掉java版本号,容易冲突

Maven update

IDEA同步Sonar扫描

未同步前

Sonar-代码质量检测搭建

Sonar-代码质量检测搭建

双击 sonar:sonar 后,等待同步结果

Sonar-代码质量检测搭建

SUCCESS 表示成功

访问:http://192.168.xxx.xxx:9000/projects 

可以看到新增 :fills-tools

Sonar-代码质量检测搭建

 

Sonar-代码质量检测搭建

 

Sonar-代码质量检测搭建

 

Eclipse 同步 Sonar 扫描

Sonar-代码质量检测搭建

Goals: 输入 sonar:sonar

Sonar-代码质量检测搭建

Debug/Run 运行

Sonar-代码质量检测搭建

 

后续同IDEA

Maven 同步Sonar 扫描

windows 控制台cd 到系统目录下执行命令

mvn sonar:sonar

成功后会将扫描信息同步到服务端

后续同IDEA

 

注:IDEA ,Eclipse 实现同 maven 即 sonar:sonar

SonarQube 关键字解释

 

复杂度(Complexity)
指标(英文) 指标(中文) 描述
Complexity 复杂度 基于代码的分支计算出来的复杂度,即圈复杂度。当一个方法的控制流多了一个分支,它的复杂度就会增加1。每个方法的最小复杂度为1。
Congnitive Complexity 理解复杂度 理解代码的控制流的难易程度
覆盖率(Coverage)
Condition coverage 分支覆盖 被单元测试覆盖到的分支数
Condition coverage(%) 分支覆盖率 在包含一些布尔表达式的每一行代码中,条件覆盖率简单地回答了以下问题:“是否将每个布尔表达式都计算为true和false?”这是单元测试执行期间遵循的流控制结构中可能的条件的密度。
分支覆盖率 = (CT + CF)/(2*B)
其中,CT为至少一次被评估为true的分支数,CF为至少一次被评估为false的分支数,B为总分支数。
Condition coverage on new code 新代码的分支覆盖率 同上,但只针对新代码和更新的代码
Line coverage 代码覆盖率 代码行覆盖率,即被单元测试覆盖的行数/总代码行数
Line coverage on new code 新代码覆盖率 新代码行覆盖率,公式同上,但只针对新代码或更新的代码
Coverage 覆盖率 总覆盖率,即分支覆盖率和代码行覆盖率的总和,它旨在提供更加准确的数据去展现源代码被单元测试覆盖的程度。公式:(CT+CF+LC)/(2*B+EL)
Coverage on new code 新覆盖率 同上,但只针对新代码和更新的代码
Lines to cover 代码行 被单元测试覆盖的代码行数
Lines to cover on new code 覆盖的新代码 被单元测试覆盖的代码行数(只针对新增代码或更新的代码)
Skipped unit tests 单元测试忽略数 忽略的单元测试用例数
Uncovered conditions 未覆盖分支 单元测试未覆盖的分支数
Uncovered conditions on new code 未覆盖新分支 单元测试未覆盖的新增分支数
Uncovered lines 未覆盖的代码 单元测试未覆盖的代码行数
Uncovered lines on new code 未覆盖的新代码 单元测试未覆盖的新增代码行数
Unit tests duration 单元测试持续时间 单元测试所持续的时间
Unit test errors 单元测试错误数 单元测试执行错误数,即运行异常
Unit test failures 单元测试失败数 单元测试执行失败数,即运行正常但是得到非预期结果
Unit test success density (%) 单元测试成功(%) (单元测试用例数-(单元测试错误数+单元测试失败数))/单元测试用例数*100
Unit tests 单元测试数 单元测试用例数
重复(Duplication)
Duplicated blocks 重复块 重复行块数。如何定义一个块是否重复块:
JAVA类项目:
- 无论标记和行数多少,只要有至少10个连续重复的语句,则定义为重复块;
Duplicated blocks on new code 新代码中的重复块 同上,但只针对新代码
Duplicated files 重复文件 重复的文件数
Duplicated lines 重复行 重复的代码行数
Duplicated lines (%) 重复行(%) 重复行数/总行数*100
Duplicated lines on new code 新代码中的重复行 同上,但只针对新代码
Duplicated lines(%)on new code 新代码中的重复行密度(%) 同上,但只针对新代码
问题(Issues)
指标(英文) 指标(中文) 描述
Blocker violations 阻断违规 阻断违规数
Confirmed issues 确认问题 确认问题数
Critical violations 严重违规 严重违规数
false positive violations 误判问题 误判问题数
Info violationd 提示违规 提示违规数
violations 违规 违规数
major violations 主要违规 主要违规数
minor violations 次要违规 次要违规数
New blocker violations 新阻断违规 新阻断违规数
New critical violations 新严重违规 新严重违规数
New info violations 新提示违规 新提示违规数
New violations 新违规 新违规数
New major violations 新主要违规 新主要违规数
New minor violations 新次要违规 新次要违规数
Open issues 开启问题 状态为开启的问题数
Reopen issues 重开问题 状态为重开的问题数
Unfixed issues 不修复的问题 状态为不修复的问题数
可维护性(Maintainability )
指标(英文) 指标(中文) 描述
Technical Debt 技术债务 修复所有可维护性问题所需的工作量,单位为分钟。当该值以天为单位展示时默认为8小时/天。
Technical Debt on new code 新代码的技术债务 同上,但只针对新代码。
Code Smells 坏味道 坏味道数
Maintainability Rating on new code  新代码可维护率 同上,但只针对新代码。
New code smell 新增坏味道 新增坏味道数
Technical Debt Ratio 技术债务比率 开发成本与修复成本的比率。
Technical Debt Ratio on new code 新技术债务比率 开发成本与修复成本的比率。
该比率=修复成本/开发成本,也=修复成本/(代码行数*每行代码开发成本)
每行代码开发成本为0.06天
可靠性(Reliability)
指标(英文) 指标(中文) 描述
New Vulnerabilities 新增漏洞 新增安全漏洞数
Security Rating 安全比率 A = 0 安全漏洞
B = 至少1个Minor漏洞
C = 至少1个Major漏洞
D = 至少1个Critical漏洞
E = 至少1个Blocker漏洞
Security Rating on new code 新代码安全率 同上,但只针对新代码。
Security remediation effort 安全修复工作 修复所有安全漏洞所需的工作量,单位为分钟。当该值以天为单位展示时默认为8小时/天。
Security remediation effort on new code 新代码的安全修复工作 同上,但只针对新代码。
Vulnerabilities 漏洞 安全漏洞数
大小(Documentation)
指标(英文) 指标(中文) 描述
Classes 类数目
Comment lines 注释行数  
Comments(%) 注释(%) 注释行数/(注释行数+代码行数)
Directories 目录 目录数
Files 文件 文件数
Functions 方法 方法数
Lines 行数 物理行数,包含回车。
Lines of code 代码行数 代码行数,包含至少一个非空格、非tab和非注释的字母的代码行数
Lines of new code 新增代码行数 新增代码行数,包含至少一个非空格、非tab和非注释的字母的代码行数
Projects 项目 项目数
Statements 语句 语句数

 

上一篇:那些总是写烂代码的同学,强烈推荐你使用这款IDEA插件


下一篇:持续集成(二)