huaqiangli 2019-08-05
Sonar (SonarQube)是一个开源平台,用于管理源代码的质量
Sonar 不只是一个质量数据报告工具,更是代码质量管理平台
支持Java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十几种编程语言的代码质量管理与检测。
Sonar可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。
不遵循代码标准
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。
潜在的缺陷
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷。
糟糕的复杂度分布
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员 难以理解它们, 且如果没有自动化的单元测试,对于程
序中的任何组件的改变都将可能导致需要全面的回归测试。
重复
显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示 源码中重复严重的地方。
注释不足或者过多
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动 时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
缺乏单元测试
sonar可以很方便地统计并展示单元测试覆盖率。
糟糕的设计
通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方
的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测藕合。
个人使用之后认为 : sonarQube的优势如下(相比于阿里编码规约这种市面上常见类似软件):
更加优秀的图形化界面
基本上通过界面就可以对自己项目的代码状况一目了然
可以查询出其它软件难以定位到的问题
比如 :
可能导致空指针异常的问题 (对象在进行使用前没有加空的判断)
可能导致内存泄漏的问题, 在try catch 块里面,直接使用e.printStackTrace()将堆栈信息打印到内存的
可能导致的漏洞 : 成员变量使用public定义的
还有诸如 : 流等未关闭或者是非正常关闭都能够检测出来!
功能非常强大!!
首先确保安装了jdk1.8 +
到此链接 https://www.sonarqube.org/downloads/
下载sonalqube(下载社区版,是开源的),
我下载的是sonarqube-7.2.1,因为最新版7.9.1需要jdk11支持
并解压,解压完之后的目录如下 :
linux、Mac sh sonar.sh start启动
windows 双击StartSonar.bat 启动
到浏览器界面,输入 : http://localhost:9000
如果能访问表明安装成功
版本要求:
在conf目录下的sonar.properties文件下:
有这样一行配置 :
#----- MySQL >=5.6 && < 8.0
为sonarqube 创建一个数据库
create database sonar; -- 创建数据库
CREATE USER 'username'@'host' IDENTIFIED BY 'password'; -- 创建用户并设置密码 -- username 为创建的用户名 -- host 为对应的主机地址,本地就是localhost -- password 为设置的密码 GRANT ALL ON *.* TO 'username'@'localhost'; -- 对用户进行授权操作
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false # 刚刚创建的sonarQube用户 sonar.jdbc.username=sonar # 创建用户对应的密码 sonar.jdbc.password=sonar # 设置编码格式为UTF-8 sonar.sorceEncoding=UTF-8 # sonar登陆用户名 sonar.login=admin # sonar登陆密码 sonar.password=admin
在之前弹出的cmd窗口执行ctrl + c,
弹出来的提示选择Y,退出SonarQube服务
这次因为要进行数据库的初始化操作,所以需要的时间可能稍微久一点
启动成功后,浏览器输入 : http://localhost:9000 进入界面
登录
点击界面右上角的登录按钮, 进行登录 :
初始的账户名 : admin
初始的密码 : admin
附 : 一些关键配置的修改,如 主机地址,context,端口号等:
通常情况下使用默认的配置即可!
文件 /conf/sonar.properties
#sonar.web.host=0.0.0.0 #sonar.web.context= #sonar.web.port=9000
点击 导航栏的 Administration, 选择Marketplace
搜索 Chinese pack, 点击install进行安装
安装成功后, 重启 SonarQube !
使用maven的方式进行分析
<settings> <pluginGroups> <pluginGroup>org.sonarsource.scanner.maven</pluginGroup> </pluginGroups> <profiles> <profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <sonar.host.url>http://loaclhost:9000</sonar.host.url> </properties> </profile> </profiles> </settings>
其中sonar.host.url 值就是 上文启动的sonar 服务器地址。
到项目所在的文件路径下:
使用命令提示符或者是power shell执行 如下命令:
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.0.1398:sonar
出现: BUILD SUCCESS 标识之后
刷新界面查看 :
强制参数:
可以配置的参数:
Project identity
sonar.projectName 项目名称
sonar.projectversion 项目版本
Authentication
sonar.login 分析该项目的用户名称
sonar.password 分析该项目的用户密码
SonarQube Web管理者通过配置和设置以下参数值对项目源代码进行:
复杂度、覆盖率、文档、重复、问题、可维护性、可靠性、安全性、大小等约束和规范。
sonar中的质量阈管理以下内容。