フォールトインジェクション

フォールトインジェクション (英: fault injection)は、異常な方法でストレスがかかったときに、システムがどのように動作するかを理解するのに役立つテスト手法である。 誤り (フォールト)をわざと注入 (インジェクション)すること。この手法は、シミュレーションや実験の結果に基づくため、統計的手法と比較して、より有効である（または現実に近い）可能性がある。

ソフトウェアテストでは、フォールトインジェクションは、テストコードパス、特にエラー処理コードパスに誤りを注入することにより、テストの網羅率を改善する手法である。これはストレステストでよく使用され、堅牢なソフトウェアを開発する上で重要な部分であると広く考えられている。 堅牢性テスト （構文テスト、ファジング、またはファズテストとも呼ばれる）は、プロトコル、コマンドラインパラメーター、APIなどの通信インターフェイスの脆弱性をテストするために一般的に使用される一種のフォールトインジェクションである。

障害の伝播から観察可能な障害までは、明確に定義されたサイクルに従う。障害が実行されると、エラーが発生する可能性がある。これは、システム境界内の無効な状態である。エラーは、システム境界内でさらにエラーを引き起こす可能性があるため、新しいエラーはそれぞれ障害として機能するか、システム境界に伝播して監視可能になる可能性がある。システム境界でエラー状態が観察された場合、それらは障害と呼ばれる。このメカニズムは、Fault-Error-Failureサイクルと呼ばれ、信頼性の重要なメカニズムである。

歴史 
フォールトインジェクションの手法は、ハードウェアレベルで障害を誘発するために最初に使用された1970年代にまで遡る。この種類のフォールトインジェクションは、ハードウェア実装によるフォールトインジェクション（HWIFI）と呼ばれ、システム内のハードウェア障害をシミュレートする。ハードウェア障害の最初の実験では、回路基板の接続を短絡し、システムへの影響（ブリッジ障害）を観察するだけだった。これは主に、ハードウェアシステムの信頼性のテストとして使用された。その後、この技術を拡張するために、回路基板の特定の領域に大量の放射線を照射するデバイスなど、専用のハードウェアが開発された。障害がソフトウェアによって引き起こされる可能性があり、この技術の側面がソフトウェアシステムの評価に役立つ可能性があることがすぐに認識された。これらの手法を総称して、ソフトウェア実装によるフォールトインジェクション（SWIFI）と呼ぶ。

モデル実装による手法 
サイバーフィジカルシステムの複雑さが増すと、従来のフォールトインジェクション方法を適用することはもはや効率的ではなくなるため、テスターはモデルレベルでフォールトインジェクションを使用することもある。

ソフトウェア実装による手法 
ソフトウェアフォールトインジェクションのSWIFI手法は、コンパイル時インジェクションとランタイムインジェクションの2つのタイプに分類できる。

 コンパイル時インジェクション: 想定される障害をシステムに注入するようにソースコードを変更する手法
 ランタイムインジェクション: 特定の時間やイベントによって引き起こされるトリガーを使って、実行中のソフトウェアシステムに障害を注入する手法。

ハードウェア実装による手法 
この手法は、ハードウェアのプロトタイプに適用されていた。テスターは、回路内の一部の部品の電圧を変更したり、温度を上げたり下げたり、高エネルギー放射によるボードへの衝撃などによって障害を注入していた。

関連項目 
 ミューテーション解析

脚注

外部リンク 

 Certess Inc.のCertitudeソフトウェア。

ソフトウェアテスティング