软件测试教程 代码分析sonarqube篇

软件测试教程 代码分析sonarqube篇


本课程主要讲解sonarqube的安装与使用。

sonarqube主要用于代码静态分析,用于检查代码存在的格式、bug、安全漏洞问题,同时也提供了复杂度、代码行数等质量度量数据。

代码静态分析(Program Static Analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。

sonarqube主要用于以下场景:

1、开发代码中实时检查

2、开发代码完毕,提交代码到配置库之后,定期或者不定期扫描

本节主要讲解如下部分:

Sonarqube特性

Sonarqube安装与配置

Sonarqube使用

Sonarlint使用

Sonarqube特性

1、易于安装,开箱即可启动

2、易于配置-所有配置可以通过其提供的web界面实现

3、可以与CI系统,例如jenkins完美集成

4、丰富的扫描规则,支持自定义,并可以集成findbugs,pmd,checkstyle等插件

5、丰富的格式支持,可以扫描java\js\xml\jsp等多种格式

6、丰富的统计功能

7、支持违规的处理、分配等工作流

8、可以对违规进行确认,误报的违规一次确认后将不再统计在内

9、支持maven\ant\命令行等方式扫描

Sonarqube安装与配置

sonarqube官网地址:https://www.sonarqube.org/

sonarqube分为以下产品组:

  • sonarqube:sonarqube是一个web平台,是sonarqube的基础,统一管理插件和规则,统一展现度量数据
  • SonarQube Scanners:命令行扫描工具,进行代码的静态扫描
  • SonarQube Plugins:插件,支持多种语言
  • SonarLint:IDE集成插件

以下为5.6.6版本为例进行讲解,不选择最新版本的原因是:sonarqube更新频繁,更新会导致一些插件的不可用

sonarqube为开箱即用,不需要安装。下载后解压就可以使用。

目录结构如下:

bin:启动、停止命令目录

conf:配置目录,可以配置端口、数据库等信息

data:数据存放目录,子目录es,web为缓存的数据目录,可以删除,删除后会自动生成。sonar.h2.db为数据 库,不可删除

extensions\plugins:插件存放目录,手工下载的插件需要放在该目录

lib:依赖jar

logs:日志文件

temp:临时文件目录,可以删除

web:web目录,不可以删除,开发语言为ruby

conf/sonar.properties主要配置内容:

1、数据库mysql配置

sonar.jdbc.username=
sonar.jdbc.password=
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

2、web server的jvm配置
sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Djava.net.preferIPv4Stack=true

3、 COMPUTE ENGINE
jvm配置:sonar.ce.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Djava.net.preferIPv4Stack=true
计算引擎个数配置:sonar.ce.workerCount=1

4、ELASTICSEARCH

jvm配置:

sonar.search.javaOpts=-Xmx1G -Xms256m -Xss256k -Djava.net.preferIPv4Stack=true \

# -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 \

# -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError

Sonarqube使用

1、JDK支持:JDK1.8+

需要配置JAVA_HOME为jdk1.8,并设置path路径

2、启动

进入bin目录选择合适的操作系统,进行启动,例如64位windows系统启动:

进入sonarqube-5.6.6\bin\windows-x86-64目录,运行StartSonar.bat启动sonarqube系统

3、访问http://localhost:9000,网页访问正常,说明启动成功

4、管理员登录:admin/admin

配置

新建质量配置

image.png

1、点击top栏中“质量配置”进入质量配置页面

2、在质量配置页面点击右侧的“创建”,出现创建页面

3、选择语言为java,输入名称,点击“创建”,质量配置创建成功

添加代码规则

image.png

1、点击top栏中“代码规则”进入代码规则页面

2、 在规则页面,通过左侧搜索或者筛选出需要添加到质量配置中的规则,点击规则名称,进入规则的详细页面

3、在详细页面,点击“活动”

4、在活动页面,选择质量配置,点击“活动”,代码规则添加完毕

设置项目使用的质量配置

设置质量配置为默认配置

1、进入质量配置页面,选择一个非默认的质量配置,选择“设为默认”,则该配置变为默认配置。设为默认配置后,所有项目都将使用该配置的规则进行扫描。

设置项目使用的质量配置为非默认配置

1、进入质量配置页面,选择一个非默认的质量配置,在项目一栏中,选择“所有”,选择使用该质量配置的项目,所有被选中的项目将使用该质量配置进行代码扫描。

权限管理

进行权限设置的目的主要是给每个项目设置相关的用户权限,只有拥有权限的用户才能够访问该项目的源代码,从而保障代码安全。

增加用户

1、点击top栏中“配置”进入配置页面

2、在权限菜单中选择“用户”

3、 在用户页面,选择“create user”

4、输入所有带*号的必填信息,并点击“Create”,用户增加完毕

通用设置

此处不需要每次进行修改,第一次使用sonarqube时,需要修改相关的设置。

1、点击top栏中“配置”进入配置页面

2、在配置菜单中选择“通用设置”

3、选择SCM,将Disable theSCM sensor选择为是。该设置为“否”会造成系统异常,jenkins触发扫描的时候不需要该配置。

4、选择通用—邮件,设置邮件信息,填写SMTP服务器地址并保存设置

使用mysql

Sonarqube默认不使用数据库,为了数据的持久性,使用mysql数据库进行数据存储

1、 安装mysql数据库

2、 编辑sonar.properties,设置以下参数:

sonar.jdbc.username=user

sonar.jdbc.password=pass

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

设置sonarqube为windows服务

1、进入{sonarqube目录}\bin\windows-x86-64目录,运行InstallNTService.bat安装sonarqube为windows服务

2、如果sonarqube服务无法正常启动,选择sonarqube服务,查看属性,设置登录账户为administrator账户

Sonarscanner扫描

1、环境变量中path添加如下目录:sonar-scanner-2.8\bin
2、编写sonar-project.properties文件,该文件必须放在工程目录下,样例如下

# 工程关键字,整个系统中唯一,可修改,一般设为项目英文名

sonar.projectKey=sonar

# 工程名,一般设为项目英文名

sonar.projectName=sonar

# 工程版本号,可设置为项目的版本号

sonar.projectVersion=1.0

# 工程存放目录,.表示当前路径,不用修改

sonar.projectBaseDir=. 

# 设置扫描JAVA还是PLSQL,设为 JAVAmodule,PLSQLmodule则同时扫描两个

sonar.modules=JAVAmodule

# 不进行扫描的文件

# sonar.exclusions=test/*.java,b.java

# JAVAmodule的工程名称,可修改

JAVAmodule.sonar.projectName=sonar_java

# JAVAmodule的扫描语言,不可修改

JAVAmodule.sonar.language=java

# 源码存放目录,可设置为src,java等多个目录,.表示当前路径下所有文件

JAVAmodule.sonar.sources=.

# 源码字符集,根据实际修改

JAVAmodule.sonar.sourceEncoding=UTF-8

# 设置工程使用的JDK版本,需要修改,可能影响扫描结果

JAVAmodule.sonar.java.source=1.6

# 工程存放路径,不用修改

JAVAmodule.sonar.projectBaseDir=.

# 以下两项在编译后添加,部分安全规则需要二进制文件,这时需要设置以下两项

# 编译后的二进制文件目录

# JAVAmodule.sonar.java.binaries=.

# 依赖jar包目录

# JAVAmodule.sonar.java.libraries=.

# PLSQLmodule的工程名称,可修改

PLSQLmodule.sonar.projectName=sonar_plsql

PLSQLmodule.sonar.language=plsqlopen

# 源码存放目录,可以逗号分隔填写多个目录

PLSQLmodule.sonar.sources=sql
PLSQLmodule.sonar.sourceEncoding=GBK
PLSQLmodule.sonar.projectBaseDir=.

3、在工程目录下运行sonar-scanner.bat

4、登录http://localhost:9000可以查看生成的报告数据

分析扫描结果

结果查看

登陆sonarqube查看,地址http://localhost:9000/

image.png
概览

1、打开首页后,可以查看各个项目的概览情况,例如代码行数,违规数等

2、选择关注的项目,可以查看项目的具体情况,点击“问题”、“指标”、“代码”、“仪表盘”等可以查看更详细的信息

问题:该项展示违规的详细信息、技术债务等

重复:该项分析重复代码

大小:代码行数

仪表盘:显示代码的综合信息

复杂度:显示代码的复杂度,复杂度不应该过高

代码和问题

查看代码需要登陆系统

1、查看代码,显示源码

2、 问题页面,显示项目的问题的具体信息

1)点击问题后的按钮,可以显示问题的详细说明

