天天看點

java代碼分析及分析工具

一個項目從搭建開始,開發的初期往往思路比較清晰,代碼也比較清晰。随着時間的推移,業務越來越複雜。代碼也就面臨着耦合,備援,甚至雜亂,到最後誰都不敢碰。

作為一個網際網路電子商務網站的業務支撐系統,業務複雜不言而喻。從09年開始一直沿用到現在,中間代碼經過了多少人的手,留下了多少的坑,已經記不清楚了,誰也說不清了。

代碼的維護成本越來越高。代碼已經急需做調整和改善。最近項目組專門設立了一個小組,利用業餘時間做代碼分析的工作,目标對核心代碼進行分析并進行設計重構。

  代碼分析如果用人工來做,需要兩點:1、開發人員代碼造詣要求很高。2、開發人員投入時間成本非常大。

然而現在網絡上 Java代碼分析工具做的比較好。是以考慮開始利用這些工具對代碼進行分析,并做修改。當然最好在最後有個資深人士做相關的review或開發人員自檢。

先考慮工具吧,工欲善其事,必先利其器。是以決定search一下,代碼分析和代碼分析的工具,便于更好的利用和進行。

  學習一下并做一些歸納:

      提到靜态代碼的概念:個人了解為 不需要運作起來的代碼所關注的點。就是就代碼看代碼,文法、結構、接口、類等。

    整個軟體開發生命周期中,網上說30% 至 70% (占有量還是很大的)的代碼邏輯設計和編碼缺陷是可以通過靜态代碼分析來發現和修複的。看來效果還是很明顯的。

  靜态代碼分析的好處,的确有很多好處:

    1. 幫助程式開發人員自動執行靜态代碼分析,快速定位代碼隐藏錯誤和缺陷。

    2. 幫助代碼設計人員更專注于分析和解決代碼設計缺陷。

    3. 顯著減少在代碼逐行檢查上花費的時間,提高軟體可靠性并節省軟體開發和測試成本

概念不多提了,看工具:

1、findbugs:

  安裝:​​http://sourceforge.net/projects/findbugs/​​

  看使用體驗:針對一個項目啟動findbugs,會進入findbugs的工作視圖

java代碼分析及分析工具

 如上圖

  藍色區域:羅列出了findbugs在代碼中檢測到的代碼問題。同樣的紅色為嚴重的,黃色為警告。

       由于自己寫的學習項目是以代碼不龐大,品質也還行,是以檢測出來的都是黃色警告的。

  紫色區域:點選對應的檢測點,能定位到問題代碼具體的位置,并且在左邊有個bug蟲子給出具體問題的資訊

  綠色區域:對應左邊藍色區域的檢測點,給出的較長的描述和建議。

     個人覺得findbugs對于代碼檢測的深度力度要更好。比如,子類名和父類名相同,死存儲(沒有調用卻開辟空間的),一個方法沒有對參數對象驗證空等等。

  對代碼的品質檢查做的很到位。而且很清晰。當然findbugs 也有自定義的設定,個人覺得現有功能已經很好用了,不需要自定義。

2、Checkstyle :

    安裝:​​http://sourceforge.net/projects/eclipse-cs/files/latest/download​​下載下傳插件,links plugin的方式安裝到eclipse中

    重點看使用體驗:針對一個項目啟動checkStyle之後

java代碼分析及分析工具

    

      剛檢測完,項目所有類都泛黃,甚至有的類打上了小紅叉。靜心仔細的看下:

      提示有:public修飾符多餘,一行超過80個字元,缺少文檔注釋,魔法數字等等等等。出現中文代碼的地方會直接打紅叉。非常精細。

      藍色區域:包括Errors和warnings。Errors重點列出了代碼中的問題,比如代碼中有中文等等,Warnings:一般是代碼風格不好的地方。比如代碼

                    最後一行加注釋算是不好的風格

      紫色區域:發現用于特定的注釋分割,很多注釋都有問題,和eclipse自動格式化有沖突,我覺得可以是忽略的。左邊的小放大鏡有詳細的不規範資訊。

    個人覺得檢查的精度還是很細的,但是對于注解等的檢測過于精細,很擾亂視眼。Errors級别就可以了。和eclipse的格式化有很多的沖突。導緻很多也是不必要的檢驗。

    當然,也是可以自定義設定檢測項,如下:

java代碼分析及分析工具

  這樣可以把注釋的或者和日常格式化有問題的檢查撤銷掉。主要檢查代碼的問題。不過說實話這個設定起來還是很麻煩的,我覺得還不如将就着看所有的提示    

  資訊。不需要改的就人為忽略吧。重點關注Errors。從中看出,這款其實主要側重的還是代碼的風格的檢測。

3、PMD

  下載下傳安裝:​​http://sourceforge.net/projects/pmd/files/pmd-eclipse​​

  安裝完成,針對一個項目啟用PMD檢測,進入pmd工作視圖

java代碼分析及分析工具

  如上圖:

    藍色區域:是彙總的有問題的代碼,pmd将代碼分析完之後的級别劃分的更細緻了,就是5個小圈對應:error high, error, warning high, warning,infomation。

    綠色區域:定位,并且給出問題描述。

      這款代碼檢測軟體應該說是和findbugs是屬于一種類型的。在我檢測的代碼中,被pmd标記最多的是代碼中有system.out.println() ,的确在正式項目中不應出現這種語句。

  同樣方法的大小寫是否符合規範也會檢查出來。在代碼檢測中也更多的關注error high,error。

    另一方面pmd插件有20M大小,說明他的檢測會很細緻,也很廣泛。

總結

對于工具的探索就到這,因為我覺得這三款工具對于現在項目的檢測力度已經夠用了。而jtest由于是商業非開源産品,就不去下載下傳破解版驗證了。

  現在對以上工具進行一下總結:

    findbugs:非常好用的一款代碼檢測工具,檢測的深度比較深,對代碼中滲透的性能,記憶體的使用釋放有很好的檢測。能檢測出可能導緻錯誤的代碼,如空指針引用等等。

          我覺得這款檢測工具應該是首選必備的。

    checkstyle:顧名思義,他就是一款檢測代碼風格樣式的工具,對ccs都會有檢測,可以用以輔助提高開發過程中的代碼風格。缺點很多檢測過于細緻和格式化沖突,

          比如注釋都會高亮顯示,很擾亂視線,是以使用時候組号可以做自定義的風格規範。對代碼的bug發現力度較弱。

    PMD:20M大小,說明他的檢測非常的廣,在我看來的确也是,system.out.println 也會做為error提示。一些命名的檢測等。的确并不是代碼的bug,

          而是項目中代碼的規範檢測。深度沒有findbugs深,在使用findbugs的情況下,可以配合pmd來檢測一些不規範的代碼。

 能通過以上這三款軟體的檢測,并加上業務代碼的review。相信代碼的品質級别應該是很高了,相信也能很好的滿足日常的開發和後期的維護了。

繼續閱讀