什麼(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)本,和測試周期的不可預測性。
代碼靜态分析要做的恰恰就(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ì)比研究》摘要_白皮書
點擊下載
選擇Fortify靜态代碼分析工具作爲您的下一個SAST工具是正确的嗎?
查看更多
什麼(me)是Barr-C?
查看更多
醫療器械安全最佳實踐
查看更多
車載信息娛樂系統的網絡安全考慮
查看更多
開(kāi)發(fā)人員使用Klocwork實現軟件安全的5大原因
查看更多
開(kāi)發(fā)人員使用Helix QAC滿足合規性的5大原因
查看更多
什麼(me)是完全的靜态分析?
查看更多
什麼(me)是遺留代碼:有效地處理遺留代碼的8個小貼士
查看更多
如何使用MISRA改進(jìn)嵌入式編程
查看更多
靜态代碼分析是如何工作的
查看更多
爲什麼(me)Eclipse Iceoryx使用Helix QAC
查看更多
什麼(me)是JSF AV C++編碼規範?
查看更多
GitLab SAST:如何將(jiāng)Klocwork與GitLab一起(qǐ)使用
查看更多
什麼(me)是圈複雜度?
查看更多
MISRA和AUTOSAR將(jiāng)統一C++編碼規範——這(zhè)意味著(zhe)什麼(me)
查看更多
什麼(me)是誤報?如何識别誤報和漏報
查看更多
如何在Perforce靜态代碼分析工具中生成(chéng)合規報告
查看更多
什麼(me)是CVE?常見漏洞和暴露列表概述
查看更多
安全編碼實踐:什麼(me)是安全編碼标準?
查看更多
Docker容器使用指南:如何將(jiāng)Klocwork作爲一個容器創建和運行
查看更多
如何將(jiāng)Klocwork與Incredibuild一起(qǐ)使用來提高DevOps生産效率
查看更多
安全最佳實踐+Klocwork
查看更多
Log4Shell是什麼(me)?從Log4j漏洞說(shuō)起(qǐ)
查看更多
使用Helix QAC對(duì)OpenHarmony代碼做靜态分析
查看更多
Helix QAC所提供的四種(zhǒng)抑制方式
查看更多
AUTOSAR C++14編碼規範的前世今生
查看更多
原PRQA産品線更名爲Helix QAC
查看更多
RELATED RESOURCES
下載申請