新的项目用了这个,以前从来没用过,配置了一下,看看这个到底是个什么东东.

先学习一下英文单词:

sonar 声纳, qube 方盒子, 连起来应该叫声纳盒, SonarQube一看就是一个监测诊断设备. 官方定义是这样的,原文如下,简单来说就是一个源码分析诊断工具,诊断粒度从产品甚至到一个方法都有.

"The SonarQube® platform is an open source quality management platform, dedicated to continuously analyzing and measuring the technical quality of source code, from project portfolio down to the method level." -From http://docs.sonarqube.org

架构

在进入安装、配置、运行之前,还是有必要了解一下SonarQube(简称SQ)的架构,否则出了问题不好诊断。官方给出了详细的架构,还有2张图画的也很好,链接在此。简单来说,SQ平台本身包括server(内部有2个process,分别为web server和search server), 数据库(用来存储配置以及分析结果),众多Plugin(你可以通过update center来下载安装,或者手动安装),一个或多个Scanner(用来运行在build或者CI)。

注意:这些运行在build(如mvn,ant)上的scanner必须要有相应的plugin支持,如源码是java,则你必须下载安装Java plugin。Scanner不会直接与Database打交道,它会与SQ Server进行交互,将生成报告返回给SQ做进一步分析。注意在mvn的setting中设置了SQ Server的url, ant类似。

代码提交,trigger loadbuild, 进而驱动sonar任务执行(如mvn中是 mvn sonar:sonar),也就是scanner运行,scanner会分析报告交给SQ进行处理, SQ处理完毕呈现,程序员可以查看出现的问题(Technical Debt)。

安装

SonarQube安装很简单, 解压缩就可以,分析的结果需要有数据库的支持,所以需要配置数据库, 另外内嵌了一个web server用于管理和查看分析运行结果. 至于数据库以及web server的一些配置,如数据库用户名密码, JDBC url, web server的端口,地址以及连接池,https,update Center(这个是用来获取各种插件进行分析源码)等等. 具体看看配置文件(conf\sonar.properties)就很清楚了。如下是MySQL的设置:

 CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
grant all privileges on sonar.* to 'sonar'@'localhost' identified by 'sonar';
flush privileges;

Plugin

Plugin, SonarQube有众多的plugin, 下面就那几个例子来说明一下.

Java Plugin

This plugin enables analysis of Java projects. It offers more than 300 rules provided by SonarSource, which span coding conventions, bug detection, and security problems, including coverage of some CWE rules, including several from the SANS TOP 25 Most Dangerous Software Errors, as well as some OWASP Top Ten vulnerabilities. This plugin is CWE Compatible, which means that you can search for rules in the plugin that are related to CWE items. This plugin replaces the majority of Findbugs, PMD, and Checkstyle rules.

-from http://docs.sonarqube.org

能分析Java code是否符合编码规范,潜在的bug和安全问题等,值得注意的是,该插件能替代findbugs和checkstyle中大部分功能。

FindBugs Plugin

It requires the Java Plugin, and uses FindBugsfb-contrib and Find Security Bugs to provide coding rules.

findbugs是一个很好的工具,用过。不过这次是以SQ插件的形式,需要Java Plugin。

Checkstyle Plugin

顾名思义,code style的check工具,目前已经被java plugin替代,可以不用。

Cobertura Plugin

代码覆盖率,类似JaCoco的东西,一般我们用Junit测试时,设置了Cobertura或者JaCoco,则会统计出代码覆盖率。这个插件可以帮助把代码覆盖率的数据呈现在SQ的web page中。

Clirr Plugin

用来诊断Java Lib的兼容性,如下,可以在SQ Web->Quality Profile中进行配置。

API Change adds new feature without breaking anything

  • API Change breaks the backward binary compatibility
  • API Change might change runtime expected behavior

关于On new Code

mvn sonar:sonar -Dsonar.projectDate=<yyyy-mm-dd>

NOTE: <yyyy-mm-dd> is the revision date when it is generated, get it from svn log

Reference:

Please note that Coverage on new code currently identifies new code based on the date of the previous analysis (and not the commit date of the code previously analyzed), see SONAR-7085

小结

项目中配置了自己的Quality Profile,引入统一的rule for code check.

在每一次提交代码前需要检查一下修改的代码所属的包,又没有引入新的issue;检查一下code coverage, 不能低于原来的值。就这些。

随机推荐

  1. 实现CheckBox的三种选中状态(全选、半选、不选)在GridView中模拟树形的功能

    度娘了很多帖子,只说三种状态要用图片替换来做,但没找到有用的例子,被逼自己写了一个 三方控件肯定是很多的,如jstree,可以直接用 由于公司的UDS限制,不能上传图片,只能文字说明了. 就是要在gr ...

  2. C# using的一些事

    一.using释放资源 using不可以释放所有的对象,原因如下: 1.using可以主动释放的对象都需要实现IDisable接口. 2.即使都实现了IDisable接口,也没有必要全部使用using ...

  3. AngularJS中的$http.post与jQuery.post的区别

    原文:http://my.oschina.net/tommyfok/blog/287748 很多时候我们需要用ajax提交post数据,angularjs与jq类似,也有封装好的post. 但是jQu ...

  4. 排队时延(Queuing delay)

    网络时延的构成 Network delay including four parts: Processing delay - time routers take to process the pack ...

  5. KnocoutJs+Mvc+BootStrap 学习笔记(Mvc)

    Mvc   1.Html 增加扩展方法 using System.Web.Mvc; namespace KnockoutBootstrapMvc.Entensions { public static ...

  6. intellij idea 的全局搜索快捷键方法

    1.Ctrl+N按名字搜索类 相当于eclipse的ctrl+shift+R,输入类名可以定位到这个类文件,就像idea在其它的搜索部分的表现一样,搜索类名也能对你所要搜索的内容多个部分进行匹配,而且 ...

  7. SQL 必知必会&#183;笔记&lt;6&gt;使用数据处理函数

     与SQL 语句不一样,SQL 函数不是可移植的.为特定SQL 实现编写的代码在其他实现中可能不正常.因为各个DBMS厂商对函数的实现有很大的区别. 常用函数 大多数SQL 实现支持以下类型的函数: ...

  8. Bootstrap学习记录-2.container和table

    1. Container Bootstrap中容器类提供了2个类标识:container.container-fluid. 两者的区别在于: container:容器不止有15px的padding,还 ...

  9. ibatitsnet 因为会Dao.config 配置数据版本太低导致的问题

    ProjectReview.Test.SqlMapTest.TestSqlMap:IBatisNet.Common.Exceptions.ConfigurationException : - The ...

  10. POJ2182 Lost Cows

    题意 Language:Default Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13448 Accep ...