代码审查工具 sonarqube 简介
目录
1. 什么是SonarQube?
SonarQube的功能
1.糟糕的复杂度分布
2.重复
3.缺乏单元测试
4.没有代码标准
5.没有足够的或者过多的注释
6.潜在的bug
7.糟糕的设计(原文Spaghetti Design,意大利面式设计)
2. 使用前提条件
2.1 硬件要求
2.2 企业硬件建议
2.3 支持的平台
网页浏览器
3. SonarQube 如何下载安装配置?
3.1 下载社区版
4. 使用SonarQube扫描仪分析Maven
初始设置
全局设置
局部设置
分析Maven项目
方法一:
使用Sonar 最新插件
方法二:
指定Sonar 插件版本
方法三:
开启身份认证
开启Token 身份认证
恢复管理员访问权限
1. 什么是SonarQube?
SonarQube 官网:https://www.sonarqube.org/
SonarQube®是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味。它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查。
SonarQube的功能
1.糟糕的复杂度分布
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们,且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试
2.重复
显然程序中包含大量复制粘贴的代码是质量低下的, sonar可以展示源码中重复严重的地方
3.缺乏单元测试
sonar可以很方便地统计并展示单元测试覆盖率
4.没有代码标准
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写
5.没有足够的或者过多的注释
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降
而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷
6.潜在的bug
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug
7.糟糕的设计(原文Spaghetti Design,意大利面式设计)
通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系
可以检测自定义的架构规则
通过sonar可以管理第三方的jar包
可以利用LCOM4检测单个任务规则的应用情况
检测耦合
2. 使用前提条件
当前版本 SonarQube 7.4
运行SonarQube的唯一先决条件是在您的计算机上安装Java(Oracle JRE 8或OpenJDK 8)。
注意: 在Mac OS X上,强烈建议安装Oracle JDK 8而不是相应的Oracle JRE,因为JRE安装未正确完全设置Java环境。
2.1 硬件要求
- SonarQube服务器的小型(个人或小团队)实例需要至少2GB的RAM才能有效运行,并且1GB的可用RAM用于操作系统。如果要为大型团队或Enterprise安装实例,请考虑以下其他建议。
- 您需要的磁盘空间量取决于您使用SonarQube分析的代码量。例如,SonarClube的公共实例SonarCloud拥有超过3.5亿行代码,有5年的历史。SonarCloud目前在集群Amazon EC2 m5.large实例上运行,每个节点分配50 Gb的驱动器空间。它处理19,000多个项目,大约有1400万个未解决的问题。SonarCloud在PostgreSQL 9.5上运行,它为数据库使用了大约250Gb的磁盘空间。
- SonarQube必须安装在具有出色读写性能的硬盘上。最重要的是,“data”文件夹包含Elasticsearch索引,当服务器启动并运行时,将在其上完成大量I / O. 因此,良好的读写硬盘性能将对整个SonarQube服务器性能产生很大影响。
2.2 企业硬件建议
对于SonarQube的大型团队或企业级安装,需要额外的硬件。在企业级别,监控SonarQube实例/实例管理/ java-process-memory是必不可少的,并且应该随着实例的增长引导进一步的硬件升级。起始配置应至少包括:
- 8个核心,允许主SonarQube平台与多个计算引擎工作者一起运行
- 16GB RAM有关数据库和ElasticSearch的其他要求和建议,请参阅硬件建议/要求/硬件建议。
2.3 支持的平台
SonarQube Java分析器能够分析任何类型的Java源文件,无论它们遵循的Java版本如何。
但SonarQube分析和SonarQube服务器需要特定版本的JVM。
网页浏览器
要获得SonarQube提供的完整体验,您必须在浏览器中启用JavaScript。
参考资料:https://docs.sonarqube.org/latest/requirements/requirements/
3. SonarQube 如何下载安装配置?
参考资料:https://docs.sonarqube.org/latest/setup/get-started-2-minutes/
收费价格标准如下:
SonarQube 的社区版是免费的,其他版本是收费的
3.1 下载社区版
3.1.1 比如我们解压缩到这个目录 C:\Apps\sonar\sonarqube-7.4\bin\windows-x86-64\
3.1.2 以管理员身份按照上图顺序依次运行这三个文件
3.1.3 登录 http://localhost:9000/ 可以看到这个
3.1.4 使用系统默认的管理员凭据(admin / admin)登陆成功。
更详细内容移步:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Maven
4. 使用SonarQube扫描仪分析Maven
Tips:
Sonar 版本7.4
Maven 版本不可小于 3.x
能访问之前那个登陆页面并登陆成功,说明SonarQube已经安装好了。
初始设置
全局设置
1. 打开位于$ MAVEN_HOME / conf或〜/ .m2中的 settings.xml文件,
2. 找到<pluginGroups>节点,追加 org.sonarsource.scanner.maven 这个插件
3. 找到以设置插件前缀和可选的SonarQube服务器URL。
Settings.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 http://localhost:9000 --><sonar.host.url>http://myserver:9000</sonar.host.url></properties></profile></profiles>
</settings>
局部设置
如果只是对单个项目需要配置,也可以采取局部设置服务器地址,即在自己项目的POM.xml 中配置如下:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xingyun</groupId><artifactId>SpringStaticFactoryPatternSample</artifactId><version>0.0.1-SNAPSHOT</version><!-- 非必须中间的可删除 --><dependencies><!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.2.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.1.2.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.1.2.RELEASE</version></dependency></dependencies><!-- 非必须中间的可删除 --><profiles><profile><id>sonar</id><activation><activeByDefault>true</activeByDefault></activation><properties><!-- Optional URL to server. Default value is http://localhost:9000 --><sonar.host.url>http://localhost:9000</sonar.host.url></properties></profile></profiles><build><pluginManagement><plugins><!-- 配置编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></pluginManagement></build>
</project>
分析Maven项目
方法一:
使用Sonar 最新插件
配置好后就可以开始分析Maven项目了,在pom.xml文件所在的目录中运行Maven命令
mvn clean verify sonar:sonar# In some situation you may want to run sonar:sonar goal as a dedicated step. Be sure to use install as first step for multi-module projects
mvn clean install
mvn sonar:sonar
这样当命令执行完毕后就可以在刚才的web 控制台看到刚才测试的项目了
打开网址:http://localhost:9000/projects
方法二:
指定Sonar 插件版本
如果需要指定sonar-maven-plugin的版本而不是使用最新版本
那么需要在项目的POM.xml 中指定版本如下:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xingyun</groupId><artifactId>TestSample</artifactId><version>0.0.1-SNAPSHOT</version><profiles><profile><id>sonar</id><activation><activeByDefault>true</activeByDefault></activation><properties><!-- Optional URL to server. Default value is http://localhost:9000 --><sonar.host.url>http://localhost:9000</sonar.host.url></properties></profile></profiles><build><pluginManagement><plugins><!-- 配置编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><!-- 配置分析扫描插件 --><plugin><groupId>org.sonarsource.scanner.maven</groupId><artifactId>sonar-maven-plugin</artifactId><version>3.5.0.1254</version></plugin></plugins></pluginManagement></build>
</project>
然后执行如下命令:
# Specify the version of sonar-maven-plugin instead of using the latest. See also 'How to Fix Version of Maven Plugin' below. mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.5.0.1254:sonar
这样当命令执行完毕后就可以在刚才的web 控制台看到刚才测试的项目了
打开网址:http://localhost:9000/projects
方法三:
要将JaCoCo作为Maven构建的一部分执行以生成JaCoCo 的二进制格式,即在target 目录下生成jacoco.exec 文件
请使用以下命令:
mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install sonar:sonar
如果需要忽略测试失败
mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.failure.ignore=false sonar:sonar
然后执行如下命令:
# Specify the version of sonar-maven-plugin instead of using the latest. See also 'How to Fix Version of Maven Plugin' below.
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.5.0.1254:sonar
这样当命令执行完毕后就可以在刚才的web 控制台看到刚才测试的项目了
打开网址:http://localhost:9000/projects
开启身份认证
不知道你有没有发现,我们直接执行命令后便将分析报告提交到web控制台了,没有加任何权限验证,这样是非常不安全的。
还记得之前我们登陆web控制台么?http://localhost:9000/
默认管理员凭据
安装SonarQube时,会自动创建具有“管理系统”权限的默认用户:
- 登录:admin
- 密码:admin
我们可以在项目中通过配置账号和密码方式来实现身份认证,但是这样仍然不是很安全,登陆密码容易泄露。
开启Token 身份认证
1. 打开身份认证开关
Administration > Configuration > General Settings > Security, 然后设置 Force user authentication 属性为true
2. 创建一个用户
点击创建后输入账号和密码,输入Email , 然后点击create 即可
3. 点击下图位置
弹出如下对话框
执行成功后如下所示:
点击sonar-users 下的图标,弹出如下图所示
勾选后点击done 完成
将Execute Analysis 下对勾勾选,即可为该用户组添加分析执行权限
由于我们创建的用户属于这两个用户组,所以给这个组赋予权限,那么我们的用户便也有权限了。
参考资料:https://docs.sonarqube.org/latest/instance-administration/security/
恢复管理员访问权限
如果您更改了admin
密码然后丢失了密码,则可以使用以下查询重置密码:
update users set crypted_password = '$2a$12$uCkkXmhW5ThVK8mpBvnXOOJRLd64LJeHTeCkSuB3lfaR2N0AYBaSi', salt=null, hash_method='BCRYPT' where login = 'admin'
如果您已删除admin
并随后锁定具有全局管理权限的其他用户,则需要admin
使用以下查询重新授予用户:
INSERT INTO user_roles(user_id, role) VALUES ((select id from users where login='mylogin'), 'admin');
参考模板示例一:
pom.xml
<project>
<!-- 代码扫描步骤 --><profiles><profile><id>sonar</id><activation><activeByDefault>true</activeByDefault></activation><properties><sonar.jdbc.url>jdbc:mysql://******:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance</sonar.jdbc.url><sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver><sonar.jdbc.username>sonar</sonar.jdbc.username><sonar.jdbc.password>sonar</sonar.jdbc.password><sonar.host.url>http://172.*.*.*:9000</sonar.host.url><sonar.login>ce57e****************4a8969</sonar.login><sonar.sourceEncoding>UTF-8</sonar.sourceEncoding><sonar.sonar.test.inclusions>.</sonar.sonar.test.inclusions><sonar.exclusions>src/test/java/**</sonar.exclusions></properties></profile><profile><id>sonar-coverage</id><activation><activeByDefault>true</activeByDefault></activation><build><pluginManagement><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.7.9</version></plugin></plugins></pluginManagement><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><configuration><append>true</append></configuration><executions><execution><id>agent-for-ut</id><goals><goal>prepare-agent</goal></goals></execution><execution><id>jacoco-site</id><phase>verify</phase><goals><goal>report</goal></goals></execution></executions></plugin></plugins></build></profile></profiles>
</project>
参考模板示例二:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xingyun</groupId><artifactId>SpringStaticFactoryPatternSample</artifactId><version>0.0.1-SNAPSHOT</version><!-- 非必须中间的可删除 --><dependencies><!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.2.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.1.2.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.1.2.RELEASE</version></dependency></dependencies><!-- 非必须中间的可删除 --><profiles><profile><id>sonar</id><activation><activeByDefault>true</activeByDefault></activation><properties><!-- Optional URL to server. Default value is http://localhost:9000 --><sonar.host.url>http://localhost:9000</sonar.host.url><!-- 配置字符编码 --><sonar.sourceEncoding>UTF-8</sonar.sourceEncoding><!-- 该项目的独特关键。允许的字符是:字母,数字 - , _ , . 和 : ,与至少一个非数字字符。 --><sonar.projectKey>:</sonar.projectKey><!-- 包含源文件的目录的逗号分隔路径。 --><sonar.sources></sonar.sources><!-- 将在Web界面上显示的项目的名称。 --><sonar.projectName>Custom Project</sonar.projectName><!-- 项目版本 --><sonar.projectVersion>V0.0.1</sonar.projectVersion><sonar.coverage.jacoco.xmlReportPaths>target/site/jacoco/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths></properties></profile></profiles><build><pluginManagement><plugins><!-- 配置编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></pluginManagement></build>
</project>
代码审查工具 sonarqube 简介相关推荐
- (转)Apache Commons工具集简介
(转)Apache Commons工具集简介 Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.我选了一些比较常用的项目做简单介绍.文中用了很多网上现成 ...
- Tool之ADB:ADB工具的简介、安装、使用方法之详细攻略
Tool之ADB:ADB工具的简介.安装.使用方法之详细攻略 目录 ADB工具的简介 ADB工具的安装 ADB工具的使用方法 1.基础用法
- Ubuntu之make:make命令行工具的简介、安装、使用方法之详细攻略
Ubuntu之make:make命令行工具的简介.安装.使用方法之详细攻略 目录 make命令行工具的简介 make命令行工具的安装 make命令行工具的使用方法 make命令行工具的简介 Ubunt ...
- NPM:nodejs官方包管理工具的简介、安装、使用方法之详细攻略
NPM:nodejs官方包管理工具的简介.安装.使用方法之详细攻略 目录 NPM之nodejs官方包管理工具的简介 NPM之nodejs官方包管理工具的安装 NPM之nodejs官方包管理工具的使用方 ...
- CV之LabelImg:图片标注工具之LabelImg(图像标注工具)的简介、安装、使用方法详细攻略
CV之LabelImg:图片标注工具之LabelImg(图像标注工具)的简介.安装.使用方法详细攻略 目录 LabelImg的简介 常见的图片标注工具 LabelImg trainingImageLa ...
- java的网络工具netty简介
2019独角兽企业重金招聘Python工程师标准>>> java的网络工具netty简介 Netty是一个NIO的客服端服务器框架,它可以简单.快速的搭建器一个协议包客服端服务器的应 ...
- 20最佳代码审查工具-专门为开发人员准备
程序员总是面临最后期限的压力和很多延误软件设计相当不稳定,整个产品是不稳定的.这种不稳定性的设计软件的原因是,它是不能正常测试.来的工作代码审查工具.的代码审查工具可以帮助web开发人员指出他们哪些区 ...
- 部分GDAL工具功能简介
部分GDAL工具功能简介 gdalinfo.exe 显示GDAL支持的各种栅格文件的信息. gdal_translate.exe 在不同的格式间进行转换.同时,潜在的执行了一些切割.重采样和使像素比例 ...
- Python之pip:pip包管理工具的简介、安装、使用方法之详细攻略
Python之pip:pip包管理工具的简介.安装.使用方法之详细攻略 目录 pip的简介 pip的安装 1.测试pip是否已安装 T1.代码查询 T2.自行查询
最新文章
- [Educational Codeforces Round 16]A. King Moves
- delphi中关于时间差的实例
- malloc和free函数详解
- 文本编辑器实现关于对话框的功能
- sjms-2 创建型模式
- c语言程序员写贪吃蛇代码28,厉害了,程序员28行代码写贪吃蛇游戏,附源码!...
- Android开发7:简单的数据存储(使用SharedPreferences)和文件操作
- jmeter+接口测试练习+接口关联+Json提取
- 拓端tecdat|R语言文本主题模型之潜在语义分析(LDA:Latent Dirichlet Allocation)
- BigDecimal的add方法
- 刘毅5000词汇_不熟词汇整理_lesson_15 and part_2
- 洛谷 P1640 [SCOI2010]连续攻击游戏(二分图匹配)
- UVa11137 - Ingenuous Cubrency
- 【黑马旅游网】项目完结+未完成功能实现+个人总结+bug记录
- java 实现 word 文档的在线编辑以及流转
- 【苹果相册推】iMessage OBJC Serverapns源代码直接开发证书
- 中学计算机教师招聘面试题,中学教师招聘面试题目-20210528215022.docx-原创力文档...
- C语言中getchar()函数的详解
- Android面试题目及其答案
- 新房装修|选空调挂机还是中央空调?
热门文章
- 日记 [2007年04月05日]QMAIL服务器回顾
- Tungsten Fabric SDN — Service Chain
- 5G NPN 行业专网 — 媒体行业 5G 专网部署方案
- 互联网协议 — SCTP 流控制传输协议
- Linux 操作系统原理 — 内存 — Cache 和 Buffer
- pip install 报错:Versioning for this project requires either an sdist tarball, ...
- 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录
- Python基本语法_基本数据类型_序列类型详解
- Windwos 08R2_DNS全面图文详解
- 人工智能时代下的视觉合成