静态分析和符号执行中的错误检测

error detection in static analysis and symbolic execution

什么样的错误静态分析(例如编译器)可以检测到而符号执行不能检测到?什么样的错误是符号执行可以检测到而静态分析不能检测到的呢?例如,符号执行可以检测语法错误吗?

简而言之,静态分析能够发现编码问题,例如不良做法。例如,如果您(不必要地)将 class 字段声明为 public,静态分析工具可能会警告您应将此类字段声明为私有。但是,"cleanest" 代码不一定没有错误。尽管在某些代码中没有发现任何不当行为,但代表编码器的不正确推理可能会(稍后)导致运行时崩溃。

例如,如果我们开发干净的代码来实现计算器,那么静态分析工具不会输出任何警告,但是如果我们忘记验证输入以防止用户尝试除以零,那么我们的计算器最终会在运行时崩溃。

另一方面,Symbolic(或)执行执行目标程序,因此它们有可能实现程序的任何可能的运行时执行状态,例如引发由a引起的运行时错误漏洞。在上述计算器示例中,符号执行会发现运行时故障,还会告诉我们哪些输入导致了此类故障。回答你最后一个问题,符号执行并不是为了检查代码的质量。

理想情况下,我们应该在发布软件之前同时使用两者。