Jenkins+SonarQube6.5.5+SonarScanner2.5代码质量管理平台

简介

Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。

为神马要分析我的代码

对代码质量关注时,安排人工进行code review是需要的,但100%的code review却需要投入人员,消耗大量的工作量,而工具自动检查只需少量人工配置。
最主要的原因就是提高代码质量,了解RD在编码过程中犯过的错误可能对功能逻辑产生的影响,同时也推动RD让自己的代码更具有可读性和维护性,所以我们借鉴持续改进的流程,希望能够在这个过程中有所收获

SonarQube能干什么?

SonarQube 在进行代码质量管理时,会从图 1 所示的七个纬度来分析项目的质量。

  1. 不遵循代码标准
    sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。
  2. 潜在的缺陷
    sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷。

  1. 糟糕的复杂度分布
    文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员 难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
  2. 重复
    显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示 源码中重复严重的地方。

  1. 注释不足或者过多
    没有注释将使代码可读性变差,特别是当不可避免地出现人员变动 时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
  2. 缺乏单元测试
    sonar可以很方便地统计并展示单元测试覆盖率。

  1. 糟糕的设计
    通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。
每一个issue分为五个严重性等级:1)BLOCKER有相当高的概率会导致应用产生十分严重的行为后果,如memory leak, unclosed JDBC connection, .... 这部分代码必须紧急fix.2)CRITICAL在实际应用中可能会出现低概率的偶现性行为缺陷,也或许存在安全漏洞,如: empty catch block, SQL injection, ... 该部分代码必须立刻进行review. 3)MAJOR开发人员的代码质量缺陷,如: uncovered piece of code, duplicated blocks, unused parameters, ...4)MINOR编码规范: lines should not be too long, "switch" statements should have at least 3 cases, ...5)INFONeither a bug nor a quality flaw, just a finding.

SonarQube架构

SonarQube框架包含以下四个部分:
1)Project
2)SonarQube Scanner
3)SonarQube Server
4)SonarQube Database

Project
是需要被分析的源码,如我们的app工程源码,SonarQube支持多种语言和多种工程结构,Andriod是属于一种多模块的Java工程。

SonarQube Scanner
是用于执行代码分析的工具,在Project的根目录下执行,我们还需要在Project下进行SonarQube配置,其中指定了工程的相关信息,还指定了SonarQube Server的地址,SonarQube Scanner分析完毕之后,会将结果上报到该Server。

SonarQube Server
显示分析结果的Web Server,在SonarQube Scanner第一次将一个工程的分析结果上报给SonarQube Server后,Server上会自动创建一个工程显示分析的结果,可以在Server上设置代码质量管理相关的各种配置,如设置代码检查规则(Rule)和质量门限(Quality Gate)等。

工作原理

远程客户机可以通过各种不同的分析机制,从而将被分析的项目代码上传到 SonarQube server 并进行代码质量的管理和分析,SonarQube 实际上是一个Web系统,通过 Web API 将分析的结果以可视化、可度量的方式展示代码扫描结果,结果是可以自定义的,而真正实现代码扫描的是Sonar Scanner这个工具
SonarQube 并不是简单地将各种质量检测工具的结果(例如 FindBugs,PMD 等)直接展现给客户,而是通过不同的插件算法来对这些结果进行再加工,最终以量化的方式来衡量代码质量,从而方便地对不同规模和种类的工程进行相应的代码质量管理。

SonarQube 可以支持 25+ 种编程语言,针对不同的编程语言其所提供的分析方式也有所不同:
对于所有支持的编程语言,SonarQube 都提供源了代码的静态分析功能;
对于某些特定的编程语言,SonarQube 提供了对编译后代码的静态分析功能,比如 java 中的 class file 和 jar 和 C# 中的 dll file 等;
对于某些特定的编程语言,SonarQube 还可以提供对于代码的动态分析功能,比如 java 和 C# 中的单元测试的执行等。

集成之路

1、下载并安装Sonar、SonarScanner
2、下载并安装DB(推荐MySQL)
3、配置sonar.properties、sonar-scanner.properties
http://wiki.inwaimai.baidu.com/download/attachments/9563635/1.png?version=1&modificationDate=1500005898178&api=v2

http://wiki.inwaimai.baidu.com/download/attachments/9563635/2.png?version=1&modificationDate=1500005899625&api=v2

4、jenkins安装Sonar plugin

Sonar支持以下几种方式进行代码检查:
1、Analyzing with SonarQube Runner (recommended analyzer)
2、Analyzing with SonarQube Ant Task
3、Analyzing with Maven
4、Analyzing with Gradle
5、CI Engines

5、Jenkins下面配置Sonar和SonarRunner

http://wiki.inwaimai.baidu.com/download/attachments/9563635/3.jpg?version=1&modificationDate=1500006054554&api=v2

http://wiki.inwaimai.baidu.com/download/attachments/9563635/4.png?version=1&modificationDate=1500005899895&api=v2

http://wiki.inwaimai.baidu.com/download/attachments/9563635/5.png?version=1&modificationDate=1500005900463&api=v2

6、jenkins中配置需要做代码扫描的项目

