1. 程式人生 > >Java程式碼質量檢查checkstyle, pmd, cpd, p3c,findbugs, jacoco, sonarquebe以及和Jenkins整合

Java程式碼質量檢查checkstyle, pmd, cpd, p3c,findbugs, jacoco, sonarquebe以及和Jenkins整合

概述

又搞一邊質量掃描外掛,之前做過一遍,然後後面各種忽略,然後就放棄了,所以,應該尋找一種方法,循序漸進的實施。本次將實施一個基本的打包掃描方案,包含

  • checkstyle 固定團隊編碼風格,固定命名風格以及換行風格等,原型配置出資googlestyle, 修改縮排為4個字元(原型是2個)
  • surefile test report Junit Test結果報告
  • JaCoCo test coverage 程式碼測試覆蓋率外掛
  • 阿里巴巴Java程式碼掃描外掛P3C(PMD)
  • cpd 重複程式碼掃描
  • Findbugs 通用Java bug檢查
  • Sonar Quabe 一站式程式碼質量審查平臺

1. Maven pom外掛安裝

現有完整的程式碼demo: https://github.com/Ryan-Miao/code-quality-verify-demo
具體外掛內容,檢視 https://github.com/Ryan-Miao/code-quality-verify-demo/blob/master/pom.xml

這裡大概敘述下配置原理。首先,maven構建生態分build和report,而build又分verify, compile, test, install等生命週期。我們的外掛就是基於這幾個概念而產生作用的。

先說report外掛,位於reporting目錄下,主要是在執行mvn site的時候生成各種html report,這裡綁定了想要生成各種report的的外掛配置。生成的report檔案最終位於target/site。

然後是build外掛,在構建過程中發生作用。這裡可以繫結外掛執行到構建過程,比如verify, 當執行install的時候,我們外掛就會執行。考慮為了檢視report,這裡就不繫結生命週期,而是直接通過執行goal的方式來檢查。

需要注意的是:

1.Jacoco的覆蓋率,目前只配置了全域性行覆蓋和分支覆蓋,不新增閾值則為0,修改閾值實現覆蓋率的控制。可以過濾不需要掃描的檔案,比如生成的java檔案。
2.checkstyle,這個讀取我們自定義的checkstyle的配置,後期在使用過程中修改完善程我們自己的配置方案。可以過濾不需要掃描的檔案,比如生成的java檔案。
3.阿里巴巴Java規範,這個是PMD掃描,但移除了PMD自帶的n條規則,只執行阿里的規則,可以過濾不需要掃描的檔案,比如生成的java檔案。

4.findbugs,指定了配置檔案,裡面可以配置忽略的檔案和bug型別。當然,也可全域性配置。

在程式碼裡通過註解或者註釋忽略掃描:

1.1 checkstyle忽略

忽略單獨的程式碼模組,比如spring security的配置

