簡體   English   中英

靜態分析和語義分析有什么區別?

[英]What is the difference between static analysis and semantic analysis?

查看ISO 26262-6(2011)道路車輛功能安全第6部分產品開發中的表9,靜態代碼分析(1g)和語義代碼分析(1h)作為驗證方法單獨列出。

我搜索了差異的解釋,但我沒有遇到任何令人滿意的事情。

靜態分析是否可以使用語義分析,而不一定反之亦然?

一般來說,靜態分析和語義分析有什么區別?

我見過的大多數靜態分析描述似乎都涉及語義分析的討論。 什么是靜態代碼分析?

感謝您的時間和任何可能的見解和反饋。

靜態分析意味着分析僅針對源代碼運行,不需要運行代碼或提供測試輸入。 此類別中的另一種類型是動態分析,它實際上運行代碼來測試給定的輸入。

語義分析表明分析估計(或計算)源代碼的含義。 此類別中的另一種類型是語法分析,它僅檢查源代碼的形狀。

在大多數情況下,只是說語義或句法分析意味着它也是靜態分析。

例如,假設C編譯器發出兩個錯誤“缺少分號”和“未使用的變量”,前者是(靜態)句法分析的結果,后者是編譯器執行的(靜態)語義分析的結果。

如果你仔細看一下表9,你會看到:1h | 語義代碼分析^ d

在表格下方,您可以閱讀'^ d'的含義:方法1h用於通過使用變量的可能值的抽象表示來對源代碼進行數學分析...

有一些軟件工具提供這樣的分析,fe Polyspace Proover。

語義分析是在大多數編譯器的編譯時進行的,其目的是檢查代碼是否滿足編程語言規范。 它通常檢查類型的正確性,方法的存在等。

靜態分析是一個更復雜的過程,在沒有運行程序的情況下找到一些警告,錯誤等。 它比語義分析更深入,並產生更詳細的結果。

例如,有許多用於靜態分析的工具,如PVS-Studio ,Intellij Idea檢查等。

有時,它們會產生很多噪音,但可以避免一些錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM