静态代码扫描工具 Sonar 配置及使用

news2024/10/5 20:22:26

概览

Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。

在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

主要特点:

  • 代码覆盖:通过单元测试,将会显示哪行代码被选中
  • 改善编码规则
  • 搜寻编码规则:按照名字,插件,激活级别和类别进行查询
  • 项目搜寻:按照项目的名字进行查询
  • 对比数据:比较同一张表中的任何测量的趋势

SonarQube 安装与配置

Sonar 是 Codehaus 上面的一个开源项目,使用的是 LGPL V3 软件许可。我们可以在其官方网站上下载其源代码及安装包。下载网址为:Download | SonarQube | Sonar,LTS 版本是长期支持版本,后期会继续维护,是比较稳定的版本,因此,这里我们选择下载的是 LTS 版(V5.6.6)。注意:本版本的 SonarQube 需要 Java 8 及以上的环境,下载完毕压缩包后,解压到合适的目录下。打开软件的 bin 目录,如下图所示

根据自己的电脑系统,打开不同的目录。例如:我的电脑是 windows7 64 位,打开最下方的目录,运行 StartSonar.bat,然后在浏览器中访问:http://localhost:9000/ (SonarQube 默认访问地址),成功打开即说明,SonarQube 安装成功。如下图所示(已安装中文插件): 

SonarQube 的默认管理员账号是:admin,密码为:admin。登录后,可安装一些插件,帮助我们完成相应的任务,例如:中文语言插件、SonarJS 插件等。插件的安装,如下图所示:第一步点击左上角的 ”Administration”,跳转到 Administrator 界面。

在 Administrator 界面,下拉 Syetem 选项,点击 Update Center,会跳转到 Update Center 界面。在这个界面上,可以清楚的看到当前已安装了那些插件,如下图所示:

这里我们需要安装两个插件:一个中文语言包,一个 JS 静态代码扫描插件 SonarJs(如果已安装,需要更新到3.1.1.5128或更高版本)。

点击 “Available”,显示所有可以安装的插件,我们选择安装中文语言包 Chinese Pack 和 JS 静态代码扫描插件 SonarJS,如下图所示:

如果安装的过程中,出现无法下载的异常,如下图所示:

 

根据它提示的信息,到对应的网站下载该插件。下载完成后,把下载的 jar 包复制到 SonarQube 安装的目录 plugins 目录下,例如:E:\Program Files (x86)\sonarqube-5.6.6\extensions\plugins,然后重启 SonarQube,即可实现插件的安装。 

关于 SonarQube 重启,值得注意的是:除了需要关闭 SonarQube 控制台外,还需要调用任务管理器,把正在运行的 java.exe 进程都给杀死,然后再次运行 StartSonar.bat,方可重启SonarQube。经过以上软件和插件的安装,JS 代码静态扫描的环境已完成搭建,接下来就是根据不同的项目,设置不同的 SonarQube 配置项。对于 Android 混合应用,进行 JS 代码静态扫描,有两种工具以完成:使用 AS 的插件 SonarLint、使用 Sonar-Runner。无论使用哪种方式,都需要在 SonarQube 配置对应的项目,如下图所示:

 

 通过以上步骤,进入到项目配置界面,如下图所示:点击 Create Project,创建一个项目,其中 Name 和 Key 是必填项。如下图所示:

两种扫描方式

SonarLint 插件

打开 Android Studio(示例版本:2.3.3),打开 File-----Settings----Plugins----Browse Repositories,搜索 SonarLint,安装此插件,如下图所示:

接下来配置 SonarLint 插件:打开 File----Settings----Other Settings----SonarLint General Setting,添加一个 SonarQube服务,如下图所示: 

击 next,需要选择账号类型,及账户名与密码,如下图所示:

账户名与密码均为:admin,点击 next,完成 SonarQube 服务的设置,设置成功后,会出现以下界面,如图所示:

点击下方的 “Update binding”,更新 SonarQube 服务的配置信息。接着配置 SonarLint Project Settings,如下图所示:

下拉选择服务 “Sonar”,选择 SonarQube 服务创建的项目 ”hsdzda”,点击 apply,ok。通过以上配置,完成插件 SonarLint 的配置。接下来,指定项目进行静态代码扫描,如下图所示:

Sonar-Runner 工具

