【工利其器】Java代碼檢測神器——FindBugs篇

1、FindBugs簡介算法

      FindBugs是一款Java缺陷檢測工具,它經過分析靜態字節碼能夠查找出200多種錯誤模式,例如空指針取消引用、無限遞歸循環、Java庫的錯誤使用和死鎖等。安全

 

2、安裝FindBugs插件多線程

       Android Studio默認是沒有安裝FindBugs插件的,須要咱們本身進行安裝。所幸Android Studio提供了豐富的插件,能夠直接從庫插件庫中進行安裝。固然也能夠本身手動從網上下載好該插件,而後安裝。這裏將兩種方法都簡單介紹一下。函數

  一、從Android Studio插件庫中安裝 工具

       點擊面板中主菜單Files > Settings  > Plugs 就能夠 進入到插件中心,以下圖所示。性能

②處能夠輸入要查找的插件名,若是安裝了,並知足③處篩選條件,會顯示在④處列表中。加密

③處選擇篩選範圍,插件

④處用於顯示在②處和③處所指定條件下查詢到的插件列表,右邊的選擇框可選中表示該插件能夠用,不然表示不可用。  線程

⑤處顯示選擇的插件的相關信息3d

⑥處是一個入口,能夠跳轉去安裝JetBrains提供的插件。

⑦處用於跳轉到從倉庫中瀏覽並安裝插件。

⑧處用於安轉下載到本地的插件。

這裏咱們選擇從「Browse Repositories」進入安裝,進入後搜索「FindBugs」會顯示以下界面,咱們選擇「FindBugs-IDEA」進行安裝。(我這裏是已經安裝過了,若是沒有安裝,右邊會顯示「install」按鈕。)

安裝完成後,返回到Plugs主面板,搜索「FindBugs」就會顯示以下界面,若是不想用了,能夠點擊「Uninstall」來卸載。

 

當安裝完成後,會提示重啓AS,重啓動後便可使用了。

 

二、從磁盤安裝

    首先手動下載該插件,這裏提供下一個連接:https://pan.baidu.com/s/1qbtsnCby-xpmbC9jBdfMSg ,提取碼:fuae。

    仍然是從上述的插件面板中操做,選擇第⑧點擊「Install plugin from disk」後選擇下載好的插件,按照提示操做便可。

 

3、FindBugs的啓動

       安裝成功後,有兩種方式能夠啓動FindBugs的分析功能。

  一、從控制面板中啓動

       在AS界面的左下角有個「FindBugs-IDEA」按鈕,以下圖紅框所示,經過點擊該按鈕,能夠調起工具窗口面板,經過該窗口能夠開始啓動分析(工具窗口面板及其使用,後面會介紹)。

 

  二、經過右鍵菜單啓動

       在AS界面點擊右鍵,在彈出的菜單欄中能夠看到「FindBugs」選項,子菜單欄中能夠選擇要分析的文件範圍(AS的不一樣區域點擊右鍵,「FindBugs」選項的位置和子菜單也會略有不一樣)。

 

 

4、FindBugs的基本使用

       分析完成後,默認會顯示以下界面。這裏對該面板各個區域進行介紹。

  一、工具窗口

       該區域提供了衆多的選項,能夠方便設置分析範圍和展現分析結果。

這裏對其中幾項再詳細進行說明。

    (1)bug的類型

       按照第12點根據bug類型分組後,會顯示以下界面:

