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

先学习一下英文单词:

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, 不能低于原来的值。就这些。

[SonarQube]小结的更多相关文章

  1. 【03】Jenkins:SonarQube

    写在前面的话 SonarQube 这个服务有些人熟悉,有些人陌生.对于我们这样的运维人员,我们需要了解的是,SonarQube 是一个代码质量管理平台,懂得怎么安装配置,这其实就差不多足够了.我们在 ...

  2. SonarQube搭建手记

    前提 这篇文章记录的是SonarQube服务搭建的详细过程,应用于云迁移后的PipleLine的代码扫描环节. 笔者有软件版本升级强迫症,一般喜欢使用软件的最新版本,编写此文的时候(2020-05-1 ...

  3. SonarQube学习(五)- SonarQube之自定义规则使用

    一.前言 古人云:"欲速则不达",最近真的是深有体会.学习也是如此,不是一件着急的事,越是着急越不会. 就拿SonarQube来说吧,去年年末就想学来着,但是想着想着就搁置了,有时 ...

  4. 从零开始编写自己的C#框架(26)——小结

    一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...

  5. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  6. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  7. iOS--->微信支付小结

    iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...

  8. iOS 之UITextFiled/UITextView小结

    一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...

  9. K近邻法(KNN)原理小结

    K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...

随机推荐

  1. delphi xe4 程序添加管理员权限要求后不能调试的解决方法

    环境: win7 企业版 xe4 问题: 把项目设置为需要管理员权限才能运行后,调试会弹出一个提示框,如图:

  2. jstl foreach标签

    forEach标签 forEach标签用来循环. 属性: * var :定义循环变量 * begin :从哪开始 * end :到哪结束 * step :递增 * items :遍历的内容 * var ...

  3. iOS 多个异步网络请求全部返回后再执行具体逻辑的方法

    对于dispatch多个异步操作后的同步方法,以前只看过dispatch_group_async,看看这个方法的说明: * @discussion * Submits a block to a dis ...

  4. objccn-iOS上的相机捕捉

    在第一台iPhone时,在app里面整合相机的唯一方法就是使用UIImagePickerController.到了iOS4,发布了更灵活的AVFoundation框架. UIImagePickerCo ...

  5. spring集成常用技术的配置

    使用spring集成其他技术,最基本的配置都是模板化的,比如配置视图模板引擎.数据库连接池.orm框架.缓存服务.邮件服务.rpc调用等,以spring的xml配置为例,我将这些配置过程整理出来,并不 ...

  6. LeetCode之171. Excel Sheet Column Number

    ---------------------------------- 乘权相加即可. AC代码:(从右往左) public class Solution { public int titleToNum ...

  7. SVM实现邮件分类

    首先学习一下svm分类的使用. 主要有以下步骤: Loading and Visualizing Dataj Training Linear SVM Implementing Gaussian Ker ...

  8. hdu 1502 Regular Words

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1502 思路:给定一个n,分别由n个a,b,c组成的字符串的所有前缀中a的个数大于等于b的个数大于等于c的个 ...

  9. 8-04流程控制语句BEGIN ..END

     流程控制语句: 是用来控制程序流程的语句. 常用的流程控制语句的分类: 顺序结构:BEGIN...END 分支结构: IF ..ELSE 或CASE ..END 循环结构:WHILE 顺序结构 语法 ...

  10. [C++11][数据结构]自己的双链表实现

    这个双链表,是我模仿stl的list制作的,只实现了一些基本功能,像merge,transfer这些就没有实现,用户可以用基本操作来自己做外部实现. 我没有选用stl的[begin,end)迭代器模式 ...