0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

幾種檢查代碼質(zhì)量的利器介紹

Android編程精選 ? 來源:Android編程精選 ? 作者:Android編程精選 ? 2022-11-02 11:04 ? 次閱讀

隨著業(yè)務的發(fā)展,系統(tǒng)會越來越龐大,原本簡單穩(wěn)定的功能,可能在不斷迭代后復雜度上升,潛在的風險也隨之暴露,導致最終服務不穩(wěn)定,造成業(yè)務價值的損失。而為了減少這種情況,其中一種比較好的方式就是提高代碼質(zhì)量,比如通過代碼審查,從而降低錯誤風險,但是,代碼審查難度大,代碼缺陷、漏洞不易發(fā)現(xiàn),且審查工作隨著代碼量增加而增加,審查效率低。

工欲善其事,必先利其器,因此,這篇文章給大家介紹幾種檢查代碼質(zhì)量的利器,Alibaba Java Coding Guidelines、CheckStyle、PMD、FindBugs、SonarLint,讓你在關注代碼質(zhì)量的同時,減少 code review 的工作量,提高 code review 的效率,并通過代碼質(zhì)量分析去反向提升我們的代碼編寫能力

一、Alibaba Java Coding Guidelines

1、整體介紹:

Alibaba Java Coding Guidelines 專注于Java代碼規(guī)范,目的是讓開發(fā)者更加方便、快速規(guī)范代碼格式。該插件在掃描代碼后,將不符合規(guī)約的代碼按 Blocker、Critical、Major 三個等級顯示出來,并且大部分可以自動修復,它還基于 Inspection 機制提供了實時檢測功能,編寫代碼的同時也能快速發(fā)現(xiàn)問題所在。

阿里巴巴規(guī)約掃描包括:

OOP規(guī)約

并發(fā)處理

控制語句

命名規(guī)約

常量定義

注釋規(guī)范

2、安裝步驟:

File > Settings > Plugins > Marketplace 搜索 “Alibaba Java Coding Guidelines”,按照提示進行安裝,然后重啟即可。

3、使用說明:

3.1、運行方式:

(1)可以Tools > 阿里編碼規(guī)約 > 編碼規(guī)約掃描

9868f200-59eb-11ed-a3b6-dac502259ad0.png

圖片

(2)在編輯界面或者項目區(qū)域點擊右鍵,在右鍵菜單中選擇“編碼規(guī)約掃描”即可:

9894d99c-59eb-11ed-a3b6-dac502259ad0.png

圖片

3.2、菜單功能:

編碼規(guī)約掃描:開始掃描代碼

打開/關閉實時檢測功能:實時檢測代碼,一般機器性能比較好的話可以開啟這項功能

切換語言至英文:中英文切換

3.3、運行結果:

掃描完成后顯示結果如下,我們可以看到掃描結果主要分為 Blocker(阻擋者)、Critical(嚴重問題)、Major(主要的)三個大類,它們表示的是問題的嚴重程度,嚴重程度由高到低為:Blocker > Critical > Major,至于每一類中都會包含什么樣的問題,圖中的內(nèi)容已經(jīng)說明了一切。

989a1c2c-59eb-11ed-a3b6-dac502259ad0.png

圖片

選中其中的一個問題項目,會出現(xiàn)如下內(nèi)容(如果當前鼠標點擊的是最終項,右邊區(qū)域顯示的是其它的內(nèi)容,后面會再講到):

98a6d28c-59eb-11ed-a3b6-dac502259ad0.png

圖片

(1)指定區(qū)域搜索同一類問題:

當點擊③處的按鈕時,會彈出如下按鈕:

98ae0962-59eb-11ed-a3b6-dac502259ad0.png

圖片

這里選擇掃描區(qū)域,來掃描鼠標選中的同類問題。如果按照默認選擇,那么運行后的結果就如下圖所示:

98b49e30-59eb-11ed-a3b6-dac502259ad0.png

圖片

這里我們可以看到,顯示了整個Project中的所有該類的問題。

(2)預覽具體的不規(guī)范代碼:

如果點擊的是最終的問題點或者問題所在的類文件,那顯示的就是如下界面,預覽該處不規(guī)范的代碼。

98da3794-59eb-11ed-a3b6-dac502259ad0.png

