静态分析和语义分析有什么区别?

时间:2013-12-10 15:34:41

标签: semantics static-analysis

查看ISO 26262-6(2011)道路车辆功能安全第6部分产品开发,静态代码分析(1g)和语义代码分析(1h)中的表9作为验证方法单独列出。

我搜索了差异的解释,但我没有遇到任何令人满意的事情。

静态分析是否可以使用语义分析,过度简化是否过度简化,反之亦然?

一般来说,静态分析和语义分析有什么区别?

我见过的大多数静态分析描述似乎都涉及语义分析的讨论。 What is static code analysis?

感谢您的时间和任何可能的见解和反馈。

3 个答案:

答案 0 :(得分:2)

静态分析意味着分析仅针对源代码运行,不需要运行代码或提供测试输入。此类别中的另一种是动态分析,它实际上运行代码来测试给定的输入。

语义分析表明分析估计(或计算)源代码的含义。此类别中的另一种是语法分析,它只检查源代码的形状。

在大多数情况下,只是说语义或句法分析意味着它也是静态分析。

例如,假设C编译器发出两个错误"缺少分号"和#34;未使用的变量",前者是(静态)句法分析的结果,后者是编译器执行的(静态)语义分析的结果。

答案 1 :(得分:2)

如果你仔细看一下表9,你会看到: 1小时|语义代码分析^ d

在表格下方,您可以阅读' ^ d'手段: 方法1h用于通过使用变量的可能值的抽象表示来源代码的数学分析...

有一些软件工具可以提供这样的分析,例如: Polyspace Proover。

答案 2 :(得分:1)

语义分析是在大多数编译器的编译时进行的,其目的是检查代码是否满足编程语言规范。它通常检查类型的正确性,方法的存在等。

静态分析是一个更复杂的过程,可以在不运行程序的情况下找到一些警告,错误等。它比语义分析更深入,并产生更详细的结果。

例如,有许多工具可用于PVS-Studio,Intellij Idea检查等静态分析。

有时,它们会产生很多噪音,但可以避免一些错误。