什麼(me)是代碼靜态分析?

代碼靜态分析是指在不運行應用程序的情況下,對(duì)軟件的源代碼的語義、結構和行爲進(jìn)行分析,由此找出程序中的不規範、不合理的或者可能(néng)造成(chéng)程序運行異常的代碼。最爲人所熟知的代碼靜态分析手段就(jiù)是“人工代碼走查”,随著(zhe)人工代碼審查的日益複雜化和工作量的增加,自動化的代碼靜态分析技術随之得以迅速發(fā)展。時(shí)至今日,絕大部分的代碼靜态分析都(dōu)已經(jīng)可以由專業的代碼靜态分析工具所完成(chéng)。

那麼(me)代碼靜态分析到底可以爲我們的軟件解決什麼(me)問題呢?

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

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

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

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

 爲什麼(me)要做代碼靜态分析 

簡言之,代碼靜态分析的目的就(jiù)是爲了更早、更徹底地檢測或預防代碼錯誤,減少後(hòu)期測試的bug, 最終降低項目成(chéng)本并提高軟件可靠性。

正如下面(miàn)廣爲流傳的Capers Jones對(duì)軟件開(kāi)發(fā)過(guò)程各個階段缺陷引入數量、錯誤所查找的數量和錯誤修複成(chéng)本的分布圖所示,以往傳統的瀑布式開(kāi)發(fā)流程,大部分的軟件缺陷都(dōu)是在編碼階段被(bèi)引入,而多數是在後(hòu)期功能(néng)測試和系統測試階段才被(bèi)發(fā)現,而越到項目後(hòu)期修複每個所發(fā)現的缺陷的成(chéng)本越高,導緻整體項目的高成(chéng)本,和測試周期的不可預測性。

代碼靜态分析-1

代碼靜态分析要做的恰恰就(jiù)是在軟件缺陷被(bèi)引入最多的、修複最容易的階段 -- 也就(jiù)是編碼之初,利用無論是人工還(hái)是自動化工具的方式發(fā)現并修複這(zhè)些代碼錯誤。代碼靜态分析可以對(duì)軟件質量的諸多方面(miàn)帶來好(hǎo)處,包括代碼的可靠性、可讀性、可維護性和可移植性。

對(duì)于像國(guó)防軍工、航空航天、汽車電子、軌道(dào)交通、工業自動化和醫療器械等高安全和高可靠性行業來說(shuō),代碼靜态分析已經(jīng)成(chéng)爲這(zhè)些軟件研發(fā)流程中的強制要求環節,其出發(fā)點也是基于以上目的。

難點和挑戰

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

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

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

  • 如何保證代碼靜态分析的結果能(néng)被(bèi)及時(shí)修複?

  • 曆史遺留代碼中的海量檢測結果如何處理?

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

  • 開(kāi)源工具和商業工具有什麼(me)區别?

解決方案

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

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

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

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

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

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

  • 支持C/C++, Java, C#等多種(zhǒng)開(kāi)發(fā)語言,支持Windows和Linux等各種(zhǒng)開(kāi)發(fā)平台

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

相關資源

  • 白皮書

  • 博客

  • 新聞資訊

  • 修複和預防Bug的成(chéng)本量化對(duì)比_白皮書

    點擊下載

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

    點擊下載

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

    點擊下載

  • 如何開(kāi)發(fā)高質量的軟件_白皮書

    點擊下載

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

    點擊下載

RELATED RESOURCES

下載申請

是否需要技術支持

驗證碼

溫馨提示:

我們將(jiāng)通過(guò)電子郵件向(xiàng)您發(fā)送下載地址,請核對(duì)您填寫的工作郵箱是否正确。

提 交