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

/ 测试 / 没有评论 / 1930浏览

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

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

sonarqube主要用于以下场景:

  1. 开发代码中实时检查
  2. 开发代码完毕,提交代码到配置库之后,定期或者不定期扫描 本节主要讲解如下部分:

Sonarqube特性

  1. 易于安装,开箱即可启动
  2. 易于配置-所有配置可以通过其提供的web界面实现
  3. 可以与CI系统,例如jenkins完美集成
  4. 丰富的扫描规则,支持自定义,并可以集成findbugs,pmd,checkstyle等插件
  5. 丰富的格式支持,可以扫描java\js\xml\jsp等多种格式
  6. 丰富的统计功能
  7. 支持违规的处理、分配等工作流
  8. 可以对违规进行确认,误报的违规一次确认后将不再统计在内
  9. 支持maven\ant\命令行等方式扫描

Sonarqube安装与配置

  1. sonarqube官网地址:https://www.sonarqube.org/
  2. sonarqube分为以下产品组:

以下为5.6.6版本为例进行讲解,不选择最新版本的原因是:sonarqube更新频繁,更新会导致一些插件的不可用.sonarqube为开箱即用,不需要安装。下载后解压就可以使用。

  1. 目录结构如下:
  1. 数据库mysql配置
sonar.jdbc.username=
sonar.jdbc.password=
sonar.jdbc.url=jdbc:<mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance>
  1. web server的jvm配置
sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Djava.net.preferIPv4Stack=true
  1. COMPUTE ENGINE jvm配置:
sonar.ce.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Djava.net.preferIPv4Stack=true

计算引擎个数配置:sonar.ce.workerCount=1

  1. 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

  1. 点击top栏中“质量配置”进入质量配置页面
  2. 在质量配置页面点击右侧的“创建”,出现创建页面
  3. 选择语言为java,输入名称,点击“创建”,质量配置创建成功

添加代码规则

2

  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=.
  1. 在工程目录下运行sonar-scanner.bat
  2. 登录http://localhost:9000可以查看生成的报告数据

分析扫描结果

结果查看

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

概览

  1. 打开首页后,可以查看各个项目的概览情况,例如代码行数,违规数等
  2. 选择关注的项目,可以查看项目的具体情况,点击“问题”、“指标”、“代码”、“仪表盘”等可以查看更详细的信息

代码和问题

查看代码需要登陆系统

  1. 查看代码,显示源码
  2. 问题页面,显示项目的问题的具体信息

违规处理

以下操作需要登陆系统 4

违规解决

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

  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. 下载SonarLint插件包,使用Eclipse本地安装方式. 打开eclipse-->help-->installsoftware—Add…-->Archive…-->选中插件包

检查安装

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

功能介绍

代码扫描

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

项目报告视图(SonarLint Report)

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

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

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

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服务器后,会在视图中显示,之后通过点击项目右键菜单绑定关联项目。 6 7 Analyze changed files :连接SonarQube服务器后使用,只扫描新修改的文件。 关联SonarQube 服务器上创建的项目,使用其质量配置。 8 9 服务器地址需要修改为实际SonarQube 部署地址。

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

Console

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

附录-开源版sonarqube支持C#

VS集成Sonar之前

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

Sonar集成

  1. 打开VS2015,通过工具(T)-> 扩展与更新(U)打开扩展安装包界面 11
  2. 在扩展和更新界面中左侧选择联机,通过安装包搜索框输入Sonar,在查询出的列表中选择SonarLint for Visual Stuido 2015, 点击下载进行安装 12
  3. 安装完毕之后,重启vs,将需要分析的项目加入到snoarlint实时分析列表中 13
  4. 此时sonar实时分析已经开始工作,在警告列表中出现了分析结果并包含错误原因分析 14
  5. Sonar还包含了修改建议,通过双击警告项,将定位到具体有问题的代码段,将鼠标移至问题代码段,出现sonar的修改建议,跟随提示更改代码即可 15