靜態(tài)代碼分析簡介
程序靜態(tài)分析(Static Code Analysis)是指在不運行代碼的方式下昆箕,通過詞法分析、語法分析骆姐、控制流分析、數(shù)據(jù)流分析等技術(shù)對程序代碼進行掃描,驗證代碼是否滿足規(guī)范性捻浦、安全性钠四、可靠性盗扒、可維護性等指標的一種代碼分析技術(shù)。目前靜態(tài)分析技術(shù)向模擬執(zhí)行的技術(shù)發(fā)展以能夠發(fā)現(xiàn)更多傳統(tǒng)意義上動態(tài)測試才能發(fā)現(xiàn)的缺陷缀去,例如符號執(zhí)行、抽象解釋褥影、值依賴分析等等并采用數(shù)學(xué)約束求解工具進行路徑約減或者可達性分析以減少誤報增加效率。目前的靜態(tài)分析工具,無論從科研角度還是實用性角度還有很大的提高余地,國際最好分析工具誤報率在5-10%之間注暗,能夠報出的缺陷種類也僅有幾百種宠页。
與動態(tài)分析方法不同的是,靜態(tài)分析方法不需要執(zhí)行程序举户,只需要自動掃描代碼烤宙,所以,靜待代碼分析可能會誤報程序缺陷供填。
百度百科
個人理解可將代碼省查所做的工作總結(jié)為兩點
- 如何定義代碼缺陷
- 如何以靜態(tài)的方式分析代碼的缺陷拐云,根據(jù)規(guī)則提取缺陷信息
提取缺陷信息方法
詞法分析,語法分析近她,語義分析叉瘩,控制流分析,數(shù)據(jù)流分析粘捎,污點分析薇缅,無效代碼分析等。
CppDepend簡介
通常攒磨,我們都會利用現(xiàn)有的集成工具去分析代碼捅暴。在此,介紹一款分析C/C++的靜態(tài)代碼分析工具——CppDepend咧纠。
CppDepend的代碼規(guī)則為LINQ查詢,它可以在數(shù)秒內(nèi)構(gòu)建一個規(guī)則泻骤。并且漆羔,這些規(guī)則包含了技術(shù)債務(wù)評估。
默認的規(guī)則集包括了超過100條規(guī)則狱掂,諸如entangled code演痒,dead-code,API breaking changes和bad OOP usage這樣的代碼缺陷趋惨,都可以通過默認的規(guī)則集分析鸟顺。
CppDepend功能
運行CppDepend,其主界面如下圖所示器虾。
CppDepend主要功能如下:
(代碼查詢)CQLinq
支持LINQ(CQLinq)上的代碼查詢讯嫂,輕松編寫自定義規(guī)則和查詢代碼。(技術(shù)債務(wù)估算)Technical Debt Estimation
對于每個問題兆沙,通過可定制的C#公式來估計修復(fù)的成本和嚴重性欧芽。(優(yōu)質(zhì)門)Quality Gates
質(zhì)量門是C#LINQ(CQLinq)查詢,實現(xiàn)PASS / FAIL標準來編碼質(zhì)量葛圃。(問題管理)Issues Management
探索問題 只需點擊幾下千扔,集中精力在緊迫和重要的事情上憎妙。(代碼質(zhì)量指標)Code Quality Metrics
代碼行,循環(huán)復(fù)雜性曲楚,耦合厘唾,嵌套深度,等級龙誊,CppDepend支持它們(以及更多)抚垃。(診斷)Diagnostics
CppDepend操作使用CQlinq,其易于瀏覽的所有Clang診斷程序载迄。Clang提供了超過百種診斷讯柔。(構(gòu)建比較和代碼差異)Compare Builds and Code Diff
比較兩個版本的代碼庫,并以任意方式來瀏覽代碼差異和更改护昧。(圖)Diagrams
讓看起來太復(fù)雜的代碼一目了然魂迄。(插件集成)Plugins Integration
CppDepend支持Cppcheck和CPD的XML文件。(架構(gòu)瀏覽)Explore Existing Architecture
探索代碼如何實際結(jié)構(gòu)化惋耙,并闡明架構(gòu)缺陷捣炬。(檢測依賴循環(huán))Detect Dependency Cycle
擺脫組件之間的依賴循環(huán),以實現(xiàn)更高的代碼可維護性绽榛。(趨勢監(jiān)控)Trend Monitoring
獲取幾乎所有代碼指標的趨勢圖湿酸,以掌握應(yīng)用程序的演進。(線束測試覆蓋數(shù)據(jù))Harness Test Coverage Data
導(dǎo)入測試覆蓋數(shù)據(jù)灭美,并充分利用它在CppDepend上下文中豐富的功能推溃。(不變性和純度)Immutability and Purity
CppDepend有助于實現(xiàn)清晰的并發(fā)編程。(Visual Studio加載項)Visual Studio Add-in
完整的Visual Studio集成届腐,超快速和輕量級的分析铁坎。(生成自定義報告)Generate Custom Reports
根據(jù)需求生成分析報告。