概述
今天介紹的插件主要是圍繞編碼規(guī)范的。有追求的程序員,往往都有代碼潔癖,要盡量減少代碼的「壞味道」。
代碼靜態(tài)檢查是有很多種類,例如圈復(fù)雜度、重復(fù)率等。業(yè)界提供了很多靜態(tài)檢查的插件來(lái)識(shí)別這些不合規(guī)的代碼,幫助提高項(xiàng)目的質(zhì)量。比較知名的一個(gè)產(chǎn)品是 SonarQube,它提供了一個(gè)「門禁」平臺(tái),集成了很多靜態(tài)檢查檢查。下次有機(jī)會(huì)介紹一下該平臺(tái)的搭建。
本文主要介紹 IDEA 中對(duì)于 Java 語(yǔ)言靜態(tài)檢查的好插件:
- Alibaba Java Coding Guidelines 阿里基于他們 Java 規(guī)范提供的插件
- CheckStyle-IDEA 檢查代碼的格式是否符合規(guī)范
- FindBugs-IDEA 檢查代碼是否有常見的一些 Bug
Alibaba Java Coding Guidelines
阿里巴巴 Java 編碼指南插件支持。
首先說(shuō)說(shuō)阿里的 p3c 項(xiàng)目,它的 Github 主頁(yè)地址是:https://github.com/alibaba/p3c 阿里之前開源過一份 Java 開發(fā)手冊(cè)。手冊(cè)從編程規(guī)約、異常日志、單元測(cè)試、MySQL 數(shù)據(jù)庫(kù)、工程結(jié)構(gòu)、設(shè)計(jì)規(guī)約等角度,介紹了阿里的 Java 開發(fā)規(guī)范,這個(gè)對(duì)于 Java 新手幫助挺大的,能夠?qū)W到不少東西。有一些坑可能老司機(jī)也會(huì)翻車。
開發(fā)人員 Coding 時(shí),可能就忘記規(guī)范了,寫出來(lái)的代碼還是會(huì)有『壞味道』。這時(shí)候Alibaba Java Coding Guidelines
插件就派上用場(chǎng)了。它會(huì)根據(jù)上面的 Java 開發(fā)規(guī)范對(duì)你的代碼進(jìn)行檢查,不符合規(guī)范的代碼會(huì)有提示,并給出修改建議。阿里作為國(guó)內(nèi) Java 大廠,基于成千上萬(wàn)的工程師總結(jié)出來(lái)的踩坑經(jīng)驗(yàn),我相信給出的規(guī)范建議還是比較可靠的。
上個(gè)栗子:
String str = "hello";
for (int i = 0; i < 100; i++) {
str = str + "world!";
}
先不要往下看,試著分析一下這段代碼哪里可以優(yōu)化?
其實(shí),插鍵掃描的結(jié)果不僅有這個(gè)問題,還有『魔法數(shù)字』的問題。插件的用法,見下面的截圖。
除此以外,建議在 IDEA 進(jìn)行代碼提交時(shí),勾選上它提供的檢查項(xiàng)按鈕,這樣如果有不合規(guī)的代碼進(jìn)行提交,就會(huì)提醒你修改:
CheckStyle-IDEA
項(xiàng)目主頁(yè):https://github.com/jshiell/checkstyle-idea
安裝好之后,進(jìn)入設(shè)置,勾選上你要選用的默認(rèn)檢查規(guī)范:
大廠往往都有自己的語(yǔ)言規(guī)范,可以導(dǎo)入選用:
右鍵菜單,選擇 Check Current File
即可檢查當(dāng)前文件是否符合編碼規(guī)范:
檢查結(jié)果:
如果不符合規(guī)范的寫法有點(diǎn)多,整改起來(lái)就會(huì)很痛苦了,這時(shí)候該怎么辦?有一個(gè)功能叫格式化代碼(Reformat Code
),快捷鍵是:
- Mac:
Command+Option+L
- Win:
Ctrl+Shift+L
如果想按照你指定的規(guī)則進(jìn)行格式化,可以按照如下方式進(jìn)行自定義:
FindBugs-IDEA
FindBugs 是一款老牌 Java 靜態(tài)檢查插件了。它的功能和阿里 p3c 那個(gè)插件很像,只不過它歷史悠久、國(guó)際化一點(diǎn)。它同樣的可以掃描代碼,發(fā)現(xiàn)一些可能會(huì)引入 Bug 的代碼段,給出參考建議。
啟動(dòng) FindBugs 的方式,右鍵菜單中,F(xiàn)indbugs 提供了好幾個(gè)選項(xiàng):
-
Analyze Current File
:檢查當(dāng)前文件 -
Analyze Class uner Cursor
:檢查光標(biāo)處的類 -
Analyze Package Files
:檢查包文件 -
Analyze Modul Files
:檢查 Module 文件 -
Analyze Project Files
:檢查項(xiàng)目文件 -
Analyze Scope Files
:檢查指定范圍內(nèi)的文件 -
Analyze All Modified Files
:檢查所有修改過的文件 -
Analyze changelist files
:檢查變更列表中的文件
檢查結(jié)果:
檢查結(jié)果分為如下類別:
-
Bad practice
:不好的做法,代碼違反了公認(rèn)的最佳實(shí)踐標(biāo)準(zhǔn); -
Malicious code vulnerbility
:惡意的代碼漏洞; -
Correctness
:可能不正確,比如錯(cuò)誤的強(qiáng)制類型轉(zhuǎn)換; -
Performance
:潛在的性能問題; -
Security
:安全性; -
Dodgy code
:糟糕的代碼,F(xiàn)indBugs團(tuán)隊(duì)認(rèn)為該類型下的問題代碼導(dǎo) Bug 的可能性很高; -
Experimental
:實(shí)驗(yàn); -
Multithreaded correctness
:關(guān)注于同步和多線程問題; -
Internationalization
:國(guó)際化
掃描出來(lái)的結(jié)果怎么看懂,官網(wǎng)有專門的一頁(yè)介紹 FindBugs Bug Description http://findbugs.sourceforge.net/bugDescriptions.html
除了上面右鍵菜單啟動(dòng)檢查之外,還可以在相應(yīng)文件夾右鍵菜單中啟動(dòng):
針對(duì)檢查的嚴(yán)格程度,其實(shí)是可以調(diào)節(jié)的,建議修改為 low
,這樣會(huì)盡可能的掃描出有潛在 Bug 的代碼片段:
總結(jié)
以上是目前工作中經(jīng)常用到的靜態(tài)代碼檢查插鍵,雖然不是用了它們就真的能寫出好代碼,但是這些工具的確能夠讓你能夠在前人的肩膀上少踩一些坑。比如阿里的那個(gè)檢查插鍵,你可以按照它的提示,對(duì)照著他們的 Java 開發(fā)手冊(cè)查看,分析一下,為何他們會(huì)有如此的規(guī)約。高樓大廈不都是一磚一瓦砌成的嘛?小知識(shí)點(diǎn)的基礎(chǔ)打扎實(shí)了,才能走得更高!
由于國(guó)內(nèi)網(wǎng)絡(luò)問題,我提前將最新版的《阿里巴巴 Java 開發(fā)手冊(cè)(泰山版).pdf》上傳至云盤了,有需要的小伙伴公眾號(hào)后臺(tái)回復(fù)
泰山版
即可獲得下載鏈接。
一言
上周的寫的一篇文章分享到微信群里,群友有人指出來(lái)標(biāo)題有錯(cuò)別字,真是有點(diǎn)尷尬!其實(shí),我寫文章也比較隨意,也是最近才開始堅(jiān)持每周至少輸出一篇分享的。但想想既然寫了,就要盡量保證質(zhì)量。引以為戒,以后要認(rèn)真點(diǎn)才行!
目前分享的內(nèi)容主要是開發(fā)環(huán)境、效率工具等。自己一直對(duì)這方面的文章比較感興趣,因此之前就有相關(guān)積累。今后希望能通過閱讀帶來(lái)一些讀書總結(jié)的分享,也希望關(guān)注的同學(xué)后臺(tái)多留言,給出你的建議,感謝~
生命不息,折騰不止!關(guān)注 「Coder 魔法院」,祝你 Niubilitiy !
參考
- 代碼缺陷掃描神器——FindBugs:https://juejin.im/entry/591ad01ba22b9d005833903e