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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

awesome@qa 2018-05-16 16:39:01 浏览2992
展开阅读全文

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

简介

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

为神马要分析我的代码

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

SonarQube能干什么?

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

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

img

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

img

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

img

  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)INFO
  Neither a bug nor a quality flaw, just a finding.

SonarQube架构

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

SonarQube架构

img

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工具来自动化计算。

网友评论

登录后评论
0/500
评论
awesome@qa
+ 关注