2016-07-23 111 views
1

什么样的错误静态分析(例如编译器)可以检测到并且符号执行无法检测到?以及符号执行可以检测到哪些错误以及静态分析无法检测到哪些错误?例如可以符号执行检测语法错误?静态分析和符号执行中的错误检测

回答

1

总之,静态分析能够发现编码问题,如不良实践。例如,如果您宣布(不必要地)将类字段声明为public,则静态分析工具可能会警告您此类字段应声明为private。但是,“最干净的”代码不一定是无bug的。尽管在某些代码中没有发现任何不当行为,代表编码器的错误推理可能导致(稍后)在运行时崩溃。例如,如果我们开发干净的代码来实现计算器,那么静态分析工具不会输出任何警告,但是,如果我们忘记验证输入以防止用户尝试通过零进行除法,那么我们的计算器最终会在运行时崩溃。另一方面,符号(或Concolic)执行执行目标程序,因此它们有可能实现程序的任何可能的运行时执行状态,例如诱发由错误引起的运行时错误。在上述计算器的例子中,符号执行会发现运行时失败,并且还会告诉我们哪些输入导致了这种失败。为了回答你最后的问题,符号执行并不意味着要检查代码的质量。

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

+0

感谢您的回复。如果我象征性地执行语法错误的程序会发生什么? – any

+0

如果程序有一个synthax错误,它不会编译,那么如何执行它(符号或其他)? –

+0

这是正确的。解释型语言怎么样? – any