フォールトインジェクション
フォールトインジェクション (英: fault injection)は、異常な方法でストレスがかかったときに、システムがどのように動作するかを理解するのに役立つテスト手法である。 誤り (フォールト)をわざと注入 (インジェクション)すること。この手法は、シミュレーションや実験の結果に基づくため、統計的手法と比較して、より有効である(または現実に近い)可能性がある。
ソフトウェアテストでは、フォールトインジェクションは、テストコードパス、特にエラー処理コードパスに誤りを注入することにより、テストの網羅率を改善する手法である。これはストレステストでよく使用され、堅牢なソフトウェアを開発する上で重要な部分であると広く考えられている。 堅牢性テスト (構文テスト、ファジング、またはファズテストとも呼ばれる)は、プロトコル、コマンドラインパラメーター、APIなどの通信インターフェイスの脆弱性をテストするために一般的に使用される一種のフォールトインジェクションである。
障害の伝播から観察可能な障害までは、明確に定義されたサイクルに従う。障害が実行されると、エラーが発生する可能性がある。これは、システム境界内の無効な状態である。エラーは、システム境界内でさらにエラーを引き起こす可能性があるため、新しいエラーはそれぞれ障害として機能するか、システム境界に伝播して監視可能になる可能性がある。システム境界でエラー状態が観察された場合、それらは障害と呼ばれる。このメカニズムは、Fault-Error-Failureサイクルと呼ばれ、信頼性の重要なメカニズムである。
ソフトウェアフォールトインジェクションのSWIFI手法は、コンパイル時インジェクションとランタイムインジェクションの2つのタイプに分類できる。
コンパイル時インジェクション: 想定される障害をシステムに注入するようにソースコードを変更する手法
ランタイムインジェクション: 特定の時間やイベントによって引き起こされるトリガーを使って、実行中のソフトウェアシステムに障害を注入する手法。