Joh*_*n V 6 testing memory-leaks code-analysis static-analysis
很久以前我收到了ISTQB认证,我记得它有以下区别: -
静态分析:对源代码执行,检测无法访问的代码,未分配的值等. -
动态分析:可以检测内存泄漏等,需要执行(分析).
但是当我今天搜索时,我可以看到各种网站和提到静态分析的来源也能够检测到内存泄漏.
所以我想知道,静态分析真的有能力吗?如果是这样,那么就结果而言,动态分析之间有什么不同?
精心设计/实施的静态分析工具可以检测许多情况,其中某些代码必须仅通过分析代码泄漏的情况。Coverity / Prevent之类的工具可以很好地做到这一点。
这些工具还可以检测很多情况下,有实力存在泄漏的情况(图灵tarpit阻止了它的确知)。关于该工具是否应报告这些问题,存在着巨大的争议,因为它们可能是误报,而误报则浪费了程序员时间。[更糟糕的是:如果程序员将自己的时间浪费在一些误报上,他/她通常会完全放弃使用该工具,而现在甚至连真正检测到的bug的价值也消失了]。
动态分析工具通常可以在运行时确定泄漏是否发生。(想象一下一个指向堆的指针被保存在一个局部变量中,并且该局部变量超出了范围)。(有关动态分析工具的信息,请参阅我们的CheckPointer工具,该工具实际上可以检测运行时遇到的每个堆栈/堆分配/指针滥用错误)。
小智 6
作为静态分析器的开发人员之一,我可以指出,对于SCA而言,搜索内存泄漏问题是一项极其复杂且有时甚至是不可能的任务。静态分析仪在这一领域确实很薄弱,我们不应期望它们太多。关于内存泄漏的搜索,动态分析器要强大得多,如果有发现这些泄漏的任务,那么您应该考虑动态分析,而不是静态分析。
是的,静态分析器能够找到内存泄漏的简单情况。但是在实践中,大多数情况是在代码复杂且内存在程序的不同部分中释放/分配时发生内存泄漏。因此,静态分析确实不是很有效。
| 归档时间: |
|
| 查看次数: |
6169 次 |
| 最近记录: |