【发布时间】:2019-07-14 11:25:36
【问题描述】:
“我们如何检测软件应用程序的语义错误?是否可以消除软件应用程序的所有可能错误?”
【问题讨论】:
标签: semantics
“我们如何检测软件应用程序的语义错误?是否可以消除软件应用程序的所有可能错误?”
【问题讨论】:
标签: semantics
编译器必然会覆盖语法错误。
语义错误更难解决。
许多语言都有lint 设施。
类似 Lint 的工具对于 JavaScript 和 Python 等解释型语言特别有用。由于此类语言缺乏在执行前显示错误列表的编译阶段,因此这些工具也可用作常见错误(例如语法差异)以及难以发现的错误(如 heisenbugs)的简单调试器(提请注意可疑代码为“可能的错误”)。类似 Lint 的工具通常对源代码进行静态分析。
您可能需要检查Correctness 的概念。
在理论计算机科学中,当算法相对于规范正确时,该算法的正确性就被断言。功能正确性是指算法的输入输出行为(即,对于每个输入,它都会产生预期的输出)
在实践中,不可能消除所有语义错误。例如,两个
j = i + 1
和
i = i + 1
在几种不同的语言中在语法上是正确的。在适当的上下文中,它们在语义上也是正确的。但是程序员可能想要一个,而不是另一个。检测该意图以及是否可以检测到,是程序正确性的核心。
【讨论】: