软件测试教程 代码分析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
配置
新建质量配置
1、点击top栏中“质量配置”进入质量配置页面
2、在质量配置页面点击右侧的“创建”,出现创建页面
3、选择语言为java,输入名称,点击“创建”,质量配置创建成功
添加代码规则
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/
概览
1、打开首页后,可以查看各个项目的概览情况,例如代码行数,违规数等
2、选择关注的项目,可以查看项目的具体情况,点击“问题”、“指标”、“代码”、“仪表盘”等可以查看更详细的信息
问题:该项展示违规的详细信息、技术债务等
重复:该项分析重复代码
大小:代码行数
仪表盘:显示代码的综合信息
复杂度:显示代码的复杂度,复杂度不应该过高
代码和问题
查看代码需要登陆系统
1、查看代码,显示源码
2、 问题页面,显示项目的问题的具体信息
1)点击问题后的按钮,可以显示问题的详细说明
2)选择左侧栏的筛选选项,可以筛选出相关问题
3)点击源码的链接,可以展示全部源码
4)点击违规条目中的相关查看源码按钮,可以展示违规的源码
5)在源代码中,可以查看违规的具体的代码和违规信息
违规处理
以下操作需要登陆系统
违规解决
此处针对代码缺失存在缺陷,需要修改源码的情况。
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)
基于单个文件,列出该文件中所有扫描出来的不规范项,修改代码后,保存,实时刷新。
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服务器后,会在视图中显示,之后通过点击项目右键菜单绑定关联项目。
Analyze changed files :连接SonarQube服务器后使用,只扫描新修改的文件。
关联SonarQube 服务器上创建的项目,使用其质量配置。
服务器地址需要修改为实际SonarQube 部署地址。
完成之后,在Server视图可以看见该服务器,可以新增,修改服务器参数,另外服务器上项目质量配置发生改变时,需要使用Update all project bindings.
Console
插件扩展了Console视图,增加了查看SonarLint 插件操作日志的功能。
附录:
注意:开源版sonarqube只支持C#
VS集成Sonar之前
集成sonar之前,项目显示没有任何警告及错误。开发人员只能保证代码无错误,却无法分析出代码的隐患及不规范性。
Sonar集成
- 打开VS2015,通过工具(T)-> 扩展与更新(U)打开扩展安装包界面
- 在扩展和更新界面中左侧选择联机,通过安装包搜索框输入Sonar,在查询出的列表中选择SonarLint for Visual Stuido 2015, 点击下载进行安装
- 安装完毕之后,重启vs,将需要分析的项目加入到snoarlint实时分析列表中
- 此时sonar实时分析已经开始工作,在警告列表中出现了分析结果并包含错误原因分析
- Sonar还包含了修改建议,通过双击警告项,将定位到具体有问题的代码段,将鼠标移至问题代码段,出现sonar的修改建议,跟随提示更改代码即可