2)选择左侧栏的筛选选项,可以筛选出相关问题

3)点击源码的链接,可以展示全部源码

4)点击违规条目中的相关查看源码按钮,可以展示违规的源码

5)在源代码中,可以查看违规的具体的代码和违规信息

违规处理

以下操作需要登陆系统

image.png

违规解决

此处针对代码缺失存在缺陷,需要修改源码的情况。

1、定位违规代码,本地修改代码并提交配置库

2、进行代码扫描

3、再次登陆sonarqube,查看违规是否已经解决,如果修改成功则该违规为已解决状态,不再统计在技术债务中

误判等违规的解决

此处针对违规为误判或者因为某种原因不需要修复。

1、在问题页面,选择处理方式,根据需要选择“误判”或者“标记为不会修复”,填写相关的原因。

2、再次进行代码扫描,该问题不再统计在技术债务中

sonarlint与IDE的集成

这里用eclipse为例。同样的也支持Visual Studio 2015,或Visual Studio 2017

Eclipse 4.X

JDK1.8 (只限制启动Eclipse4.X,产品研发JDK版本各产品架构师统一确定,严禁自行随意使用JDK版本开发产品代码)

安装方式

由于SonarLint使用EclipsePlug-in 模式开发提供,故安装方式有三种。

1、使用Eclipse在线连接marketplace方式.

