亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

怎樣編寫高質量的Java代碼

2019-11-06 06:10:59
字體:
來源:轉載
供稿:網友

學習java的同學注意了?。?! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!

代碼質量概述

    怎樣辨別一個項目代碼寫得好還是壞?優秀的代碼和腐化的代碼區別在哪里?怎么讓自己寫的代碼既漂亮又有生命力?接下來將對代碼質量的問題進行一些粗略的介紹。也請有過代碼質量相關經驗的朋友提出寶貴的意見。

image

    代碼質量所涉及的5個方面,編碼標準、代碼重復、代碼覆蓋率、依賴項分析、復雜度分析。這5方面很大程序上決定了一份代碼的質量高低。我們分別來看一下這5方面:

編碼標準:這個想必都很清楚,每個公司幾乎都有一份編碼規范,類命名、包命名、代碼風格之類的東西都屬于其中。

代碼重復:顧名思義就是重復的代碼,如果你的代碼中有大量的重復代碼,你就要考慮是否將重復的代碼提取出來,封裝成一個公共的方法或者組件

代碼覆蓋率:測試代碼能運行到的代碼比率,你的代碼經過了單元測試了嗎?是不是每個方法都進行了測試,代碼覆蓋率是多少?這關系到你的代碼的功能性和穩定性。

依賴項分析:你的代碼依賴關系怎么樣?耦合關系怎么樣?是否有循環依賴?是否符合高內聚低耦合的原則?通過依賴項分析可以辨別一二。

復雜度分析:以前有人寫的程序嵌套了10層 if else你信嗎?圈復雜度之高,讓人難以閱讀。通過復雜度分析可以揪出這些代碼,要相信越優秀的代碼,越容易讀懂。

    上面解釋了代碼質量相關的5個方面,在實際開發環境中,已經有很多工具為我們解決以上5個方面的問題,下列5個eclipse插件分別對這5個問題有很好的支持:

編碼標準:CheckStyle  插件URL:http://eclipse-cs.sourceforge.net/update/

代碼重復:PMD的CPD  插件URL:http://pmd.sourceforge.net/eclipse/

代碼覆蓋率:Eclemma 插件URL:http://update.eclemma.org

依賴項分析:JDepend 插件URL:http://andrei.gmxhome.de/eclipse/

復雜度分析:Eclipse Metric  插件URL:http://metrics.sourceforge.net/update

注:某些插件需要科學上網才能更新

編碼標準(CheckStyle的使用)

    在eclipse上安裝好了CheckStyle插件后,我們來建一個類用它跑一下。這個類很簡單,一個常見的用戶實體,包含了id,用戶名、密碼、郵件等屬性,并包含get set方法,一個標準的POJO。運行CheckStyle檢查一下:

image

一個我們平時再普通不過的一個類,被checkstyle弄出這么多問題,情何以堪,我們來看看究竟是什么情況?

看一下這些警告信息:

line 1、image,說缺少package-info.java文件。

line 2、image,說第一句注釋要以“.”結尾。

line 30、image,缺少java doc注釋。

line 35、image,getId不是繼承的方法,必須指定abstract,final或空。另外也缺少java doc注釋。

    這個類基本就這四類毛病,缺少package-info.java文件,這個文件是做什么的呢?他是用來描述包注釋的類,有一定的特殊性,要想詳細了解請百度。如果對你的項目沒有太大的影響,可以忽略它。配置CheckStyle的方法我們等會再說。第一句注釋要以“.”結尾,這看你的習慣,你確定需要這個,你就保留,不需要就忽略。缺少java doc,對于java類的屬性來說,注釋是必要的,所以這個要保留。不是繼承的方法,需要加上final關鍵字,如果你有這個習慣,就保留,反之忽略。

我們這里只是建立了一個最簡單的類用CheckStyle來檢查,隨著你的類代碼越來越多,邏輯越來越復雜,CheckStyle能檢查出來的毛病也越來越多。常見的CheckStyle錯誤有這些:

