首页 > 其他分享 >你知道什么是SonarQube吗?

你知道什么是SonarQube吗?

时间:2024-04-03 16:31:58浏览次数:21  
标签:插件 SonarQube 什么 sonarqube sonar 7.9 代码 知道

什么是快乐星球,什么是SonarQube?

一起来研究研究!

1.SonarQube简介

SonarQube是一款静态代码质量分析工具,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,而且可以集成在IDEA、Jenkins、GIt等服务中,方便随时查看代码质量分析报告。
image.png
SonarQube通过配置的代码分析规则,从可靠性、安全性、可维护性、覆盖率、重复率等方面分析项目,风险等级从A~E划分为5个等级,同时SonarQube可以集成pmd、findbugs、checkstyle等插件来扩展使用其他规则来检验代码质量;SonarQube还设置了质量阈,通过设置的质量阈评定此次提交分析的项目代码是否达到了规定要求。

2.为什么选择SonarQube

  • 更加优秀的图形化界面,基本上通过界面就可以对自己项目的代码状况一目了然
  • 可以查出其他软件难以定位到的问题:
    • 可能导致空指针异常的问题
    • 可能导致内存泄漏的问题,在try catch块中直接使用e.printStatckTrace()将堆栈信息打印到内存
    • 可能导致漏洞,成员变量使用public定义的
    • 流未关闭或是非常正常关闭都能够检测出来

3.代码质量问题

  • 没有代码标准,不遵循代码标准
    • SonarQube可以通过PMD,CheckStyle,FindBugs等代码规则检测工具规范代码编写。
  • 潜在的bug
    • SonarQube可以通过PMD,CheckStyle,FindBugs等代码规则检测工具检测出潜在的Bug
  • 糟糕的复杂度分布
    • 文件、类、方法等,如果复杂度过高将难以改变,这会使开发人员难以理解它们,且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
  • 重复
    • 显然程序中包含大量复制粘贴的代码是质量低下的,SonarQube可以展示源码中重复严重的地方
  • 没有足够的或过多的注释
    • 没有注释的代码可读性差,特别是当不可避免的人员变动时,程序的可读性将大幅下降,而过多的注释又会使得开发人员将精力过多的花费在阅读注释上。
  • 缺乏单元测试
    • SonarQube可以很方便的统计并展示单元测试覆盖率
  • 糟糕的设计
    • 通过SonarQube可以找出循环,展示包与包。类与类之间的相互依赖关系
    • 可以检测自定义的架构规则
    • 通过SonarQube可以管理第三方的jar包
    • 可以利用LCOM4检测单个任务规则的应用情况
    • 检测耦合

注:PMD,CheckStyle,FindBug这些工具都叫静态代码分析工具。
静态代码分析:指无需运行被测代码,仅通过分析或检查源程序的语法,结构,接口等来检查程序的正确性,找出代码隐藏的错误或缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,空指针引用等。

4.SonarQube组成

SonarQube是一个代码质量检测工具,由一下4个部分组成:

  • 1个SonarQube服务器:包含三个子进程:
    • Web服务(管理界面):供开发人员,管理人员浏览高质量的快照并配置SonarQube实例
    • 搜索服务:基于ElasticSearch的Search Server从UI进行后退搜索
    • 计算引擎服务:负责处理代码分析报告并将其保存在SonarQube数据库中
  • 1个SonarQube数据库,配置SonarQube服务
    • SonarQube实例的配置(安全性,插件设置等)
    • 项目,视图等的质量快照
  • 多个SonarQube插件,可能包括语言,SCM,集成,身份验证和管理插件
  • 1个或多个SonarQube Scanners用于分析特定的项目,相当于客户端。

5.代码规则检测工具

  • PMD
    • 是一种静态代码分析工具,能够自动检测范围很广的潜在缺陷和不安全或费优化的代码。而其他工具(如:checkstyle)可以检查编码约定和标准,PMD更侧重于缺陷检测,它附带了丰富且高度可配置的规则集,可以轻松地配置给定项目应使用哪些确定规则。例如:
      • 捕捉异常而不做任何事情
      • 死循环代码
      • 太多复杂的方法
      • 直接使用实现而不是接口
      • 实现或重写了hashcode()没有实现或重写equals(Object object)方法
      • 返回对可变对象的引用可能会对外暴露内部实现
  • CheckStyle
    • 是一个开源工具,可以帮助实施编码标准和最佳实践,特别注重编码惯例
    • 虽然涵盖了一些静态代码分析功能(与PMD和FindBug的方式大致相同),但是我们将主要在CheckStyle检测和执行编码编写规范。
  • FindBug
    • 是Java的另一个静态分析工具,在某些方面类似与CheckStyle和PMD,但是具有不同的重点。
    • 它不关心格式化或编码标准,它的目标是检测潜在的错误和性能问题。它很擅长做这类检查,可以检测到许多常见但难以发现的错误。
    • 它能够以比较高的精度检测出与PMD或CheckStyle不同的问题,是一个有用的补充。

