<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Picses' sky

    Picses' sky
    posts - 43, comments - 29, trackbacks - 0, articles - 24

    讓開發(fā)自動(dòng)化: 用 Eclipse 插件提高代碼質(zhì)量

    在 Eclipse 中使用 5 個(gè)有用的插件來自動(dòng)化代碼質(zhì)量分析

    ?

    ?


    ?


    級別: 初級

    Paul Duvall (paul.duvall@stelligent.com), CTO, Stelligent Incorporated

    2007 年 1 月 29 日

    如果能在構(gòu)建代碼前發(fā)現(xiàn)代碼中潛在的問題會怎么樣呢?很有趣的是,Eclipse 插件中就有這樣的工具,比如 JDepend 和 CheckStyle,它們能幫您在軟件問題暴露前發(fā)現(xiàn)這些問題。在 讓開發(fā)自動(dòng)化的本期文章中,自動(dòng)化專家 Paul Duvall 將帶來一些關(guān)于 Eclipse 插件的例子,您可以安裝、配置和使用這些靜態(tài)分析插件,以便在開發(fā)生命周期的早期預(yù)防問題。
    關(guān)于本系列
    作為一名開發(fā)人員,我們的工作就是為終端用戶將過程自動(dòng)化;然而,我們當(dāng)中有很多人卻忽視了將我們自己的開發(fā)過程自動(dòng)化的機(jī)會。為此,我編寫了讓開發(fā)自動(dòng)化 這個(gè)系列的文章,專門探索軟件開發(fā)過程自動(dòng)化的實(shí)際應(yīng)用,并教您何時(shí) 以及如何 成功地應(yīng)用自動(dòng)化。

    開發(fā)軟件時(shí),我的主要目標(biāo)之一是:要么防止將缺陷引入代碼庫,要么限制缺陷的生存期;換言之,要盡早找到缺陷。很顯然,越是了解如何編寫更好的代碼以及如何有效測試軟件,就越能及早地捕捉到缺陷。我也很想要一張能發(fā)現(xiàn)潛在缺陷的安全之網(wǎng)。

    在本系列 八月份 的那期文章中,我得出了這樣的結(jié)論:將檢驗(yàn)工具集成到構(gòu)建過程(例如,使用 Ant 或 Maven)中,能夠建立起一種尋找潛在缺陷的方法。盡管這種方法使一致性成為可能并超越了 IDE,但它也有一點(diǎn)反作用。必須在本地構(gòu)建軟件或等待 Continuous Integration 構(gòu)建的運(yùn)行。如果使用 Eclipse 插件,就可以在通過 Continuous Integration 構(gòu)建或集成 發(fā)現(xiàn)一些這樣的沖突。這就促成了我稱為漸進(jìn)編程 的編程方式,在這種方式下,允許在編碼過程中進(jìn)行一定程度的質(zhì)量檢驗(yàn) —— 再也不能比這個(gè)更早了!

    本文涵蓋了我所認(rèn)為的 “五大” 代碼分析領(lǐng)域:

    • 編碼標(biāo)準(zhǔn)
    • 代碼重復(fù)
    • 代碼覆蓋率
    • 依賴項(xiàng)分析
    • 復(fù)雜度監(jiān)控

    可以用接下來的幾個(gè)靈活的 Eclipse 插件來揭示這些分析領(lǐng)域:

    • CheckStyle:用于編碼標(biāo)準(zhǔn)
    • PMD 的 CPD:幫助發(fā)現(xiàn)代碼重復(fù)
    • Coverlipse:測量代碼覆蓋率
    • JDepend:提供依賴項(xiàng)分析
    • Eclipse Metric 插件:有效地查出復(fù)雜度
    Eclipse 不是您的構(gòu)建系統(tǒng)
    使用 Eclipse 插件與您將這些檢驗(yàn)工具用于構(gòu)建過程并不矛盾。事實(shí)上,您想要確保的是:下列使用 Eclipse 插件的規(guī)則就是應(yīng)用到構(gòu)建過程中的規(guī)則。

    安裝 Eclipse 插件

    安裝 Eclipse 插件再簡單不過了,只需要幾個(gè)步驟。在開始之前,最好把該插件下載站點(diǎn)的 URL 準(zhǔn)備好。表 1 是本文用到的插件的列表:


    表 1. 代碼改進(jìn)插件和相應(yīng)的下載站點(diǎn) URL
    工具 目的 Eclipse 插件的 URL
    CheckStyle 編碼標(biāo)準(zhǔn)分析 http://eclipse-cs.sourceforge.net/update/
    Coverlipse 測試代碼覆蓋率 http://coverlipse.sf.net/update
    CPD 復(fù)制/粘貼檢驗(yàn) http://pmd.sourceforge.net/eclipse/
    JDepend 包依賴項(xiàng)分析 http://andrei.gmxhome.de/eclipse/
    Metrics 復(fù)雜度監(jiān)控 http://metrics.sourceforge.net/update

    知道了這些有用插件的下載地址后,安裝插件就是一個(gè)極簡單的過程。啟動(dòng) Eclipse,然后遵循下列步驟:

    1. 選擇 Help | Software Updates | Find and Install,如圖 1 所示:



      圖 1. 尋找并安裝 Eclipse 插件
      尋找并安裝 Eclipse 插件



    2. 選擇 Search for new features to install 單選按鈕,單擊 Next

    3. 單擊 New Remote Site,輸入要安裝的插件名和 URL(參見圖 2),單擊 OK,然后單擊 Finish 來顯示 Eclipse 更新管理器。



      圖 2. 配置新的遠(yuǎn)程站點(diǎn)
      配置新的遠(yuǎn)程站點(diǎn)



    4. 在 Eclipse 更新管理器中,有一個(gè)查看插件各方面特性的選項(xiàng)。我通常選擇頂級項(xiàng),如圖 3 所示。選擇您需要的選項(xiàng)并單擊 Finish。Eclipse 現(xiàn)在安裝該插件。您需要重啟 Eclipse 實(shí)例。



      圖 3. 安裝 Eclipse 插件
      安裝 Eclipse 插件

    請遵循上述這些步驟來安裝其他的 Eclipse 插件;只需改變插件名和相應(yīng)的下載位置即可。





    回頁首


    用 CheckStyle 校正標(biāo)準(zhǔn)

    代碼庫的可維護(hù)性直接影響著軟件的整個(gè)成本。另外,不佳的可維護(hù)性還會讓開發(fā)人員十分頭痛(進(jìn)而導(dǎo)致開發(fā)人員的缺乏)—— 代碼越容易修改,就越容易添加新的產(chǎn)品特性。像 CheckStyle 這樣的工具可以協(xié)助尋找那些可影響到可維護(hù)性、與編碼標(biāo)準(zhǔn)相沖突的地方,比方說,過大的類、太長的方法和未使用的變量等等。

    有關(guān) PMD
    另一個(gè)叫做 PMD 的開源工具提供的功能和 CheckStyle 類似。我偏愛 CheckStyle,但 PMD 也有很多執(zhí)著的追隨者,所以我建議您了解一下這個(gè)工具,畢竟它也頗受一些人的青睞。

    使用 Eclipse 的 CheckStyle 插件的好處是能夠在編碼過程中了解到源代碼上下文的各種編碼沖突,讓開發(fā)人員更可能在簽入該代碼前真正處理好這些沖突。您也幾乎可以把 CheckStyle 插件視作一個(gè)連續(xù)的代碼復(fù)查工具!

    安裝 CheckStyle 插件并做如下配置(參見圖 4):

    1. 選擇 Project,然后選擇 Eclipse 菜單中的 Properties 菜單項(xiàng)。

    2. 選擇 CheckStyle active for this project 復(fù)選框,單擊 OK



      圖 4. 在 Eclipse 中配置 CheckStyle 插件
      在 Eclipse 中配置 CheckStyle 插件

    Eclipse 重新構(gòu)建工作空間,并在 Eclipse 控制臺中列示已發(fā)現(xiàn)的編碼沖突,如圖 5 所示:


    圖 5. Eclipse 中 CheckStyle 的代碼沖突列表
    Eclipse 中 CheckStyle 的代碼沖突列表

    使用 CheckStyle 插件在 Eclipse 內(nèi)嵌入編碼標(biāo)準(zhǔn)檢驗(yàn)是一種很棒的方法,用這種方法可以在編碼時(shí) 積極地改進(jìn)代碼,從而在開發(fā)周期的早期發(fā)現(xiàn)源代碼中潛在的缺陷。這么做還有更多的好處,如節(jié)省時(shí)間、減少失敗,也因此會減少項(xiàng)目的成本。沒錯(cuò),這就是一種積極主動(dòng)的方式!





    回頁首


    用 Coverlipse 確認(rèn)覆蓋率

    Coverlipse 是一個(gè)用于 Cobertura 的 Eclipse 插件,Cobertura 是一個(gè)代碼覆蓋率工具,可以用它來評估具有相應(yīng)測試的源代碼的比率。Cobertura 也提供一個(gè) Ant 任務(wù)和 Maven 插件,但用 Cobertura,您可以在編寫代碼時(shí) 評估代碼覆蓋率。您見過這樣的模式嗎?

    通過選擇 Eclipse 菜單項(xiàng) Run 安裝 Coverlipse 插件并將其和 JUnit 關(guān)聯(lián)起來,該操作會顯示一系列運(yùn)行配置選項(xiàng),例如 JUnit、SWT 應(yīng)用程序和 Java? 應(yīng)用程序。右鍵單擊它并選擇 JUnit w/Coverlipse 節(jié)點(diǎn)中的 New。在這里,需要確定 JUnit 測試的位置,如圖 6 所示:


    圖 6. 配置 Coverlipse 以獲取代碼覆蓋率
    配置 Coverlipse 以獲取代碼覆蓋率

    一旦單擊了 Run,Eclipse 會運(yùn)行 Coverlipse 并在源代碼(如圖 7 所示)中嵌入標(biāo)記,該標(biāo)記顯示了具有相關(guān) JUnit 測試的代碼部分:


    圖 7. Coverlipse 生成的具有嵌入類標(biāo)記的報(bào)告
    Coverlipse 生成的具有嵌入類標(biāo)記的報(bào)告

    正如您所見,使用 Coverlipse Eclipse 插件可以更快地確定代碼覆蓋率。例如,這種實(shí)時(shí)數(shù)據(jù)功能有助于在將代碼簽入 CM 系統(tǒng) 更好地進(jìn)行測試。這對漸進(jìn)編程來說意味著什么呢?





    回頁首


    用 CPD 捕捉代碼重復(fù)

    Eclipse 的 PMD 插件提供了一項(xiàng)叫做 CPD(或復(fù)制粘貼探測器)的功能,用于尋找重復(fù)的代碼。為在 Eclipse 中使用這項(xiàng)便利的工具,需要安裝具有 PMD 的 Eclipse 插件,該插件具有 CPD 功能。

    為尋找重復(fù)的代碼,請用右鍵單擊一個(gè) Eclipse 項(xiàng)目并選擇 PMD | Find Suspect Cut and Paste,如圖 8 所示:


    圖 8. 使用 CPD 插件運(yùn)行復(fù)制粘貼檢驗(yàn)
    使用 PMD/CPD 插件運(yùn)行復(fù)制粘貼檢驗(yàn)

    一旦運(yùn)行了 CPD,您的 Eclipse 根目錄下就會創(chuàng)建出一個(gè) report 文件夾,其中包含一個(gè)叫做 cpd.txt 的文件,文件中列示了所有重復(fù)的代碼。圖 9 中是一個(gè) cpd.txt 文件的例子:


    圖 9. Eclipse 插件生成的 CPD 文本文件
    Eclipse 插件生成的 CPD 文本文件

    靠人工來尋找重復(fù)的代碼是一項(xiàng)挑戰(zhàn),但使用像 CPD 這樣的插件卻能在編碼時(shí)輕松地發(fā)現(xiàn)重復(fù)的代碼。





    回頁首


    使用 JDepend 進(jìn)行依賴項(xiàng)檢查

    JDepend 是個(gè)可免費(fèi)獲取的開源工具,它為包依賴項(xiàng)提供面向?qū)ο蟮亩攘恐担源酥该鞔a庫的彈性。換句話說,JDepend 可有效測量一個(gè)架構(gòu)的健壯性(反之,脆弱性)。

    除了 Eclipse 插件,JDepend 還提供一個(gè) Ant 任務(wù)、Maven 插件和一個(gè) Java 應(yīng)用程序,用以獲取這些度量值。對于相同的信息,它們有著不同的傳遞機(jī)制;但 Eclipse 插件的特別之處和相應(yīng)優(yōu)點(diǎn)是:它能以更接近源代碼(即,編碼時(shí))的方式傳遞這條信息。

    圖 10 演示了使用 Eclipse JDepend 插件的方法:通過右鍵單擊源文件夾并選擇 Run JDepend Analysis。一定要選擇一個(gè)含源代碼的源文件夾;否則看不到此菜單項(xiàng)。


    圖 10. 使用 JDepend Analysis 分析代碼
    使用 JDepend Analysis 分析代碼

    圖 11 顯示了運(yùn)行 JDepend Analysis 時(shí)生成的報(bào)告。左邊顯示包,右邊顯示針對每個(gè)包的依賴項(xiàng)度量值。


    圖 11. Eclipse 項(xiàng)目中的包依賴項(xiàng)
    Eclipse 項(xiàng)目中的包依賴項(xiàng)

    正如您所見,JDepend 插件提供了有助于不斷觀察架構(gòu)可維護(hù)性變化的大量信息 —— 這其中最大的好處是您可以在編碼時(shí)看到這些數(shù)據(jù)。





    回頁首


    用 Metrics 測量復(fù)雜度

    “五大”代碼分析最后的一項(xiàng)是測量復(fù)雜度。Eclipse 提供一種叫做 Metrics 的插件,使用該插件可以進(jìn)行許多有用的代碼度量,包括圈復(fù)雜度度量,它用于測量方法中惟一路徑的數(shù)目。

    安裝 Metrics 插件并重啟 Eclipse;然后遵循下列步驟:

    1. 右鍵單擊您的項(xiàng)目并選擇 Properties 菜單。在結(jié)果窗口中,選擇 Enable Metrics plugin 復(fù)選框并單擊 OK,如圖 12 所示:



      圖 12. 為項(xiàng)目配置 Metrics
      為項(xiàng)目配置 Metrics



    2. 從 Eclipse 中選擇 Window 菜單打開 Metrics 視圖,然后選擇 Show View | Other...

    3. 選擇 Metrics | Metrics View 打開如圖 13 中顯示的窗口。您需要使用 Java 透視圖并重新構(gòu)建項(xiàng)目,從而顯示這些度量值。



      圖 13. 打開 Eclipse 中的 Metrics View
      打開 Eclipse 中的 Metrics View



    4. 單擊 OK 來顯示如圖 14 中的窗口。

      在此例中,我正在查看一個(gè)單獨(dú)方法的圈復(fù)雜度。真正妙的是您可以雙擊 Metrics 列表中的方法,該插件會在 Eclipse 編輯器中為此方法打開源代碼。這就讓修正變得超級簡單(如果需要的話)!



      圖 14. 查看方法的圈復(fù)雜度
      查看方法的圈復(fù)雜度

    正如我之前提到過的,Eclipse Metrics 插件還提供了許多功能強(qiáng)大的度量值,有助于您在開發(fā)軟件的過程中改進(jìn)代碼 —— 可見,它是一個(gè)漸進(jìn)編程意義上的插件!





    回頁首


    合適的才是最好的

    正如您從本文中看到的那樣,將“五大”測量方法,即編碼標(biāo)準(zhǔn)、代碼重復(fù)、代碼覆蓋率、依賴項(xiàng)分析和復(fù)雜度監(jiān)控,用于改進(jìn)代碼質(zhì)量十分重要。但適合您的才是好的。請記住還有其他許多可用的 Eclipse 插件(比如 PMD 和 FindBugs)能夠幫助您在開發(fā)周期的早期改進(jìn)代碼質(zhì)量。不管您想要的工具或偏愛的方法是什么,重要的是:行動(dòng)起來去積極改進(jìn)代碼質(zhì)量并讓手工代碼檢驗(yàn)的過程變得更加有效。我估計(jì)您使用這些插件一段時(shí)間后,就再也離不開它們了。



    參考資料

    學(xué)習(xí)
    • 您可以參閱本文在 developerWorks 全球站點(diǎn)上的 英文原文

    • 讓開發(fā)自動(dòng)化 (Paul Duvall,developerWorks):閱讀完整的系列。

    • Improving Code Quality with PMD and Eclipse” (Levent Gurses,Jacoozi,2005 年 1 月):這篇文章將 PMD 視為 Eclipse 插件,介紹了使用 PMD 改進(jìn)代碼質(zhì)量并縮短代碼檢驗(yàn)過程的方法。

    • 用 Cobertura 測量測試覆蓋率” (Elliotte Rusty Harold,developerWorks,2005 年 5 月):Elliotte Rusty Harold 分享了他的經(jīng)驗(yàn),即如何使用代碼覆蓋率的最佳實(shí)踐來利用 Cobertura。

    • 不要被覆蓋報(bào)告所迷惑” (Andrew Glover,developerWorks,2006 年 1 月):這篇文章進(jìn)一步揭示了覆蓋率報(bào)告中的數(shù)字所代表的真正含義,也給出了這些數(shù)字所不能代表的含義。

    • Managing Your Dependencies with JDepend” (Glen Wilcox,OnJava,2004 年 1 月):在這篇文章中,Glen Wilcox 介紹了 JDepend,這是一個(gè)可以免費(fèi)獲取的工具,它能洞悉軟件架構(gòu)中的許多質(zhì)量問題。

    • 軟件架構(gòu)的代碼質(zhì)量” (Andrew Glover,developerWorks,2006 年 4 月):Andrew Glover 介紹了如何持續(xù)監(jiān)控以及如何改正能夠影響軟件架構(gòu)長期存續(xù)性的代碼質(zhì)量問題。

    • 讓開發(fā)自動(dòng)化: 持續(xù)檢查” (Paul Duvall,developerWorks,2006 年 8 月):Paul Duvall 介紹了自動(dòng)化的檢查工具(如 CheckStyle、JavaNCSS 和 CPD )是如何增強(qiáng)開發(fā)過程的以及何時(shí)應(yīng)該使用這些工具。

    • Detecting Duplicate Code with PMD's CPD” (Tom Copeland,OnJava,2003 年 3 月):Tom Copeland 介紹了一種叫做 CPD(復(fù)制/粘貼檢測器)的開源工具,該工具用于尋找重復(fù)的 Java 代碼。

    • Maintain organizational standards with code audits” (testearly.com):編碼標(biāo)準(zhǔn)有利于廣大開發(fā)人員對代碼庫達(dá)成共識。

    • developerWorks Java 技術(shù)專區(qū) :數(shù)百篇關(guān)于 Java 編程各方面的文章。


    獲得產(chǎn)品和技術(shù)

    討論
    • 提高代碼質(zhì)量論壇 :developerWorks 的積極貢獻(xiàn)者 Andrew Glover 是一名專注于改進(jìn)代碼質(zhì)量的顧問,他為這個(gè)由他主持的論壇帶來了很多相當(dāng)專業(yè)的知識。


    關(guān)于作者

    ?

    Paul Duvall 是 Stelligent Incorporated 的 CTO,該公司利用有效的開發(fā)人員測試策略,以及能夠讓團(tuán)隊(duì)盡早盡多地監(jiān)視和提高代碼質(zhì)量的持續(xù)集成技術(shù),幫助其他企業(yè)解決軟件的質(zhì)量問題。他還是 UML? 2 Toolkit 一書的作者之一,目前正在與他人合作撰寫 Continuous Integration: Improving Software Quality and Reducing Risk (Addison


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲人成人网站色www| 麻豆一区二区三区蜜桃免费| 亚洲日韩aⅴ在线视频| 国内外成人免费视频| 亚洲精品免费在线| 9久久免费国产精品特黄| 亚洲免费福利在线视频| 亚洲va在线va天堂va888www| 亚洲国产中文v高清在线观看| 在线观看免费a∨网站| 18禁黄网站禁片免费观看不卡| 久久免费香蕉视频| 青青久久精品国产免费看| 亚洲va中文字幕| 亚洲免费福利在线视频| 精品日韩99亚洲的在线发布| 亚洲视频在线观看地址| 亚洲αv在线精品糸列| 国产亚洲视频在线播放| 亚洲第一永久AV网站久久精品男人的天堂AV | 91大神亚洲影视在线| 亚洲第一福利网站| 久久精品亚洲一区二区 | 一个人看的免费观看日本视频www| 亚洲熟妇AV一区二区三区浪潮 | WWW免费视频在线观看播放| 国产精品亚洲精品日韩动图| 亚洲欧美日韩中文字幕一区二区三区 | 亚洲级αV无码毛片久久精品| 亚洲日韩国产精品乱| 亚洲精品岛国片在线观看| 亚洲AV永久无码精品一区二区国产| 国产国产人免费人成免费视频 | 亚洲精品不卡视频| 亚洲视频免费播放| 亚洲高清资源在线观看| 亚洲噜噜噜噜噜影院在线播放 | 午夜视频在线观看免费完整版 | 在线视频亚洲一区| 另类专区另类专区亚洲| 九九视频高清视频免费观看|