1.Type is missing a javadoc commentClass   缺少類型說明 2.“{” should be on the PRevious line “{” 應該位于前一行 3.Methods is missing a javadoc comment 方法前面缺少javadoc注釋 4.Expected @throws tag for “Exception” 在注釋中希望有@throws的說明 5.“.” Is preceeded with whitespace “.” 前面不能有空格 6.“.” Is followed by whitespace“.” 后面不能有空格 7.“=” is not preceeded with whitespace “=” 前面缺少空格 8.“=” is not followed with whitespace   “=” 后面缺少空格 9.“}” should be on the same line    “}” 應該與下條語句位于同一行 10.Unused @param tag for “unused” 沒有參數“unused”,不需注釋 11.Variable “CA” missing javadoc 變量“CA”缺少javadoc注釋 12.Line longer than 80characters   行長度超過80 13.Line contains a tab character 行含有”tab” 字符 14.Redundant “Public” modifier 冗余的“public” modifier 15.Final modifier out of order with the JSL suggestionFinal modifier的順序錯誤 16.Avoid using the “.*” form of import Import格式避免使用“.*” 17.Redundant import from the same package 從同一個包中Import內容 18.Unused import-java.util.list Import進來的java.util.list沒有被使用 19.Duplicate import to line 13 重復Import同一個內容 20.Import from illegal package 從非法包中 Import內容 21.“while” construct must use “{}” “while” 語句缺少“{}” 22.Variable “sTest1” must be private and have accessor method 變量“sTest1”應該是private的,并且有調用它的方法 23.Variable “ABC” must match pattern “^[a-z][a-zA-Z0-9]*$”      變量“ABC”不符合命名規則“^[a-z][a-zA-Z0-9]*$” 24.“(” is followed by whitespace    “(” 后面不能有空格 25.“)” is proceeded by whitespace “)” 前面不能有空格

    可以看出CheckStyle檢查出來的問題,大多是編碼規則以及風格上的問題,這是編寫高質量代碼最基本的。值得注意的是,我們將一些優秀的開源代碼用CheckStyle來檢查也會檢查出不少問題,這不能不說這些開源不優秀,而是每個公司組織有自己的編寫規范度,這個度既可以減少程序員的工作量又可以讓代碼的可讀性合格,但這個度不一樣符合CheckStyle的完整標準。所以我們一般使用CheckStyle都不會用他的默認標準,而是通過配置,制定適合自己的編碼規則。

自定義CheckStyle規則:

image

    打開CheckStyle配置,新建一個配置,選擇外部配置文件。在這之前最好導出一個eclipse自帶的checkstyle配置文件(sun_checks.xml),然后重命名作為一個外部的配置導進去,這么做的目的是導入之后可以修改相應的配置,達到自定義配置的目的(因為eclipse自帶的配置是加鎖的,不能修改)。導入之后,點擊右邊的“Configure”進行編輯。

先去掉缺少package-info.java文件的提示

image

再將第一句注釋要以“.”結尾這個規則去掉,雙擊“Style javadoc”,將窗口內“checkFirstSentence”勾選去掉。

image

對于實體類,屬性有了注釋,get set方法也不需要注釋了,雙擊“Method javadoc”將allowMissingPropertyJavadoc勾選中。

image

“getId不是繼承的方法,必須指定abstract,final或空”,如果你懶得在方法上加“final”,這條規則也可以去掉。

image

如果你不想每一個參數都加“final”,還需要把參數的final規則去掉:

image

另外還有一個錯誤“'id' hides a field.”,原因是方法的參數和類里面定義的域重名了,但使用eclipse生成的get set方法都會這樣,所以可以忽略此項。

image

至此我們再使用checkstyle檢查一篇,發現僅剩下屬性缺少注釋這個警告。

image

對每個屬性加上java doc注釋,所有問題都清除了。以此類推,解決checkstyle問題的方法就是:1、按規則解決代碼問題;2、如果覺得這個問題對你的項目質量影響不大,則可以忽略它。

代碼重復(PMD的CPD的使用)

    對于多人開發的項目,難以避免出現重復代碼的問題,盡管我們盡量對共用的代碼進行了封裝,但隨著需求的增加、人員技術水平差異、溝通不足等原因,重復代碼會越來越多。這不僅嚴重影響代碼質量,也無形中增加了代碼量。

注:精簡的程序和高復用度的代碼是我們一直追求的目標。

PMD的CPD工具就是為檢查重復代碼而生的。右鍵項目--->PMD---->Find Suspect Cut and Paste,執行重復代碼檢查:

image

檢查出來的重復代碼,可以雙擊查看。然后根據業務邏輯以及代碼特征,決定要不要做封裝、怎么封裝。

代碼覆蓋率(Eclemma的使用)

    一份質量合格的代碼,不僅包含功能程序本身也包含了對應的測試代碼,Eclemma插件可以用來統計測試代碼覆蓋整體代碼中的比率,以此來評估代碼的功能性和穩定性。

