Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)

在这一篇我们主要介绍Sonar的使用方式,如果你还没有安装Sonar的话,可以看一下上一篇内容Sonar的安装配置教程,详细的介绍了Sonar服务的安装配置步骤以及提供了所需的所有安装包;

如果已经安装好了Sonar服务就可以开始使用Sonar检测我们的代码了,先来温习一下什么是Sonar

什么是Sonar?

Sonar是一个用于代码质量管理的开源平台,用于管理代码的质量,通过插件形式可以支持二十几种语言的代码质量检测,通过多个维度的检查了快速定位代码中潜在的或者明显的错误;

Sonar工作原理

Sonar其实是一个Web系统,SonarQube对Sonar进行支持,Sonar可以在网页上展示静态代码的检测结果,检测各种代码语言的规则我们可以自定义,通过Sonar-Scanner这个工具进行代码检测;

Sonar检测维度

Sonar可以从七个维度进行代码质量检测,我们可以根据不同维度的严重性然后根据我们的经验做出相应的代码优化,当然并不是所有维度我们都有必要代码修改;

  • 代码规范

    Sonar可以通过PMD、CheckStyle、Findbugs等代码规则检测工具来检测我们代码是否符合代码规范;

  • 潜在的缺陷

    Sonar可以通过PMD、CheckStyle、Findbugs等代码规则检测工具来检测我们代码是否有代码缺陷(比如空指针是否有判断、IO流是否有关闭等);

  • 糟糕的复杂度分布

    文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试

  • 重复代码

    程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方

  • 注释的检测

    没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷

  • 单元测试

    sonar可以很方便地统计并展示单元测试覆盖率

  • 糟糕的设计

    通过sonar可以找出循环,展示包与包、类与类之间相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。

SonarScanner 配置

打开\sonar-scanner-2.5\conf\sonar-runner.properties文件,配置Mysql连接信息

Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第1张图片

#### 配置环境变量 ####

  • Windows环境下:
1.新建变量,name=SONAR_RUNNER_HOME。value=E:\sonar\sonar-scanner-2.5

2.打开path,输入%SONAR_RUNNER_HOME%\bin;

3.sonar-runner -version,出现以下信息,则表示环境变量设置成功

Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第2张图片

  • Ubantu环境下:
要使环境变量对所有用户有效,可以修改profile文件

sudo vim /etc/profile 

添加语句

export CLASS_PATH=home\Ailian\sonar\sonar-scanner-3.2\bin

注销或者重启可以使修改生效,如果要使添加的环境变量马上生效

source /etc/profile

查看环境变量是否生效

echo $PATH

下图显示表示环境变量配置成功:
image

sonar-project.properties

配置好上面的环境变量后,我们就可以开始使用Sonar-Scanner进行代码检测了

首先进入需要进行检测的代码的跟目录(其实任意目录都可以)
新建一个sonar-project.properties文件并添加如下内容

# must be unique in a given SonarQube instance
sonar.projectKey=a42531efd6e9f55720e23852322d7293b8b239b3

# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=ProjectName <-- 注意:这里写你自己的模块名称,用来生成报告用的

sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set. 

sonar.sources=.
# Encoding of the source code. Default is default system encoding

#sonar.sourceEncoding=UTF-8

#sonar.java.binaries=../../../out/target/common/obj

说明:

  • sonar.projectkey

projectkey属性可以在我们之前安装的sonar服务器上生成一个key
Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第3张图片

生成对应的Key:

Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第4张图片
生成key之后拷贝到上面的配置文件对应的属性中

  • sonar.projectName

生成检测报告时的报告标题名称

  • sonar.projectVersion

对应生成报告的版本号

  • sonar.sources

检测代码的路径

使用sonar-scanner扫描代码

  • Ubantu环境下
    在当前目录执行:sonar-scanner ,便开始扫描了,如果有报错,根据具体的错误检查你的环境配置是否正确。扫描时间根据你的模块代码规模而定,大家几十秒到几分钟不等:
    Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第5张图片
    Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第6张图片

Windows环境下AndroidStudio中使用Sonar

对于windows下的AS工程,可直接通过sonar lint的插件,对模块或者文件或整个工程进行代码扫描,直接在AS查看扫描结果,操作如下:
- 安装sonar lint插件:File -> Settings -> Plugins 输入查找SonarLint,然后安装插件,安装完后重启Android Studio
Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第7张图片
Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第8张图片

  • 然后再对Sonar Lint进行配置:
    File菜单 -> Settings -> Other Settings -> SonarLint General Settings,在右边的SonarQube Servers列表添加一个服务器信息:
    配置名称自己随便取一个, 类型选择SonarQube,服务器url填写:http://localhost:9000 认证类型选择token认证,token值就是上面说的key值。
    Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第9张图片

  • 然后再 Sonar Lint Project Settings菜单下,配置你的项目信息,比如project名称,使用的sonarQube服务器配置选择等(如果有多个sonar服务器可选的话,是可以选择性配置的)。
    Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第10张图片
    Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第11张图片

  • 配置好后,直接在待扫描的文件/文件夹/模块/工程 上点击右键,选择Analyze -> Analyze with SonarLint,底下工作区就会回显扫描结果以及修改建议。根据结果及修改建议,修改你的代码,修正一些潜在问题。
    Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第12张图片

Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第13张图片

Ubantu环境下AndroidStudio中使用Sonar

  • linux环境下AS工程命令行编译使用方法:
    相比之下,linux下AS工程编译配置会简单很多。

  • 在project的根目录下的build.gradle文件中添加以下配置:(这里的project version主要用来在后台分析报告时跟踪版本变化情况的,可根据自己的需配置)

plugins {
 id "org.sonarqube" version "2.6"
}


sonarqube {

    properties {
 property 'sonar.projectVersion', '2.0'
    }

}
  • 执行以下命令开始扫描:
./gradlew sonarqube -Dsonar.host.url=http://localhost:9000 -Dsonar.login=xxx
  1. 查看扫描结果:
    登录sonar服务器查看,跟前面的扫Android 源码工程的方式一致。

扫描结果

Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第14张图片

SonarQube有一个好处,可以根据project的配置,跟踪代码质量的变化,比如本次扫描相比上次扫描,质量是提高了还是降低了?扫描出来的潜在的缺陷是增加了还是减少了,以及整个以时间轴为横轴的质量变化趋势。如下图:

Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第15张图片
检出出来的潜在问题,也会比较友好的方式呈现,并给予明确的说明,以及修改建议,如下图:

Sonar使用完整图文教程(Ubantu服务器、AndroidStudio工程)_第16张图片

当然我们可以从页面上看到更多的扫描结果,而且会给出原因比如有可能产生空指针异常,流的关闭位置不对等等,同时点击后面的“…”会给予相应的错误提示及修改建议,扫描规则可以自定义,我们也会根据实际情况,不断优化我们的扫描规则,以使得发现更多的我们需要关注的潜在问题点。

总结

通过使用SonarQube,能提前暴露潜在bug和漏洞,让程序更稳定。能提前暴露代码的逻辑和架构问题,可以思考如何写能提高代码质量,如何让代码逻辑更清晰。在一定程度上可以减少测试的时间。
Sonar的检测规则我们可以自己定义,我上面使用的是sonar默认的规则;

上一篇:Sonar在Windows下的安装配置(图文 附安装包)

你可能感兴趣的:(sonar)