code-analysis - 静态和动态代码分析

标签 code-analysis static-code-analysis dynamic-analysis

我发现了有关该主题的几个问题,所有这些问题都有大量引用文献,但是我仍然对此没有一个清晰的主意,因为大多数引用文献都是关于具体工具的,而不是整个分析的概念。因此,我有一些问题:

关于静态分析:
1.我想引用一下,或者总结一下当今哪些技术成功并且具有更大的相关性。
2.他们真的可以发现错误,我们可以做一个总结还是取决于工具?

关于符号执行:
1.在哪里可以包含符号执行?我想取决于方法
我想知道它们是动态分析,还是静态和动态分析的混合,是否有可能确定。

我发现了将工具中的两种不同技术区分开的问题,即使我认为我也知道理论上的区别。

我实际上正在使用C
提前致谢

最佳答案

我正在尝试给出一个简短的答案:

静态分析着眼于代码的语法结构,并得出有关程序行为的结论。这些结论不一定总是正确的。

静态分析的一个典型示例是数据流分析,其中您为每个语句计算诸如usedreadwrite之类的集合。这将有助于找到例如未初始化的值。

您还可以分析有关代码模式的代码。这样,这些工具可用于检查您是否符合特定的编码标准。 MISRA是一个著名的编码标准示例。此编码标准用于安全性至关重要的系统,避免了C语言中的构造问题。通过这种方式,您已经可以说出很多应用程序针对内存泄漏,指针悬空等的鲁棒性。

动态分析并不仅考虑语法,还考虑了状态信息。在符号执行中,您正在将关于所有变量的可能值的假设添加到语句中。

动态分析最昂贵,最强大的方法是模型检查,您可以在其中真正查看系统的所有可能执行状态。您可以将模型检查的系统视为经过100%覆盖率测试的系统-但是当然存在许多实际问题,无法以这种方式检查实际系统。

这些方法非常强大,您可以从静态代码分析工具中受益匪浅,尤其是与良好的编码标准结合使用时。

我的软件团队发现一个令人印象深刻的功能,例如当带有虚拟方法的类没有虚拟析构函数时,它将在C++中告诉您。实际上很容易检查,但确实很有帮助。

商业工具非常昂贵,但一旦您学会了如何使用它们,便物有所值。一开始的典型问题是您会收到很多错误警报,并且不知道在哪里查找真正的问题。

请注意,当今g++已经内置了其中的一些东西,您可以使用免费的pclint之类的东西。

抱歉-已经很长了...希望很有趣。

关于code-analysis - 静态和动态代码分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884623/

相关文章:

fxcop - 你希望 FxCop/宪兵有什么规则?

visual-studio-2008 - 代码分析是否支持为混合语言拼写检查定义两种语言?

c# - 可以动态分析谓词吗?

iOS 项目 : Static/Dynamic code analysis and call graphs

适用于 Windows 的 C++ 动态代码分析工具

c# - 使用 Timer 为 C# 代码计时

visual-studio-2010 - VS2010代码分析,有什么方法可以自动修复某些警告?

java - java 的 Mono 宪兵等效项

java - 确保 JAR/classpath 中引用的所有 Java 类都存在于 JAR/classpath 中

c++ - 'WinMain' 的注释不一致