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