android sonar 简书,Sonar平台简单调研

最近需要准备将不同平台的静态代码检查集成到Sonar平台上,所以先做一个简单的了解。

一、 Sonar简介

Sonar是一个用来管理源码质量的开源平台,可以从多维度进行静态代码检测。利用其可扩展性,sonar平台通过扩展插件的方式,支持不同测试工具、代码分析工具以及持续集成工具的集成,从而实现多种编程语言的代码质量检查和管理。正是因为它可以实现多种变成语言的代码检测,所以相对单一语言的检查工具或平台来看,稍显厚重,相对的可扩展性也就更强大。

sonar作为一个代码质量管理和检测平台,既可以单独完成代码质量检查和结果分析,也可以通过插件获取其他静态代码检测工具的检查结果进行分析,因此,我们目前已有的Jenkins上实现的静态代码检查,通过插件和环境的配置,可以实现将检查结果集成到sonar平台,还可以将不同检测工具(Findbugs、OCLint、ESLint)的检查结果的统一化。

二、 Sonar的核心

SonarQube主要由以下部分组成:

SonarQube 组成

?

SonarQube Server

Sonar服务

SonarQube Database

数据库

SonarQube Plugins

插件

SonarQube Scanner

扫描器

其中,SonarQube Scanner就是SonarCube用来进行静态代码检查的工具,通过它,将项目的代码读取并发送至SonarQube服务器中,才能让SonarQube进行代码分析。和我们目前在Jenkins上使用的ESLint等工具是一样的,只是在Sonar这里使用是将ESLint这些工具作为插件使用的。

SonarQube检测的核心:

SonarQube 检测的核心

检查代码是否遵循编程标准

命名规范,编写的规范等

检查设计存在的(潜在)缺陷

检测代码存在的缺陷

检测代码的重复代码量

展示项目中存在大量复制粘贴的代码

检测代码中注释的程度

是否源码注释过多或者太少

检测代码中包、类之间的关系

分析类之间的关系是否合理,复杂度是否合适

官网上给出的Sonar会检测出来的代码七大问题:

代码七大问题

糟糕的复杂度分布

文件、类、方法等复杂度过高

重复

大量的复制粘贴代码的出现

缺乏单元测试

Sonar会统计并展示单元测试覆盖率

没有代码标准

通过PMD,CheckStyle,Findbugs等这些代码规则检测工具规范代码编写

没有足够的或者过多的注释

避免过多的注释降低代码可读性

潜在的bug

通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug

糟糕的设计

找出循环,展示包与包、类与类之间的相互依赖关系,检测自定义的架构规则

三、 Sonar的优势

Sonar的分析器在分析源码的时候,提供了技术债务、代码覆盖率、代码复杂度、已检测到的问题等。检查结果和其他静态代码检测工具是类似的,除了可以检测出bug外,还会包括可能的bug,可能引起bug的问题等等。简单总结Sonar的优点:

1. 支持多种源码检测:

Sonar支持多种语言的检测,包括J ava、Python、Groovy、C、C++、JS等几十种编程语言的检测。

2. 报告格式清晰统一:

Sonar在对检查结果进行分析后,会输出一个统一格式的分析结果,我们可以借助这一点实现多种编程语言的检查结果的统一化(我们目前Android、IOS、RN使用的不同检查工具的检查结果形式都是不同的)。

Sonar检查结果会展示在一个动态的页面,通过不同的高亮方式标记不同的文件,清晰明显的标记告知查看者检查结果。而且在这个动态页面,还可以容易准确的查看项目的历史检测详情,便于对比。用图表和可视化的形式随着时间跟踪项目质量,还可以针对某个精确的时间放大分析结果,做更多的粒度分析。

3. 代码内可自定义规则:

如果我们需要在Sonar上直接进行静态代码检查,也是可以增加自定义检查规则的,而Sonar的检查结果,自然也会将自定义的检查结果一同进行分析,实现更加定制化的代码质量管理。

Sonar在标准设定后,会强制性进行代码检测,代码必须通过所有检查项的检查。

4. 支持本地检测:

SonarQube平台以源码作为输入。源码可以从IDE输入或者从SCM中提取。对于大多数流行的IDE,都有相应的SonarQube插件,使代码分析能够更加容易地在IDE中执行。

开发可以直接在本地分支进行配置,直接“拉请求”,在当前开发分支上进行代码检测,而不必须把代码push到SonarQube上,这样缩短了反馈循环的时间,可以更好的提高代码效率(当然,目前我们的rn静态代码检查也可以在开发merge代码时检测,后续会继续学习二者是否有所不同)。

四、 实现成本

无论是哪种形式或者哪种工具,静态代码检查都可以分为两个部分,一个部分是代码检测,一个部分是检查结果整理和分析。

1. 检查报告格式统一:

目前我们已经在Jenkins上集成实现静态代码检查机制,也可以直接输出检查结果,所以可以考虑借助Jenkins上的sonar插件,将Jenkins和sonar联系起来,将我们在Jenkins上的检查结果在sonar上进行分析整理。

这样可以保证Android、Ios、RN的静态代码检查报告格式统一,在借入RD的App监测平台的时候,对于数据的处理更加方便。

2. Sonar引入SonarJS插件:

SonarJS插件,顾名思义是JS静态代码检查的插件,SonarJS有自己的高稳定性质量标准,可以用在Eclipse and IntelliJ这些IDE上使用本地或者远程的SonarQube进行自动代码检查。但是需要注意的是,SonarJS自定义规则需要使用Java。目前我们使用的RN静态代码检查规则是使用Python自定义的,而且目前我们使用的IDE也都不是Eclipse and IntelliJ,所以后期如果进行检测迁移,还需要再深入调查来评估。

SonarJS支持以下几个框架和语言:

ECMAScript 5 / ECMAScript 2015/ ECMAScript 2016 / ECMAScript 2017

React JSX

Vue.js

Flow

ESLint的检测其实是针对ECMAScript语言,使用 parserOptions 属性进行指定想要支持的 JavaScript 语言选项来实现的,所以直接使用sonarJS也可以实现JS和RN的静态代码检查的。

3. 在Sonar上实现JS或RN静态代码检查:

如果不希望sonar只做检查结果分析,而是想在sonar上完成代码检测到结果分析整个流程,那么可以直接在sonar服务上添加插件,直接让sonar对源代码进行扫描即可;根据已经有的文档记录,sonar可以支持oclint、findbugs和eslint插件的集成。在sonar上接入持续集成,sonar对大量集成工具都提供了接口支持,所以sonar支持持续集成的。

强制性质量标准制定后,源代码就必须要通过所有检查项,所以如果在定制化检查项的过程中,考虑到某些检查项不适合需要修改,就需要在sonar的源码中进行修改更新,来避开通用的强制检查项。

4. 集成机制的选择:

Sonar如果想实现持续集成,内部依赖SonarScanner,但是也可以选择Jenkins或者Gitlab平台。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值