年 月 日
如果能在構建代碼前發現代碼中潛在的問題會怎麼樣呢?很有趣的是Eclipse 插件中就有這樣的工具比如 JDepend 和 CheckStyle它們能幫您在軟件問題暴露前發現這些問題在 讓開發自動化 的本期文章中自動化專家 Paul Duvall 將帶來一些關於 Eclipse 插件的例子您可以安裝配置和使用這些靜態分析插件以便在開發生命周期的早期預防問題
關於本系列
作為一名開發人員
我們的工作就是為終端用戶將過程自動化
然而
我們當中有很多人卻忽視了將我們自己的開發過程自動化的機會
為此
我編寫了讓開發自動化 這個系列的文章
專門探索軟件開發過程自動化的實際應用
並教您何時 以及如何 成功地應用自動化
開發軟件時我的主要目標之一是要麼防止將缺陷引入代碼庫要麼限制缺陷的生存期換言之要盡早找到缺陷很顯然越是了解如何編寫更好的代碼以及如何有效測試軟件就越能及早地捕捉到缺陷我也很想要一張能發現潛在缺陷的安全之網
在本系列 八月份 的那期文章中我得出了這樣的結論將檢驗工具集成到構建過程(例如使用 Ant 或 Maven)中能夠建立起一種尋找潛在缺陷的方法盡管這種方法使一致性成為可能並超越了 IDE但它也有一點反作用必須在本地構建軟件或等待 Continuous Integration 構建的運行如果使用 Eclipse 插件就可以在通過 Continuous Integration 構建或集成前 發現一些這樣的沖突這就促成了我稱為漸進編程 的編程方式在這種方式下允許在編碼過程中進行一定程度的質量檢驗 —— 再也不能比這個更早了!
本文涵蓋了我所認為的 五大 代碼分析領域
編碼標准
代碼重復
代碼覆蓋率
依賴項分析
復雜度監控
可以用接下來的幾個靈活的 Eclipse 插件來揭示這些分析領域
CheckStyle
用於編碼標准
PMD 的 CPD
幫助發現代碼重復
Coverlipse
測量代碼覆蓋率
JDepend
提供依賴項分析
Eclipse Metric 插件
有效地查出復雜度
Eclipse 不是您的構建系統
使用 Eclipse 插件與您將這些檢驗工具用於構建過程並不矛盾
事實上
您想要確保的是
下列使用 Eclipse 插件的規則就是應用到構建過程中的規則
安裝 Eclipse 插件
安裝 Eclipse 插件再簡單不過了只需要幾個步驟在開始之前最好把該插件下載站點的 URL 准備好表 是本文用到的插件的列表
表
代碼改進插件和相應的下載站點 URL
工具 |
目的 |
Eclipse 插件的 URL |
CheckStyle
編碼標准分析
Coverlipse
測試代碼覆蓋率
CPD
復制/粘貼檢驗
JDepend
包依賴項分析
Metrics
復雜度監控
知道了這些有用插件的下載地址後安裝插件就是一個極簡單的過程啟動 Eclipse然後遵循下列步驟
選擇 Help | Software Updates | Find and Install如圖 所示
圖 尋找並安裝 Eclipse 插件
選擇 Search for new features to install 單選按鈕單擊 Next
單擊 New Remote Site輸入要安裝的插件名和 URL(參見圖 )單擊 OK然後單擊 Finish 來顯示 Eclipse 更新管理器
圖 配置新的遠程站點
在 Eclipse 更新管理器中有一個查看插件各方面特性的選項我通常選擇頂級項如圖 所示選擇您需要的選項並單擊 FinishEclipse 現在安裝該插件您需要重啟 Eclipse 實例
圖 安裝 Eclipse 插件
請遵循上述這些步驟來安裝其他的 Eclipse 插件只需改變插件名和相應的下載位置即可
用 CheckStyle 校正標准
代碼庫的可維護性直接影響著軟件的整個成本另外不佳的可維護性還會讓開發人員十分頭痛(進而導致開發人員的缺乏)—— 代碼越容易修改就越容易添加新的產品特性像 CheckStyle 這樣的工具可以協助尋找那些可影響到可維護性與編碼標准相沖突的地方比方說過大的類太長的方法和未使用的變量等等
有關 PMD
另一個叫做 PMD 的開源工具提供的功能和 CheckStyle 類似我偏愛 CheckStyle但 PMD 也有很多執著的追隨者所以我建議您了解一下這個工具畢竟它也頗受一些人的青睐
使用 Eclipse 的 CheckStyle 插件的好處是能夠在編碼過程中了解到源代碼上下文的各種編碼沖突讓開發人員更可能在簽入該代碼前真正處理好這些沖突您也幾乎可以把 CheckStyle 插件視作一個連續的代碼復查工具!
安裝 CheckStyle 插件並做如下配置(參見圖 )
選擇 Project然後選擇 Eclipse 菜單中的 Properties 菜單項
選擇 CheckStyle active for this project 復選框單擊 OK
圖 在 Eclipse 中配置 CheckStyle 插件
Eclipse 重新構建工作空間並在 Eclipse 控制台中列示已發現的編碼沖突如圖 所示
圖 Eclipse 中 CheckStyle 的代碼沖突列表
使用 CheckStyle 插件在 Eclipse 內嵌入編碼標准檢驗是一種很棒的方法用這種方法可以在編碼時 積極地改進代碼從而在開發周期的早期發現源代碼中潛在的缺陷這麼做還有更多的好處如節省時間減少失敗也因此會減少項目的成本沒錯這就是一種積極主動的方式!
用 Coverlipse 確認覆蓋率
Coverlipse 是一個用於 Cobertura 的 Eclipse 插件Cobertura 是一個代碼覆蓋率工具可以用它來評估具有相應測試的源代碼的比率Cobertura 也提供一個 Ant 任務和 Maven 插件但用 Cobertura您可以在編寫代碼時 評估代碼覆蓋率您見過這樣的模式嗎?
通過選擇 Eclipse 菜單項 Run 安裝 Coverlipse 插件並將其和 JUnit 關聯起來該操作會顯示一系列運行配置選項例如 JUnitSWT 應用程序和 Java; 應用程序右鍵單擊它並選擇 JUnit w/Coverlipse 節點中的 New在這裡需要確定 JUnit 測試的位置如圖 所示
圖 配置 Coverlipse 以獲取代碼覆蓋率
一旦單擊了 RunEclipse 會運行 Coverlipse 並在源代碼(如圖 所示)中嵌入標記該標記顯示了具有相關 JUnit 測試的代碼部分
圖 Coverlipse 生成的具有嵌入類標記的報告
正如您所見使用 Coverlipse Eclipse 插件可以更快地確定代碼覆蓋率例如這種實時數據功能有助於在將代碼簽入 CM 系統前 更好地進行測試這對漸進編程來說意味著什麼呢?
用 CPD 捕捉代碼重復
Eclipse 的 PMD 插件提供了一項叫做 CPD(或復制粘貼探測器)的功能用於尋找重復的代碼為在 Eclipse 中使用這項便利的工具需要安裝具有 PMD 的 Eclipse 插件該插件具有 CPD 功能
為尋找重復的代碼請用右鍵單擊一個 Eclipse 項目並選擇 PMD | Find Suspect Cut and Paste如圖 所示
圖 使用 CPD 插件運行復制粘貼檢驗
一旦運行了 CPD您的 Eclipse 根目錄下就會創建出一個 report 文件夾其中包含一個叫做 cpdtxt 的文件文件中列示了所有重復的代碼圖 中是一個 cpdtxt 文件的例子
圖 Eclipse 插件生成的 CPD 文本文件
靠人工來尋找重復的代碼是一項挑戰但使用像 CPD 這樣的插件卻能在編碼時輕松地發現重復的代碼
使用 JDepend 進行依賴項檢查
JDepend 是個可免費獲取的開源工具它為包依賴項提供面向對象的度量值以此指明代碼庫的彈性換句話說JDepend 可有效測量一個架構的健壯性(反之脆弱性)
除了 Eclipse 插件JDepend 還提供一個 Ant 任務Maven 插件和一個 Java 應用程序用以獲取這些度量值對於相同的信息它們有著不同的傳遞機制但 Eclipse 插件的特別之處和相應優點是它能以更接近源代碼(即編碼時)的方式傳遞這條信息
圖 演示了使用 Eclipse JDepend 插件的方法通過右鍵單擊源文件夾並選擇 Run JDepend Analysis一定要選擇一個含源代碼的源文件夾否則看不到此菜單項
圖 使用 JDepend Analysis 分析代碼
圖 顯示了運行 JDepend Analysis 時生成的報告左邊顯示包右邊顯示針對每個包的依賴項度量值
圖 Eclipse 項目中的包依賴項
正如您所見JDepend 插件提供了有助於不斷觀察架構可維護性變化的大量信息 —— 這其中最大的好處是您可以在編碼時看到這些數據
用 Metrics 測量復雜度
五大代碼分析最後的一項是測量復雜度Eclipse 提供一種叫做 Metrics 的插件使用該插件可以進行許多有用的代碼度量包括圈復雜度度量它用於測量方法中惟一路徑的數目
安裝 Metrics 插件並重啟 Eclipse然後遵循下列步驟
右鍵單擊您的項目並選擇 Properties 菜單在結果窗口中選擇 Enable Metrics plugin 復選框並單擊 OK如圖 所示
圖 為項目配置 Metrics
從 Eclipse 中選擇 Window 菜單打開 Metrics 視圖然後選擇 Show View | Other
選擇 Metrics | Metrics View 打開如圖 中顯示的窗口您需要使用 Java 透視圖並重新構建項目從而顯示這些度量值
圖 打開 Eclipse 中的 Metrics View
單擊 OK 來顯示如圖 中的窗口
在此例中我正在查看一個單獨方法的圈復雜度真正妙的是您可以雙擊 Metrics 列表中的方法該插件會在 Eclipse 編輯器中為此方法打開源代碼這就讓修正變得超級簡單(如果需要的話)!
圖 查看方法的圈復雜度
正如我之前提到過的Eclipse Metrics 插件還提供了許多功能強大的度量值有助於您在開發軟件的過程中改進代碼 —— 可見它是一個漸進編程意義上的插件!
合適的才是最好的
正如您從本文中看到的那樣將五大測量方法即編碼標准代碼重復代碼覆蓋率依賴項分析和復雜度監控用於改進代碼質量十分重要但適合您的才是好的請記住還有其他許多可用的 Eclipse 插件(比如 PMD 和 FindBugs)能夠幫助您在開發周期的早期改進代碼質量不管您想要的工具或偏愛的方法是什麼重要的是行動起來去積極改進代碼質量並讓手工代碼檢驗的過程變得更加有效我估計您使用這些插件一段時間後就再也離不開它們了
參考資料
學習
您可以參閱本文在 developerWorks 全球站點上的 英文原文
讓開發自動化 (Paul DuvalldeveloperWorks)閱讀完整的系列
Improving Code Quality with PMD and Eclipse (Levent GursesJacoozi 年 月)這篇文章將 PMD 視為 Eclipse 插件介紹了使用 PMD 改進代碼質量並縮短代碼檢驗過程的方法
用 Cobertura 測量測試覆蓋率 (Elliotte Rusty HarolddeveloperWorks 年 月)Elliotte Rusty Harold 分享了他的經驗即如何使用代碼覆蓋率的最佳實踐來利用 Cobertura
不要被覆蓋報告所迷惑 (Andrew GloverdeveloperWorks 年 月)這篇文章進一步揭示了覆蓋率報告中的數字所代表的真正含義也給出了這些數字所不能代表的含義
Managing Your Dependencies with JDepend (Glen WilcoxOnJava 年 月)在這篇文章中Glen Wilcox 介紹了 JDepend這是一個可以免費獲取的工具它能洞悉軟件架構中的許多質量問題
軟件架構的代碼質量 (Andrew GloverdeveloperWorks 年 月)Andrew Glover 介紹了如何持續監控以及如何改正能夠影響軟件架構長期存續性的代碼質量問題
讓開發自動化: 持續檢查 (Paul DuvalldeveloperWorks 年 月)Paul Duvall 介紹了自動化的檢查工具(如 CheckStyleJavaNCSS 和 CPD )是如何增強開發過程的以及何時應該使用這些工具
Detecting Duplicate Code with PMDs CPD (Tom CopelandOnJava 年 月)Tom Copeland 介紹了一種叫做 CPD(復制/粘貼檢測器)的開源工具該工具用於尋找重復的 Java 代碼
Maintain organizational standards with code audits ()編碼標准有利於廣大開發人員對代碼庫達成共識
developerWorks Java 技術專區數百篇關於 Java 編程各方面的文章
獲得產品和技術
Eclipse plugin for PMD使用 PMD 插件在代碼中尋找復制粘貼問題
Eclipse plugin for JDepend此插件有助於分析代碼庫中的包依賴項
Eclipse plugin for CoberturaCoverlipse 是 用於 Cobertura 的 Eclipse 插件它提供代碼覆蓋率信息
Eclipse Metrics此插件提供度量值如圈復雜度非常有助於尋找復雜代碼
Eclipse plugin for CheckStyle檢驗項目編碼標准的遵循情況
討論
提高代碼質量論壇developerWorks 的積極貢獻者 Andrew Glover 是一名專注於改進代碼質量的顧問他為這個由他主持的論壇帶來了很多相當專業的知識
關於作者
Paul Duvall 是 Stelligent Incorporated 的 CTO該公司利用有效的開發人員測試策略以及能夠讓團隊盡早盡多地監視和提高代碼質量的持續集成技術幫助其他企業解決軟件的質量問題他還是 UML; Toolkit 一書的作者之一目前正在與他人合作撰寫 Continuous Integration: Improving Software Quality and Reducing Risk (AddisonWesley) 一書
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28596.html