代碼靜態掃描工具sonar

1、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):找出循環,展現包與包、類與類之間的依賴、檢查程序之間耦合度
2、SonarQube平臺由四部分組成:

一、 SonarQubeServer

1) Web Server, 瀏覽質量的快照和配置sonarqube實例

2)SearchServer based on Elasticsearch, 執行來自頁面的查詢請求

3)Compute EngineServer ,處理代碼分析報告並保存在sonarqube數據庫

二、SonarQube Database :

 1) sonarqube實例的配置(安全、插件設置等)

2) 項目、視圖等的質量快照。

三、SonarQube Plugins

語言、SCM、集成、身份驗證和治理插件

一個或多個sonarqube Scanners運行分析項目

 

3、集成

下面是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.

4、關於機器部署

一、只能有1個SonarQube Server 和1個 SonarQube Database

二、考慮性能優化,每個組件(server, database, scanners)應當安裝在不一樣的機器上,而且是專用服務器。

三、SonarQubeScanners 能夠水平擴展機器

四、全部機器的時間必需要同步

五、SonarQube Server 和 SonarQube Database 必須在同一網段

六、SonarQubeScanners 與SonarQube Server能夠不在同一網段

七、SonarQube Scanners 與 SonarQubeDatabase之間沒有通訊
5、機器配置要求

一、2G以上內存

二、oracle jre 8或者openjdk8

三、數據庫:postgrepSQL 8/9, sql server2014/2016, oracle 11g/12c/XE,mysql5.6/5.7

四、web瀏覽器:IE11,firefox最新版、 chrome最新版,safari 最新版

五、若是使用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

六、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
6、安裝

一、https://www.sonarqube.org/downloads/下載目前穩定版本SonarQube 6.7.2 (LTS *)

二、使用unzip命令解壓:
7、配置mysql數據庫

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

二、修改配置文件/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

三、建庫

安裝sonarqube

一、登錄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)   
8、啓動sonar

 # Windows,執行:

C:\sonarqube\bin\windows-x86-xx\StartSonar.bat

 # linux,執行:

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

經過瀏覽器訪問:帳號/密碼(admin/admin)

 

http://localhost:9000/sonar

帳號/密碼:admin/admin

 
9、安裝插件

經過web頁面能夠安裝各類插件

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

目前有以下插件:

參見網址:https://docs.sonarqube.org/display/PLUG

一、代碼分析插件

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

 

二、其餘語言:CSS   Erlang     Groovy    Lua    Puppet

三、外部分析工具集成

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

 

 
10、源代碼靜態分析

有如下幾種方法:

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

二、SonarQube Scanner for Maven(從Maven啓動分析)

三、SonarQube Scanner for Gradle(從Gradle啓動分析)

四、SonarQube Scanner for Ant(從Ant啓動分析)

五、SonarQube Scanner For Jenkins(從jenkins啓動分析)

六、SonarQube Scanner(從命令行啓動分析)
11、源代碼靜態分析Sonar-Scanner介紹

一、從網站下載sonar-scanner

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

二、安裝

使用unzip命令展開

三、編輯配置文件/conf/sonar-scanner.properties:

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

編輯配置文件/etc/profile 增長一行

exportSONAR_SCANNER_OPTS="-Xmx512m"

四、使用命令檢查是否安裝成功

./sonar-scanner-h
12、編寫工程模板,使用Sonar-Scanner開啓代碼靜態掃描

一、代碼掃描案例參見:

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

二、具體案例說明

建立一個配置文件sonar-project.properties

內容以下:

sonar.projectKey=example1:project

sonar.projectName=Example1

sonar.projectVersion=1.0

sonar.sources=src

sonar.sourceEncoding=UTF-8

源文件放在src目錄下

三、執行 ./sonar-scanner  開始掃描

四、在web頁面能夠看到掃描統計狀況

http://localhost:9000/sonar

帳號/密碼:admin/admin

 

五、關於java代碼掃描能夠參見插件sonarjava說明

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

html

相關文章
相關標籤/搜索