zoukankan      html  css  js  c++  java
  • 代码静态扫描工具sonar

    一、SonarQube整体介绍

       SonarQube为静态代码检查工具,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java、C、C++、JavaScripe等等二十几种编程语言的代码质量管理与检测。

       通过客户端插件分析源代码,sonar客户端可以采用IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式,并通过各种不同的分析机制对项目源代码进行分析和扫描,并把分析扫描后的结果上传到sonar的数据库,通过sonar web界面对分析结果进行管理

    可以从七个维度检测代码质量:

    (1)复杂度分布(complexity):代码复杂度过高将难以理解
    (2) 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方

    (3) 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
    (4) 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范
    (5) 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
    (6) 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug

    (7) 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度
    二、SonarQube平台由四部分组成:

    1、 SonarQubeServer

    1) Web Server, 浏览质量的快照和配置sonarqube实例

    2)SearchServer based on Elasticsearch, 执行来自页面的查询请求

    3)Compute EngineServer ,处理代码分析报告并保存在sonarqube数据库

    2、SonarQube Database :

     1) sonarqube实例的配置(安全、插件设置等)

    2) 项目、视图等的质量快照。

    3、SonarQube Plugins

    语言、SCM、集成、身份验证和治理插件

    一个或多个sonarqube Scanners运行分析项目

     

    三、集成

    下面是SonarQube与其他sonarqube ALM工具如何集成以及SonarQube各种组件在何处被使用。

    1)开发者在IDE开发代码并使用sonarlint运行本地分析

    2)开发者把代码提交到SCM工具中:git, SVN, TFVC, ...

    3)持续集成服务器触发自动编译以及执行SonarQubeScanner

    4)SonarQubeServer 处理分析报告

    5)SonarQubeServer 处理并存贮分析报告到数据库里并在页面上显示处理结果.

    6)开发者审查解决他们的问题,在页面管理问题

    7)管理者获得分析报告
    Ops 可以使用API从 SonarQube抽取数据
    Ops 可以使用 JMX 监控 SonarQubeServer.

    四、关于机器部署

    1、只能有1个SonarQube Server 和1个 SonarQube Database

    2、考虑性能优化,每一个组件(server, database, scanners)应当安装在不同的机器上,并且是专用服务器。

    3、SonarQubeScanners 可以水平扩展机器

    4、所有机器的时间必须要同步

    5、SonarQube Server 和 SonarQube Database 必须在同一网段

    6、SonarQubeScanners 与SonarQube Server可以不在同一网段

    7、SonarQube Scanners 与 SonarQubeDatabase之间没有通信
    五、机器配置要求

    1、2G以上内存

    2、oracle jre 8或者openjdk8

    3、数据库:postgrepSQL 8/9, sql server2014/2016, oracle 11g/12c/XE,mysql5.6/5.7

    4、web浏览器:IE11,firefox最新版、 chrome最新版,safari 最新版

    5、如果使用linux平台,需要注意以下几点:

    vm.max_map_count 大于等于 262144

    fs.file-max 大于等于65536

    运行 SonarQube 至少要打开 65536 个文件描述符

    运行SonarQube 至少打开2048 个线程

    可以使用如下命令检查:

    sysctlvm.max_map_count

    sysctlfs.file-max

    ulimit -n

    ulimit -u

    可以使用root账户动态设置参数如下:

    sysctl -wvm.max_map_count=262144

    sysctl -wfs.file-max=65536

    ulimit -n 65536

    ulimit -u 2048

    可以修改配置文件永久设置:

    /etc/sysctl.d/99-sonarqube.conf (或者/etc/sysctl.conf )

    如果SonarQube没有权限打开至少65536个描述符,可以在配置文件里(/etc/limits.d/99-sonarqube.conf (或者/etc/limits.conf ))插入一条如下信息:sonarqube  -   nofile   65536

            sonarqube   -  nproc    2048

    6、seccomp filter设置

    使用如下命令检查设置:

    $ grep SECCOMP /boot/config-$(uname -r)

    如果内核已设置,则返回如下信息:

    CONFIG_HAVE_ARCH_SECCOMP_FILTER=y

    CONFIG_SECCOMP_FILTER=y

    CONFIG_SECCOMP=y

    如果没有设置,需要修改配置文件sonar.properties,增加如下一行

    sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false
    六、安装

    1、https://www.sonarqube.org/downloads/下载目前稳定版本SonarQube 6.7.2 (LTS *)

    2、使用unzip命令解压:
    七、配置mysql数据库

    1、mysql5.6/5.7(InnoDB.  innodb_buffer_pool_size, query_cache_size=15m)

    2、修改配置文件/conf/sonar.properties

    sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

    sonar.jdbc.username=sonar

    sonar.jdbc.password=sonar

    3、建库

    安装sonarqube

    1、登陆MySQL创建sonar数据库和用户

    mysql> CREATE DATABASE sonar DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

    mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';

    mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';

    mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';

    mysql> FLUSH PRIVILEGES;

    Query OK, 0 rows affected (0.00 sec)   
    八、启动sonar

     # Windows,执行:

    C:sonarqubeinwindows-x86-xxStartSonar.bat

     # linux,执行:

    /etc/sonarqube/bin/[OS]/sonar.shstart

    通过浏览器访问:账号/密码(admin/admin)

     

    http://localhost:9000/sonar

    账号/密码:admin/admin

     
    九、安装插件

    通过web页面可以安装各种插件

    http://localhost:9000/sonar/admin/marketplace

    目前有如下插件:

    参见网址:https://docs.sonarqube.org/display/PLUG

    1、代码分析插件

    SonarABAP *
        

    home | docs & download
        

    SonarPLSQL *
        

    home | docs & download

    SonarC#
        

    home | docs & download
        

    SonarPython
        

    home | docs & download

    SonarCFamily C/C++ *
        

    home | docs & download
        

    SonarRPG *
        

    home | docs & download

    SonarCFamily ObjC *
        

    home | docs & download
        

    SonarSwift *
        

    home | docs & download

    SonarCOBOL *
        

    home | docs & download
        

    SonarTS
        

    home | docs & download

    SonarFlex
        

    home | docs & download
        

    SonarTSQL *
        

    home | docs & download

    SonarJava
        

    home | docs & download
        

    SonarVB6 *
        

    home | docs & download

    SonarJS
        

    home | docs & download
        

    SonarVB *
        

    home | docs & download

    SonarPHP
        

    home | docs & download
        

    SonarWeb
        

    home | docs & download

    SonarPLI *
        

    home | docs & download
        

    SonarXML
        

    home | docs & download

     

    2、其他语言:CSS   Erlang     Groovy    Lua    Puppet

    3、外部分析工具集成

    AEM Rules 、Android Lint、Checkstyle 、Findbugs 、jDepend 、PMD 、Sonargraph 7、Sonargraph Integration 、Xanitizer

     

     
    十、源代码静态分析

    有以下几种方法:

    1、SonarQube Scanner for MSBuild(分析.Net projects)

    2、SonarQube Scanner for Maven(从Maven启动分析)

    3、SonarQube Scanner for Gradle(从Gradle启动分析)

    4、SonarQube Scanner for Ant(从Ant启动分析)

    5、SonarQube Scanner For Jenkins(从jenkins启动分析)

    6、SonarQube Scanner(从命令行启动分析)
    十一、源代码静态分析Sonar-Scanner介绍

    1、从网站下载sonar-scanner

    https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

    2、安装

    使用unzip命令展开

    3、编辑配置文件/conf/sonar-scanner.properties:

    sonar.host.url=http://localhost:9000

    编辑配置文件/etc/profile 增加一行

    exportSONAR_SCANNER_OPTS="-Xmx512m"

    4、使用命令检查是否安装成功

    ./sonar-scanner-h
    十二、编写工程模板,使用Sonar-Scanner开启代码静态扫描

    1、代码扫描案例参见:

    https://github.com/SonarSource/sonar-scanning-examples

    2、具体案例说明

    创建一个配置文件sonar-project.properties

    内容如下:

    sonar.projectKey=example1:project

    sonar.projectName=Example1

    sonar.projectVersion=1.0

    sonar.sources=src

    sonar.sourceEncoding=UTF-8

    源文件放在src目录下

    3、执行 ./sonar-scanner  开始扫描

    4、在web页面可以看到扫描统计情况

    http://localhost:9000/sonar

    账号/密码:admin/admin

     

    5、关于java代码扫描可以参见插件sonarjava说明

    https://www.sonarsource.com/products/codeanalyzers/sonarjava.html

  • 相关阅读:
    phpstorm实现分屏展示代码
    Yii2 JWT
    JSON Web Token 入门教程
    Linux常用命令: zip、unzip 压缩和解压缩命令
    yii2表单提交CSRF验证
    解决jquery click事件执行两次
    《Inside C#》笔记(十二) 委托与事件
    MVC与单元测试实践之健身网站(七)-日程与打卡
    《Inside C#》笔记(十一) 运算符重载
    MVC与单元测试实践之健身网站(七)-添加计划
  • 原文地址:https://www.cnblogs.com/klb561/p/10181864.html
Copyright © 2011-2022 走看看