圖片

3.4、工具欄功能介紹:

98e5ef26-59eb-11ed-a3b6-dac502259ad0.png

圖片

Rerun Inspection:重新運行一次掃描

Close:關閉真?zhèn)€AJCG面板

Expand All:展開結果的樹狀結構,整個結果是樹狀結構的。

Collapse All:收起結果的樹狀結構

Go Pre Problem:選擇上一個問題

Go Next Problem:選擇下一個問題

Help:幫助

Group by Serverity:(不知道如何描述)

Group by derectory:按目錄分組/按類名分組間切換

Filter resoled items:過濾掉已經(jīng)解決的項

Autoscroll to Source:自動滾動到源碼

Export:導出,可以導出為XML和HTML兩種格式

Edit Settings:編輯設置

二、CheckStyle:

1、整體介紹:

CheckStyle 側重檢查編碼格式和代碼風格規(guī)范,如命名規(guī)范、Javadoc注釋規(guī)范、空格規(guī)范、size度量(如過長的方法)、重復代碼、多余Imports等,從而有效約束開發(fā)人員更好地遵循代碼編寫規(guī)范。Checkstyle主要是文法層面的代碼編寫規(guī)范的分析,對bug幾乎沒什么發(fā)現(xiàn)能力。

Checkstyle插件中默認內(nèi)置有2個執(zhí)行代碼檢查的配置文件(Sun Checks 和 Sun Checks),但是這兩個文件檢查的非常詳細嚴格,即使優(yōu)秀的開源項目也會檢查出來有非常多的錯誤告信息,所以需要導入我們自定義的配置文件。

2、安裝步驟:

通過 File > Settings > Plugins > Marketplace 搜索 “CheckStyle”,按照提示進行安裝,然后重啟即可。

3、使用說明:

98eeddc0-59eb-11ed-a3b6-dac502259ad0.png

圖片

可以看到基本都是一些縮進啥的編碼規(guī)范,可以不用太關注

三、PMD

1、整體介紹:

PMD側重面向安全編碼規(guī)則,且具備一定的數(shù)據(jù)流分析和路徑分析能力,能力比CheckStyle稍微強點,并且 PMD 支持自定義規(guī)則,PMD可以直接使用的規(guī)則包括以下內(nèi)容:

潛在的bug:空的try/catch/finally/switch語句

未使用的代碼(Dead code):未使用的變量、參數(shù)、私有方法等

可選的代碼:String/StringBuffer的濫用

復雜的表達式:不必須的if語句、可被while替代的for循環(huán)

重復的代碼:拷貝/粘貼代碼意味著拷貝/粘貼bugs

循環(huán)體創(chuàng)建新對象:盡量不要在循環(huán)體內(nèi)實例化新對象

資源關閉:Connect,Result,Statement等使用之后確保關閉掉

2、安裝步驟:

通過 File > Settings > Plugins > Marketplace 搜索 “PMDPlugin”,按照提示進行安裝,然后重啟即可

3、使用說明:

參考文章:http://wjhsh.net/andy-songwei-p-11830812.html

3.1、運行方式:

(1)從Tools菜單中啟動:

通過 Tools > Run PMD 可以看到如下的界面,如果通過該方式啟動,掃描的范圍就是整個項目中的文件了。

98f6486c-59eb-11ed-a3b6-dac502259ad0.png

圖片

Pre Defined:預定義的規(guī)則,也就是插件自帶的檢測規(guī)則。后面展開的列表中列出了所有的規(guī)則列表,想掃描哪一種類型的問題,點擊即可。其中“All”表示使用所有的規(guī)則。

Custom Rules:自定義的檢測規(guī)則,PMD允許用戶根據(jù)需要自定義檢查規(guī)則,默認這里是不可點擊的,需要在設置中導入自定義規(guī)則文件后方可選擇。

(2)從右鍵菜單中啟動:

在文件或者編輯器中點擊右鍵,也可以看到“Run PMD”選項,如果通過該方式啟動, 檢測范圍取決于鼠標或光標當前所選中的區(qū)域。

3.2、運行結果:

9900717a-59eb-11ed-a3b6-dac502259ad0.png

圖片

