目录

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 硬件要求

  1. SonarQube服务器的小型(个人或小团队)实例需要至少2GB的RAM才能有效运行,并且1GB的可用RAM用于操作系统。如果要为大型团队或Enterprise安装实例,请考虑以下其他建议。
  2. 您需要的磁盘空间量取决于您使用SonarQube分析的代码量。例如,SonarClube的公共实例SonarCloud拥有超过3.5亿行代码,有5年的历史。SonarCloud目前在集群Amazon EC2 m5.large实例上运行,每个节点分配50 Gb的驱动器空间。它处理19,000多个项目,大约有1400万个未解决的问题。SonarCloud在PostgreSQL 9.5上运行,它为数据库使用了大约250Gb的磁盘空间。
  3. 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&amp;characterEncoding=utf8&amp;rewriteBatchedStatements=true&amp;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 简介相关推荐

  1. (转)Apache Commons工具集简介

    (转)Apache Commons工具集简介 Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.我选了一些比较常用的项目做简单介绍.文中用了很多网上现成 ...

  2. Tool之ADB:ADB工具的简介、安装、使用方法之详细攻略

    Tool之ADB:ADB工具的简介.安装.使用方法之详细攻略 目录 ADB工具的简介 ADB工具的安装 ADB工具的使用方法 1.基础用法

  3. Ubuntu之make:make命令行工具的简介、安装、使用方法之详细攻略

    Ubuntu之make:make命令行工具的简介.安装.使用方法之详细攻略 目录 make命令行工具的简介 make命令行工具的安装 make命令行工具的使用方法 make命令行工具的简介 Ubunt ...

  4. NPM:nodejs官方包管理工具的简介、安装、使用方法之详细攻略

    NPM:nodejs官方包管理工具的简介.安装.使用方法之详细攻略 目录 NPM之nodejs官方包管理工具的简介 NPM之nodejs官方包管理工具的安装 NPM之nodejs官方包管理工具的使用方 ...

  5. CV之LabelImg:图片标注工具之LabelImg(图像标注工具)的简介、安装、使用方法详细攻略

    CV之LabelImg:图片标注工具之LabelImg(图像标注工具)的简介.安装.使用方法详细攻略 目录 LabelImg的简介 常见的图片标注工具 LabelImg trainingImageLa ...

  6. java的网络工具netty简介

    2019独角兽企业重金招聘Python工程师标准>>> java的网络工具netty简介 Netty是一个NIO的客服端服务器框架,它可以简单.快速的搭建器一个协议包客服端服务器的应 ...

  7. 20最佳代码审查工具-专门为开发人员准备

    程序员总是面临最后期限的压力和很多延误软件设计相当不稳定,整个产品是不稳定的.这种不稳定性的设计软件的原因是,它是不能正常测试.来的工作代码审查工具.的代码审查工具可以帮助web开发人员指出他们哪些区 ...

  8. 部分GDAL工具功能简介

    部分GDAL工具功能简介 gdalinfo.exe 显示GDAL支持的各种栅格文件的信息. gdal_translate.exe 在不同的格式间进行转换.同时,潜在的执行了一些切割.重采样和使像素比例 ...

  9. Python之pip:pip包管理工具的简介、安装、使用方法之详细攻略

    Python之pip:pip包管理工具的简介.安装.使用方法之详细攻略 目录 pip的简介 pip的安装 1.测试pip是否已安装 T1.代码查询 T2.自行查询

最新文章

  1. [Educational Codeforces Round 16]A. King Moves
  2. delphi中关于时间差的实例
  3. malloc和free函数详解
  4. 文本编辑器实现关于对话框的功能
  5. sjms-2 创建型模式
  6. c语言程序员写贪吃蛇代码28,厉害了,程序员28行代码写贪吃蛇游戏,附源码!...
  7. Android开发7:简单的数据存储(使用SharedPreferences)和文件操作
  8. jmeter+接口测试练习+接口关联+Json提取
  9. 拓端tecdat|R语言文本主题模型之潜在语义分析(LDA:Latent Dirichlet Allocation)
  10. BigDecimal的add方法
  11. 刘毅5000词汇_不熟词汇整理_lesson_15 and part_2
  12. 洛谷 P1640 [SCOI2010]连续攻击游戏(二分图匹配)
  13. UVa11137 - Ingenuous Cubrency
  14. 【黑马旅游网】项目完结+未完成功能实现+个人总结+bug记录
  15. java 实现 word 文档的在线编辑以及流转
  16. 【苹果相册推】iMessage OBJC Serverapns源代码直接开发证书
  17. 中学计算机教师招聘面试题,中学教师招聘面试题目-20210528215022.docx-原创力文档...
  18. C语言中getchar()函数的详解
  19. Android面试题目及其答案
  20. 新房装修|选空调挂机还是中央空调?

热门文章

  1. 日记 [2007年04月05日]QMAIL服务器回顾
  2. Tungsten Fabric SDN — Service Chain
  3. 5G NPN 行业专网 — 媒体行业 5G 专网部署方案
  4. 互联网协议 — SCTP 流控制传输协议
  5. Linux 操作系统原理 — 内存 — Cache 和 Buffer
  6. pip install 报错:Versioning for this project requires either an sdist tarball, ...
  7. 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录
  8. Python基本语法_基本数据类型_序列类型详解
  9. Windwos 08R2_DNS全面图文详解
  10. 人工智能时代下的视觉合成