​ 1)打开eclipse-->help-->EclipseMarketplace--find(sonarlint)-->install

​ 2)一步步进行安装

2、下载SonarLint插件包,使用Eclipse本地安装方式.

打开eclipse-->help-->installsoftware—Add…-->Archive…-->选中插件包

检查安装

安装完成后,通过查找是否有相关视图信息,确认安装成功(Window --> show View --> others );如果看到如下视图菜单,表示已成功安装插件。

其中sonarLint有5个视图,分别为:

  • SonarQube Servers

  • SonarLint Issue Locations

  • SonarLint On-The-Fly

  • SonarLint Report

  • SonarLint Rule Description

功能介绍

代码扫描

安装完成后,选择需要执行扫描的project,右键弹出菜-->SonarLint-->Analyze 进行扫描。

Analyze changed files :连接SonarQube服务器后使用,只扫描新修改的文件。

项目报告视图(SonarLint Report)

执行扫描之后,会打开SonarLint Report(可以显示当前工程,或所有工程)视图,展示代码不规范的事项列表,查看扫描出来的所有警告和坏味道,点击每一项,即可跳到对应的代码上,进行相应事项的代码修改,保存,SonarLint Report会自动检测变更并刷新列表。

文件报告视图(SonarLintOn-The-Fly)

基于单个文件,列出该文件中所有扫描出来的不规范项,修改代码后,保存,实时刷新。

image.png

SonarLint Rule Description(SonarLint Rule Description)

展示当前告警项规则,包括级别、描述、错误示例、正确示例等,帮助开发人员修改。
鼠标划过标有蓝色波浪线时,会弹出告警简易描述,点击连接会展示在Description视图。

告警项位置视图

该视图显示的是告警项的具体位置(不常用)

SonarQube Server

插件提供一个SonarQube Server 视图,用来连接远程SonarQube服务器,匹配关联项目在SonarQube上的质量配置,进行扫描。

1、Sonar Server --> Connect to a SonarQubeServer --> connect to a server -->next 绑定SonarQube服务器后,会在视图中显示,之后通过点击项目右键菜单绑定关联项目。

image.png
image.png

Analyze changed files :连接SonarQube服务器后使用,只扫描新修改的文件。
关联SonarQube 服务器上创建的项目,使用其质量配置。

image.png
image.png

服务器地址需要修改为实际SonarQube 部署地址。

完成之后,在Server视图可以看见该服务器,可以新增,修改服务器参数,另外服务器上项目质量配置发生改变时,需要使用Update all project bindings.

Console

插件扩展了Console视图,增加了查看SonarLint 插件操作日志的功能。

附录:

注意:开源版sonarqube只支持C#

VS集成Sonar之前

img

​ 集成sonar之前,项目显示没有任何警告及错误。开发人员只能保证代码无错误,却无法分析出代码的隐患及不规范性。

Sonar集成

  • 打开VS2015,通过工具(T)-> 扩展与更新(U)打开扩展安装包界面
img
  • 在扩展和更新界面中左侧选择联机,通过安装包搜索框输入Sonar,在查询出的列表中选择SonarLint for Visual Stuido 2015, 点击下载进行安装

img
  • 安装完毕之后,重启vs,将需要分析的项目加入到snoarlint实时分析列表中

img
  • 此时sonar实时分析已经开始工作,在警告列表中出现了分析结果并包含错误原因分析

img
  • Sonar还包含了修改建议,通过双击警告项,将定位到具体有问题的代码段,将鼠标移至问题代码段,出现sonar的修改建议,跟随提示更改代码即可

img
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容