運行后會出現(xiàn)如上所示的面板,左邊工具欄,鼠標停留在上面會提示其功能;右邊顯示了檢測結果,當點擊具體某一問題項時,會跳轉到對應的源碼中。

3.3、配置檢測規(guī)則:

通過 File > Settings > Other Settings > PMD 可以打開檢測規(guī)則的設置界面:

99096294-59eb-11ed-a3b6-dac502259ad0.png

圖片

在 “RuleSets(規(guī)則設置)” 界面可以管理自定義的檢測規(guī)則。因為在實際工作中,可能需要根據(jù)實際情況自定義檢測規(guī)則,就可以通過這里導入,如果要使用它,需要在啟動PMD進行檢測時選擇該自定義規(guī)則。

點擊“Options”選項卡,在其中可以配置一些檢測規(guī)則選項:

991412f2-59eb-11ed-a3b6-dac502259ad0.png

圖片

其中重點需要留意的是“Skip TestSource”這一項,因為在項目中有不少Android Studio自動生成的測試代碼,如下所示,選擇上述選項后可以將其過濾掉。

991a3916-59eb-11ed-a3b6-dac502259ad0.png

圖片

四、FindBugs:

1、整體介紹:

FindBugs 側重于發(fā)現(xiàn)代碼中存在的bug,如運行時錯誤檢測(空指針檢查、未合理關閉資源、字符串相同判斷錯(==,而不是equals)等),它可以簡單高效全面地幫助我們發(fā)現(xiàn)程序代碼中存在的bug以及潛在隱患,針對各種問題,它提供了簡單的修改意見供我們參考

2、安裝步驟:

通過 File > Settings > Plugins > Marketplace 搜索 “FindBugs”,按照提示進行安裝,然后重啟即可

3、使用說明:

FindBugs 可以分析單個文件、包下面的所有文件、整個module下的文件、整個project下的文件,右鍵想要分析的文件名/包名/module名/project

9920a6c0-59eb-11ed-a3b6-dac502259ad0.png

圖片

分析完之后就會出現(xiàn)結果面板

99287116-59eb-11ed-a3b6-dac502259ad0.png

圖片

點擊對應的item在右邊會定位到具體的代碼,這是根據(jù)提示進行處理修改就行

9930de00-59eb-11ed-a3b6-dac502259ad0.png

圖片

4、附:常見的錯誤信息

4.1、Bad practice 代碼壞習慣:

9939f512-59eb-11ed-a3b6-dac502259ad0.png

圖片

4.2、Dodgy code 糟糕的代碼:

99423c7c-59eb-11ed-a3b6-dac502259ad0.png

圖片

4.3、Internationalization 代碼國際化相關:

9972b460-59eb-11ed-a3b6-dac502259ad0.png

圖片

4.4、Performance 代碼性能相關:

99976f26-59eb-11ed-a3b6-dac502259ad0.png

圖片

4.5、Experimental:

99a1393e-59eb-11ed-a3b6-dac502259ad0.png

圖片

4.6、Malicious code vulnerability 惡意破壞代碼相關:

9a04e2ae-59eb-11ed-a3b6-dac502259ad0.png

圖片

4.7、Multithreaded correctness 多線程代碼正確性相關:

9a3228ea-59eb-11ed-a3b6-dac502259ad0.png

圖片

4.8、Correctness 代碼正確性相關:

9a3768e6-59eb-11ed-a3b6-dac502259ad0.png

圖片

五、SonarLint:

1、整體介紹:

sonar 比 Findbugs 高了一個層級,它不僅關注常規(guī)靜態(tài)BUG,還關注到了如代碼質(zhì)量、包與包、類與類之間的依賴情況,代碼耦合情況,類、方法、文件的復雜度,代碼中是否包含大量復制粘貼的代碼,關注的是項目代碼整體的健康情況。sonar 有兩種使用方式:插件和客戶端,sonar 的插件名稱為 sonarLint。

2、安裝步驟:

通過 File > Settings > Plugins > Marketplace 搜索 “SonarLint”,按照提示進行安裝,然后重啟即可

3、使用說明:

9a43530e-59eb-11ed-a3b6-dac502259ad0.png

圖片

右鍵項目或者文件進行如上圖所示操作,執(zhí)行之后可以看到如下信息,如果代碼中有不合理的地方會在report中顯示,同時點擊錯誤的地方在右邊會給出建議的修改供參考。