6.SonarQube工作流程

通过客户端插件分析源代码,SonarQube客户端可以采用IDEA插件、Sonar-Scanner插件、Ant插件和Maven插件方式,并通过各种不同的分析机制对项目源代码扫描和分析,并把扫描和分析后的结果上传到SonarQube的数据库,通过SonarQube web界面对分析结果进行管理。

7.SonarQube部署

1) 安装前准备:

环境要求:Centos7,JDK11(新版要求JDK11起步),PostgreSQL13(2019年4月10号,SonarQube发文称在7.9之后,所有的SonarQube的版本(CE、DE、EE和DCE)中将停止对MySQL的支持。)

  • 安装JDK11 yum install -y java-11-openjdk.x86_64
  • 安装 PostgreSQL13 官网安装教程(需要选对应的系统版本)
# Install the repository RPM:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Install PostgreSQL:
sudo yum install -y postgresql13-server

# Optionally initialize the database and enable automatic start:
sudo /usr/pgsql-13/bin/postgresql-13-setup initdb
sudo systemctl enable postgresql-13
sudo systemctl start postgresql-13

# 创建用户和数据库 
# 1.使用postgres用户登录(PostgresSQL安装后会自动创建postgres用户,无密码)
su - postgres

# 2.登录postgresql
psql

# 3.创建用户和数据库并授权
create user sonar with password '123456';            // 创建用户 sonar
create database sonardb owner sonar;                 // 创建数据库 sonardb
grant all privileges on database sonardb to sonar;   // 授权

# 4.退出
\q

# 5.开启远程访问 退出psql用户 ctrl+d
vim /var/lib/pgsql/13/data/postgresql.conf
# 取消 listen_addresses = 'localhost' 这一行的注释(删掉前面的#号)
# 修改为listen_addresses = '*'

vim /var/lib/pgsql/13/data/pg_hba.conf

# 在 IPv4 local connections:下面新增一行内容如下:
host    all             all             0.0.0.0/0               md5

# 6.重启postgresql
systemctl restart postgresql-13.service

# 7.使用数据库连接工具测试连接即可
2) 安装SonarQube

下载SonarQube并解压

# 下载
yum install -y wget
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.6.zip
# 解压
yum install -y unzip
unzip sonarqube-7.9.6.zip

image.png
目录说明:

  • bin:sonarqube运行命令文件夹
  • conf:sonarqube配置文件夹
  • data:嵌入式数据库的数据(H2数据库引擎),建议只用于测试和演示
  • elasticsearch:搜索引擎
  • extensions:sonarqube的插件等存放文件夹
  • lib:sonarqube存放的运行库文件夹(jar)
  • logs:sonarqube日志文件夹
  • temp:sonarqube临时文件夹
  • web:sonarqube系统UI界面文件夹

修改配置

vim conf/sonar.properties

# 配置数据库用户名
sonar.jdbc.username=sonar
sonar.jdbc.password=123456

# 配置数据库地址
sonar.jdbc.url=jdbc:postgresql://localhost/sonardb?currentSchema=public

# 设置SonarQube服务
sonar.web.host=0.0.0.0
sonar.web.context=
sonar.web.port=9000

创建用户(因SonarQube中有ElasticSearch由于安全问题不能使用root用户启动)

# 创建用户
adduser sonar

# 将sonarqube-7.9.6用户所属变更为sonar用户
chown sonar:sonar -R sonarqube-7.9.6

# 将sonarqube-7.9.6移动到/usr/local目录下
mv sonarqube-7.9.6 /usr/local/

#切换用户
su - sonar

启动服务:

sh /usr/local/sonarqube-7.9.6/bin/linux-x86-64/sonar.sh start

启动报错:
image.png
[1] ElasticSearch的错误信息(ES因为需要大量的创建索引文件,需要大量的打开系统的文件,所以我们需要解除 linux系统当中打开文件最大数目的限制,不然ES启动就会报错)
解决办法:

vim /etc/security/limits.conf
# 增加如下内容:
*      soft             nofile          65536
*      hard             nofile          131072
*      soft             nproc           2048
*      hard             nproc           4096

[2] 最大虚拟内存太小,需要手动修改,每次手动都需要执行一下

vim /etc/sysctl.conf
# 追加以下内容
vm.max_map_count=262144

sysctl -p

退出,重新登录后启动服务

第一次启动服务会在数据库生成相关数据表
image.png
用浏览器访问:服务器IP:9000
账号密码默认都是admin
image.png
手动安装汉化插件

cd /usr/local/sonarqube-7.9.6/extensions/plugins
wget https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.26/sonar-l10n-zh-plugin-1.26.jar

# 使用sonar用户重启SonarQube服务
sh /usr/local/sonarqube-7.9.6/bin/linux-x86-64/sonar.sh restart

