什麽是代碼靜态分析?

代碼靜态分析是指在不運行應用程序的(de)情況下,對軟件的(de)源代碼的(de)語義、結構和(hé)行為(wèi)進行分析,由此找出程序中的(de)不規範、不合理(lǐ)的(de)或者可(kě)能造成程序運行異常的(de)代碼。最為(wèi)人所熟知的(de)代碼靜态分析手段就是“人工代碼走查”,随着人工代碼審查的(de)日益複雜化和(hé)工作量的(de)增加,自(zì)動化的(de)代碼靜态分析技術随之得以迅速發展。時至今日,絕大部分的(de)代碼靜态分析都已經可(kě)以由專業的(de)代碼靜态分析工具所完成。

那麽代碼靜态分析到底可(kě)以為(wèi)我們的(de)軟件解決什麽問題呢(ne)?

    • 編碼規範檢查。最常用的(de)代碼靜态分析手段。基于公司自(zì)定義的(de)統一(yī)編碼規範,或者是特定行業通用的(de)編碼規範,檢查軟件代碼中不合規的(de)寫法,以保證代碼的(de)統一(yī)風格,盡早預防可(kě)能造成軟件質量風險的(de)各種不合理(lǐ)代碼的(de)出現。編碼規則可(kě)以規範編碼格式、命名規範、內(nèi)存和(hé)資源管理(lǐ)、宏定義、危險代碼等軟件代碼編寫的(de)各個方面。

    • 軟件質量缺陷檢測。更高(gāo)級和(hé)深度的(de)代碼靜态分析技術。檢測軟件代碼中隐藏的(de)會導緻運行時異常或安全性的(de)代碼缺陷,如(rú)空指針、越界、除零、死鎖、安全漏洞等,實現快速查找并及時修複軟件錯誤。對比于編碼規範檢查,軟件質量缺陷檢測要求對代碼進行更深度的(de)解析和(hé)掃描,以定位真正的(de)代碼缺陷,除了找出問題點,往往還需要定位相關的(de)代碼邏輯路徑。有别于編碼規範違規代碼,軟件缺陷檢查出的(de)結果不隻是可(kě)能造成代碼質量風險,而是它們本身就是質量問題,所以對于研發團隊來說,軟件缺陷檢查的(de)結果可(kě)能在實施代碼靜态檢查工作之初會有更直接、立竿見影的(de)效果。

    • 代碼度量分析。針對軟件代碼的(de)各項度量指标的(de)代碼靜态分析。如(rú)複雜度、嵌套深度、分支結構等多種常見度量維度,以便準确了解和(hé)優化代碼結構。代碼度量檢查的(de)思路與“二八原則”不謀而合,因為(wèi)少數的(de)最複雜的(de)代碼中隐藏或導緻了大部分的(de)bug, 代碼度量正式為(wèi)了規避或優化這些複雜代碼,而從整體結構上提高(gāo)軟件的(de)代碼質量和(hé)可(kě)維護性。

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

 為(wèi)什麽要做(zuò)代碼靜态分析 

簡言之,代碼靜态分析的(de)目的(de)就是為(wèi)了更早、更徹底地(dì)檢測或預防代碼錯誤,減少後期測試的(de)bug, 最終降低(dī)項目成本并提高(gāo)軟件可(kě)靠性。

正如(rú)下面廣為(wèi)流傳的(de)Capers Jones對軟件開發過程各個階段缺陷引入數量、錯誤所查找的(de)數量和(hé)錯誤修複成本的(de)分布圖所示,以往傳統的(de)瀑布式開發流程,大部分的(de)軟件缺陷都是在編碼階段被引入,而多數是在後期功能測試和(hé)系統測試階段才被發現,而越到項目後期修複每個所發現的(de)缺陷的(de)成本越高(gāo),導緻整體項目的(de)高(gāo)成本,和(hé)測試周期的(de)不可(kě)預測性。

代碼靜态分析-1

代碼靜态分析要做(zuò)的(de)恰恰就是在軟件缺陷被引入最多的(de)、修複最容易的(de)階段 -- 也就是編碼之初,利用無論是人工還是自(zì)動化工具的(de)方式發現并修複這些代碼錯誤。代碼靜态分析可(kě)以對軟件質量的(de)諸多方面帶來好處,包括代碼的(de)可(kě)靠性、可(kě)讀性、可(kě)維護性和(hé)可(kě)移植性。

對于像國防軍工、航空航天、汽車電子(zǐ)、軌道(dào)交通、工業自(zì)動化和(hé)醫療器械等高(gāo)安全和(hé)高(gāo)可(kě)靠性行業來說,代碼靜态分析已經成為(wèi)這些軟件研發流程中的(de)強制要求環節,其出發點也是基于以上目的(de)。

難點和(hé)挑戰

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

  • 軟件缺陷檢測的(de)誤報率太高(gāo),是否存在漏報?

  • 編碼規則重要還是缺陷檢測重要,如(rú)何取舍?

  • 如(rú)何保證代碼靜态分析的(de)結果能被及時修複?

  • 曆史遺留代碼中的(de)海量檢測結果如(rú)何處理(lǐ)?

  • 如(rú)何最大程度實現代碼靜态分析的(de)自(zì)動化?

  • 開源工具和(hé)商業工具有什麽區别?

解決方案

  • Helix QAC提供業內(nèi)最全、最準确的(de)代碼合規性代碼靜态分析方案,內(nèi)建MISRA C/C++, AutoSAR C++14, High Integrity C++, JSF等常用權威編碼規則集,并支持編碼規則的(de)自(zì)定義

  • Klocwork提供側重于代碼質量的(de)代碼靜态分析方法,憑借其領先的(de)數據流分析技術,深度查找軟件代碼缺陷,快速支持百萬級行甚至千萬行以上大型軟件,精準定位缺陷發生點和(hé)相關觸發路徑,誤報率和(hé)漏報率低(dī)

  • 支持針對安全漏洞的(de)靜态掃描,基于CERT C/C++, CWE, OWASP等常用安全開發規範對代碼的(de)安全性進行檢測

  • 提供基于幾十種維度的(de)代碼度量指标分析功能,提供各種度量統計圖表、結構圖和(hé)儀表闆

  • Helix QAC和(hé)Klocwork都采用現代化的(de)B/S + C/S部署方式,對代碼靜态分析結果進行直觀地(dì)展示、分配、協作和(hé)跟蹤,保證代碼靜态分析監測結果的(de)及時修複和(hé)有效管理(lǐ)

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

  • 支持C/C++, Java, C#等多種開發語言,支持Windows和(hé)Linux等各種開發平台

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

相關資源

  • 白皮書

  • 博客

  • 新聞資訊

  • 修複和(hé)預防Bug的(de)成本量化對比_白皮書

    點擊下載

  • 通過靜态分析和(hé)持續集成保證代碼的(de)質量_白皮書

    點擊下載

  • 實施代碼靜态分析的(de)投資回報率_白皮書

    點擊下載

  • 如(rú)何開發高(gāo)質量的(de)軟件_白皮書

    點擊下載

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

    點擊下載

RELATED RESOURCES

下載申請

是否需要技術支持

驗證碼

溫馨提示:

我們将通過電子(zǐ)郵件向您發送下載地(dì)址,請核對您填寫的(de)工作郵箱是否正确。

提 交