9a59ab68-59eb-11ed-a3b6-dac502259ad0.png

圖片

4、配置 SonarLint 服務端:

4.1、配置 Sonar 服務器:

sonarLint 插件的使用場景是自用自審,但 sonar 也提供了平臺版本,使用場景則是他審,sonar 平臺的搭建就不在這篇文章介紹了,感興趣的讀者可以自己上網(wǎng)查看,我們這里主要介紹如何在 sonarLint 插件中配置關聯(lián) sonar 平臺服務器的工程,進行本地檢查:

9a60dde8-59eb-11ed-a3b6-dac502259ad0.png

圖片

點擊新增按鈕,輸入Configuration Name,配置sonarlint 服務器的地址,然后下拉框選擇 Login/Password,輸入 sonarlint服務器的賬號密碼

9a8e6e70-59eb-11ed-a3b6-dac502259ad0.png

圖片

4.2、具體 Sonar工程配置:

配置完服務器之后,需要針對具體工程進行配置,點擊 connection下拉框,選擇上面配置好的服務器連接,然后點擊 Search in list,找到對應的工程:

9ab3321e-59eb-11ed-a3b6-dac502259ad0.png

圖片

4.3、使用 SonarLint 檢查:

配置完上面兩步之后,接下來就可以選擇要進行檢查的類或者目錄進行 sonarlint 檢查了(跟第3點的使用方式一致),同時,在 commit 代碼的時候,勾選 “Perform Sonarlint analysis”,會針對你要提交的代碼進行sonarlint檢查

9abe4d16-59eb-11ed-a3b6-dac502259ad0.png

圖片

總結

檢查代碼規(guī)范的話,直接使用 Alibaba Java Coding Guidelines 就可以了

找 BUG 的話,使用 PMD、Findbugs、SonarLint 相互補充:

PMD 自定義能力強,用來自定義項目BUG規(guī)則非常好用

Findbugs 找 BUG 能力很強,我們拿找到的BUG給新員工培訓也很好。

SonarLint 規(guī)則豐富,比 Findbugs 能覆蓋到更全的場景

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編碼
    +關注

    關注

    6

    文章

    915

    瀏覽量

    54651
  • 機器
    +關注

    關注

    0

    文章

    772

    瀏覽量

    40637
  • 代碼
    +關注

    關注

    30

    文章

    4671

    瀏覽量

    67765