當前模塊分析結果只展現了部分類型的bug,實際上FindBugs能夠展現9中類型:

      1)Bad practice

       很差的實踐。好比不規範的類、方法、變量的命名;調用有返回值的方法時沒有正確使用返回值等。

      2)Dodgy code

       可疑的代碼。好比使用switch/case語法,沒有使用default;數據計算後的精度丟失等。

      3)Malicious code vulnerability

       惡意的代碼漏洞,若是代碼公開,可能致使惡意的修改和攻擊。好比該使用final修改的常量沒有使用final,致使該常量可能被修改;該使用protected修飾的,卻使用public修飾,這不利於對成員的保護;

      4)Correctness

       正確性問題,不正確使用會致使報錯。好比該判斷空指針的地方沒有判空,這會致使空指針異常;構造函數中使用了沒有複製的變量,若是使用時對該變量有判空,該語句不會執行,而若是沒有判空,則會報空指針異常。

      5)Performance

       性能問題。好比定義了某些變量卻從未被讀取過;定義的變量從未被使用過等,在執行過程當中會佔用空間和時間,建議刪掉;內部類應該加上static修飾符;能夠採用更高效的函數來實現功能等。

      6)Multithreaded correctness

       多線程正確性,主要是多線程環境下線程安全問題。好比volatile的不正確使用;該使用syncronized關鍵字的地方沒有使用等。

      7)Experimental

       實驗。

      8)Security

       安全性問題。要掃描到安全方面的bug,須要在設置>FindBugs-IDEA >General > Plugins中添加Find Security Bugs插件。這裏主要聚焦於安全方面的問題,好比向sdcard等存儲卡中寫數據,其中可能包含私人信息;寫入sdcard等存儲器數據容易被其它程序讀取;使用的加密算法不夠安全等。

      9)Internationalization(I18N)

       國際化問題。好比字符串與字節相互轉換時的字符集問題等,有些地方須要顯示指定字符集,由於不一樣平臺或語言使用的字符集有差別。

       這裏僅對這幾個大類簡單的介紹,因爲能檢測到的錯誤項很是多,沒法一一舉例。在實際使用過程當中,能夠查看具體項,根據提示來解決問題。固然,有些問題,FindBugs報出來了,但咱們實際工做中可能想忽略掉,不但願被檢測,能夠在設置中選擇要分析的項,後面會介紹該設置項。

    (2)Bug的嚴重級別

        第15點中,按照bug嚴重級別進行排列,分析結果會以以下形式展現,每一項點擊後能夠查看更詳細的列表:

      其嚴重級別分爲分爲以下4個等級: 

       1)Of Concren 建議, 若是遵循能更好的完善代碼

       2)Troubling 很差的, 可能會引起不良後果

       3)Scary 嚴重問題, 在某種狀況下必定會出現問題

       4)Scariest 很是嚴重, 已經影響到當前程序功能

    (3)設置

        進入到FindBugs的高階設置面板。

   二、分析結果顯示區

       以樹狀結構展現分析後的結果,能夠經過工具窗口中的選擇,來決定該區域是展開仍是關閉,以什麼對結果進行分組,須要顯示哪些內容等。

  三、bug預覽區

       當選擇具體某一個bug時,此處會顯示問題點所在的上下文環境。

  四、bug詳情區

       這部分展現了選中的bug的詳細信息,好比所在的類,方法,有問題的字段,當期bug是什麼樣的問題,爲何須要修改,修改建議等。

 

5、FindBugs的高階使用

       控制面板中提供了「設置」入口,從這個入口能夠配置FindBlugs的一些更高階的用法。好比添加安全相關問題的掃描,過濾哪些文件不掃描,設置報告文檔中不包含那些問題項等。這一節介紹其中比較經常使用的一些功能點。該設置面板的路徑爲:設置 > FindBugs-IDEA。

  一、General

 

這一欄總共有六項

    (1)Compile affected files before analyze   在分析以前進行編譯

    (2)Analyze affected files affter comlplie 在變更的文件編譯以後分析

    (3)Analyze affected files after auto make 在自動Make以後分析變更的文件 自動

    (4)Run analyze in background  在後臺分析,不顯示進度條窗口

    (5) Active toolwindow on run

    (6)Plugins

       這部分能夠再添加一些增強FindBugs功能的插件,前面提到過的「Security」,就須要用到這裏的「find Security Bugs」插件來掃描。

  二、Report

       這一項中有多個選項,用於選擇報告文件中要包含的內容。

 

   三、Filter

       過濾器,用於過濾哪些文件須要掃描,哪些不用掃描。

 

  四、Detector

       用於配置檢測器列表,選中的檢測器將參與到掃描中。

 

 

 五、Annotate

       註解相關的設置,這一部分均選擇默認便可。

 

 六、Share

       共享設置文件,通常能夠忽略。

相關文章
相關標籤/搜索