AS 插件扫描代码的方式,方便开发人员修改,但这并不适合测试人员进行 bug 的后期管理及后期接入 CI 中。使用 Sonar-Runner,可把扫描结果上报到 SonarQube 网站上,网站以图形化的效果进行展示,方便测试人员快速上报及bug后期管理。使用 Sonar-Runner 工具,需要先下载这个工具,并配置对应的环境变量,下载地址为:http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zip,下载完成后,解压到合适的目录(不要包含中文)。打开电脑的高级系统配置,配置环境变量。新建一个系统环境变量,变量名为 ”SONAR_RUNNER”,变量值为刚才解压的文件目录,例如:E:\Program Files (x86)\sonar-runner-2.4。编辑系统环境变量path,添加 Sonar-Runner 的 path 变量值,例如:%SONAR_RUNNER_HOME%\bin; 点击确定。配置完成后,打开控制台,输入sonar-runner –h,然后回车,显示如下信息,即说明配置成功。

 在需要扫描的项目根目录下,创建一个名为 ”sonar-project.properties” 文件,配置信息如下所示: 

其中 sonar.projectKey 和 sonar.projectName 为之前 SonarQube 服务上的项目配置信息,必须要保持一致。Sonar.sources 为要扫描的目录,这里选择 assets 目录。打开 cmd 窗口,进入到待扫描项目的根目录下,执行命令 sonar-runner,回车,即开始静态代码扫描工作。如下图所示:  

扫描成功,会有以下提示:

打开浏览器,访问http://localhost:9000/ ,即可以图形化的效果,展示扫描结论,如下图所示:

具体的 bug 列表: 

需要注意的是:无论使用 SonarLint 插件,还是 Sonar-Runner 进行静态代码扫描,均要保持SonarQube 服务是运行的,才可对项目进行扫描

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/910729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

定向流量卡怎么没人买了呢?你知道定向流量卡有多坑吗?

在购买流量卡的时候大家可能都注意了,市面上的流量卡有三种,定向流量卡,通用流量卡,通用流量定向流量卡,据小编了解,现在越来越多的人比较喜欢购买后两者,而关注定向流量卡越来越少了。 其实用过…

中国移动秋招攻略,网申测评和面试

中国移动秋招简介 按照往年的惯例来看,移动会在每年的8月份发布相关秋招信息,紧接着考生并进行网申,面试的时间跨度也非常的长,大概是9~12月份。整个招聘流程,包括投递简历网申,笔试测评,面试录…

SQL Server、MySQL和Oracle数据库分页查询的区别与联系

摘要:本文将通过一个现实例子,详细解释SQL Server、MySQL和Oracle这三种常见关系型数据库在分页查询方面的区别与联系。我们将提供具体场景下的SQL语句示例,并解释每个数据库的分页查询用法以及优化方法,帮助读者更好地选择适合自…

大白话聊聊Innodb的锁机制

大白话聊聊Innodb的锁机制 引言理清 "锁" 类型锁锁的类型非锁定读(MVCC)锁定读用来保护 "自增长计数器" 的锁外键和锁 加锁算法精确匹配查询如何关闭Gap Lock小结 幻读问题小结 锁问题脏读不可重复读丢失更新 阻塞死锁死锁发生概率死锁案例 锁升级小结 引言…

go 微服务 consul

服务发现 在微服务中每一个服务都有一个ip端口,如果由客户端来之间进行连接会不方便,因此服务将自己的ip端口提交给服务发现(常见的有consul,etcd,nacos),客户端通过服务发现来获取服务的ip端口 consul 去下载&…

Serialize对象二进制序列化与反序列化存储参数代替ini文件

序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在C#中,可以使用System.Runtime.Serialization命名空间中的类来进行序列化操作。 以下是在C#中使用序列化的基本步骤: 创建一个可序列化的类,并标记该类和需要序列化的属性或字段…

deeplabv3+源码之慢慢解析26 第五章utils文件夹(1)ext_transforms.py--2个翻转类和ExtCompose类

系列文章目录(更新中) 第一章deeplabv3源码之慢慢解析 根目录(1)main.py–get_argparser函数 第一章deeplabv3源码之慢慢解析 根目录(2)main.py–get_dataset函数 第一章deeplabv3源码之慢慢解析 根目录(3)main.py–validate函数 第一章deeplabv3源码之慢…

Maven解析

目录 Maven的概念 Pom 项目坐标 仓库 Maven环境搭建 安装jdk 配置maven 配置本地仓库地址 配置阿里云 maven 镜像仓库,下载速度更快 在idea中配置maven ​编辑 pom中名词解释 Maven命令 Maven的概念 Maven 是 Apache 软件基金会的一个开源项目,是一个…

