SonarQube介绍及部署

编写人:罗旭成

编写时间:2014-5-28

SonarQube简介

SonarQube是一个用于代码质量管理的开源平台(Java开发),用于管理源代码的质量,可以从七个维度检测代码质量,通过插件形式,可以支持包括Java,C#,C/C++,PHP,PL/SQL,Cobol,Web,XML,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测。

SonarQube能带来什么?

1.糟糕的复杂度分布

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

2.重复

显然程序中包含大量复制粘贴的代码是质量低下的, SonarQube可以展示源码中重复严重程度。

3.缺乏单元测试

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

4.没有代码标准

SonarQube可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。

5.没有足够的或者过多的注释

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

6.潜在的bug

SonarQube可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的Bug。

7.糟糕的设计(原文Spaghetti Design,意大利面式设计)

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

SonarQube部署说明

(以C#源码为例)

第一步:安装SonarQube

1. 准备好JAVA环境(Java6.0)。

2. 准备好MySQL环境(可用默认的数据库derby,配置文件全部不用做修改)。

3. 下载最新的SonarQube,(下载网址为:http://www.sonarqube.org/)解压到目录C:\app\sonarqube-4.3(当前为最新版)。

4. 修改配置文件C:\app\ sonarqube-4.3\conf\sonar.properties:

#数据库用户名

sonar.jdbc.username=root

#数据库密码

sonar.jdbc.password=root

#数据库地址

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

#数据库驱动

sonar.jdbc.driverClassName:com.mysql.jdbc.Driver

#数据库相关配置

sonar.jdbc.maxActive=20

sonar.jdbc.maxIdle=5

sonar.jdbc.minIdle=2

sonar.jdbc.maxWait=5000

sonar.jdbc.minEvictableIdleTimeMillis=600000

sonar.jdbc.timeBetweenEvictionRunsMillis=30000

5. 执行C:\app\sonar-3.6\bin\windows-x86-64\StartSonar.bat(操作系统为windows xp),启动自带的JETTY服务器。打开http://localhost:9000,如果显示SonarQube主页,则SonarQube安装成功.

安装成功后的效果:

6. 安装中文插件和其它语言插件:将插件JAR包放到目录C:\app\ sonarqube-4.3\extensions\plugins,重启服务即安装成功。

7. 数据库会自动创建表结构(MySQL):

注:默认的配置可以不作修改,直接可连接上,连的默认数据库为derby。

第二步:安装SONAR-RUNNER

1. 下载sonar-runner,解压到目录C:\app\sonar-runner-2.4

2. 修改配置文件C:\app\sonar-runner-2.4\conf\sonar-runner.properties:

#sonar访问地址

sonar.host.url=http://localhost:9000

#连接数据库地址

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

#数据库的用户名

sonar.jdbc.username=root

#数据库的密码

sonar.jdbc.password=root

#sonar的字符集

sonar.sourceEncoding=zh_CN

#sonar的登录用户

sonar.login=admin

#sonar的登录密码

sonar.password=admin

3. 添加系统环境变量:SONAR_RUNNER_HOME 值为 C:\app\sonar-runner-2.4。

4. 修改环境变量Path,在变量值末尾添加:“;%SONAR_RUNNER_HOME%\bin”。

5. 命令行里执行 sonar-runner -h 如果显示如下内容,则安装成功。

C:\app\sonar-runner-2.4

INFO:

INFO: usage: sonar-runner [options]

INFO:

INFO: Options:

INFO:  -D,--define <arg>     Define property

INFO:  -e,--errors           Produce execution error messages

INFO:  -h,--help             Display help information

INFO:  -v,--version          Display version information

INFO:  -X,--debug            Produce execution debug output

第三步:分析代码

1. 拷贝代码到C:\app\project

代码目录结构如图:

2. 添加C:\app\project\sonar-project.properties 内容如下 :

#项目主键 需要唯一

sonar.projectKey=DataCollectionSolution

#项目版本

sonar.projectVersion=1.0

#项目名称

sonar.projectName=C# Project

#sonar的语言

sonar.language=cs

sonar.dotnet.key.generation.strategy=safe

sonar.sourceEncoding=UTF-8

#项目访问目录

sonar.sources=C:\\app\\project\\

sonar.fxcop.mode=skip

sonar.gendarme.mode=skip

sonar.gallio.mode=skip

sonar.ndeps.mode=skip

sonar.stylecop.mode=skip

3 命令行里执行 cd C:\app\project 到项目根目录。

然后执行命令:sonar-runner,控制台会打印分析过程。当出现SUCCESS时,则分析成功。

INFO: --------------------

INFO: EXECUTION SUCCESS

INFO: --------------------

Total time: 2:37.891s

Final Memory: 14M/449M

INFO: --------------------

刷新网站,显示如下:

完成以上操作及配置成功。

官网:http://www.sonarqube.org/

示例:http://nemo.sonarsource.org/

文档&插件:http://docs.codehaus.org/

SonarQube介绍及部署的更多相关文章

  1. Redis介绍及部署在CentOS7上(一)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  2. ceph-csi组件源码分析(1)-组件介绍与部署yaml分析

    更多ceph-csi其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi组件源码分析(1)-组件介绍与部署yaml分析 基于tag v3.0.0 ht ...

  3. Spark入门实战系列--5.Hive(上)--Hive介绍及部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...

  4. 服务发现 - consul 的介绍、部署和使用

    什么是服务发现 相关源码: spring cloud demo 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是 ...

  5. 服务发现之consul的介绍、部署和使用

    什么是服务发现 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是我们的重点.我们看下面的一幅图片:     图中 ...

  6. Azkaban介绍+安装部署+实战案例

    Azkaban介绍 什么是azkaban?1.工作流的作业调度系统2.通过k.v指令写法描述工作流节点3.可以通过web界面去管理工作流 Azkaban安装部署 2.3.1 准备工作 Azkaban ...

  7. 服务发现 - consul 的介绍、部署和使用(转)

    什么是服务发现 相关源码: spring cloud demo 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是 ...

  8. Python多版本管理器-pyenv 介绍及部署记录

    一. pyenv简单介绍 在日常运维中, 经常遇到这样的情况: 系统自带的Python是2.x,而业务部署需要Python 3.x 环境, 此时需要在系统中安装多个Python版本,但又不能影响系统自 ...

  9. Apache Ignite 学习笔记(一): Ignite介绍、部署安装和REST/SQL客户端使用

    Apache Ignite 介绍 Ignite是什么呢?先引用一段官网关于Ignite的描述: Ignite is memory-centric distributed database, cachi ...

随机推荐

  1. 【JVM】程序调优

    现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 .... ...

  2. json中load和loads区别

    相同点 dump 和 dumps 都实现了序列化 load 和 loads 都实现反序列化 变量从内存中变成可存储或传输的过程称之为序列化序列化是将对象状态转化为可保存或可传输格式的过程. 变量内容从 ...

  3. python collections模块 计数器(counter)

    一.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 把我写入的元素出现的多少次都计算出来 import collectio ...

  4. mxGraph画图区域使用鼠标滚轮实现放大/缩小

    // 重写鼠标滚轮事件 mxEvent.addMouseWheelListener = function (funct) { } // 添加初次载入事件 window.onload = functio ...

  5. Upsource——对已签入的代码进行分享、讨论和审查代码

    Upsource 一.Upsource简介 Upsource ,这是一个专门为软件开发团队所设计的源代码协作工具.Upsource能够与多种版本控制工具进行集成,包括Git.Mercurial.Sub ...

  6. PAT 1144 The Missing Number[简单]

    1144 The Missing Number(20 分) Given N integers, you are supposed to find the smallest positive integ ...

  7. 存储器系列,L1缓存,L2缓存,内存(RAM),EEPROM和闪存,CMOS与BIOS电池

    因为各级存储硬件的参数和性能不同所以在计算机硬件当中分为以下几种: 由此可见顶级空间小但处理速度最快,下层容量大但处理速度时间较长. 存储器系统采用分层结构,顶层的存储器速度较高,容量较小,与底层的存 ...

  8. PATH_INFO, SCRIPT_NAME, REQUEST_URI区别示例

     

  9. ELK日志系统

    ELK stack是又Elasticsearch,lostash,kibana 三个开源软件的组合而成,形成一款强大的实时日志收集分析展示系统. Logstash:日志收集工具,可以从本地磁盘,网络服 ...

  10. SpringBoot入门学习(一)

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.用我 ...