代码质量管理SonarQube

314 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

Sonar是什么

Sonar简介

Sonar是一个用于代码质量管理的开源平台(管理源代码的质量),通过插件形式,可以支持 包括java,C#,C/C++,PL/SQL,Cobol,JavaScript, Groovy等等二十几种编程语言的代码 质量管理与检测。

Sonar作用

不遵循代码标准潜在缺陷 Sonar是从七个维度检测代码质 复杂度分布欠佳 量,而作为开发人员至少需要处 重复代码 理前5种代码质量问题。 

  1. 不遵循代码标准
  2. 潜在缺陷
  3. 复杂度分布欠佳
  4. 重复代码
  5. 注释不足or过多 
  6. 缺乏单元测试
  7. 设计欠佳
  • 没有代码标准(不遵循代码标准) 。
    sonar可以通过PMD、CheckStyleFindbugs等等代码规则检测工具规范代码编写 

  • 潜在的bug,潜在的缺陷 .
    sonar可以通过PMD、CheckStyle、Findbugs等等代码规则检测工具检测出潜在的bug 

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

  • 重复代码
    程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方。

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

  • 缺乏单元测试
    sonar可以很方便地统计并展示单元测试覆盖率

  • 设计欠佳(SpaghettiDesign,意大利面式设计)
    通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则;通过sonar可以管理第三方 的jar包,可以利用LCOM4检测单个任务规则的应用情况检测耦合。

tips : PMD,CheckStyle,Findbugs这些工具都叫静态代码分析工具。 什么是静态代码分析?静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、接口等来检查程序的 正确性,找出代码隐藏的错误或缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,空指针引用等。

静态代码分析工具

CheckStyle

Checkstyle是一个开源工具,可以帮助实施编码标准和最佳实践,特别注重编码惯例。虽然Checkstyle涵盖了一些静态代码分析功能(与PMD和Findbugs的方式大致相同),但是我们将主要在Checkstyle检测和执行编码编写规范。

PDM

PMD是一种静态代码分析工具,能够自动检测范围很广的潜在缺陷和不安全或非优化的代码(不良做法),其他工具,如Checkstvle可以检查编码约定(规范)和标准。PMD更侧重于缺陷检测(确保遵循良好做法)。 它附带了丰富且高度可配置的规则集,可以轻松地配置给定项目应使用哪些特定规则。

情况示例:

  • 捕捉异常而不做任何事情
  • 死循环代码
  • 太多复杂的方法
  • 直接使用实现而不是接口
  • 实现或重写了hashcode()没有实现或重写equals(Objectobject)方法返回对可变对象的引用可能会对外暴露内部实现

**FindBugs
**

Findbugs是Java的另一个静态分析工具,在某些方面类似于Checkstyle和PMD,但是具有不同的重点。

特点: 

  • 不关心格式化或编码标准,它的目标是检测潜在的错误和性能问题。可以检测到许多常见但难以发 现的错误) 
  • 能够以比较高的精度检测出与PMD或Checkstyle不同的问题。

Sonar的优点

  • 优秀的图形化界面,基本上通过界面就可以对自己项目代码状况一目了然 
  • 可以查询出其它软件难以定位到的问题 

a)可能导致空指针异常的问题(对象在进行使用前没有加空的判断) 

b)可能导致内存泄漏的问题:在trvcatch块里面,直接使用eprintStackTrace()将堆栈信息打 印到内存 

c)可能导致的漏洞:成员变量使用public定义的 

d)流等未关闭或者是非正常关闭都能够检测出来

Sonar组成

详见官网文档 docs.sonarqube.org/8.0/archite…

Sonar安装配置

  • 要求:Centos7,jdk8,mysql5.6-5.7sonarqube-6.7.6(LTS)。
  • 备注:Sonar是基于Java开发的,因此运行Sonar自然需要JDK 
  • CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可直接覆盖掉MariaDB。

Sonar安装

下载YUM源(dev.mysql.com/downloads/r…

 #wget http://devmysglcom/get/mysl57-communityrelease-el7-8.noarch.rpm 

 安装mysql源 

# yum localinstall mysql57-community-release-el7-8.noarch.rpm 

检查mysgl源是否安装成功 

#yum repolist enabled|grep"mysql.*-community."

Sonar工作流程

Sonar Scanner使用 和 Sonar 集成插件下次再肝吧,弄不动了。