什麼是程式碼靜態分析?

程式碼靜態分析是指在不運行應用程式的情況下,對軟體的原始程式碼的語義、結構和行為進行分析,由此找出程式中的不規範、不合理的或者可能造成程式運行異常的程式碼。最為人所熟知的程式碼靜態分析手段就是“人工程式碼走查”,隨著人工程式碼審查的日益複雜化和工作量的增加,自動化的程式碼靜態分析技術隨之得以迅速發展。時至今日,絕大部分的程式碼靜態分析都已經可以由專業的程式碼靜態分析工具所完成。

那麼程式碼靜態分析到底可以為我們的軟體解決什麼問題呢?

    • 編碼規範檢查。最常用的程式碼靜態分析手段。基於公司自訂的統一編碼規範,或者是特定行業通用的編碼規範,檢查軟體程式碼中不合規的寫法,以保證程式碼的統一風格,儘早預防可能造成軟體品質風險的各種不合理程式碼的出現。編碼規則可以規範編碼格式、命名規範、記憶體和資源管理、巨集定義、危險程式碼等軟體程式碼編寫的各個方面。

    • 軟體品質缺陷檢測。更高級和深度的程式碼靜態分析技術。檢測軟體程式碼中隱藏的會導致運行時異常或安全性的程式碼缺陷,如空指針、越界、除零、鎖死、安全性漏洞等,實現快速查找並及時修復軟體錯誤。對比於編碼規範檢查,軟體品質缺陷檢測要求對程式碼進行更深度的解析和掃描,以定位真正的程式碼缺陷,除了找出問題點,往往還需要定位相關的程式碼邏輯路徑。有別於編碼規範違規程式碼,軟體缺陷檢查出的結果不只是可能造成程式碼品質風險,而是它們本身就是品質問題,所以對於研發團隊來說,軟體缺陷檢查的結果可能在實施程式碼靜態檢查工作之初會有更直接、立竿見影的效果。

    • 程式碼度量分析。針對軟體程式碼的各項度量指標的程式碼靜態分析。如複雜度、嵌套深度、分支結構等多種常見度量維度,以便準確瞭解和優化程式碼結構。程式碼度量檢查的思路與“二八原則”不謀而合,因為少數的最複雜的程式碼中隱藏或導致了大部分的bug, 程式碼度量正式為了規避或優化這些複雜程式碼,而從整體結構上提高軟體的程式碼品質和可維護性。

    • 人工程式碼評審。對程式碼的演算法、邏輯的實現合理與否的檢查,這部分由於其與業務需求的密切相關,目前更多還是通過人工程式碼走讀來完成,這也是程式碼靜態分析中最需要人工智慧的部分。

 為什麼要做程式碼靜態分析 

簡言之,程式碼靜態分析的目的就是為了更早、更徹底地檢測或預防程式碼錯誤,減少後期測試的bug,最終降低專案成本並提高軟體可靠性。

正如下面廣為流傳的Capers Jones對軟體發展過程各個階段缺陷引入數量、錯誤所查找的數量和錯誤修復成本的分佈圖所示,以往傳統的瀑布式開發流程,大部分的軟體缺陷都是在編碼階段被引入,而多數是在後期功能測試和系統測試階段才被發現,而越到專案後期修復每個所發現的缺陷的成本越高,導致整體項目的高成本,和測試週期的不可預測性。

程式碼靜態分析-1

程式碼靜態分析要做的恰恰就是在軟體缺陷被引入最多的、修復最容易的階段 --也就是編碼之初,利用無論是人工還是自動化工具的方式發現並修復這些程式碼錯誤。程式碼靜態分析可以對軟體品質的諸多方面帶來好處,包括程式碼的可靠性、可讀性、可維護性和可攜性。

對於像國防軍工、航空航太、汽車電子、軌道交通、工業自動化和醫療器械等高安全和高可靠性行業來說,程式碼靜態分析已經成為這些軟體研發流程中的強制要求環節,其出發點也是基於以上目的。

難點和挑戰

  • 到底應該引入哪些編碼程式碼規則難以抉擇,太多、太少都有問題。

  • 軟體缺陷檢測的誤報率太高,是否存在漏報?

  • 編碼規則重要還是缺陷檢測重要,如何取捨?

  • 如何保證程式碼靜態分析的結果能被及時修復?

  • 歷史遺留程式碼中的海量檢測結果如何處理?

  • 如何最大程度實現程式碼靜態分析的自動化?

  • 開源工具和商業工具有什麼區別?

解决方案

  • Helix QAC提供業內最全、最準確的程式碼合規性程式碼靜態分析方案,內建MISRAC/C++, AutoSAR C++14, High Integrity C++, JSF等常用權威編碼規則集,並支援編碼規則的自訂

  • Klocwork提供側重於程式碼品質的程式碼靜態分析方法,憑藉其領先的資料流程分析技術,深度查找軟體程式碼缺陷,快速支援百萬級行甚至千萬行以上大型軟體,精准定位缺陷發生點和相關觸發路徑,誤報率和漏報率低

  • 支援針對安全性漏洞的靜態掃描,基於CERT C/C++, CWE, OWASP等常用安全開發規範對程式碼的安全性進行檢測

  • 提供基於幾十種維度的程式碼度量指標分析功能,提供各種度量統計圖表、結構圖和儀錶板

  • Helix QAC和Klocwork都採用現代化的B/S+C/S部署方式,對程式碼靜態分析結果進行直觀地展示、分配、協作和跟蹤,保證程式碼靜態分析監測結果的及時修復和有效管理

  • 支援與持續集成系統的集成,無縫銜接到日常研發流程

  • 支援C/C++, Java, C#等多種開發語言,支援Windows和Linux等各種開發平臺

  • 完全符合ISO 26262, ASPICE, En 50128, IEC 61508, IEC 60880, IEC 62304, DO-178B/C等標準對工具鑒定和認證要求

相關資源

  • 白皮書

  • 博客

  • 新聞資訊

  • 修復和預防Bug的成本量化對比_白皮書

    點擊下載

  • 通過靜態分析和持續集成保證代碼的品質_白皮書

    點擊下載

  • 實施代碼靜態分析的投資回報率_白皮書

    點擊下載

  • 如何開發高品質的軟體_白皮書

    點擊下載

  • 《MISRA-C合規檢驗工具對比研究》摘要_白皮書

    點擊下載

RELATED RESOURCES

下載申請

是否需要技術支持

驗證碼

溫馨提示:

我們將通過電子郵件向您發送下載地址,請核對您填寫的工作郵箱是否正確。

提 交