持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
Sonar是什么
Sonar简介
Sonar是一个用于代码质量管理的开源平台(管理源代码的质量),通过插件形式,可以支持 包括java,C#,C/C++,PL/SQL,Cobol,JavaScript, Groovy等等二十几种编程语言的代码 质量管理与检测。
Sonar作用
不遵循代码标准潜在缺陷 Sonar是从七个维度检测代码质 复杂度分布欠佳 量,而作为开发人员至少需要处 重复代码 理前5种代码质量问题。
- 不遵循代码标准
- 潜在缺陷
- 复杂度分布欠佳
- 重复代码
- 注释不足or过多
- 缺乏单元测试
- 设计欠佳
-
没有代码标准(不遵循代码标准) 。
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 集成插件下次再肝吧,弄不动了。