動的プログラム解析

動的プログラム解析（どうてきプログラムかいせき、Dynamic Program Analysis）とは、ソフトウェア解析手法の一種であり、実際のあるいは仮想のプロセッサでプログラムを実行して解析を行うこと。動的解析を効率よく行うために、標的プログラムに十分な量のテストケースを入力し、興味深い動作を起こす。コードカバレッジ等のソフトウェアテスト技法を用いて、起こりうる動作を記述したソースコードの箇所を十分な量見つけ出すことができる。ただし、実行中の一時的な命令の効果を過小評価してしまうことに気をつける必要がある。

テストが不十分だと、ロケット「アリアン5」が初飛行でランタイムエラーにより機体が崩壊したように、破局的な失敗をするおそれがある。

静的解析と動的解析
静的解析と動的解析は相互に補完する技術である。例えば、マルチスレッド処理にまつわるバグは静的解析では見落とすおそれがあるが、動的解析では特定することができるため、Javaアプリケーションの解析には両方の解析手法が必要である。

静的解析と動的解析を組み合わせることで、バグ検出の精度と速度が高まり、競合状態やデッドロック、リソースリークなど、実行してみないと表面化しない処理を徹底的に解析することができる。
静的解析、動的解析で発見できることは、モデル検査、証明系でより効率的に発見できることもある。これらの機能を動的解析の中に組み込んでいる場合もある。

動的解析ツール
Avalanche
BoundsChecker 現在はDevPartnerの一部。
ClearSQL PL/SQL.
CodeDynamics
Daikon (system) 
Dmalloc
DynInst
HP Security Suite
IBM Rational AppScan
Intel Thread Checker
Intel Parallel Inspector
MemoryScape
Parasoft Insure++
Parasoft Jtest
Purify
TotalView
Valgrind
VB Watch

出典

関連項目
 静的コード解析
 性能解析

外部リンク

ソフトウェア工学