Sonar简介

2019-10-27  本文已影响0人  上山走18398

question

为什么要做静态代码扫描,何时做,怎么做

  1. static code analysis
  2. Dynamic Analysis:
    code coverage
    sufficiency
    quality of unit tests
    memory leaks
  3. sonar插件开发
    ....

简介

Sonar(SonarQube)是一个开源的静态代码扫描(Sonar Scanner)和度量的平台,通过插件形式,可以支持多种语言的质量管理和检测,自定义扫描规则(插件形式)
工作流程: sonarlint(Realtime Analysis) -> =push to= -> scm(版本管理工具) -> jenkins(CI工具) -> Code Analysis sonarQube Scanners -> =push reports to =-> SQ -> SonarQube Database

Sonar 架构
B/S架构,通过插件形式,支持多种语言

  1. 一个SonarQube服务器 启动3个主要进程:
    1. Web服务器,管理员浏览质量快照并配置SonarQube实例
    2. 基于ES的搜索服务器,可以从页面返回搜索结果
    3. 负责处理代码分析报告并将其保存在SQ数据库中的计算机引擎服务器
  2. SonarQube数据库存储:
    1. SonarQube实例配置文件
    2. 项目质量快照,视图等
  3. 多个SonarQube插件安装在服务器上,可能包括语言,SCM,集成,身份验证和治理插件
  4. 一个或多个SQ扫描器在分析项目,运行在构建或持续集成等服务器上

插件

PMD
CheckStyle
Findbugs

工作原理:
Sonanqube-scanner:负责搜集代码相关数据,存入mysql
SonarQube: 负责对搜集的数据进行分析 ELastic Search搜索服务器,通过不同的插件算法来对这些结果再加工,最终以量化的方式来衡量代码质量,最终展示给用户
AST抽象语法树(Abstract Syntax Tree)

Sonar是从七个维度检测代码质量

  1. 不遵循代码标准
    Sonar可以通过PMD、CheckStyle、Findbugs等代码检测工具规范代码编写
  2. 潜在缺陷
  3. 糟糕的复杂度分布:
    对于程序中任何组件的改变都将可能导致需要全面的回归测试
  4. 重复的代码
  5. 注释不足或者过多
  6. 缺乏单元测试
  7. 糟糕的设计
    通过sonar找出循环,展示包与包,类与类之间相互依赖关系,检测耦合。。LCOM4

Sonar-Scanner

sonar自定义规则

自定义rules
sonar提供xpath和java方式扩展
步骤:

  • 创建一个SonarQube插件
  • 增加相关依赖
  • 创建自定义规则
public class Mysonar implements Plugin{
  public void define(Context context){
    //server extensions -> object are instantiated during server startup
    // Server启动实例化
    context.addExtension(MyjavaRulesDefinition.class);
    // bactch extension -> objects are instantiated during code analysis
    //分析代码实例化
    context.addExtension(MyJavaFileCheckRegistrar.class);
}
}
//创建规则
BaseTreeVisitor
public void visitVariable(VariableTree tree){
}
打包

参考链接:https://www.jianshu.com/p/78a28e31ed61
https://www.jianshu.com/p/1a1355ae6894

上一篇 下一篇

猜你喜欢

热点阅读