PySide6学习笔记--基础环境的安装配置

PySide6介绍 QT官方发布Qt6.0之后,紧接着于2020年12月10日发布了PySide 6,对应C版的Qt6。从PySide6开始,PySide的命名也会与Qt的大版本号保持一致。需要注意的是使用PySide6开发的程序在默认情况下,不兼容Windows7系统&#xff0c…

QT 使用图表

目录 1、概念 1.1 坐标轴-QAbstractAxis 1.2 系列-QAbstractSeries 1.3 图例-Legend 1.4 图表-QChart 1.5 视图-QChartView 2、 QT 折线图 2.1 Qt 折线图介绍 2.2 Qt 折线图实现 Qt 图表是专门用来数据可视化的控件 Qt 图表包含折线、饼图、棒图、散点图、范围图等。…

英文翻译照片怎么做?掌握这个方法轻松翻译

在现代社会中,英文已经成为了一种全球性的语言,因此,我们在阅读文章或者查看图片时,经常会遇到英文的内容。为了更好地理解这些英文内容,我们需要将其翻译成中文。在本文中,我将探讨图片中英文内容翻译的方…

mysql通过binlog日志恢复误删数据

1、先查看binlog功能是否开启 show variables like %log_bin%;log_bin为ON说明可以使用binlog恢复,如果为OFF说明没有开启binlog。 2、删除部分数据做测试 3、查找binlog文件位置 show variables like %datadir%;cd /var/lib/mysqlls -l删除数据时间是在文件154与…

2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较

文章目录 React:构建用户界面的首选Vue:简单优雅的前端框架Angular:Google支持的全面框架Node.js:服务器端的JavaScript运行环境比较不同框架的优势与劣势React:Vue:Angular:Node.js&#xff1a…

数字档案长期保存EEP文件管理和四性检测系统工具

数字(电子)档案EEP封装包工具软件(nhdeep),可以生成和导入长期保存标准格式的EEP封装文件,进行目录查看和条目信息查看,以及原文文件的查看。并提供对长期保存EEP封装文件的四性检测功,能保障封装文件质量。…

IP地址SSL证书

在许多企业用例中,公司需要SSL证书作为IP地址。公司使用IP地址通过Internet或Intranet访问各种类型的应用程序。根据组织策略,您希望使用SSL证书保护IP地址。 在本文中,我将向您解释获取IP地址SSL证书的过程,以及哪种类型的SSL证…

三菱PLC与变频器之间无线通讯

在工业现场由PLC远程控制变频器的应用非常常见,如果挖沟布线不便或者变频器在移动设备上,那么采用无线通讯就是最佳方案。 这里我们选用最常用的三菱 FX2N PLC和三菱变频器为例,并结合日系plc专用无线通讯终端DTD435M来说明PLC与变频器之间的…

MySQL 运维篇+单机多实例多版本部署初始化缺少sys库概述

说明:本文讲述MySQL在单机多实例多版本部署情况下初始化后缺少sys库问题方案:初始化数据库前建议暂时将其他实例的Default options(/etc/my.cnf等)重命名结论:初始化新实例时即使指定相关参数也有可能会受到默认参数的…

浙江某半导体厂房配电室电气节点无线测温方案

摘 要:半导体被誉为“制造业的大脑”,在关系国家安全和国民经济命脉的主要行业和关键领域占据支配地位,是国民经济的重要支柱。 随着数字技术的发展和数字经济在国民经济中所占比重越来越高,半导体产业的重要性还会进一步提升。安…

chat聊天对话智能机器人Model大模型Platform大平台Data大数据支持

解决工作生活中遇到的任何问题,情感陪护,闲聊扯淡,无所不能。 图像描述生成(Image Caption)是一个融合计算机视觉、自然语言处理和机器学习的综合问题,它类似于翻译一幅图片为一段描述文字。该任务对于人类…

SpringBoot + MyBatisPlus中乐观锁的实现 (精简demo)

乐观锁加注解Version后不需要手动进行加1操作。乐观锁是一种用于解决并发冲突的机制,在数据库中用于保护数据的一致性。Version注解是MyBatisPlus框架中的乐观锁注解,它会在更新数据时自动检查版本号是否一致,如果一致则进行更新操作&#xf…