動的プログラム解析とは、プログラムを実行することを伴うソフトウェア解析のことである。一方、静的プログラム解析はプログラムを実行しない。
分析は、動作、テストカバレッジ、パフォーマンス、セキュリティなど、ソフトウェアのさまざまな側面に焦点を当てることができます。
効果的なテストを行うには、対象となるプログラムを、考えられる入力と出力の範囲に対応できる十分なテスト入力[ 1 ]で実行する必要があります。コードカバレッジなどのソフトウェアテスト手法や、ミューテーションテストなどのツールは、テストが不十分な箇所を特定するために使用されます。
テストコードカバレッジを計算することで、テストされていないコードを特定できます。
この分析ではテストされていないコードを特定できますが、テスト済みのコードが適切にテストされているかどうかは判断できません。テストで正しい動作が検証されていなくても、コードが実行される場合があります。
動的テストとは、一連のテストケースに対してプログラムを実行することです。
Fuzzing is a testing technique that involves executing a program on a wide variety of inputs; often, these inputs are randomly generated (at least in part). Gray-box fuzzers use code coverage to guide input generation.
Dynamic symbolic execution (also known as DSE or concolic execution) involves executing a test program on a concrete input, collecting the path constraints associated with the execution, and using a constraint solver (generally, an SMT solver) to generate new inputs that would cause the program to take a different control-flow path, thus increasing code coverage of the test suite.[3] DSE can be considered a type of fuzzing ("white-box" fuzzing).
Dynamic data-flow analysis tracks the flow of information from sources to sinks. Forms of dynamic data-flow analysis include dynamic taint analysis and even dynamic symbolic execution.[4][5]
Daikon is an implementation of dynamic invariant detection. Daikon runs a program, observes the values the program computes, and then reports properties that were true during the observed executions and are thus likely true over all executions.
Dynamic analysis can be used to detect security problems.
プログラムの動作の特定部分集合に対して、プログラムスライシングとは、選択した動作を依然として生成する最小限の形式にプログラムを縮小することです。縮小されたプログラムは「スライス」と呼ばれ、指定された動作部分集合の範囲内で元のプログラムを忠実に表現したものです。一般的に、スライスを見つけることは解決不可能な問題ですが、一連の変数の値に基づいて対象となる動作部分集合を指定することで、データフローアルゴリズムを使用して近似スライスを取得することが可能です。これらのスライスは通常、開発者がデバッグ中にエラーの原因を特定するために使用します。
ほとんどのパフォーマンス分析ツールは、動的プログラム分析の手法を使用しています。
ほとんどの動的解析は、計測または変換を伴う。
計測機器は実行時のパフォーマンスに影響を与える可能性があるため、パフォーマンスの問題を誤って特定しないように、テスト結果の解釈においてはこの点を考慮する必要がある。
DynInstは、動的プログラム解析プローブの開発とコンパイル済み実行ファイルへの適用に役立つランタイムコードパッチライブラリです。DynInstは一般的にソースコードや再コンパイルを必要としませんが、デバッグシンボルが削除されていない実行ファイルやデバッグシンボル付きの実行ファイルの方が計測が容易です。
Iroh.jsは、 JavaScript用のランタイムコード分析ライブラリです。コードの実行パスを追跡し、特定の実行コードパターンを検出するためのランタイムリスナーを提供し、プログラムの実行動作の傍受と操作を可能にします。