ランタイムエラー検出
ランタイムエラー検出(英: runtime error detection)は、ソフトウェアプログラム(主にアプリケーションソフトウェア)を実行時に分析し、その実行中に検出された欠陥を報告するソフトウェア検証方法である。単体テスト、統合テスト、システムテスト(自動/スクリプトまたは手動)、または侵入テストの実施時に利用できる。
概要
[編集]ランタイムエラー検出は、静的コード解析では検出や予測が難しく、実行時にのみ現れる欠陥(スレッドの競合、誤ったファイルの上書きなど)を特定し、アプリケーションのクラッシュ、実行速度の低下、または予期しない動作の根本原因に焦点を当てることができる。ランタイムエラー検出によって一般的に検出される欠陥は次の通りである。
- 競合状態
- データ競合
- デッドロック
- 例外[要説明]
- リソースリーク
- メモリリーク
- セキュリティ攻撃に対する脆弱性(SQLインジェクションなど)
- ヌルポインタのデリファレンス
- 初期化されていないメモリ
- バッファオーバーラン[1]
- スタックオーバーフロー
ランタイムエラー検出ツールは、アプリケーションの実行された制御フローのエラーのみを検出できる[2]。
C言語やC++のようなプログラミング言語では、コードの安全性管理に関してはプログラマに委ねられており、言語仕様レベルで実行時エラーに対する防御策が施されていないため、このような実行時エラー検出ツールの活用が重要になってくる[3]。一方、JavaやC#などの後発言語では、配列の範囲外アクセスやヌル参照アクセスのような一部の実行時エラーは、実行時に仮想マシンのフレームワーク側が検出して例外を送出するため、アプリケーションコード側でのハンドリングが可能である。ただし、スレッド競合など、後発言語であっても動的分析ツールを使わなければ検出が難しい実行時エラーもある[4][5]。
デバッグビルド用のランタイムライブラリやデバッガが実行時エラー検出機能を備えていることもある[6][7]。
脚注
[編集]- ^ 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++test | テクマトリックス株式会社
- ^ マルチスレッドアプリのコードを動的に解析するツール、米コベリティ - @IT
- ^ MSDN Magazine: スレッド パフォーマンス - Visual Studio 2010 におけるリソース競合の同時実行プロファイリング | Microsoft Learn
- ^ Find memory leaks with the CRT library | Microsoft Learn
- ^ Debugging a Stack Overflow - Windows drivers | Microsoft Learn