什么是动态代码分析?
时间:2020-03-05 18:49:25 来源:igfitidea点击:
什么是动态代码分析?
它与静态代码分析有什么不同(即,它可以捕获哪些不能在静态中捕获的)?
我听说过边界检查和内存分析是什么?
使用动态分析检查其他哪些内容?
-亚当
解决方案
回答
基本上,我们对代码进行检测是为了在软件运行时对其进行分析(动态),而不仅仅是在不运行时对其进行分析(静态)。另请参见此JavaOne演示文稿,将两者进行比较。 Valgrind是C语言的一个示例动态分析工具。我们也可以使用Cobertura或者EMMA之类的代码覆盖工具进行Java分析。
根据Wikipedia对动态程序分析的定义:
Dynamic program analysis is the analysis of computer software that is performed with executing programs built from that software on a real or virtual processor (analysis performed without executing programs is known as static code analysis). Dynamic program analysis tools may require loading of special libraries or even recompilation of program code.
回答
Bounds checking
这意味着对数组访问进行运行时检查。与C的内存访问和指针算术的自由放任方式相反,其他语言(例如Java或者Cactual)检查给定数组是否具有一个正在尝试访问的元素。
回答
简而言之,静态分析基于源代码收集信息,而动态分析则基于系统执行(通常使用检测)。
动态分析的优势
- 能够检测在静态分析中无法检测到的依赖项。例如:使用反射,依赖注入,多态性的动态依赖。
- 可以收集时间信息。
- 处理真实的输入数据。在静态分析期间,很难甚至不可能知道哪些文件将作为输入传递,哪些WEB请求将到达,哪些用户将单击等等。
动态分析的缺点
- 可能会对应用程序的性能产生负面影响。
- 由于源代码的运行是基于用户交互或者自动测试的,因此不能保证源代码的完整覆盖。
资源
市场上有许多动态分析工具,其中调试器是最臭名昭著的工具。另一方面,它仍然是一个学术研究领域。有许多研究人员正在研究如何使用动态分析来更好地理解软件系统。有一个年度研讨会致力于依赖性分析。