一 、SonarQube代码质量检查工具简介
SonarQube是一个代码质量管理平台,可检测代码中的错误,漏洞和不良代码习惯)。它可以与您现有的工作流程集成,以实现连续代码检查。有效利用该平台,可以提高代码review效率,最小代价的帮助团队形成统一的代码规范,发现潜在问题,最终达到提升代码质量的目的,保证了产品的质量和稳定性。
目前SonarQube支持Java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十几种编程语言的代码质量管理与检测。
Sonar可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。
1. 不遵循代码标准
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。
2. 潜在的缺陷
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷。
3. 糟糕的复杂度分布
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员 难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
4. 重复
显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示 源码中重复严重的地方。
5. 注释不足或者过多
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动 时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
6. 缺乏单元测试
sonar可以很方便地统计并展示单元测试覆盖率。
7. 糟糕的设计
通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测藕合。
下面介绍SonarQube的安装、使用说明。
二、为什么要选择sonarQube?
个人使用之后认为 : sonarQube的优势如下(相比于阿里编码规约这种市面上常见类似软件):
1. 更加优秀的图形化界面,基本上通过界面就可以对自己项目的代码状况一目了然
2. 可以查询出其它软件难以定位到的问题
3.可以自定义代码规则,满足公司内部规则
比如 :
可能导致指针出现异常的问题 (对象在进行使用前没有加空的判断)
可能导致内存泄漏的问题, 在try catch 块里面,直接使用e.printStackTrace()将堆栈信息打印到内存的
可能导致的漏洞的出现 : 成员变量使用public定义的
还有诸如 : 流未关闭或者是非正常关闭都能够检测出来!
功能非常强大!!
上个图:
三. 安装:
3.1 安装SonarQube web server
1. 首先确保安装了jdk1.8 +
2. 到此链接 下载sonalqube(下载社区版,是开源的),
我下载的是当前最新版本 7.8
3. 到解压目录的bin\linux-x86-64(我的是64位的)目录下:
执行./sonar.sh start启动
4. 到浏览器界面,输入 :
// 能够进入界面证明安装成功
3.2 安装数据库(默认是用的内嵌H2数据库,如果不需要修改,可以跳过2.2和2.3步骤)
1. 版本要求:
版本要求一般写在conf/sonar.properties文件中
【注意SonarQube7.9版本以后不支持mysql了,可以用postgres等,
使用postgres注意scheme别填错了,可以\c连接到数据库后用\dn查看】
此处跳过安装过程,只需要按照版本要求,装好数据库并创建好databese及可用用户即可。
3.3 配置数据库并重新启动服务端
1. 修改SonarQube配置文件
【添加Mysql相关配置】
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=用户名 // 刚刚创建的sonarQube用户
sonar.jdbc.password=密码 // 创建用户对应的密码
sonar.sorceEncoding=UTF-8 // 设置编码格式为UTF-8
【或者postgres相关配置】
postgres示例:
sonar.jdbc.url=jdbc:postgresql://IP:5432/sonar78?currentSchema=public
sonar.jdbc.username=用户名
sonar.jdbc.password=密码
2. 退出 SonarQube 服务端
在之前弹出的cmd窗口执行ctrl + c,
弹出来的提示选择Y,退出SonarQube服务
3. 双击StartSonar.bat文件, 重新启动SonarQube
这次因为要进行数据库的初始化操作,所以需要的时间可能稍微久一点
4. 启动成功后,浏览器输入 : 进入界面
5. 登录
点击界面右上角的登录按钮, 进行登录 :
初始的账户名 : admin
初始的密码 : admin
如上 , SonarQube的安装已经OK!
附 : 一些关键配置的修改,如 主机地址,context,端口号等:
通常情况下使用默认的配置即可!
文件 /conf/sonar.properties
#sonar.web.host=0.0.0.0
#sonar.web.context=
#sonar.web.port=9000
四. 使用
4.1. 安装必要的插件 (最重要的是汉化包)
点击 导航栏的 config, 选择应用市场,搜索 Chinese pack, 点击install进行安装,安装成功后, 重启 SonarQube !
备注:目前最新的Chinese pack包对应的版本是8.9的,所以对于老版本的sonarqube,需要手动下载对应版本的汉化包,下载路径
【对于老版本的汉化包,下载下对应的jar后放到extensions/plugins/路径下,重启sonar服务即可,比如7.9版本对应的汉化包是sonar-l10n-zh-plugin-1.28.jar】
如下图 : 进入到了很友好的中文界面!
4.2. 开始分析项目代码源代码
我是使用maven的方式进行分析
4.2.1 编辑maven 的settings.xml文件
位置 $MAVEN_HOME/conf
或者是 ~/.m2
找到对应的位置添加以下配置代码:
我的maven版本是3.5.4 对应的文件是settings.xml
版本低一点的对应的文件可能是setting.xml
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is -->
<sonar.host.url>
</sonar.host.url>
<!-- 登录token,在初次登录系统的时候,会提示你创建,也可以在sonarquebe的我的账号-安全中去配置 -->
<sonar.login>9b6f4f447b313800c28c1a4b1eebdb9d988718eb</sonar.login>
<sonar.java.binaries>target/sonar</sonar.java.binaries>
</properties>
</profile>
</profiles>
</settings>
其中sonar.host.url 值就是 上文启动的sonar 服务器地址。
4.2.2 对maven项目进行分析
有两种方式可以对maven项目进行分析,到项目所在的文件路径下:
a、默认公共项目提交(该项目所有人可见,sonarqube会根据maven中的项目名来创建sonar项目),使用命令提示符或者是power shell执行 如下命令:
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar
也可以在项目的pom文件中,添加插件
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.7.0.1746</version>
</plugin>
【此处注意版本号,7.8对应的 sonar-maven-plugin为3.7.0.1746,之前测过8.9版本的或者是7.5版本的,用3.7.0.1746版本的sonar-maven-plugin插件,sonar分析后并没有生成单元测试覆盖率的数据。】
b、在sonar中自定义项目,将代码提交到sonarqube平台指定的项目中
在【配置】-【项目】-【创建项目】位置创建项目,注意不是【+】号,【+】创建的为默认的公共项目,不能指定用哪些规则。
创建好项目后根据提示生成项目token以及maven指令。然后在maven中执行该命令,即可将maven工程提交到sonarqube指定的项目中。
出现: BUILD SUCCESS 标识之后,重新刷新sonar界面即可查看到对应项目。
4.3. 用户使用说明
SonarQube Web管理者通过配置和设置以下参数值对项目源代码进行:复杂度、覆盖率、文档、重复、问题、可维护性、可靠性、安全性、大小等约束和规范。
sonar中的质量阈管理以下内容。
复杂度 | 覆盖率 | 文档 | 重复 | 问题 | 可维护性 | 可靠性 | 安全性 | 大小 |
复杂度 复杂度/类 复杂度/文件 复杂度/方法 | 分支覆盖 集成测试的新分支覆盖 新代码的分支覆盖率 覆盖率 新集成测试覆盖 新覆盖率 集成测试分支覆盖 集成测试覆盖 集成测试覆盖行 集成测试未覆盖分支 集成测试未覆盖行 代码覆盖率 集成测试的新行覆盖 新代码覆盖率 集成测试的新行覆盖 覆盖的新代码 总体分支覆盖率 总体新分支覆盖率 总体覆盖率 总体新覆盖率 总体代码覆盖率 总体新代码覆盖率 总体覆盖的新行数 总体未覆盖分支 总体未覆盖的新分支 总体未覆盖代码 总体未覆盖新行数 单元测试忽略数 未覆盖分支 集成测试未覆盖的新分支 未覆盖新分支 未覆盖的代码 集成测试未覆盖的行 未覆盖的新代码 单元测试持续时间 单元测试错误数 单元测试失败数 单元测试成功 (%) 单元测试数 | 注释行 注释 (%) 公共API 公共注释的API (%) 公共未注释的API | 重复块 重复文件 重复行 重复行(%) | 阻断违规 确认问题 严重违规 误判问题 提示违规 违规 主要违规 次要违规 新阻断违规 新严重违规 新提示违规 新违规 新主要违规 新次要违规 开启问题 重开问题 不修复的问题 | 新代码的技术债务 坏味道 达到可维护性A级所需的工作 新增坏味道 技术债务 技术债务比率 新代码技术债务比率 Management Burned budget Business value Team size | Bugs 新增Bugs 可靠性修复工作 新代码的可靠性修复工作 | 新增漏洞 安全修复工作 新代码的安全修复工作 漏洞 | 类 目录 文件 方法 生成的行数 生成的代码行数 行数 代码行数 项目 语句 |
其它的一些使用,像创建项目、用户什么的,看界面应该就会操作了。