衡量软件质量的5个最常用的指标

  1. SLOC(Source Lines of Code,源代码行)
    计算代码行数可能是最简单的衡量指标,主要体现了软件的规模,并为项目增长和规划提供了相关数据。
  2. 每个代码段/模块/时间段中的bug数
    要想实现更好的测试以及更高的可维护性,bug跟踪是必不可少的。每个代码段、模块或时间段(天、周、月等)内的bug可以很容易通过工具统计出来(如Mantis)。这样,可以及早发现并及时修复。
  3. 代码覆盖率
    在单元测试阶段,代码覆盖率常常被拿来作为衡量测试好坏的指标,也用来考核测试任务完成情况。
  4. 设计/开发约束
    软件开发中有很多设计约束和原则,其中包括:

1) 类/方法的长度
2) 一个类中方法/属性的个数
3) 方法/构造函数参数的个数
4) 代码文件中魔术数字、字符串的使用(魔术数字指直接写在代码中的具体数值,其他人难以理解数字的意义)
5) 注释行比例等
代码的可维护性和可读性是很重要的,开发团队可以选择以上这些原则中的一个或全部,并通过一些自动化工具(如maven pmd插件)来遵循这些原则,这将大大提高软件产品的质量。

  1. 圈复杂度(Cyclomatic Complexity)
    圈复杂度是用来衡量一个模块判定结构的复杂程度,已经成为评估软件质量的一个重要标准,能帮助开发者识别难于测试和维护的模块,在成本、进度和性能之间寻求平衡。圈复杂度可以使用pmd工具来自动化计算。

Jenkins+SonarQube6.5.5+SonarScanner2.5代码质量管理平台相关推荐

  1. 开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube6.4

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 上一章讲述了如何配置使用源代码管理工具SVN并使之与Apache集成,从而实现代码的变更可追溯,虽然在大多数团队里强 ...

  2. sonarqube+jenkins 构建代码质量管理平台

    本文基于已经构建好的jenkins自动化平台,添加sonarqube质量检测平台,本文主要展示sonar环境安装以及接入jenkins的操作(同一台机器) jenkins自动化平台搭建,请参考连接文章 ...

  3. 开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube

    1.前言 上一章讲述了如何配置使用源代码管理工具SVN并使之与Apache集成,从而实现代码的变更可追溯,虽然在大多数团队里强调代码提交之前必须找团队中经验丰富的人来审核通过后方可提交,但这一条有时候 ...

  4. Windows10 部署 Sonarqube 代码质量管理平台

    Windows10 部署 Sonarqube 代码质量管理平台 一 安装MySQL解压版 此部分参看Win10安装MySQL5.7.22 解压缩版(手动配置)方法 1.下载MySQL MySQL官网下 ...

  5. 代码质量管理平台搭建

    代码质量管理平台搭建 sonar简介 sonar是一款静态代码质量分析工具,支持Java.Python.PHP.JavaScript.CSS等25种以上的语言,而且能够集成在IDE.Jenkins.G ...

  6. 持续集成与自动化部署 - jenkins sonar代码质量管理平台 部署和基础使用(五)...

    1 jenkins 安装参考链接 1.1 安装jenkins [root@test-node3 ~]# yum install -y java-1.8.0 [root@test-node3 ~]# c ...

  7. SonarQube代码质量管理平台安装与使用--转载

    原文:http://blog.csdn.net/hunterno4/article/details/11687269 Sonar简介 Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量, ...

  8. SonarQube代码质量管理平台安装与使用

    Sonar简介 Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaS ...

  9. SonarQube代码质量管理平台安装与配置

    1.安装说明 PS:为什么要有安装说明?本人在网上找资料的时候发现很多教程是没有交代清楚安装环境的.所以,不清楚他们的教程是否适合我的环境.明确『安装说明』方便网友了解我的配置环境,便于大家深入理解此 ...

最新文章

  1. python 设置开机自动启动 .py 文件
  2. 计算机删除等级列在哪里,插入与删除Excel表格的单元格、行和列
  3. 039_MySQL_多表查询
  4. Storm精华问答 | 最火的流式处理框架——Storm
  5. java怎么获取ie浏览器的cookie,IE8 浏览器Cookie的处理
  6. python后台——aiohttp入门
  7. WPF ImageButton
  8. 基于ipv6的多分支大学校园网设计与实现
  9. 【python】查找array中非零元素的横纵坐标
  10. ping命令的多种玩法,以前竟然只用它来测试网速!
  11. linux awk命令详解(一) awk语法 awk运算 awk数组
  12. centos 安装 Go环境
  13. ELMo模型的理解与实践(2)
  14. ISO27001 LA学习纪录
  15. OpenResty 连接Redis
  16. Qt Creator 添加基于 JSON 的向导
  17. Google play ASO 关键字指南
  18. 【香橙派】-从零开始的学习之旅
  19. 如何利用教育网站源码成功搭建在线教育网站
  20. c语言一元二次方程计算

热门文章

  1. Spring MVC 和 Spring 总结
  2. 编辑从字节码和 JVM 的角度解析 Java 核心类 String 的不可变特性
  3. [MySQL] 索引与性能(3)- 覆盖索引
  4. 深度学习(一)深度学习学习资料
  5. 如何设计一门语言(八)——异步编程和CPS变换
  6. 数字图像处理:第十二章 小波变换
  7. 可视化Linux性能监控
  8. 11.python并发入门(part4 死锁与递归锁)
  9. eclipse常用快捷键汇总
  10. Linux 搜索指令