使用Junit編寫好測試用例之后,右鍵Coverage As--->Junit Test,運行測試用例,Eclemma會統計出相關的代碼覆蓋率:

image

根據這個結果,你可以看出自己編寫的測試用例覆蓋到了那些代碼,而沒有覆蓋到的代碼,則有可能成為代碼質量的盲區。

依賴項分析(JDepend的使用)

    隨著程序業務邏輯的增加,代碼的依賴關系也變的越來越復雜,JDepend插件可以統計包和類的依賴關系,分析出程序的穩定性、抽象性和是否存在循環依賴的問題。右鍵包--->Run JDepend Analysis:

image

看一下這幾項指標:

CC(Number of Classes)

被分析package的具體和抽象類(和接口)的數量,用于衡量package的可擴展性。如果一個類中實現了其他類,如實現了監聽類,則監聽類的數目也記錄在此。

AC(Abstract classes)

抽象類和接口的數量。

Ca(Afferent Couplings)

依賴于被分析package的其他package的數量,用于衡量pacakge的職責。即有多少包調用了它。

Ce(Efferent Couplings)

被分析package的類所依賴的其他package的數量,用于衡量package的獨立性。即它調用了多少其他包。

A(Abstractness)

被分析package中的抽象類和接口與所在package所有類數量的比例,取值范圍為0-1。

I(Instability)

I=Ce/(Ce+Ca),用于衡量package的不穩定性,取值范圍為0-1。I=0表示最穩定,I=1表示最不穩定。即如果這個類不調用任何其他包,則它是最穩定的。

D(Distance)

被分析package和理想曲線A+I=1的垂直距離,用于衡量package在穩定性和抽象性之間的平衡。理想的package要么完全是抽象類和穩定(x=0,y=1),要么完全是具體類和不穩定(x=1,y=0)。取值范圍為0-1,D=0表示完全符合理想標準,D=1表示package最大程度地偏離了理想標準。即你的包要么全是接口,不調用任何其他包(完全是抽象類和穩定),要么是具體類,不被任何其他包調用。

Cycle

循環依賴的數量。

有個這個報告我們就可以有針對性的對代碼進行設計和重構。

復雜度分析(Metrics的使用)

    對于閱讀代碼的人來說,越簡單的代碼越好理解和維護,如果你的代碼閱讀起來很費勁或者你自己過段時間后再來看都看不懂,你就得想辦法解決下代碼的復雜度問題了。Metrics插件可以幫你做到這點。

首先在Java透視圖下右鍵一個項目---->Properties,選擇Metrics,勾選Enble Metrics。

image

然后Window--->Show View---->Other---->Metrics View

image

打開Metrics視圖,點擊右上角運行圖標,即可得到復雜度分析的結果:

image

可以根據復雜度指標,對自己的程序進行優化。

小結

    本文介紹了和java代碼質量相關的5個方面問題,并介紹對應eclipse插件的用法和作用。在我們實際開發中,盡量根據自己公司和團隊的情況來制定一些檢查規則,來提高代碼質量。并且在大多數情況下,會有兩個檢查環節,即本地檢查和持續集成環境的檢查,我們常用的Hudson就可以集成很多插件。

學習Java的同學注意了?。?! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!


上一篇:JAVA之static

