rom*_*omi 6 code-analysis dynamic-analysis static-code-analysis
我发现了关于这个主题的几个问题,并且所有这些问题都有很多参考,但我仍然没有清楚的想法,因为大多数参考文献都是关于具体工具而不是关于分析的一般概念.因此我有一些问题:
关于静态分析:1.我想有一个参考,或者总结哪些技术是成功的,现在更具相关性.2.他们真正可以做些什么来发现错误,我们可以做一个总结,还是取决于工具?
关于符号执行:1.哪里可以包含符号执行?我想根据方法,我想知道它们是动态分析,还是静态和动态分析的组合,如果可以确定的话.
我找到了区分工具中两种不同技术的问题,即使我认为我知道理论上的差异.
我实际上是在提前与C合作
我想简单回答一下:
静态分析着眼于代码的语法结构,并得出有关程序行为的结论.这些结论必须始终不正确.
静态分析的一个典型的例子是数据流分析,在那里你计算组像used,read,write为每个语句.这将有助于找到例如未初始化的值.
您还可以分析有关代码模式的代码.这样,这些工具可用于检查您是否符合特定的编码标准.一个突出的编码标准示例是MISRA.此编码标准用于安全关键系统,并避免使用C语言中存在问题的结构.这样,您就已经可以说很多关于应用程序对内存泄漏,悬空指针等的健壮性.
动态分析不仅仅考虑语法,而是考虑状态信息.在符号执行中,您将向语句添加有关所有变量的可能值的假设.
最昂贵和最强大的动态分析方法是模型检查,您可以在其中查看系统的所有可能的执行状态.您可以将模型检查系统视为以100%覆盖率进行测试的系统 - 但是当然存在许多阻止以这种方式检查实际系统的实际问题.
这些方法非常强大,您可以从静态代码分析工具中获得很多,特别是与良好的编码标准相结合时.
我的软件团队发现的一个功能非常令人印象深刻,例如它会在C++中告诉您何时使用虚方法的类没有虚拟析构函数.事实很容易检查,但真的很有帮助.
商业工具非常昂贵,但是一旦你学会了如何使用它们就值钱.一开始的典型问题是你会得到很多误报,并且不知道在哪里寻找真正的问题.
请注意,现在g ++已经内置了一些这样的东西,你可以使用免费的pclint之类的东西.
对不起 - 这已经很久了...希望它很有趣.