//CHECKSTYLE:OFF
public void someMethod(String arg1, String arg2, String arg3, String arg4) {
//CHECKSTYLE:ON

忽略匹配正則

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <configLocation>config/checkstyle/google-checks-6.18.xml</configLocation>
        <consoleOutput>true</consoleOutput>
        <encoding>UTF-8</encoding>
        <consoleOutput>true</consoleOutput>
        <skip>false</skip>
        <failsOnError>false</failsOnError>
        <linkXRef>true</linkXRef>
        <violationSeverity>error</violationSeverity>
        <!--<includes>**/TestController.java</includes>-->
        <excludes>**/generated/**.java</excludes>
        <excludes>**/**Vo.java</excludes>
    </configuration>
</plugin>

1.2 P3C阿里Java掃描PMD忽略

阿里Java掃描外掛使用的PMD來實現,對於某些類不想執行掃描,可以在類上添加註解

@SuppressWarnings("PMD")

也可以直接在excludes裡配置

<excludes>
    <exclude>**/*Bean.java</exclude>
    <exclude>**/generated/**.java</exclude>
</excludes>

1.3 FindBugs掃描忽略

FindBugs有些檢查我們不想改,比如總是判定Date類是可變的。事實上,我們應該都切換為LocalDate或LocalDateTime,但總有遺留程式碼採用Date,此時可以忽略掃描

修改配置檔案https://github.com/Ryan-Miao/code-quality-verify-demo/blob/master/config/findbugs/findbugs-exclude.xml,

比如正則匹配

<Match>
    <Class name="~.*\.entity\..*" />
  </Match>
  <Match>
    <Class name="~.*\.vo\..*" />
  </Match>

2 生成report

上面的pom配置後,執行mvn install site即可生成各種報告

阿里Java檢查報告:

checkstyle編碼規範報告:

3 檢查閾值

site命令會生成對應的report,但實際開發中,我們會期望出現錯誤時停止構建,提醒開發者修復問題。bug發現的越早,修復的成本越低。那麼,就需要給各個掃描外掛設定失敗閾值。

3.1Checkstyle設定失敗

我們可以選擇把checkstyle:check繫結到verify的生命週期上,這樣工程師每次變異都會掃描,當出現不符合規範的code style就會編譯失敗。也可以在檢查的時候手動執行一下check。最終,我選擇了手動check方案。

 mvn checkstyle:check 

3.2 阿里巴巴Java掃描設定失敗

mvn pmd:check

3.3 Findbugs 發現bug失敗

findbugs:check

4 Jenkins整合

程式碼質量不能靠個人素質來維護,而是通過完善的流程制度來保障。我們的程式碼開發最終都要merge到開發分支。我們只要卡住合併時的程式碼質量就可以了。規定:當代碼合併到dev或者master等保護分支時,CI構建必須success,否則不允許合併分支。

整合Jenkins和Gitlab,新增Merge-Request/Pull-Request掃描任務,當發起Pull Request後自動Jenkins構建,並將構建結果寫回Gitlab。

我們使用Jenkins pipeline來配置任務,編寫Jenkinsfile
https://github.com/Ryan-Miao/code-quality-verify-demo/blob/master/Jenkinsfile

當任務構建時,我們會生成報告,然後,檢查是否通過了掃描。

我們使用Jenkins Warnings Next Generation外掛

該外掛也提供了qualityGates來根據掃描結果中斷構建,但為了保證配置一致性,我採用maven外掛自帶構建失敗功能。當所有掃描通過了即構建成功,允許合併。

相關推薦

Java程式碼質量檢查checkstyle, pmd, cpd, p3c,findbugs, jacoco, sonarquebe以及Jenkins整合

概述 又搞一邊質量掃描外掛,之前做過一遍,然後後面各種忽略,然後就放棄了,所以,應該尋找一種方法,循序漸進的實施。本次將實施一個基本的打包掃描方案,包含 checkstyle 固定團隊編碼風格,固定命名風格以及換行風格等,原型配置出資googlestyle, 修改縮排為4個字元(原型是2個) surefil

idea,配置checkstyle 【提高程式碼質量,檢查程式碼規範的工具 】CheckstyleFindBugsPMD,Jtest

idea,配置checkstyle 【提高程式碼質量,檢查程式碼規範的工具 】Checkstyle,FindBugs,PMD,Jtest 2016年12月15日 14:19:02 common_util 閱讀數:18818更多 個人分類: 開發 版權宣告:本文為博主原創文章,可以轉載分

Java程式碼靜態檢查、規範、格式化checkstyle檢查配置文件

<?xml version="1.0"?> <!DOCTYPE module PUBLIC           "-//Puppy Crawl//DTD Check Configuration 1.2//EN"           "http://www.puppycrawl.co

idea,配置checkstyle 【提高程式碼質量,檢查程式碼規範的工具 】Checkstyle

CheckStyle是SourceForge下的一個專案,提供了一個幫助JAVA開發人員遵守某些編碼規範的工具。它能夠自動化程式碼規範檢查過程,從而使得開發人員從這項重要,但是枯燥的任務中解脫出來。 CheckStyle檢驗的主要內容 列表內容 Jav

pre-commit鉤子,程式碼質量檢查

目前基本使用三款js程式碼質量檢查工具: jslint, jshint, eslint。許多IDE裡面也有對應的檢查外掛,在每次ctrl + s 儲存檔案的時候,檢查當前檔案是否符合規範,保證程式碼質量。 許多團隊都會指定一套程式碼規範code review,更加嚴格的檢查每次程式碼修改。 也可以在

程式碼質量檢查-SonarQube

SonarQube是管理程式碼質量一個開放平臺,可以快速的定位程式碼中潛在的或者明顯的錯誤 sonarQube : 提供圖形介面管理,報表展示,可靈活配置程式碼檢測的外掛 (findbugs;checkStyle;pmd等)   一、安裝: 1.下載好sonarqube後,

Jenkins+Sonar搭建持續整合程式碼質量檢查環境

Jenkins+Sonar搭建 一、相關環境及下載地址 二、軟體安裝 Jenkins安裝 命令:dpkg –i jenkins_2.121.3_all.deb 若有報錯,執行# apt-get update 和# apt-get –f install, # ln -s /opt/jdk1.8.0_131/b

如何在Java程式碼檢查字串中是否包含中文?

今天和同事在討論一個問題,需要檢查“輸入的字串中是否包含中文”,剛開始想到是用正則表示式,正則表示式中是以[u4e00-u9fa5]來全匹配字元是否是中文,但現在面臨的問題是這個字串中還可能包含英文字元、數字、特殊字元,一時也沒想出能匹配該場景的正則表示式,後來在網上搜了下,可以使用Matcher類

程式碼質量檢查的利器:SonarQube

SonarQube 是一個用於程式碼質量管理的開源平臺,用於管理原始碼的質量。 通過外掛形式,可以支援包括 java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十幾種程式語言的程式碼質量管理與檢測。關於Sonarqube的環境搭建,可

Java程式碼質量改進之:同步物件的選擇

  在Java中,讓執行緒同步的一種方式是使用synchronized關鍵字,它可以被用來修飾一段程式碼塊,如下: synchronized(被鎖的同步物件) { // 程式碼塊:業務程式碼 }   當synchronized被用來修飾程式碼塊的時候表示

提高你的Java程式碼質量吧:危險的邊界

一、分析在單元測試中,有一項測試叫做邊界測試(也有叫做臨界測試),它能避免出現:數字越界使檢驗條件失效。如果一個方法接受的是Int型別的引數,那一些三個值是必須的:0、正最大、負最大、其中正最大和負最大

提高你的Java程式碼質量吧:優先使用整形池

一、分析包裝型別產生物件的兩種方式:1.new產生的Integer物件new宣告的就是要生成一個物件,沒二話,這就是兩個物件,地址肯定不相等。2.裝箱生成的物件裝箱動作是通過valueOf()方法實現的

提高你的Java程式碼質量吧:避免基本型別陣列轉換列表陷阱(Arrays.asList())

一、分析我們在開發的過程中經常會使用Arrays和Collections這兩個工具類在陣列和列表之間轉換。Arrays.asList()方法:輸入一個變長引數,返回一個固定長度的列表。看原始碼:publ

提高你的Java程式碼質量吧:頻繁插入刪除時使用LinkedList

一、分析 前面有文章分析了列表的表裡方式,也就是“讀”的操作。本文將介紹表的“寫”操作:即插入、刪除、修改動作。 二、場景 1.插入元素 列表中我們使用最多的是ArrayList,下面

使用sonar進行java程式碼質量管理

前言 應公司要求,這一次的開發需要進行sonar進行靜態程式碼質量檢測。 接到這個任務的時候,我還並不知道sonar是什麼,但聽到靜態程式碼檢測幾個字的時候,我下意識的以為是類似checkstyle之類的工具,但是真正用過之後我發現我錯了。 我發現實際執行

關於java程式碼質量的問題

一、 錯誤碼:WMI_WRONG_MAP_ITERATOR案例一: 案例二: Bug: Method JTAMainFrame.initView(JFrame) makes inefficient use of keySet iterator instead of en

java程式碼中操作Redis:單機redis、叢集redis(spring+redis整合

一、準備 關於redis的一些安裝,可以檢視我的幾篇文章自行安裝:Redis目錄。匯入java的Redis客戶端依賴包Jedis:<dependency> <groupId>redis.clients</groupId

java程式碼校驗手機號,帶區號固定電話400型別的固定電話

public class Tesyt {public static void main(String[] args) { //isPhoneNumberValid("0731-6296363"); //isPhoneNumberValid("0731-62963636");

Intellij IDEA 使用checkstylepmdfindbugs檢查靜態程式碼質量

checkstye、pmd、findbugs的對比 在IDEA setting-plugins 下分別搜尋 checkstyle、pmd、findbugs 安裝,安裝後要重啟IDEA。 checkstyle 如上圖開啟checkstyle面板。 可以自己設

Eclipse-Java代碼規範質量檢查插件-PMD

target 代碼檢測 object obj site 復制 方式 php atl PMD是一個源代碼分析器。 它發現常見的編程缺陷,如未使用的變量、空catch塊、不必要的對象創建等等。 它支持Java、JavaScript、Salesforce.com Apex、PLS