翻譯|行業資訊|編輯:黃竹雯|2018-12-17 15:56:30.000|閱讀 866 次
概述:PC-lint Plus是一種靜態分析工具,靜態分析可以是動態分析非常有效的補充。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
動態分析,指的是運行程序。這可以通過編譯機器代碼并運行代碼,或通過解讀程序來完成。通過觀察程序的行為,人們很容易假設知道程序的全部內容。動態分析是編程的一個重要部分,因為沒有程序員可以說他或她的程序是完美的,除非它真的按照預期運行。
一個新手程序員經常誤以為他的工作已經完成,因為他選擇的輸入組合沒有導致程序出現bug。 然而,經驗告訴我們,雖然測試可以顯示bug的存在,但測試永遠無法證明bug不存在。即使是相對簡單的程序,它的輸入組合數量也可以是天文數字,而測試所有輸入組合是十分不切實際的。
另一方面,靜態分析不僅限于輸入組合。例如,如果代碼中的某處將signed quantity與unsigned quantity進行比較,那么signed quantity將被更新為unsigned quantity,在signed quantity失去作用之前對程序不會造成任何損害。而靜態分析會主動發現問題,并且程序員不用編寫輸入組合去測試程序。
或者考慮C/C ++標準認為“implementation dependent”的構造,例如在較大表達式中,子表達式的求值順序或C ++程序中初始化的順序。通過在使用同一編譯器的同時進行大量測試運行,您可能不會發現代碼的任何部分容易受到此類攻擊。但是,如果您要將應用程序移植到新的操作系統,或獲取新的編譯器,或者只是更改當前編譯器的優化設置,那么implementation dependent的順序假設可能會改變并觸發一個看起來很穩定的代碼中的bug。
靜態分析與編譯器有不同的角度。它不是找到一種可以解讀程序的方法,而是尋找程序可能被誤解的方式。
另一種常見的警告類是冗余元素。例如,如果沒有調用某個特定的函數,那么該函數是否真的是多余的,或者是否應該被調用。顯然,只有程序員才能回答這個問題,但這是一個在動態分析過程中不會出現的問題。
動態測試和靜態分析與醫療保健行業有一個有趣的類比。動態測試就像急診室護理,而靜態分析就像預防性護理,例如保持健康的飲食和鍛煉計劃。如果您的系統崩潰,顯而易見的工具是動態測試,即傳統的調試器,就像一個剛剛突然身體很難受的人,家人會帶他去急診室。但是,保持健康的飲食和鍛煉計劃可以幫助您遠離急診室,因此使用靜態分析可以幫助您避免程序失敗。如果您的系統崩潰,您最好也進行靜態分析,因為如果發現錯誤,靜態分析將明確指出錯誤。
因此,靜態分析可以是動態分析非常有效的補充。
PC-lint Plus是一種靜態分析工具,通過分析C和C ++源代碼來發現軟件中的缺陷。與編譯器一樣,PC-lint Plus會解析源代碼文件,執行語義分析,并構建一個抽象語法樹來表示程序。PC-lint Plus采用各種機制,包括數據流分析,數值跟蹤,讀寫分析,強類型檢查,功能語義驗證和許多其他技術,來提供對單個文件和整個項目強大而全面的分析。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn