2016-07-23 44 views
1

什麼樣的錯誤靜態分析(例如編譯器)可以檢測到並且符號執行無法檢測到?以及符號執行可以檢測到哪些錯誤以及靜態分析無法檢測到哪些錯誤?例如可以符號執行檢測語法錯誤?靜態分析和符號執行中的錯誤檢測

回答

1

總之,靜態分析能夠發現編碼問題,如不良實踐。例如,如果您宣佈(不必要地)將類字段聲明爲public,則靜態分析工具可能會警告您此類字段應聲明爲private。但是,「最乾淨的」代碼不一定是無bug的。儘管在某些代碼中沒有發現任何不當行爲,代表編碼器的錯誤推理可能導致(稍後)在運行時崩潰。例如,如果我們開發乾淨的代碼來實現計算器,那麼靜態分析工具不會輸出任何警告,但是,如果我們忘記驗證輸入以防止用戶嘗試通過零進行除法,那麼我們的計算器最終會在運行時崩潰。另一方面,符號(或Concolic)執行執行目標程序,因此它們有可能實現程序的任何可能的運行時執行狀態,例如誘發由錯誤引起的運行時錯誤。在上述計算器的例子中,符號執行會發現運行時失敗,並且還會告訴我們哪些輸入導致了這種失敗。爲了回答你最後的問題,符號執行並不意味着要檢查代碼的質量。

理想情況下,我們應該在發佈軟件之前使用兩者。

+0

感謝您的回覆。如果我象徵性地執行語法錯誤的程序會發生什麼? – any

+0

如果程序有一個synthax錯誤,它不會編譯,那麼如何執行它(符號或其他)? –

+0

這是正確的。解釋型語言怎麼樣? – any

相關問題