汉化之后舒服多了
image.png
至此基本部署已完成。

SonarQube使用

登录web页面创建项目
image.png
创建令牌 创建之后记得保存令牌
image.png
执行maven 进行代码扫描与分析
image.png
查看分析扫描结果
image.png

IDEA安装插件 SonarLint

SonarLint是一个代码质量检测插件,可以帮助开发者检测代码中的一些问题
image.png
按图填写对应信息即可
image.png
点击执行按钮 会看到刺激的画面 全是错误
image.png

P3C代码检查工具安装:

P3C代码检查工具GitHub安装教程
https://github.com/alibaba/p3c/blob/master/idea-plugin/README_cn.md

完!

标签:插件,SonarQube,什么,sonarqube,sonar,7.9,代码,知道
From: https://blog.csdn.net/i_chensir/article/details/137349565

相关文章

  • 读完了大学,依然是社会底层,读书的意义是什么
    1.70,80吃到了知识改变命运的红利,那这个红利是吃不完的吗?关于这个问题,我想告诉你社会的真实答案。20年前,只要是大学毕业,不是包分配就是工作前途一片光明,也就是现在的70,80后那帮人,那帮人不论是职业发展还是下海创业,基本上都赶上了经济蓬勃发展的好时机,大多数都做到了跨越阶层......
  • fdisk -l命令有什么用?fdisk -l详解
    fdisk -l命令用于查看CentOS系统中所有硬盘及其分区的详细信息。该命令的输出会显示硬盘的大小、分区表结构、分区类型以及每个分区的起始和结束扇区等信息。 以下是一个典型的fdisk -l命令输出示例及其解释:Disk/dev/sda:478.9GB,478888853504bytes,935329792sect......
  • 为什么开启sourcemap后打断点,即使取消断点,实际上还是会断住
    开启SourceMaps后,当在开发工具中为源代码设置断点时,实际上是将断点映射到了经过编译、压缩或打包后的生产代码中相应的位置。SourceMaps的作用就是建立起源代码与编译后代码之间的对应关系,使得开发者能够在查看和调试源代码时如同直接操作未经处理的原始代码一样。即使取消......
  • 为什么 InputComponent->BindAxis(TEXT("ViewHorizontalOffSet"),this,&AMarioControl
    在UnrealEngine中,InputComponent->BindAxis和事件绑定(如OnComponentBeginOverlap)使用不同的系统和要求。这些差异导致了在绑定函数时对UFUNCTION()宏的不同需求。BindAxis和UFUNCTION()宏BindAxis:用于绑定输入轴(如游戏手柄的移动或旋转)。当绑定轴输入时,BindAxis函数直接引用......
  • 06 | auto/decltype:为什么要有自动类型推导?
    我们从宏观的层面上重新认识了C++,从今天开始,我们将进入一个新的“语言特性”单元,“下沉”到微观的层面去观察C++,一起去见一些老朋友、新面孔,比如const、exception、lambda。这次要说的,就是C++11里引入的一个很重要的语言特性:自动类型推导。自动类型推导如果你有过一些......
  • Grass是什么,web3空投项目
    Grass是什么?项目介绍 Grass是一个Chrome浏览器插件,它将你用不到的带宽分享,并获取额外的奖励,是一种利用流量挂机赚取代币的新概念。根据官方资料,Grass最多只会使用0.3%的闲置网络资源,并不影响到正常的网络使用速度,也不会获取用户隐私和个人资料,后续网络资源会出售给那些经过W......
  • 为什么资讯网站选择高防IP防护攻击
    为什么资讯网站选择高防IP防护攻击?在当今信息爆炸的时代,各种资讯网站扮演着重要的角色,为人们提供丰富的信息资源和资讯服务。然而,随着网络环境的不断变化和网络安全威胁的增加,资讯网站面临着越来越严重的网络攻击风险。为了保障资讯网站的稳定运行和用户数据的安全,越来越多的资......
  • 尼奎斯特定理中,码元速率和信道带宽的公式为什么是B=2W
    初接触通信知识之前一直无法理解码元速率和信道带宽的转换公式B=2W。直至今日,仔细查资料和思考后得到答案。固做此笔记。以做记录。首先,之前一直困扰我的问题,究其原因是因为我搞错了带宽和速率的关系。所以在此,我们必须要将带宽和速率的关系给搞明白。为了方便理解,这里我们只......
  • CBAM欧盟“碳关税”来了!宁波企业必须知道️这六大核心问题
    ......
  • 让业务部门使用满意的跨网软件,应该是什么样子的?
    为了保护企业的核心数字资产、隔离有害的网络安全威胁、保障数据信息在可信网络内进行安全交互,越来越多的企业在网络建设时,选择进行网络隔离。应用较为普遍的网络隔离手段包括物理隔离、协议隔离、应用隔离等,而常见的状态是企业进行内部网络和外部互联网隔离,或者企业内部再进行如......