優(yōu)秀的團(tuán)隊(duì)為了保證可讀性琐馆、可維護(hù)性规阀、避免重復(fù)踩坑與保證代碼質(zhì)量,都會(huì)推出一些開發(fā)規(guī)范來遵守瘦麸。開發(fā)規(guī)范是前置主動(dòng)要求團(tuán)隊(duì)成員遵守的谁撼,而光靠意識(shí)是難以保證完全遵守規(guī)范的,所以還需要一些工具輔助滋饲。當(dāng)然即使有工具做這些事情彤敛,規(guī)范也是必須推廣的,讓大家先仔細(xì)讀讀了赌,畢竟直接寫出優(yōu)秀的代碼是最好的墨榄,然后再輔助工具乃最佳實(shí)踐。
開發(fā)規(guī)范
一流公司制定規(guī)范勿她,二流公司申請專利袄秩,三流公司生產(chǎn)產(chǎn)品。所以目前公開規(guī)范的大多是大廠的規(guī)范逢并。
目前知道大廠公開的Java開發(fā)規(guī)范
Google開發(fā)規(guī)范 github markdown格式 點(diǎn)我查看
阿里巴巴開發(fā)規(guī)范 PDF格式 點(diǎn)我查看最新版
華為開發(fā)規(guī)范
Oracle開發(fā)規(guī)范
阿里巴巴的開發(fā)規(guī)范之剧,雖然不是單純的規(guī)范,還包括了開發(fā)中的各種坑從主觀上的一些強(qiáng)制規(guī)定砍聊,但是總體上還是很有用的背稼,可以拿來部分or全部直接執(zhí)行。
獨(dú)立的組件
1. FindBugs
只尋找可能存在bug的地方玻蝌,不注重樣式或者格式蟹肘,它試圖只尋找真正的缺陷或者潛在的性能問題词疼。
特點(diǎn)
基于class分析,如果你clean了再去執(zhí)行發(fā)現(xiàn)沒有執(zhí)行生成報(bào)告帘腹,所以需要編譯后才能執(zhí)行分析
有maven插件贰盗,有IDE插件(eclipse插件,也有idea插件)
開發(fā)時(shí)不用使用maven插件阳欲,要編譯執(zhí)行檢測生成xml然后再生成網(wǎng)頁查看結(jié)果舵盈,挺麻煩。如果要與Jenkins集成的時(shí)候球化,maven插件就有用了秽晚,集成方式點(diǎn)我
開發(fā)時(shí)使用IDE插件非常方便
插件中Bug Explorer 中的灰色圖標(biāo)處為 Bug 類型,紅色圖標(biāo)表示 bug 較為嚴(yán)重筒愚,黃色的圖標(biāo)表示 bug 為警告程度
代碼缺陷分類
根據(jù)缺陷的性質(zhì)爆惧,大致可以分為下列幾類
Bad practice 不好的做法
Correctness 可能有不正確
Dodgy code 糟糕的代碼
Experimental 實(shí)驗(yàn)
Internationalization 國際化
Malicious code vulnerility 惡意的代碼漏洞
Multithreaded correctness 多線程問題
Performance 性能問題
FindBugs官方網(wǎng)站上也給出了一些案例:案例點(diǎn)我
排除單個(gè)規(guī)則
如果是排除一類規(guī)則,點(diǎn)擊IDE旁邊的提示選擇排除類型就行
可以針對規(guī)則排除單獨(dú)類中的接觸限制锨能,使用注解
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings
要加入依賴 provided代表只在編譯時(shí)依賴扯再,打包后就沒有這個(gè)依賴了IDE旁邊提示也有這種,不過不會(huì)加入以下依賴址遇,需要手動(dòng)在POM中加入
<dependency>
? ? <groupId>com.google.code.findbugs</groupId>
? ? <artifactId>annotations</artifactId>
? ? <version>3.0.1</version>
? ? <scope>provided</scope>
</dependency>
<dependency>
? ? <groupId>com.google.code.findbugs</groupId>
? ? <artifactId>jsr305</artifactId>
? ? <version>3.0.1</version>
? ? <scope>provided</scope>
</dependency>
2. CheckStyle
代碼樣式風(fēng)格檢查熄阻,專門check代碼規(guī)范風(fēng)格的,比如縮進(jìn)倔约,換行操作秃殉,命名大項(xiàng)目往往是有很多人一起完成的,然而每個(gè)人都有自己的style浸剩,導(dǎo)致整個(gè)項(xiàng)目的代碼不僅存在不符合語言規(guī)范的情況钾军,而且讀起來非常困難。因此绢要,這樣的項(xiàng)目中都會(huì)引入Checkstyle吏恭,來規(guī)范大家的編碼風(fēng)格,盡量做到統(tǒng)一和合理重罪。所以使用checkStyle檢查到問題
官方文檔:http://checkstyle.sourceforge.net/checks.html
工具界面
插件
單個(gè)文件check
特點(diǎn)
基于源碼樱哼,無需編譯
有maven插件,與IDE插件(eclipse插件剿配,也有idea插件)搅幅。idea的一些細(xì)節(jié)配置
可以自定義規(guī)則
CheckStyle底層基于antlr對源碼進(jìn)行處理
可以配置哪些文件不檢查
規(guī)范配置
配置位置
sun_checks.xml 默認(rèn)自帶sun公司的開發(fā)規(guī)范,有點(diǎn)嚴(yán)格
google_checks.xml 下載下來好像有點(diǎn)問題呼胚,可能與版本有關(guān) 查看
華為的規(guī)范 很多公司都會(huì)用華為的規(guī)范改改
自定義的規(guī)范 比較了解配置規(guī)則的情況下配置技巧
我們在代碼寫完之后茄唐,還要花時(shí)間去手動(dòng)解決Checkstyle提示的問題,這是一個(gè)非常無聊和耗時(shí)的工作蝇更。其實(shí)很多問題使用IDE的格式化已經(jīng)能解決一部分沪编,所以最好能提供一個(gè)IDE的formatter配置呼盆,整個(gè)團(tuán)隊(duì)都用這個(gè)配置導(dǎo)入IDE,這樣用用快捷鍵就能解決一些問題漾抬,非常easy宿亡。
3. PMD
與findbug類似找bug用常遂,還有規(guī)范纳令,比如說注釋不全
特點(diǎn)
有maven插件,與IDE插件(eclipse插件克胳,也有idea插件)
增強(qiáng)代碼質(zhì)量和修改代碼的功能
錯(cuò)誤分類
可能的bug——空的try/catch/finally/switch塊平绩。
無用代碼(Dead code):無用的本地變量,方法參數(shù)和私有方法漠另。
空的if/while語句捏雌。
過度復(fù)雜的表達(dá)式——不必要的if語句,本來可以用while循環(huán)但是卻用了for循環(huán)笆搓。
可優(yōu)化的代碼:浪費(fèi)性能的String/StringBuffer的使用性湿。
集合組件
1. IdeaIDE的QAPlug
這個(gè)插件是匯集這前面說的3個(gè)插件的結(jié)果,不用每次都運(yùn)行3個(gè)插件分別排錯(cuò)满败,1鍵運(yùn)行3個(gè)同時(shí)匯總整合肤频,非常方便,所以其他的不用裝了算墨,就用這個(gè)就行了宵荒!與sonar平臺(tái)的功能類似!如果公司沒有搭建sonarqube平臺(tái)的話净嘀,本地使用這個(gè)最佳
插件下載安裝
依次下載 QAPlug报咳、QAPlug-Checkstyle、QAPlug-FindBugs挖藏、QAPlug-PMD
分類
這個(gè)插件會(huì)把3個(gè)插件的錯(cuò)誤分類匯總
Efficiency 效能
Maintainability 可維護(hù)性
Reliability 可靠性
Usability 可用性
2. SonarQube
代碼質(zhì)量管理系統(tǒng)相當(dāng)于QAPlug的工程獨(dú)立出一個(gè)服務(wù)器部署暑刃,可以配置規(guī)則,掃描代碼膜眠,集成了很多靜態(tài)掃描工具2015年3月的時(shí)候就看到一篇文章介紹這個(gè)平臺(tái)了稍走,那時(shí)候還沒有太過關(guān)注,后來發(fā)現(xiàn)這個(gè)是個(gè)很好的平臺(tái)
3. Sonarlint
是SonarQube的配套的IDE插件柴底,配置遠(yuǎn)程服務(wù)器的地址,選取要拉去規(guī)則的項(xiàng)目婿脸,然后本地就可以執(zhí)行校驗(yàn)了,用的遠(yuǎn)程的規(guī)則這樣還是很方便的柄驻,規(guī)則可以同一在SonarQube維護(hù)狐树,不用每個(gè)人本地導(dǎo)入,團(tuán)隊(duì)的話用這個(gè)最適合
Sonarlint安裝與拉取列表失敗問題解決見
擴(kuò)充-Lint概念
Sonarlint是一個(gè)Lint工具鸿脓,其實(shí)Lint的含義就代表代碼靜態(tài)分析的工具抑钟,協(xié)助開發(fā)的工具涯曲,尤其是前端經(jīng)常使用,比如插件eslint:檢查JavaScript錯(cuò)誤非常方便
4. JArchitect
多種分析工具的聚合工具是一個(gè)商業(yè)性的收費(fèi)的分析工具可以匯聚checkstyle在塔、findbugs幻件、pmd的xml,然后分類總結(jié)生成圖表不過是收費(fèi)的蛔溃,也沒有idea插件绰沥,不用
代碼覆蓋率工具
idea自帶了代碼覆蓋率插件還不錯(cuò)跑單元測試的時(shí)候以代碼覆蓋率的方式運(yùn)行就行了一般邏輯覆蓋率60%就差不多了,核心模塊80%覆蓋標(biāo)準(zhǔn)即可
運(yùn)行方法
總結(jié)
首先要從意識(shí)上要遵守規(guī)范贺待,風(fēng)格統(tǒng)一徽曲,需要制定一份Java開發(fā)規(guī)范,我比較傾向于直接使用阿里的Java規(guī)范吧麸塞,簡單實(shí)用秃臣,也不過分嚴(yán)格其次要選擇靜態(tài)代碼工具,沒有SonarQube的話用QAPlug是很好的選擇哪工,有的話裝個(gè)Sonarlint插件就可以了代碼覆蓋率通過idea自帶的即可
有些人可能很排斥規(guī)范奥此,總感覺條條框框太多,不符合自己的自由風(fēng)格雁比,但是軟件不是開發(fā)完上線就結(jié)束的過程稚虎,而是需要持續(xù)迭代維護(hù)升級(jí)的過程,新人會(huì)接手章贞,要有可讀性可維護(hù)性祥绞。項(xiàng)目大了,人多了也是需要規(guī)范化才能更好的融合協(xié)作鸭限,讓混亂變得有序一個(gè)人的優(yōu)秀靠的是經(jīng)驗(yàn)蜕径,一個(gè)團(tuán)隊(duì)的優(yōu)秀靠的是規(guī)范。有了這些規(guī)范與工具败京,就可以大大的提高團(tuán)隊(duì)的整體素質(zhì)與水平兜喻,尤其是大廠開發(fā)人員,這個(gè)是必須有的赡麦。