我很早以前就获得了ISTQB认证,所以我记得它具有以下区别:
-静态分析:对源代码执行,检测无法访问的代码,未分配的值等。
动态分析:可以检测内存泄漏等,需要执行(分析)。

但是,当我今天进行搜索时,我可以看到提到静态分析的各种站点和来源也能够检测内存泄漏。

所以我想知道,静态分析真的能够做到这一点吗?如果是这样,那么就结果而言,动态分析之间有什么区别?

最佳答案

一个设计良好/实现良好的静态分析工具可以仅通过分析代码来检测许多代码必须泄漏的许多情况。 Coverity/Prevent之类的工具可以很好地做到这一点。

这样的工具还可以检测许多可能存在泄漏的情况(图灵tarpit阻止了它的确知)。关于该工具是否应该报告这些问题,存在着巨大的争议,因为它们可能是误报,而误报则浪费了程序员时间。 [更糟糕的是:如果程序员在一些误报上浪费时间,他/他通常会完全放弃使用该工具,而现在,甚至是真正检测到的错误的值(value)也会丢失]。

动态分析工具通常可以在运行时确定泄漏是否发生。 (想象一下一个指向堆的指针被保存在一个局部变量中,并且该局部变量超出了范围)。 (有关动态分析工具的信息,请参见我们的CheckPointer工具,该工具可以检测实际上在运行时遇到的每个堆栈/堆分配/指针滥用错误)。

10-06 10:41
查看更多