原文標題:這五款牛逼的 IDEA 插件,堪稱代碼質(zhì)量檢查利器!

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何檢查代碼中的潛在錯誤?

    ,集成在IAR當中,分別提供了靜態(tài)和動態(tài)代碼分析功能,有效幫助工程師提升代碼質(zhì)量。C-STAT靜態(tài)代碼分析可以發(fā)現(xiàn)代碼中潛在的問題和風險,還
    發(fā)表于 06-03 09:35

    電腦硬件故障的幾種簡單檢查方法

    電腦硬件故障的幾種簡單檢查方法一、首先確定你的電源已經(jīng)打開、所有的連線
    發(fā)表于 04-17 22:51 ?2311次閱讀

    Verilog代碼覆蓋率檢查

    Verilog代碼覆蓋率檢查檢查驗證工作是否完全的重要方法,代碼覆蓋率(codecoverge)可以指示Verilog代碼描述的功能有多少
    發(fā)表于 04-29 12:35 ?8245次閱讀

    如何才能度量JavaScript的代碼質(zhì)量

    為了讓計算精度上升到最高,客觀質(zhì)量分析以程序化的方式對代碼進行分析。這項任務可以使用編程工具完成,這些工具能夠在多種情況下評估代碼,根據(jù)各項指標得到最終的質(zhì)量得分。本節(jié)
    發(fā)表于 08-27 17:29 ?0次下載
    如何才能度量JavaScript的<b class='flag-5'>代碼</b><b class='flag-5'>質(zhì)量</b>

    電容器生產(chǎn)線質(zhì)量檢查抽檢統(tǒng)計的程序源代碼免費下載

    本文檔的主要內(nèi)容詳細介紹的是應用在電容器生產(chǎn)線質(zhì)量檢查抽檢統(tǒng)計用的程序源代碼免費下載。
    發(fā)表于 12-22 08:00 ?1次下載

    科普幾個好用的代碼檢查工具

    clang-tidy是基于語法分析樹的靜態(tài)代碼檢查工具,雖然它的速度比正則表達式慢一些,但是它檢查的更準確、全面,而且不僅可以做靜態(tài)檢查,還可以做一些修復工作,自行添加一些自定義
    的頭像 發(fā)表于 09-05 09:05 ?4570次閱讀
    科普幾個好用的<b class='flag-5'>代碼</b><b class='flag-5'>檢查</b>工具

    華為云發(fā)布CodeArts Check代碼檢查服務,守護軟件質(zhì)量和安全

    基于華為在自動化源代碼靜態(tài)檢查方面的技術積累與企業(yè)級應用經(jīng)驗,華為云今天正式發(fā)布 CodeArts Check代碼檢查服務 ,為用戶提供代碼
    的頭像 發(fā)表于 01-18 17:41 ?406次閱讀

    華為云代碼檢查插件(CloudIDE版本)使用指南

    華為云代碼檢查插件(CloudIDE版本)使用指南 CodeCheck代碼檢查插件 感興趣的小伙伴,可以試試使用我們的CodeCheck代碼
    的頭像 發(fā)表于 01-18 18:19 ?941次閱讀
    華為云<b class='flag-5'>代碼</b><b class='flag-5'>檢查</b>插件(CloudIDE版本)使用指南

    圖解華為云代碼檢查服務CodeArts Check

    華為云代碼檢查服務CodeArts Check 為用戶提供代碼風格、通用質(zhì)量代碼安全風險等檢查
    的頭像 發(fā)表于 02-03 17:35 ?840次閱讀

    Linux內(nèi)核代碼的靜態(tài)檢查

    Linus在2004年開發(fā)了kernel代碼靜態(tài)檢查工具,可以檢查出kernel中潛在的風險代碼
    的頭像 發(fā)表于 06-05 14:50 ?884次閱讀

    IDEA插件之代碼質(zhì)量檢查利器

    質(zhì)量,比如通過代碼審查,從而降低錯誤風險,但是,代碼審查難度大,代碼缺陷、漏洞不易發(fā)現(xiàn),且審查工作隨著代碼量增加而增加,審查效率低。
    的頭像 發(fā)表于 08-18 17:02 ?1034次閱讀
    IDEA插件之<b class='flag-5'>代碼</b><b class='flag-5'>質(zhì)量檢查</b><b class='flag-5'>利器</b>

    代碼檢查的方式有三種

    【摘要】?代碼檢查中,提到的編程規(guī)范,規(guī)則集,規(guī)則,規(guī)則用例(場景、誤報、檢出)分別代表什么意思呢? 在 SAST 靜態(tài)檢查領域,代碼檢查
    的頭像 發(fā)表于 02-25 10:08 ?734次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>檢查</b>的方式有三種

    手機信號放大器:優(yōu)化通信質(zhì)量利器

    深圳特信屏蔽器|手機信號放大器:優(yōu)化通信質(zhì)量利器
    的頭像 發(fā)表于 04-02 09:05 ?499次閱讀

    SMT貼片加工廠的焊點質(zhì)量檢查標準

    在SMT貼片加工廠的生產(chǎn)加工檢測中焊點質(zhì)量是重點因素之一,焊點的質(zhì)量會直接影響到SMT貼片加工的整體質(zhì)量,焊點的可靠性也直接影響電子產(chǎn)品的可靠性。下面深圳佳金源錫膏廠家給大家簡單介紹
    的頭像 發(fā)表于 06-20 15:46 ?251次閱讀
    SMT貼片加工廠的焊點<b class='flag-5'>質(zhì)量檢查</b>標準

    DevOps中的質(zhì)量門工作原理,以及靜態(tài)代碼分析Klocwork和Perforce Helix QAC在質(zhì)量門中的實踐應用

    如何使用靜態(tài)代碼分析工具(如Klocwork 和 Helix QAC)實現(xiàn)質(zhì)量門。 什么是質(zhì)量門? 質(zhì)量門是在IT或開發(fā)項目中實施的檢查點,
    的頭像 發(fā)表于 07-29 15:12 ?164次閱讀