天天看點

靜态代碼掃描原理和常見工具

靜态代碼掃描價值

(1)研發過程,發現BUG越晚,修複的成本越大;

(2)缺陷引入的大部分是在編碼階段,但發現的更多是在單元測試、內建測試、功能測試階段;

(3)統計證明,在整個軟體開發生命周期中,30% 至 70% 的代碼邏輯設計和編碼缺陷是可以通過靜态代碼分析來發現和修複的。

目标:希望在編碼階段發現更多問題。(靜态代碼掃描、code review)

靜态代碼分析理論基礎和主要技術

靜态代碼分析原理分為兩種:分析源代碼編譯後的中間檔案(如Java的位元組碼);分析源檔案。主要分析技術如下:

  • 缺陷模式比對
    • 事先從代碼分析經驗中收集足夠多的共性缺陷模式,将待分析代碼與已有的共性缺陷模式進行比對,進而完成軟體安全分析。優點:簡單友善;缺點:需要内置足夠多的缺陷模式,容易産生誤報。
  • 類型推斷/類型推斷
    • 類型推斷技術是指通過對代碼中運算對象類型進行推理,進而保證代碼中每條語句都針對正确的類型執行。
  • 模型檢查
    • 建立于有限狀态自動機的概念基礎上。将每條語句産生的影響抽象為有限狀态自動機的一個狀态,再通過分析有限狀态機達到分析代碼目的。
    • 校驗程式并發等時序特性。
  • 資料流分析
    • 從程式代碼中收集程式語義資訊,抽象成控制流圖,可以通過控制流圖,不必真實的運作程式,可以分析發現程式運作時的行為。

靜态代碼掃描工具/引擎對比

序号 引擎 分析對象 備注
1 Findbugs 位元組碼 缺陷模式比對、資料流分析。通過位元組碼分析代碼存在缺陷、支援資料流分析,能查找出空指針崩潰等問題。
2 CheckStyle Java源檔案 缺陷模式比對。掃描代碼格式規範、代碼風格的工具。
3 Godeyes 百度出品,主要針對Android代碼。
4 Lint Java源代碼 Android官方提供的代碼分析工具,可以掃描出API相容性問題、布局性能等針對Android代碼的潛在缺陷。
5 PMD 缺陷模式比對、資料流分析。檢測代碼潛在錯誤。

作者:AmyZYX

出處:http://www.cnblogs.com/amyzhu/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

繼續閱讀