下一篇:Java Object的clone方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品美女免费看| 亚洲自拍偷拍网址| 欧美一区二区三区免费视| 大胆人体色综合| www日韩中文字幕在线看| 亚洲一区免费网站| 欧美一级免费看| 国产欧美日韩精品丝袜高跟鞋| 亚洲香蕉伊综合在人在线视看| 粉嫩老牛aⅴ一区二区三区| 国产精品视频公开费视频| 亚洲成人av片在线观看| 国产精品视频男人的天堂| 97在线看福利| 国产精品免费网站| 色偷偷噜噜噜亚洲男人的天堂| 亚洲网站在线看| 91最新国产视频| 久久久久久国产免费| 北条麻妃一区二区在线观看| 另类视频在线观看| 亚洲成人黄色网址| 国产成人jvid在线播放| 欧美综合激情网| 亚洲午夜精品久久久久久久久久久久| 亚洲午夜女主播在线直播| 日韩av不卡电影| 欧美在线视频在线播放完整版免费观看| 精品久久久久久亚洲国产300| 精品福利在线观看| 国产精品午夜一区二区欲梦| 日韩欧美国产视频| 国模精品一区二区三区色天香| 性色av一区二区三区在线观看| 在线观看视频亚洲| 欧美精品生活片| 欧美香蕉大胸在线视频观看| 黄色精品一区二区| 91久久国产精品| 欧美国产日韩xxxxx| 91精品国产综合久久久久久蜜臀| 国产精品美女久久久久av超清| 国产欧美一区二区三区久久| 国模精品视频一区二区| 精品呦交小u女在线| 亚洲xxxxx性| 日韩久久免费视频| 亚洲人精选亚洲人成在线| 日韩免费看的电影电视剧大全| 精品久久久久人成| 日韩欧美精品中文字幕| 欧美日韩国产一区在线| 欧美裸体xxxx极品少妇| 亚洲欧美日本另类| 亚洲二区在线播放视频| 日韩av影片在线观看| 亚洲国产97在线精品一区| 久久久久久国产精品美女| 欧美激情一区二区久久久| 国产999精品久久久影片官网| 91九色国产社区在线观看| 538国产精品一区二区免费视频| 91精品免费看| 国产91露脸中文字幕在线| 日韩高清免费在线| 欧美激情在线一区| 日韩电影免费观看在线观看| 97色在线视频| 国产精品三级久久久久久电影| 黑人巨大精品欧美一区免费视频| 成人久久久久久| 欧美夫妻性生活xx| 久久91亚洲精品中文字幕| 日韩精品在线第一页| 欧美另类老女人| 久久精品国产一区二区三区| 亚洲最大成人在线| 韩国视频理论视频久久| 亚洲自拍偷拍区| 伊人伊成久久人综合网小说| 中文字幕亚洲图片| 久久国产精品网站| 5252色成人免费视频| 国产成人免费av电影| zzijzzij亚洲日本成熟少妇| 亚洲精品久久久久久久久| 亚洲女同精品视频| 2019国产精品自在线拍国产不卡| 懂色aⅴ精品一区二区三区蜜月| 欧美一区二区三区艳史| 亚洲国产91精品在线观看| 久久久久这里只有精品| 欧美黑人xxxⅹ高潮交| 中文字幕日本精品| 国产精品精品一区二区三区午夜版| 91大神在线播放精品| 欧美老少配视频| 欧美高清一级大片| 热re91久久精品国99热蜜臀| 中文字幕日韩欧美在线视频| 91老司机在线| 国产精品免费久久久久影院| 欧美资源在线观看| 久久午夜a级毛片| 欧美激情精品久久久久久久变态| 亚洲乱码av中文一区二区| 91精品国产九九九久久久亚洲| 性欧美xxxx视频在线观看| 亚洲欧美国产一本综合首页| 久久久91精品国产一区不卡| 久久久久久久国产精品| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久99精品国产99久久6尤物| 黄色成人在线免费| 国外成人性视频| 欧美疯狂xxxx大交乱88av| 成人a免费视频| 欧美亚洲第一区| 成人午夜在线视频一区| 国模视频一区二区| 成人免费观看49www在线观看| 亚洲精品日韩激情在线电影| 在线视频日韩精品| 国产欧美在线观看| 久久这里有精品视频| 97在线视频一区| 91av免费观看91av精品在线| 狠狠久久五月精品中文字幕| 精品二区三区线观看| 久久精品91久久香蕉加勒比| 色999日韩欧美国产| 久久久精品网站| 国产日韩av在线播放| 国产香蕉一区二区三区在线视频| 亚洲91精品在线观看| 亚洲男女性事视频| 最近2019中文字幕一页二页| 视频在线观看一区二区| 久久久久久国产精品| 成人福利在线观看| 国产视频久久久| 亚洲国产91精品在线观看| 久久久久久久久久亚洲| 久久精品国产免费观看| 色综合久综合久久综合久鬼88| 最新国产精品拍自在线播放| 亚洲男人天堂网站| 欧美激情精品久久久久久变态| 欧美亚洲国产另类| 亚洲国产三级网| 日韩电影在线观看中文字幕| 久久亚洲成人精品| 高清欧美性猛交xxxx黑人猛交| 欧美电影免费看| 亚洲电影免费观看高清完整版在线观看| 精品无人区乱码1区2区3区在线| 黑人巨大精品欧美一区免费视频| 亚洲va久久久噜噜噜| 国产精品永久免费观看| 岛国av一区二区| 欧美极品少妇与黑人| 亚洲性猛交xxxxwww| 午夜精品久久久久久久白皮肤| 国产精品永久在线|