1. 程式人生 > >靜態代碼檢查報告

靜態代碼檢查報告

模式 擴展性 ads 1.2 lpad 文件中 評審 文檔 es2017

今天在下面刊載一篇小王同學寫的靜態代碼檢查報告,圖文並茂,條理清晰。

1. 工具說明

技術分享圖片

  FindBugs 是一個靜態分析工具,它檢查類或者 JAR 文件,將字節碼與一組缺陷模式進行對比以發現可能的問題。有了靜態分析工具,就可以在不實際運行程序的情況對軟件進行分析。不是通過分析類文件的形式或結構來確定程序的意圖,而是通常使用 Visitor 模式。Findbugs可以在多個環境中運行,同時也可以編寫自己的檢測器,功能比較完善。我們平時可以收集自己的或者是別人的開發經驗,把它做成檢測器來完善Findbugs的檢測體系。在網上的評價中,FindBugs工具雖然是機器掃描,效率高,但是還不夠靈活。

  FindBugs的官網為:http://findbugs.sourceforge.net/

  下載地址為:http://findbugs.sourceforge.net/downloads.html

  工具可以通過命令行方式和Eclipse插件的方式兩種方式來使用,由於是開源軟件,網站上同時附帶了源代碼包的下載。

  Eclipse插件的下載地址為:

  https://ncu.dl.sourceforge.net/project/findbugs/findbugs%20eclipse%20plugin/3.0.1/edu.umd.cs.findbugs.plugin.eclipse_3.0.1.20150306-5afe4d1.zip

2.使用過程

  首先把下載到的FindBugs對Eclipse插件解壓到Eclipse安裝目錄下的Plugin目錄,啟動Eclipse,在之前加載好的工程上右鍵找到Find Bugs菜單,點擊Find Bugs,開始執行靜態代碼審查。

技術分享圖片

  在Window菜單上選擇Show View中的Other,搜索FindBugs,選擇Bug Explorer,點擊OK,如下圖所示。

技術分享圖片

  在下方的Bug Explorer中可以查看到工具找到了一個BUG,查看其詳情。

技術分享圖片

  將BUG導出為HTML文件,得到BUG信息如下圖。

技術分享圖片

3.缺陷統計

  發現Bug:共1個

Bug編號

B-01

Bug內容

Store of non serializable com.neuedu.model.UserAccount into HttpSession in com.neuedu.controller.UserAccountController.doLogin(String, String, HttpSession)

Bug提示

This code seems to be storing a non-serializable object into an HttpSession.

If this session is passivated or migrated, an error will result.

Bug等級

Troubling

可信度

High

模式

J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION

類別

BAD_PRACTICE (Bad practice)

Bug位置

UserAccountController.java: com.neuedu.controller.UserAccountController. doLogin

4. 與同行評審對比

  同行評審對程序的整體質量,可維護性、可擴展性、易用性和清晰性都進行評審,在評審過程過程中我們按照規範的步驟對軟件需求、設計、代碼和相關技術文檔進行仔細檢查,找到了6個缺陷和其他代碼規範問題。

  而靜態代碼檢查是由程序按照固定的庫規則進行篩選核查,只會針對代碼的淺層邏輯進行進行審查,雖然自動化體現了機器測試的優點,但代碼可流暢運行但與需求不符合之類的缺陷並不能查驗。這是靜態代碼檢查的不足之處,實際應用中應當做到兩者結合,使用靜態代碼檢查發現簡單的邏輯錯誤,再由同行評審進行人工測試。

5. 缺陷重點分析

  靜態代碼檢查發現了一個bug在UserAccountController.java文件中,該類為用戶賬戶的控制器類com.neuedu.controller.UserAccountController,出錯發生在doLogin方法中的語句session.setAttribute("loginUser", userAccount);,在設置session的時候將不可序列化的賬戶類設置到session中,這可能在運行中使得會話不能正常保存。

  修復方法:將用戶賬戶信息類實現序列化接口並提供序列化方法,並重新測試session保存會話功能。

6. 靜態代碼檢查工具優缺點

  代碼檢查工具的優點:自動化,使用機器掃描,效率較高,速度快,本次使用過程在1分鐘之內完成,可以快捷地代替人力尋找bugs。

  代碼檢查工具的缺點:不夠靈活,只能在檢查工具有的bug庫裏面找到簡單的錯誤。對於邏輯性較強的bug和結果與期望值不符的問題檢測率較低。

靜態代碼檢查報告