动态程序分析

动态程序分析对计算机软件的分析,涉及执行所讨论的程序(而不是静态程序分析,而不是)。动态程序分析包括来自软件工程的熟悉技术,例如单元测试调试和测量代码覆盖范围,但还包括较鲜为人知的技术,例如程序切片和不变推理。动态程序分析以运行时内存错误检测模糊动态符号执行和污点跟踪的形式广泛应用于安全性

为了使动态程序分析有效,必须使用足够的测试输入来执行目标程序,以解决可能的输入和输出范围。软件测试措施(例如代码覆盖率)和突变测试等工具用于识别测试不足的情况。

为了动态分析,必须注意将仪器对目标程序的执行(包括时间属性)的影响最小化。单位测试集成测试系统测试接受测试动态测试的形式。

动态分析的类型

代码覆盖范围

根据测试套件或工作量计算代码覆盖范围是一种标准的动态分析技术。它标识了在测试中未执行代码的情况,即在“覆盖”的代码和未进行的代码之间进行区分。

这种分析形式确定了负面因素(未测试的代码),但没有识别阳性(它无法识别代码是否已得到充分测试,即使是具有“ 100%覆盖”的代码)。即使“测试”实际上没有测试该代码所做的内容,也可能导致代码由自动测试系统执行,从而导致“代码覆盖”。

  • GCOVGNU源代码覆盖程序。
  • VB观察将动态分析代码注入可视化基本程序,以监视代码覆盖,呼叫堆栈,执行跟踪,实例化对象和变量。

动态测试

动态测试涉及在一组测试用例上执行程序。

内存错误检测

模糊

模糊是一种测试技术,涉及在各种输入上执行程序;这些输入通常是随机生成的(至少部分是部分)。灰色框爆炸器使用代码覆盖范围来指导输入生成。

动态符号执行

动态符号执行(也称为dse或concololic执行)涉及在混凝土输入上执行测试程序,收集与执行相关的路径约束,并使用约束求解器(通常是SMT求解器)生成新输入,以引起可能导致的新输入采用不同控制流路径的程序,从而增加了测试套件的代码覆盖率。 DSE可以考虑一种模糊(“白框”模糊)。

动态数据流分析

动态数据流分析跟踪信息从水槽的流动。动态数据流分析的形式包括动态污染分析甚至动态符号执行

不变推理

Daikon是动态不变检测的实现。 Daikon运行一个程序,观察程序计算的值,然后报告在观察到的执行中为真实的属性,因此在所有执行中可能是正确的。

安全分析

动态分析可用于检测安全问题。

  • IBM Rational AppScan是针对开发生命周期不同阶段的应用程序安全解决方案的套件。该套件包括两个主要动态分析产品:IBM Rational AppScan标准版和IBM Rational AppScan Enterprise Edition。此外,该套件还包括IBM Rational AppScan源版 - 静态分析工具。

并发错误

  • Parasoft JTest使用运行时错误检测来暴露缺陷,例如种族条件,异常,资源和内存泄漏以及安全攻击漏洞。
  • 英特尔Inspelor在Windows中执行运行时线程和内存错误分析。
  • Parasoft保证++是运行时内存分析和错误检测工具。它的Inuse组件提供了随着时间的流逝的记忆分配的图形视图,并具有整体堆的特定可见性,块分配,可能的出色泄漏等。
  • Google的线程消毒剂是一种数据竞赛检测工具。 IT仪器LLVM IR捕获racy内存访问。

程序切片

对于程序行为的给定子集,程序切片包括将程序简化为仍会产生所选行为的最低形式。简化的程序称为“切片”,是指定行为子集域内原始程序的忠实表示。通常,找到切片是一个无法解决的问题,但是通过通过一组变量的值指定目标行为子集,可以使用数据流算法获得近似切片。这些切片通常由开发人员在调试期间使用以定位错误源。

绩效分析

大多数性能分析工具都使用动态程序分析技术。

技术

大多数动态分析技术基于某种代码仪器或转换。

  • DynInst是一个运行时代码绘制库,可用于开发动态程序分析探针并将其应用于编译可执行文件。 Dyninst通常不需要源代码或重新编译,但是,具有调试符号的未分解可执行文件和可执行文件更容易仪器。
  • IROH.JSJavaScript的运行时代码分析库。它可以跟踪代码执行路径,为运行时侦听器侦听特定的执行代码模式,并允许拦截和操纵程序的执行行为。

也可以看看