ランタイムエラー検出()は、ソフトウェアプログラム(主にアプリケーションソフトウェア)を実行時に分析し、その実行中に検出された欠陥を報告するソフトウェア検証方法である。単体テスト、統合テスト、システムテスト(自動/スクリプトまたは手動)、または侵入テストの実施時に利用できる。
概要 ランタイムエラー検出は、静的コード解析では検出や予測が難しく、実行時にのみ現れる欠陥(スレッドの競合、誤ったファイルの上書きなど)を特定し、アプリケーションのクラッシュ、実行速度の低下、または予期しない動作の根本原因に焦点を当てることができる。ランタイムエラー検出によって一般的に検出される欠陥は次の通りである。
競合状態 データ競合 デッドロック 例外 リソースリーク メモリリーク セキュリティ攻撃に対する脆弱性(SQLインジェクションなど) ヌルポインタのデリファレンス 初期化されていないメモリ バッファオーバーランRuntime Error Detection by Parasoft スタックオーバーフロー
ランタイムエラー検出ツールは、アプリケーションの実行された制御フローのエラーのみを検出できるMUST: A Scalable Approach to Runtime Error Detection in MPI Programs by Tobias Hilbrich, Martin Schulz, Bronis R. de Supinski, Matthias S. Müller, in Tools for High Performance Computing 2009。
C言語やC++のようなプログラミング言語では、コードの安全性管理に関してはプログラマに委ねられており、言語仕様レベルで実行時エラーに対する防御策が施されていないため、このような実行時エラー検出ツールの活用が重要になってくる実行時メモリエラー検出 | 静的解析ツール・単体テストツール C++test | テクマトリックス株式会社。一方、JavaやC#などの後発言語では、配列の範囲外アクセスやヌル参照アクセスのような一部の実行時エラーは、実行時に仮想マシンのフレームワーク側が検出して例外を送出するため、アプリケーションコード側でのハンドリングが可能である。ただし、スレッド競合など、後発言語であっても動的分析ツールを使わなければ検出が難しい実行時エラーもあるマルチスレッドアプリのコードを動的に解析するツール、米コベリティ - @ITMSDN Magazine: スレッド パフォーマンス - Visual Studio 2010 におけるリソース競合の同時実行プロファイリング | Microsoft Learn。
デバッグビルド用のランタイムライブラリやデバッガが実行時エラー検出機能を備えていることもあるFind memory leaks with the CRT library | Microsoft LearnDebugging a Stack Overflow - Windows drivers | Microsoft Learn。
脚注
関連項目 開発テスト ソフトウェアテスト メモリデバッガ BoundsChecker ランタイム検証