(57)【要約】      （修正有）【課題】故障注入におけるユーザの負担を軽減できる故障注入プログラムを提供する。【解決手段】故障注入モジュール１１が、デバッグ機能２１に連携情報を提供し、連携情報に対する応答として条件関連情報及び動作関連情報の少なくとも一方をデバッグ機能から通知され、条件関連情報及び動作関連情報の少なくとも一方に応じて、故障注入条件及び故障注入動作の少なくとも一方を決定し、決定された故障注入条件及び故障注入動作の少なくとも一方に応じて、故障注入の手順を規定する故障注入シナリオを生成することを、故障注入プログラム１０は、プロセッサ１に実行させる。【選択図】図１
2015141539.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサに、
故障注入モジュールが、故障注入対象を用いて動作する制御プログラムのデバッグを行うデバッグ機能に連携情報を提供することと、
前記故障注入モジュールが、前記連携情報に対する応答として条件関連情報及び動作関連情報の少なくとも一方を前記デバッグ機能から通知されることと、
前記故障注入モジュールが、前記条件関連情報及び前記動作関連情報の少なくとも一方に応じて、故障注入条件及び故障注入動作の少なくとも一方を決定することと、
前記故障注入モジュールが、前記決定された故障注入条件及び故障注入動作の少なくとも一方に応じて、前記故障注入対象に対する故障注入の手順を規定する故障注入シナリオを生成することと、
を実行させる故障注入プログラム。
【請求項２】
前記故障注入モジュールが通知される前記条件関連情報及び前記動作関連情報の少なくとも一方は、前記連携情報に応じて画面上に表示させた連携メニューオブジェクトにおけるユーザからの選択操作に応じて、又は、前記連携情報として前記デバッグ機能から受けた問い合わせに応じて、前記デバッグ機能により特定されて前記故障注入モジュールに通知されたものである
請求項１に記載の故障注入プログラム。
【請求項３】
前記プロセッサに、
前記故障注入モジュールが、前記制御プログラムのソースファイルを前記デバッグ機能から提供されることと、
前記故障注入モジュールが、前記ソースファイルのソースコードを構文解析することと、
をさらに実行させ、
前記連携情報を提供することは、
前記故障注入モジュールが、構文解析の結果に応じて前記故障注入条件及び前記故障注入動作の少なくとも一方の決定に必要な情報の問い合わせを前記連携情報として前記デバッグ機能に提供することを含む
請求項１に記載の故障注入プログラム。
【請求項４】
前記条件関連情報は、故障注入すべきタイミングに関するタイミング情報を含み、
前記故障注入条件は、故障注入すべきタイミングを指定するタイミング条件を含む
請求項１から３のいずれか１項に記載の故障注入プログラム。
【請求項５】
前記条件関連情報は、故障注入を発生させるべき変数値に関する変数値情報を含み、
前記故障注入条件は、故障注入を発生させる変数値を指定する発生条件を含む
請求項１から３のいずれか１項に記載の故障注入プログラム。
【請求項６】
前記動作関連情報は、故障注入の動作内容に関する動作情報を含み、
前記故障注入動作は、故障注入の動作内容を指定する動作指定を含む
請求項１から３のいずれか１項に記載の故障注入プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、故障注入プログラムに関する。
【背景技術】
【０００２】
故障注入対象を用いて動作する制御プログラムについて、故障注入対象に故障注入する際、故障が発生するデータパターンを試行錯誤的に決定して故障注入対象に注入すると、ユーザが煩雑な作業を強いられる傾向にある。そのため、故障注入におけるユーザの負担を軽減することが望まれる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１８１７３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
１つの実施形態は、例えば、故障注入におけるユーザの負担を軽減できる故障注入プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
１つの実施形態によれば、故障注入プログラムが提供される。故障注入プログラムは、故障注入モジュールが、デバッグ機能に連携情報を提供することをプロセッサに実行させる。デバッグ機能は、制御プログラムのデバッグを行う。制御プログラムは、故障注入対象を用いて動作する。故障注入プログラムは、故障注入モジュールが、連携情報に対する応答として条件関連情報及び動作関連情報の少なくとも一方をデバッグ機能から通知されることをプロセッサに実行させる。故障注入プログラムは、故障注入モジュールが、条件関連情報及び動作関連情報の少なくとも一方に応じて、故障注入条件及び故障注入動作の少なくとも一方を決定することをプロセッサに実行させる。故障注入プログラムは、故障注入モジュールが、決定された故障注入条件及び故障注入動作の少なくとも一方に応じて、故障注入シナリオを生成することをプロセッサに実行させる。故障注入シナリオは、故障注入対象に対する故障注入の手順を規定する。
【図面の簡単な説明】
【０００６】
【図１】第１の実施形態にかかる故障注入プログラムを含む故障注入システムの構成を示す図。
【図２】第１の実施形態にかかる故障注入プログラムを含む故障注入システムの動作を示すシーケンス図。
【図３】第１の実施形態にかかる故障注入プログラムを含む故障注入システムの動作を示す図。
【図４】第１の実施形態の変形例にかかる故障注入プログラムを含む故障注入システムの動作を示す図。
【図５】第１の実施形態の変形例にかかる故障注入プログラムを含む故障注入システムの動作を示す図。
【図６】第１の実施形態の他の変形例にかかる故障注入プログラムを含む故障注入システムの動作を示す図。
【図７】第１の実施形態の他の変形例にかかる故障注入プログラムを含む故障注入システムの動作を示す図。
【図８】第２の実施形態にかかる故障注入プログラムを含む故障注入システムの動作を示すシーケンス図。
【図９】第２の実施形態にかかる故障注入プログラムを含む故障注入システムの動作を示す図。
【図１０】第２の実施形態の変形例にかかる故障注入プログラムを含む故障注入システムの動作を示す図。
【図１１】第２の実施形態の他の変形例にかかる故障注入プログラムを含む故障注入システムの動作を示す図。
【図１２】第３の実施形態にかかる故障注入プログラムを含む故障注入システムの動作を示すシーケンス図。
【図１３】第３の実施形態にかかる故障注入プログラムを含む故障注入システムの動作を示す図。
【図１４】第３の実施形態の変形例にかかる故障注入プログラムを含む故障注入システムの動作を示す図。
【発明を実施するための形態】
【０００７】
以下に図面を参照して、実施形態にかかる故障注入プログラムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（第１の実施形態）
図１は、第１の実施形態にかかる故障注入システム１００の構成を示す図である。故障注入システム１００は、故障注入プログラム１０及びデバッガ２０を有する。
【０００９】
制御プログラム３０は、故障注入プログラム１０を用いて故障注入対象６０に対し故障を注入する。故障注入対象６０は、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）でもよいし、シミュレータでもよい。シミュレータは、ＭＣＵ（マイコン）と同じ動きをするハードウェアであってもよいし、ＭＣＵ（マイコン）と同じ動きをするソフトウェアであってもよい。故障注入対象６０は、ＭＣＵ６４及び故障注入機構（ＭＣＵ６４に故障注入するための故障注入回路）６５を含む。ＭＣＵ６４は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）６１及びメモリ６２を含む。ＣＰＵ６１は、レジスタ６３を含む。レジスタ６３の値を不適切な値にして故障させたり、メモリ６２の値を不適切な値にして故障させたりすることで、ＭＣＵ６４に故障を注入する。このとき、本来デバッグのために行うブレークポイントの設定と同じ方法を故障注入ポイントの設定に応用する。
【００１０】
故障注入プログラム１０は、記録媒体を介して又はネットワーク経由でプロセッサ１にインストールされている。プロセッサ１は、ユーザから入力部５０を介して受信した故障注入起動コマンドに従って、故障注入プログラム１０を起動させ故障注入モジュール１１（機能モジュール）を展開する。本実施形態では、故障注入モジュール１１がデバッグ機能２１と連携して、故障注入対象６０に対する故障注入の手順を規定する故障注入シナリオを生成する。これにより、制御プログラム３０を止めることなく故障を注入し、故障注入におけるユーザの負担を軽減することができる。故障注入モジュール１１は、故障注入シナリオ編集機能１２、故障注入機能１３、及び故障ステータス取得機能１４を含む。
【００１１】
故障注入モジュール１１は、デバッグ機能２１と連携して故障注入条件及び故障注入動作を決定する。故障注入条件は、故障注入すべきタイミングを指定するタイミング条件を含む。タイミング条件は、制御プログラム３０の実行時における故障注入すべきタイミングに対応するプログラムカウンタ値を含む。故障注入動作は、故障注入の動作を指定する動作指定を含む。そして、故障注入モジュール１１は、決定された故障注入条件に応じて、故障注入シナリオを生成する。
【００１２】
具体的には、故障注入モジュール１１は、タイミング情報をデバッグ機能２１から取得し、タイミング条件を決定する。例えば、故障注入モジュール１１は、通知されたプログラムカウンタ値をタイミング条件に決定する。
【００１３】
故障注入モジュール１１は、プロセッサ１内に展開された際に（又は、デバッグ機能２１からの要求に応じて）、連携情報をデバッグ機能２１に提供する。これにより、デバッグ機能２１は、故障注入モジュール１１と連携する連携動作を開始する。連携情報は、連携メニューオブジェクトを含む。デバッグ機能２１は、ユーザからの指示に応じて、連携メニューオブジェクトを画面上に表示させる。連携メニューオブジェクトは、所定のウィンドウに重ねて表示させる。これにより、所定のウィンドウに関連して、故障注入タイミングを選択するようにユーザに促すことができる。そして、ユーザにより連携メニューオブジェクトにおいて所望の命令行（所望のソース行）が故障注入ポイントに選択されると、デバッグ機能２１は、デバッグ情報を参照して所望の命令行に対応したプログラムカウンタ値をタイミング情報として故障注入モジュール１１に通知する。
【００１４】
なお、デバッグ機能２１は、制御プログラム３０のデバッグに用いられた情報をデバッグ情報３２ａとして生成する。生成されたデバッグ情報３２ａは、コンパイラ（図示せず）がソースファイル３１をバイナリファイル３２にコンパイルする際に、コンパイラにより制御プログラム３０のバイナリファイル３２に付加される。デバッグ情報３２ａには、プログラムの各命令行ごとにプログラムカウンタ値が対応付けられた情報が含まれている。プログラムカウンタ値は、その命令行のメモリ６２上の配置位置を示すメモリアドレスである。プログラムカウンタ値は、その命令行の実行時にプログラムカウンタ（ＰＲレジスタ）に格納される。
【００１５】
また、デバッグ機能２１は、連携情報に応じた設定ウィンドウを画面上に表示させる。これにより、故障注入の動作を選択するようにユーザに促すことができる。ユーザにより所望の命令行に関連付けて故障注入の動作が選択されると、デバッグ機能２１は、その故障注入の動作情報を故障注入モジュール１１に通知する。すなわち、デバッグ機能２１は、連携情報に対する応答として、動作情報をタイミング情報に関連付けて故障注入モジュール１１に通知する。故障注入モジュール１１は、動作情報に基づいて、動作指定を決定する。
【００１６】
故障注入シナリオ編集機能１２は、タイミング条件及び動作指定に応じて、故障注入シナリオを生成する。故障注入シナリオ編集機能１２は、タイミング条件に応じて条件記述を生成して故障注入シナリオに書き込む。条件記述は、その行が条件を規定していることを示す記述と条件の内容を規定する記述である。また、故障注入シナリオ編集機能１２は、動作指定に応じて動作記述を生成して故障注入シナリオに書き込む。動作記述は、その行が動作を規定していることを示す記述と動作の内容を規定する記述である。
【００１７】
故障注入機能１３は、故障注入シナリオを故障注入機構６５用のデータに変換する。故障注入機能１３は、故障注入シナリオを機械語のバイナリデータに変換する。故障注入機能１３は、変換された故障注入シナリオのデータを故障注入機構（故障注入回路）６５に書き込む。故障注入機構６５は、ＭＣＵ６４における制御プログラム３０の実行と独立して故障注入シナリオを解釈し実行する機能を有する。そのため、ＭＣＵ６４における制御プログラム３０の実行が継続されている状態において故障注入機構６５は、故障注入シナリオに従って、ＭＣＵ６４への故障注入を実行する。故障注入機構６５は、条件記述で規定された条件が成立したことに応じて、動作記述で規定された動作（ＭＣＵ６４への故障注入動作）を行う。
【００１８】
故障ステータス取得機能１４は、故障注入の実行が終了したら、故障注入シナリオの実行結果を故障注入対象６０から取得する。例えば、故障ステータス取得機能１４は、故障注入の実行が終了したことを故障注入機構６５から通知されることで、実行結果を取得する。あるいは、故障ステータス取得機能１４は、所定の周期でＭＣＵ６４のステータスを監視することで、故障注入の実行が終了したことを認識し、実行結果を取得する。故障ステータス取得機能１４は、実行結果をデバッグ機能２１へ通知する。デバッグ機能２１は、実行結果を、トレースウィンドウ上に表示する。
【００１９】
次に、故障注入プログラム１０の動作について説明する。図２は、故障注入システム１００の動作を示すシーケンス図である。図３は、故障注入システム１００の動作により表示されるウェインドウの一例を示す図である。図３では、Ｃ言語のソースコードがソースウィンドウ７１上に表示される場合について例示的に示している。
【００２０】
デバッグ機能２１は、ユーザから入力部５０を介して受信したデバッガ起動コマンドに従って、デバッガ２０を起動させ（Ｓ１）、ソースウィンドウ７１（図３参照）を画面上に表示させる。デバッグ機能２１は、デバッグすべき内容について制御プログラム３０に問い合わせる。制御プログラム３０は、その問い合わせに応答して（Ｓ２）、ソースファイル３１をデバッグ機能２１に供給する。また、デバッグ情報３２ａが存在する場合、制御プログラム３０は、デバッグ情報３２ａをデバッグ機能２１に供給する。デバッグ機能２１は、ソースファイル３１、デバッグ情報３２ａを読み込む。また、制御プログラム３０は、バイナリファイル３２をＭＣＵ６４へ提供する（Ｓ３）。バイナリファイル３２は、ＭＣＵ６４にロードされる（Ｓ４）。
【００２１】
デバッグ機能２１は、ユーザから入力部５０を介して受信した制御プログラム起動コマンドをＭＣＵ６４に供給する（Ｓ５）。ＭＣＵ６４は、制御プログラム起動コマンドに応じて、制御プログラム３０の実行を開始する。ＭＣＵ６４は、制御プログラム停止コマンド又は制御プログラム終了コマンドを受けるまで、制御プログラム３０の実行を継続する（Ｓ６）。なお、ＭＣＵ６４は、制御プログラム停止コマンドを受けたら制御プログラム３０の実行を一時的に停止するが、その後に制御プログラム再開コマンドを受けたら制御プログラム３０の実行を再開する。
【００２２】
デバッグ機能２１は、ユーザから入力部５０を介して受信した制御プログラム停止コマンドに応じて、制御プログラム３０の実行を一時的に停止させる。デバッグ機能２１は、メモリ６２／レジスタ６３にアクセスしてメモリ６２／レジスタ６３の値を画面上に表示させる。ユーザは、表示されたメモリ６２／レジスタ６３の値に応じて、エディタ（図示せず）を用いてデバッグを行う。そして、デバッグ機能２１は、ユーザから入力部５０を介して受信した制御プログラム再開コマンドに応じて、制御プログラム３０の実行を再開させる。このデバッグ結果に応じて、デバッグ機能２１は、デバッグ情報３２ａを生成又は更新する（Ｓ７，Ｓ８）。また、デバッグ機能２１は、トレース情報などを取得する。なお、デバッグによりソースファイル３１の内容が変更された場合、Ｓ３〜Ｓ６の処理が再度行われてもよい。
【００２３】
デバッグ機能２１は、タイミング情報を特定する（Ｓ９）。このとき、デバッグ機能２１は、デバッグ情報３２ａを参照してタイミング情報を特定する。なお、連携メニューオブジェクト７８は、故障注入モジュール１１がプロセッサ１内に展開された際に（又は、デバッグ機能２１からの要求に応じて）、故障注入モジュール１１からデバッグ機能２１に予め提供されている。
【００２４】
ソースコードが表示されたソースウィンドウ７１上で、ユーザが所望の命令行を選択し、所定の操作を行うと、デバッグ機能２１は、連携メニューオブジェクト７８を表示させる。例えば、ユーザがマウスをドラッグして命令行を選択した状態からマウスを右クリックすると、連携メニューオブジェクト７８が表示される。図３では、「ＢＡＳＥＧＰＩＯ（０ｘ００４）＝（ｕｎｓｉｇｎｅｄ  ｉｎｔ）ｃ；」の命令行が選択されハイライト表示された状態を示している。
【００２５】
連携メニューオブジェクト７８において、「故障注入」→「ポイント選択」がユーザにより選択されたら、デバッグ機能２１は、画面上に故障ポイント選択・故障設定ウィンドウ７６を表示する。故障ポイント選択・故障設定ウィンドウ７６において故障タイプがユーザにより選択されると、デバッグ機能２１は、デバッグ情報３２ａを参照して、選択された命令行に対応したプログラムカウンタ値を特定する。
【００２６】
デバッグ機能２１は、プログラムカウンタ値を故障注入モジュール１１用のデータに変換してタイミング情報として故障注入モジュール１１に通知する。また、デバッグ機能２１は、選択された故障注入の動作情報を故障注入モジュール１１用のデータに変換して故障注入モジュール１１に通知する。
【００２７】
故障注入モジュール１１は、デバッグ機能２１から通知された情報を元に故障注入シナリオ編集機能１２でシナリオの編集を行う。故障注入モジュール１１は、タイミング情報に基づいて、タイミング条件を決定する（Ｓ１０）。また、故障注入モジュール１１は、動作情報に基づいて、故障注入の動作指定を決定する。
【００２８】
また、故障注入シナリオ編集機能１２は、タイミング条件及び動作指定に応じて、故障注入シナリオ７７ｃを生成する（Ｓ１１）。故障注入シナリオ編集機能１２は、タイミング条件に応じて条件記述７７ａを生成して故障注入シナリオ７７ｃに書き込む。生成された故障注入シナリオ７７ｃは、故障シナリオ編集ウィンドウ７７に表示される。図３の条件記述７７ａは、「Ｃ」が条件を規定し、「ＰＣ：＝＝ｓａｍｐｌｅ．ｃ：ｌｉｎｅ３」が条件の内容を規定している。この記述では、プログラムカウンタに格納されるプログラムカウンタ値（ＰＣ）がソースファイル「ｓａｍｐｌｅ．ｃ」の３行目の命令行に割り当てられたプログラムカウンタ値になるタイミングで故障を注入することを示している。なお、ソースウィンドウ７１上でソースコードが編集されて行番号が変わった場合、その旨の通知をデバッグ機能２１から受けて、故障注入シナリオ編集機能１２は、条件記述７７ａにおける行番号を更新する。
【００２９】
また、故障注入シナリオ編集機能１２は、動作指定に応じて動作記述７７ｂを生成して故障注入シナリオ７７ｃに書き込む。図３の動作記述７７ｂは、「Ａ」が動作を規定し、「ＦＡ＿ＳＲＣ＿ＲＥＧ＿Ａ：一時故障  ０：０ｘ１１１１」が動作の内容を規定している。この記述では、レジスタ「ＲＥＧ＿Ａ」の値を故障させることを示している。なお、故障注入シナリオ編集機能１２は、ユーザからの指示に応じたコマンドを受けて、故障シナリオ編集ウィンドウ７７上で故障注入シナリオ７７ｃの書き換え等の編集を行ってもよい。
【００３０】
また、故障注入シナリオ７７ｃでは、条件記述７７ａ及び動作記述７７ｂの組が複数組記載されてもよい。例えば、条件記述７７ａはすぐ下の動作記述７７ｂに対応する。あるいは、複数の条件記述７７ａを連続して複数行に記述することもできる。２行目以降の行頭にＡＮＤ条件またはＯＲ条件であることを示す記述が追加され、複数行の条件記述７７ａで示された条件式が成立した場合に、そのすぐ下の動作記述７７ｂに応じた動作が行われる。
【００３１】
故障注入機能１３は、故障注入シナリオ７７ｃを故障注入機構６５用のデータに変換し、変換された故障注入シナリオ７７ｃを故障注入機構（故障注入回路）６５に書き込む（Ｓ１２）。故障注入機能１３は、故障シナリオ編集ウィンドウ７７上の実行ボタン７７ｅが押されたことに応じて、故障注入シナリオ７７ｃを変換して故障注入機構６５に書き込む。
【００３２】
故障注入機構６５は、故障注入シナリオ７７ｃのデータに従って、故障注入を実行する（Ｓ１３）。すなわち、制御プログラム３０の実行がＭＣＵ６４で継続的に行われている状態において、故障注入機構６５は、故障注入タイミング（図３に示す「ＰＣ：＝＝ｓａｍｐｌｅ．ｃ：ｌｉｎｅ３」の条件が成立したタイミング）でＭＣＵ６４にアクセスして故障注入を行う。これにより、ＭＣＵ６４では、レジスタ６３の値が不適切な値にされたり、メモリ６２の値が不適切な値にされたりすることで、故障が注入される（Ｓ１４）。
【００３３】
故障ステータス取得機能１４は、故障注入シナリオ７７ｃの実行結果を故障注入対象６０から取得する（Ｓ１５，Ｓ１６）。故障ステータス取得機能１４は、実行結果をデバッグ機能２１へ通知する。デバッグ機能２１は、実行結果を画面上に表示する。また、デバッグ機能２１は、ユーザから入力部５０を介して受信した制御プログラム停止コマンドに応じて、制御プログラム３０の実行を一時的に停止させる。デバッグ機能２１は、ユーザから入力部５０を介して受信した確認コマンドに従って、メモリ６２／レジスタ６３にアクセスしてメモリ６２／レジスタ６３の値を画面上に表示させる（Ｓ１７，Ｓ１５）。デバッグ機能２１は、ユーザから入力部５０を介して受信した制御プログラム再開コマンドに応じて、制御プログラム３０の実行を再開させる。これにより、ユーザは、実行結果と合わせてメモリ６２／レジスタ６３の値を参照できるので、故障の状態を詳細に確認できる。
【００３４】
以上のように、第１の実施形態では、故障注入プログラム１０において、故障注入モジュール１１が、デバッグ機能２１と連携して故障注入条件及び故障注入動作を決定する。例えば、故障注入モジュール１１は、連携情報をデバッグ機能２１に提供する。デバッグ機能２１は、連携情報に応じて、タイミング情報及び動作情報を特定して故障注入モジュール１１に通知する。すなわち、故障注入モジュール１１は、タイミング情報を条件関連情報として通知され、動作情報を動作関連情報として通知される。故障注入モジュール１１は、通知された条件関連情報及び動作関連情報に基づいて、故障注入条件及び故障注入動作を決定する。そして、故障注入モジュール１１は、決定された故障注入条件及び故障注入動作に応じて、故障注入対象６０に対する故障注入の手順を規定する故障注入シナリオ７７ｃを生成する。これにより、デバッグ機能２１と連携して故障注入タイミング（条件）を容易に設定でき、制御プログラム３０を止めることなく故障注入できるので、故障注入におけるユーザの負担を軽減できる。
【００３５】
また、第１の実施形態では、デバッグ機能２１と連携して故障注入タイミング（条件）を容易に設定でき、制御プログラム３０を止めることなく故障注入できるので、制御プログラム３０の実行中であっても、故障の発生状況などわかりやすく表示できる。これにより、故障注入した後のプログラムの挙動（例えば、適正な故障回避動作が実行されたか否か）を容易に確認できるので、故障注入と制御プログラム３０のデバッグとをシームレスに行うことができる。
【００３６】
また、第１の実施形態では、故障注入モジュール１１が、連携情報をデバッグ機能２１に提供する。デバッグ機能２１は、ユーザからの指示に応じて、連携情報に応じた連携メニューオブジェクトを画面上に表示させる。これにより、故障注入タイミングを選択するようにユーザに促すことができる。そして、連携メニューオブジェクトにおいて所望の命令行がユーザにより故障注入ポイントに選択されると、デバッグ機能２１は、デバッグ情報３２ａを参照して所望の命令行に対応したプログラムカウンタ値をタイミング情報として特定して故障注入モジュール１１に通知する。故障注入モジュール１１は、通知されたタイミング情報に基づいて、故障注入条件を決定する。これにより、故障注入モジュール１１は、デバッグ機能２１と連携して故障注入条件を決定することができる。
【００３７】
また、第１の実施形態では、故障注入プログラム１０において、故障注入モジュール１１が、故障注入すべきタイミングに関するタイミング情報をデバッグ機能２１から取得する。故障注入モジュール１１が、取得されたタイミング情報に基づいて、タイミング条件を決定する。これにより、故障注入モジュール１１は、デバッグ機能２１と連携して故障注入タイミング（条件）を容易に設定できる。
【００３８】
なお、故障注入モジュール１１は、デバッグ機能を利用すると取得しやすい情報をデバッグ機能２１に問い合わせしてもよい。例えば、故障注入システム１００は、Ｓ９の動作の前に、次の動作を行えばよい。
【００３９】
デバッグ機能２１は、デバッグが完了したら、デバッグされたソースファイル３１を故障注入モジュール１１へ提供する。故障注入モジュール１１は、提供されたソースファイル３１のソースコードを解析して、故障注入を行うべき適切なポイント（ソースコード上の位置）を選択する。故障注入モジュール１１は、ソースコードを構文解析して、特定されたデータ構造から故障回避動作についてクリティカルな命令行を特定し、故障注入ポイントに選択する。故障注入モジュール１１は、故障回避動作を実現すべき複数の命令行のうち最初に実行される命令行（変数に初期値を代入する命令行など）をクリティカルな命令行として特定してもよい。そして、故障注入モジュール１１は、選択されたポイントに対応した情報（プログラムカウンタ値）をデバッグ機能２１に問い合わせる。
【００４０】
この場合、Ｓ９において、デバッグ機能２１は、故障注入モジュール１１からの問い合わせに応答してデバッグ情報３２ａを参照し、タイミング情報を故障注入モジュール１１に通知する。また、デバッグ機能２１は、動作情報も故障注入モジュール１１に通知する。以下、Ｓ１０以降の動作を同様に行う。
【００４１】
このように、故障注入ポイントの選択をユーザに代わって故障注入モジュール１１が行う。そして、故障注入モジュール１１は、解析して選択されたポイントに関するタイミング情報をデバッグ機能２１に問い合わせてデバッグ機能２１から取得する。これにより、ユーザとのインタラクティブな動作を行わずに、故障注入タイミングを選択できる。したがって、故障注入におけるユーザの負担をさらに軽減できる。
【００４２】
あるいは、図１のＭＣＵ６４は故障注入対象６０に含まれているが、故障注入対象６０から独立してもよい。この場合、故障注入対象６０とＭＣＵ６４とが制御線で接続されており、故障注入機構６５がＭＣＵ６４にアクセス可能であれば、故障注入機構６５からＭＣＵ６４に故障を注入できる。
【００４３】
あるいは、デバック機能２１は、故障注入プログラム１０に含めてもよい。この場合、故障注入プログラム１０が起動されれば、故障注入プログラム１０のウィンドウ上にデバッグ機能ウィンドウおよび故障シナリオ編集ウィンドウ７７を表示させることができる。このように、デバッグ機能２１及び故障注入モジュール１１を１つのプログラムに集約させるので、故障注入モジュール１１をさらに容易にデバッグ機能２１と連携させることができる。
【００４４】
あるいは、故障注入するタイミング自体を決定する代わりに、タイマカウントを開始するタイミングを故障注入するタイミングとして決定してもよい。図４は、タイマカウントを開始するタイミングを決定する際に用いられる連携メニューオブジェクトの選択状態を示す。故障注入タイミングの特定（Ｓ９）において、ユーザにより連携メニューオブジェクト７８で「タイマ起動」→「タイマ０」が選択されたら（図４（ａ））、デバッグ機能２１は、所望の命令行を、タイマカウントを開始するタイミングとして認識する。すなわち、デバッグ機能２１は、所望の命令行の実行後にタイマ０で所定期間カウントした後のタイミングを故障注入するタイミングとして認識する。デバッグ機能２１は、所望の命令行がタイマのカウント開始タイミングに選択されたことに応じて、デバッグ情報３２ａを参照して、所望の命令行に対応したプログラムカウンタ値を特定する。
【００４５】
ここで、「タイマ起動」で選択されるべき複数の候補「タイマ０」〜「タイマ３」には、互いに異なるタイマ期間を設定しておくことができる。例えば「タイマ０」に５ミリ秒間、「タイマ１」に１０ミリ秒間、「タイマ２」に１５ミリ秒間、「タイマ３」に２０ミリ秒間を設定しておき、これらの対応関係をタイマ期間情報としてプロセッサ１内に予め保存しておくことができる。
【００４６】
デバッグ機能２１は、プログラムカウンタ値を故障注入モジュール１１用のデータに変換してタイミング情報（条件関連情報）として故障注入モジュール１１に通知する。また、デバッグ機能２１は、カウントすべきタイマの情報を故障注入モジュール１１用のデータに変換してタイマ情報（動作関連情報）として故障注入モジュール１１に通知する。
【００４７】
以下、タイミング条件にプログラムカウンタ値を用いた場合のＳ１０〜Ｓ１２の動作について詳細に説明する。故障注入モジュール１１は、プログラムカウンタ値をタイミング条件に決定する（Ｓ１０）。また、故障注入モジュール１１は、タイマ情報に基づいて、タイマ動作を指定する動作指定を決定する。
【００４８】
図４（ｂ）に示すように、故障注入シナリオ編集機能１２は、タイミング条件（プログラムカウンタ値に関する条件）に応じて条件記述７７ａを、および、動作指定に応じて動作記述７７ｂ１を生成して故障注入シナリオ７７ｃに書き込む（Ｓ１１，Ｓ１２）。動作記述７７ｂ１は、「Ａ」が動作を規定し、「タイマ０：スタート」が動作の内容を規定している。この記述では、タイマ０のカウントをスタートさせて所定期間（５ミリ秒間）カウントさせるタイマ動作を示している。
【００４９】
ここで、故障注入シナリオ７７ｃにおいて、動作記述７７ｂ１のすぐ下に第１の実施形態と同様な動作記述７７ｂを追加すれば、タイミング条件が成立してからｎ秒後（ｎは任意の正の数）に故障を発生させたいような場合に利用できる。例えば、プログラムカウンタ値ＰＣ＝０ｘ１０００の実行を開始してから５ｍｓ後に故障注入する場合に利用できる。この場合、故障注入機能１３は、タイマ期間情報を参照してタイマカウントすべき期間を特定でき、タイマ起動後にタイマ条件で５ｍｓを監視する。
【００５０】
このように、故障注入するタイミングに対してタイマカウントを開始するタイミングを決定して条件記述に含めるとともにタイマ動作を決定して動作記述に含めて、故障注入シナリオ７７ｃを生成することができる。これにより、故障注入モジュール１１は、デバッグ機能２１と連携して故障注入タイミングを複雑な条件（タイマ条件＝タイミング条件＋タイマ動作）で設定できる。
【００５１】
あるいは、故障注入するポイントをＣ言語のソースウィンドウ７１から決定する代わりに、故障注入するポイントを逆アセンブルウィンドウ７１’から決定してもよい。デバッグ機能２１は、デバッガ２０が起動された際に、ソースファイル３１をバイナリファイル３２にコンパイルした後のバイナリファイル３２を取得する（図２のＳ３から延びた破線矢印参照）。デバッグ機能２１は、バイナリファイル３２を逆アセンブリして、ソースウィンドウ７１上のＣ言語のソースコードの各行に対して、対応する行間にアセンブラ言語の記述を表示する。すなわち、デバッグ機能２１は、逆アセンブルウィンドウ７１’上に、Ｃ言語のソースコード及びアセンブラ言語の記述を混在表示させる。
【００５２】
なお、本明細書では、Ｃ言語のソースコード及びアセンブラ言語の記述を混在表示させたものを逆アセンブルウィンドウ７１’と呼んで、アセンブラ言語の記述を表示していない状態のソースウィンドウ７１と区別することがある。また、ソースウィンドウ７１を、逆アセンブルウィンドウ７１’と区別するために、Ｃソースウィンドウ７１と呼ぶこともある。
【００５３】
逆アセンブルウィンドウ７１’上でユーザがアセンブラ言語の記述における所望の命令行を選択し、所定の操作を行うと、デバッグ機能２１は、連携メニューオブジェクト７８を表示させる。例えば、「ＢＡＳＥＧＰＩＯ（０ｘ００４）＝（ｕｎｓｉｎｇｎｅｄ  ｉｎｔ）ｃ；」の命令行に対応したアセンブラ言語の記述「０００００１ｄａ：ｆ２４１  ０３０４  ｍｏｖｗ  ｒ３，  ＃４１００」の命令行が選択され画面上でハイライト表示される。この記述において、「ｒ３」は、レジスタ番地を示し、「＃４１００」は、メモリアドレスを示している。これ以降の動作は第１の実施形態と同様である。
【００５４】
このように、故障注入モジュール１１が逆アセンブルウィンドウ７１’（図６参照）と連携してタイミング条件を決定することができる。これにより、命令行の実行に使用されるレジスタ番地やメモリアドレスを確認しながら、タイミング条件を決定できるので、タイミング条件を正確に決定することができる。
【００５５】
あるいは、故障注入シナリオ７７ｃの編集において、動作記述７７ｂに関連した形で条件記述７７ａが編集される代わりに、動作記述７７ｂと独立した形で条件記述７７ａが編集されてもよい。この場合、故障注入シナリオ編集機能１２は、動作記述７７ｂと独立した形で条件記述７７ａを編集することができる。これにより、故障注入モジュール１１は、故障注入シナリオ７７ｃを編集する際の自由度を容易に向上できる。
【００５６】
例えば、Ｃ言語のソースコードからタイミング条件（プログラムカウンタ値に関する条件）を生成してもよい。デバッグ機能２１は、ソースウィンドウ７１（又は逆アセンブルウィンドウ）に重ねて連携メニューオブジェクト７８を表示させる。そして、所望の命令行が選択された状態で連携メニューオブジェクト７８において、図５に示すように「注入条件」→「ＰＣ」が選択されたら、デバッグ機能２１は、所望の命令行に対応したプログラムカウンタ値を故障タイミングとして故障注入モジュール１１に通知する。これにより、故障注入モジュール１１は、プログラムカウンタ値をタイミング条件に決定する。そして、故障注入シナリオ編集機能１２は、単独で条件記述７７ａを生成して故障注入シナリオ７７ｃに書き込む。
【００５７】
あるいは、故障注入システム１００は、故障注入モジュール１１及びデバッグ機能２１の間のインターフェース機能として、故障シナリオ編集ウィンドウ７７からデバッグ機能２１の各ウィンドウ７１〜７４へジャンプする機能を有していてもよい。これにより、故障注入シナリオ７７ｃで規定された故障注入タイミングが適正なものであるか確認することができる。
【００５８】
例えば、図６に示すように、故障注入モジュール１１は、故障シナリオ編集ウィンドウ７７に重ねて連携メニューオブジェクト８１を表示させる。カーソルが所定の条件記述上に位置した状態でユーザにより連携メニューオブジェクト８１において「ソースウィンドウ」が選択されたら、故障注入モジュール１１は、条件記述に対応したタイミング情報をデバッグ機能２１に通知する。デバッグ機能２１は、デバッグ情報３２ａを参照して、タイミング情報（プログラムカウンタ値）に応じたソースコード上の命令行を特定する。これに応じて、故障注入モジュール１１は、カーソルをソースウィンドウ７１にジャンプさせて、デバッグ機能２１は、ソースウィンドウ７１上で故障注入シナリオ７７ｃに関連した命令行をハイライト表示させる。
【００５９】
あるいは、カーソルが所定の条件記述上に位置した状態でユーザにより連携メニューオブジェクト８１において「逆ＡＳＭウィンドウ」が選択されたら、故障注入モジュール１１は、条件記述に対応したタイミング情報をデバッグ機能２１に通知する。デバッグ機能２１は、デバッグ情報３２ａを参照して、タイミング情報（プログラムカウンタ値）に応じたソースコード上の命令行を特定する。これに応じて、故障注入モジュール１１は、カーソルを逆アセンブルウィンドウ７１’にジャンプさせて、デバッグ機能２１は、逆アセンブルウィンドウ７１’上で故障注入シナリオ７７ｃに関連した命令行をハイライト表示させる。
【００６０】
あるいは、デバッグ機能２１は、故障注入箇所及び故障発生個所がそれぞれ識別できる形態で故障注入シナリオ７７ｃの実行結果を画面上に表示してもよい。これにより、故障の発生状況などをわかりやすく表示でき、故障注入箇所及び故障発生個所の関連を容易に把握できる。
【００６１】
例えば、図７に示すように、ソースコード上に故障のステータス（故障注入シナリオ７７ｃの実行結果）を表示してもよい。デバッグ機能２１は、故障注入による故障の注入タイミング／発生タイミングなどを逆アセンブルウィンドウ７１’上に表示できる。デバッグ機能２１は、故障の注入タイミングを「注」で示すとともに、注入回数（３回）を示す。また、デバッグ機能２１は、故障注入に応じた故障の発生タイミングを「発」で示すとともに、発生回数（２回）を示す。
【００６２】
（第２の実施形態）
次に、第２の実施形態にかかる故障注入プログラム１０について説明する。以下では、第１の実施形態と異なる部分を中心に説明する。第２の実施形態では、故障注入を発生させる変数値を決定する。
【００６３】
故障注入モジュール１１は、故障注入条件として、故障注入を発生させる発生条件を決定する。発生条件は、故障注入を発生させるべき変数値（例えば、レジスタ番地及び／又はメモリアドレス）を含む。具体的には、故障注入プログラム１０の動作が、図８及び図９に示すように次の点で第１の実施形態と異なる。図８は、故障注入システム１００の動作を示すシーケンス図である。図９は、故障注入システム１００の動作を示す図である。故障注入システム１００は、Ｓ９〜Ｓ１１（図２参照）の動作に代えて、図８に示すＳ３１〜Ｓ３３の動作を行う。
【００６４】
デバッグ機能２１は、変数値情報を特定する（Ｓ３１）。変数値情報は、故障注入を発生させるべき変数値に関する情報である。例えば、ソースコードが表示されたソースウィンドウ７１上で、ユーザが所望の命令行における変数を選択し、所定の操作を行うと、デバッグ機能２１は、連携メニューオブジェクト７８を表示させる。ユーザがマウスをドラッグして命令行を選択した状態からマウスを右クリックすると、連携メニューオブジェクト７８が表示される。図９では、「ｉｆ（ｔｔ＜２）ＢＡＳＥＳＩＯ０（０ｘ００４）＝（ｕｎｓｉｇｎｅｄ  ｃｈａｒ）ｃ；」の命令行における変数「ｃ」が選択されハイライト表示された状態を示している。これに応じて、デバッグ機能２１は、変数「ｃ」に対応した変数値（レジスタ番地及び／又はメモリアドレス）を特定する。
【００６５】
デバッグ機能２１は、デバッグ情報３２ａなどから、変数の割り当て先（メモリアドレス及び／又はレジスタ番地）を抽出する。デバッグ機能２１は、変数の割当先がメモリである場合、メモリのサイズとメモリアドレスとを抽出し、変数の割当先がレジスタである場合、レジスタ番地を抽出する。あるいは、デバッグ機能２１は、変数がローカル変数である場合、生存区間のプログラムカウンタ値（プログラムカウンタに格納されるべきメモリアドレス）を抽出する。
【００６６】
ユーザにより連携メニューオブジェクト７８において「故障注入」→「ポイント選択」が選択されたら、デバッグ機能２１は、画面上に故障ポイント選択・故障設定ウィンドウ７６を表示する。故障ポイント選択・故障設定ウィンドウ７６において故障タイプがユーザにより選択されると、デバッグ機能２１は、レジスタ番地及び／又はメモリアドレスを特定する。
【００６７】
デバッグ機能２１は、レジスタ番地及び／又はメモリアドレスを故障注入モジュール１１用のデータに変換して変数値情報（条件関連情報）として故障注入モジュール１１に通知する。また、デバッグ機能２１は、選択された故障注入の動作情報（動作関連情報）を故障注入モジュール１１用のデータに変換して故障注入モジュール１１に通知する。
【００６８】
故障注入モジュール１１は、デバッグ機能２１から通知された情報を元に故障注入シナリオ編集機能１２でシナリオの編集を行う。例えば、故障注入モジュール１１は、変数値情報に基づいて、レジスタ番地及び／又はメモリアドレスを発生条件に決定し、動作情報に基づいて、故障注入の動作を指定する動作指定を決定する（Ｓ３２）。
【００６９】
故障注入シナリオ編集機能１２は、発生条件及び動作指定に応じて、故障注入シナリオ７７ｃを生成する（Ｓ３３）。故障注入シナリオ編集機能１２は、発生条件に応じて条件記述７７ａを生成して故障注入シナリオ７７ｃに書き込む。図９に示す条件記述７７ａは、「Ｃ」が条件を規定し、「ＦＣ＿ＭＥＭＯＲＹ８：Ｖａｌｕｅ：０ｘ４００００  ：  ０ｘＦＦ：＝＝：０ｘＥ」が条件の内容を規定している。この記述では、メモリアドレスが「０ｘ４００００」になったポイントで故障注入することを示している。
【００７０】
なお、図９では変数の割当先がメモリである場合の条件記述を例示している。変数の割当先がレジスタである場合、レジスタ番地＋レジスタ値の条件で故障注入ポイントを規定してもよいし、レジスタ番地＋読み込み動作の条件で故障注入ポイントを規定してもよいし、レジスタ番地＋書き込み動作の条件で故障注入ポイントを指定してもよいし、レジスタ番地＋アクセス動作の条件で故障注入ポイントを規定してもよい。
【００７１】
また、故障注入シナリオ編集機能１２は、決定された動作指定に応じて動作記述７７ｂを生成して故障注入シナリオ７７ｃに書き込む。図９に示す動作記述７７ｂは、「Ａ」が動作を規定し、「ＦＡ＿ＳＲＣ＿ＲＥＧ＿Ａ：一時故障  ０：０ｘ１１１」が動作の内容を規定している。この記述では、レジスタ「ＲＥＧ＿Ａ」の値を故障させることを示している。
【００７２】
なお、故障注入シナリオ編集機能１２は、ユーザからの指示に応じたコマンドを受けて、故障シナリオ編集ウィンドウ７７上で入力ウィンドウ７９を介して故障注入シナリオ７７ｃの書き換え等の編集を行ってもよい。入力ウィンドウ７９には、故障シナリオ編集ウィンドウ７７と同じ内容が表示され、書き換えられた部分が故障シナリオ編集ウィンドウ７７上でも同期して変更される。なお、条件タイプでは、Ｒｅａｄ／Ｗｒｉｔｅ／Ａｃｃｅｓｓ／Ｖａｌｕｅから選択可能であるが、発生条件に対応した「Ｖａｌｕｅ」が選択されている。
【００７３】
以上のように、第２の実施形態では、故障注入モジュール１１が、デバッグ機能２１と連携して、故障注入を発生させる変数値を指定する発生条件を決定する。発生条件は、制御プログラム３０の実行時における故障注入を発生させるべきレジスタ番地及び／又はメモリアドレスを含む。これにより、故障注入モジュール１１は、デバッグ機能２１と連携して発生条件を容易に設定できる。
【００７４】
なお、故障注入モジュール１１は、第１実施形態と同様に、デバッグ機能を利用すると取得しやすい情報（レジスタ番地及び／又はメモリアドレス）をＳ３１の動作の前にデバッグ機能２１に問い合わせることもできる。故障注入を発生すべき変数値の選択をユーザに代わって故障注入モジュール１１が行う。これにより、ユーザとのインタラクティブな動作を行わずに、故障注入を発生すべき変数値を選択できる。したがって、故障注入におけるユーザの負担をさらに軽減できる。
【００７５】
あるいは、故障注入するポイントをＣ言語のソースウィンドウ７１から決定する代わりに、故障注入するポイントを逆アセンブルウィンドウ７１’から決定してもよい。デバッグ機能２１は、デバッガ２０が起動された際に、ソースファイル３１をバイナリファイル３２にコンパイルした後のバイナリファイル３２を取得する（図８のＳ３から延びた破線矢印参照）。デバッグ機能２１は、バイナリファイル３２を逆アセンブリして、ソースウィンドウ７１上のＣ言語のソースコードの各行に対して、対応する行間にアセンブラ言語の記述を表示する。
【００７６】
逆アセンブルウィンドウ７１’上でユーザがアセンブラ言語の記述における所望の命令行を選択し、所定の操作を行うと、デバッグ機能２１は、連携メニューオブジェクト７８を表示させる。例えば、「ＢＡＳＥＧＰＩＯ（０ｘ００４）＝（ｕｎｓｉｎｇｎｅｄ  ｉｎｔ）ｃ；」の命令行に対応したアセンブラ言語の記述「０００００１ｄ８：７１ｆｂ  ｓｔｒｂ  ｒ３  ［ｒ７，＃７］」の命令行の一部「ｒ７」が選択されハイライト表示される。この記述において、「ｒ３」、「ｒ７」は、レジスタ番地を示し、「＃７」は、メモリアドレスを示している。これに応じて、デバッグ機能２１は、レジスタ番地及び／又はメモリアドレスを特定する。これ以降の動作は第２の実施形態と同様である。
【００７７】
あるいは、故障注入するポイントをメモリダンプウィンドウ７２から決定してもよい。Ｓ３１において、デバッグ機能２１は、メモリダンプウィンドウ７２上にメモリ６２からダンプされた内容を表示する。メモリダンプウィンドウ７２上でユーザが所望のメモリ値を選択する。これに応じて、デバッグ機能２１は、メモリ値を特定する。これ以降の動作は第２の実施形態と同様である。
【００７８】
あるいは、故障注入するポイントをレジスタウィンドウ７３から決定してもよい。Ｓ３１において、デバッグ機能２１は、レジスタウィンドウ７３上にレジスタ６３から取得された内容を表示する。レジスタウィンドウ７３上でユーザが所望のレジスタ番地及びレジスタ値が選択される。これに応じて、デバッグ機能２１は、レジスタ番地を特定する。これ以降の動作は第２の実施形態と同様である。
【００７９】
あるいは、故障注入するポイントをウォッチウィンドウ７４から決定してもよい。Ｓ３１において、デバッグ機能２１は、Ｃソースウィンドウ７１上にソースファイル３１のソースコードを表示する。デバッグ機能２１は、ソースウィンドウ７１上で所定範囲のソースコードが選択されたら、所定範囲のソースコードに含まれる変数、その値、及び変数型を、ウォッチウィンドウ７４上に表示する。ウォッチウィンドウ７４上でユーザが複数の変数のうち所定の変数を選択する。これに応じて、デバッグ機能２１は、変数を特定する。これ以降の動作は第２の実施形態と同様である。
【００８０】
このように、故障注入モジュール１１が各ウィンドウと連携して発生条件を決定することができる。これにより、命令行の実行に使用される変数及びその属性を確認しながら、発生条件を決定できるので、発生条件を正確に決定することができる。
【００８１】
あるいは、故障注入シナリオ７７ｃの編集において、動作記述７７ｂに関連した形で条件記述７７ａが編集される代わりに、動作記述７７ｂと独立した形で条件記述７７ａが編集されてもよい。この場合、故障注入シナリオ編集機能１２は、動作記述７７ｂと独立した形で条件記述７７ａを編集することができる。これにより、故障注入モジュール１１は、故障注入シナリオ７７ｃを編集する際の自由度を容易に向上できる。
【００８２】
例えば、Ｃ言語のソースコードからレジスタ条件（レジスタ番地＋値／読み込み／書き込み／アクセスの条件）を生成してもよい。所望の命令行が選択された状態で連携メニューオブジェクト７８において、図１０（ａ）に示すように「注入条件」→「レジスタ」→「アクセス」が選択されたら、デバッグ機能２１は、変数値「レジスタ番地＋アクセス動作」を変数値情報として故障注入モジュール１１に通知する。これにより、故障注入モジュール１１は、変数値情報に応じて発生条件を決定する。そして、故障注入シナリオ編集機能１２は、単独で条件記述７７ａを生成して故障注入シナリオ７７ｃに書き込む。
【００８３】
あるいは、Ｃ言語のソースコードからメモリ条件（メモリアドレス＋値／読み込み／書き込み／アクセスの条件）を生成してもよい。所望の命令行が選択された状態で連携メニューオブジェクト７８において、図１０（ｂ）に示すように「注入条件」→「メモリ」→「読み込み」が選択されたら、デバッグ機能２１は、変数値「メモリアドレス＋読み込み動作」を変数値情報として故障注入モジュール１１に通知する。これにより、故障注入モジュール１１は、変数値情報に応じて発生条件を決定する。そして、故障注入シナリオ編集機能１２は、単独で条件記述７７ａを生成して故障注入シナリオ７７ｃに書き込む。
【００８４】
あるいは、故障注入システム１００は、故障注入モジュール１１及びデバッグ機能２１の間のインターフェース機能として、故障シナリオ編集ウィンドウ７７からデバッグ機能２１の各ウィンドウ７１〜７４へジャンプする機能を有していてもよい。これにより、故障注入シナリオ７７ｃで規定された故障注入タイミングが適正なものであるか確認することができる。
【００８５】
例えば、カーソルが所定の条件記述上に位置した状態でユーザにより連携メニューオブジェクト８１において「メモリダンプウィンドウ」が選択されたら、故障注入モジュール１１は、条件記述に対応した変数情報をデバッグ機能２１に通知する。デバッグ機能２１は、デバッグ情報３２ａを参照して、変数情報（メモリアドレス）に応じたメモリ値を特定する。これに応じて、故障注入モジュール１１は、カーソルをメモリダンプウィンドウ７２（図示せず）にジャンプさせて、デバッグ機能２１は、メモリダンプウィンドウ７２上で故障注入シナリオ７７ｃに関連したメモリ値をハイライト表示させる。
【００８６】
あるいは、カーソルが所定の条件記述上に位置した状態でユーザにより連携メニューオブジェクト８１において「ウォッチウィンドウ」が選択されたら、故障注入モジュール１１は、条件記述に対応した変数情報をデバッグ機能２１に通知する。デバッグ機能２１は、デバッグ情報３２ａを参照して、変数情報（メモリアドレス）に応じた変数を特定する。これに応じて、故障注入モジュール１１は、カーソルをウォッチウィンドウ７４にジャンプさせて、デバッグ機能２１は、ウォッチウィンドウ７４上で故障注入シナリオ７７ｃに関連した変数をハイライト表示させる。
【００８７】
あるいは、カーソルが所定の条件記述上に位置した状態でユーザにより連携メニューオブジェクト８１において「レジスタウィンドウ」が選択されたら、故障注入モジュール１１は、条件記述に対応した変数情報をデバッグ機能２１に通知する。デバッグ機能２１は、デバッグ情報３２ａを参照して、変数情報（レジスタ番地）に応じたレジスタ番地及びレジスタ値を特定する。これに応じて、故障注入モジュール１１は、カーソルをレジスタウィンドウ７３にジャンプさせて、デバッグ機能２１は、レジスタウィンドウ７３上で故障注入シナリオ７７ｃに関連したレジスタ番地及びレジスタ値をハイライト表示させる。
【００８８】
あるいは、デバッグ機能２１は、故障注入箇所及び故障発生状態がそれぞれ識別できる形態で故障注入シナリオ７７ｃの実行結果を画面上に表示してもよい。これにより、故障の発生状況などをわかりやすく表示でき、故障注入箇所及び故障発生状態の関連を容易に把握できる。
【００８９】
例えば、図１１に示すように、メモリダンプウィンドウ７２上にメモリ値故障のステータス（故障注入シナリオ７７ｃの実行結果）を表示する。デバッグ機能２１は、プログラムカウンタ値、正常値、及び故障値を示すウィンドウ７２ａをメモリダンプウィンドウ７２上に重ねて又は隣接させて表示できる。これにより、故障注入により故障したメモリアドレス及びメモリ値を把握でき、どのように故障したか（どのビットが壊れたか）を確認することができる。また、注入／発生したタイミング（プログラムカウンタ値）、発生回数を確認できる。また、複数回発生している場合は、その履歴を確認することができる。
【００９０】
（第３の実施形態）
次に、第３の実施形態にかかる故障注入プログラム１０について説明する。以下では、第１の実施形態と異なる部分を中心に説明する。第３の実施形態では、条件記述７７ａと独立した形で動作記述７７ｂが編集される。
【００９１】
故障注入モジュール１１は、故障注入動作として、故障注入の動作を指定する動作指定を決定する。動作指定は、メモリ値を故障させることを含む。具体的には、故障注入プログラム１０の動作が、図１２及び図１３に示すように次の点で第１の実施形態と異なる。図１２は、故障注入システム１００の動作を示すシーケンス図である。図１３は、故障注入システム１００の動作を示す図である。故障注入システム１００は、Ｓ９〜Ｓ１１（図２参照）の動作に代えて、図１２に示すＳ５１〜Ｓ５３の動作を行う。
【００９２】
デバッグ機能２１は、動作情報を特定する（Ｓ５１）。例えば、ソースコードが表示されたソースウィンドウ７１上で、ユーザが所望の命令行における変数を選択し、所定の操作を行うと、デバッグ機能２１は、連携メニューオブジェクト７８を表示させる。ユーザがマウスをドラッグして命令行を選択した状態からマウスを右クリックすると、連携メニューオブジェクト７８が表示される。図１３では、「ＢＡＳＥＧＰＩＯ（０ｘ００４）＝（ｕｎｓｉｇｎｅｄ  ｉｎｔ）ｃ；」の命令行における変数「ｃ」が選択されハイライト表示される。これに応じて、デバッグ機能２１は、変数「ｃ」に対応したレジスタ番地及び／又はメモリアドレスを特定する。
【００９３】
デバッグ機能２１は、デバッグ情報３２ａなどから、変数の割り当て先（メモリアドレス及び／又はレジスタ番地）を抽出する。デバッグ機能２１は、変数の割当先がメモリである場合、メモリのサイズとアドレスとを抽出する。デバッグ機能２１は、変数の割当先がレジスタである場合、レジスタ番地を抽出する。デバッグ機能２１は、変数がローカル変数である場合、生存区間のプログラムカウンタ値を抽出する。
【００９４】
ユーザにより連携メニューオブジェクト７８において「故障注入」→「メモリ値」が選択されたら、デバッグ機能２１は、選択された故障注入の動作情報（動作関連情報）を故障注入モジュール１１に通知する。故障注入モジュール１１は、動作情報に基づいて、故障させるべきメモリアドレス及び故障させるべきメモリ値を動作指定として決定する（Ｓ５２）。
【００９５】
故障注入シナリオ編集機能１２は、動作指定に応じて、故障注入シナリオ７７ｃを生成する（Ｓ５３）。故障注入シナリオ編集機能１２は、決定された動作指定に応じて動作記述７７ｂを生成して故障注入シナリオ７７ｃに書き込む。図１３に示す動作記述７７ｂは、「Ａ」が動作を規定し、「ＦＡ＿ＭＥＭＯＲＹ８：一時故障  ０：０ｘ４０００：０ｘ１１１１」が動作の内容を規定している。この記述では、メモリアドレス「０ｘ４０００」のメモリ値を故障させることを示している。
【００９６】
以上のように、第３の実施形態では、故障注入モジュール１１が、デバッグ機能２１と連携して、故障注入の動作を指定する動作指定を決定する。動作指定は、制御プログラム３０の実行時におけるメモリ値を故障させることを含む。このとき、故障注入シナリオ編集機能１２は、条件記述７７ａと独立した形で動作記述７７ｂを編集することができる。これにより、故障注入モジュール１１は、故障注入シナリオ７７ｃを編集する際の自由度を容易に向上できる。
【００９７】
なお、故障注入シナリオ編集機能１２は、前述したように、動作記述７７ｂと独立した形で条件記述７７ａを編集することができる（図５参照）。これにより、動作記述を行う前に動作記述と独立した形で条件記述を故障注入シナリオ７７ｃに書き込んでおいた後、第３の実施形態と同様に条件記述と独立した形で動作記述を故障注入シナリオ７７ｃに書き込むことができる。この結果、故障注入シナリオ７７ｃにおける条件記述及び動作記述をそれぞれ独立に書き込みながら書き込んだ後の状態で互いに対応付けることができる。
【００９８】
あるいは、故障注入モジュール１１は、第１実施形態と同様に、デバッグ機能を利用すると取得しやすい情報をＳ５１の動作の前に、デバッグ機能２１に問い合わせしてもよい。故障注入の動作の選択をユーザに代わって故障注入モジュール１１が行う。これにより、ユーザとのインタラクティブな動作を行わずに、故障注入の動作を選択できる。したがって、故障注入におけるユーザの負担をさらに軽減できる。
【００９９】
あるいは、故障注入の動作をＣ言語のソースウィンドウ７１から決定する代わりに、故障注入の動作（レジスタ値の故障）を逆アセンブルウィンドウ７１’から決定してもよい。デバッグ機能２１は、デバッガ２０が起動された際に、ソースファイル３１をバイナリファイル３２にコンパイルした後のバイナリファイル３２を取得する（図１２のＳ３から延びた破線矢印参照）。デバッグ機能２１は、バイナリファイル３２を逆アセンブリして、ソースウィンドウ７１上のＣ言語のソースコードの各行に対して、対応する行間にアセンブラ言語の記述を表示する。すなわち、デバッグ機能２１は、逆アセンブルウィンドウ７１’上に、Ｃ言語のソースコード及びアセンブラ言語の記述を混在表示させる。
【０１００】
逆アセンブルウィンドウ７１’上でユーザが所望の命令行における変数を選択し、所定の操作を行うと、デバッグ機能２１は、連携メニューオブジェクト７８を表示させる。図１４（ａ）に示すように、ユーザにより連携メニューオブジェクト７８において「故障注入」→「レジスタ値」が選択されたら、デバッグ機能２１は、選択されたレジスタ番地のレジスタ値の故障を故障注入の動作として特定する。これ以降の動作は第３の実施形態と同様である。
【０１０１】
あるいは、逆アセンブルウィンドウ７１’から決定する故障注入の動作として、レジスタ値の故障に代えて、命令の読み値又は書き込み値の故障を決定してもよい。例えば、Ｓ５１において、逆アセンブルウィンドウ７１’上でユーザがアセンブラ言語の記述「０００００１ｄ４：  ａｆ００  ａｄｄ  ｒ７，  ｓｐ，  ＃０」の命令行における読み値「ｓｐ」を選択し、所定の操作を行うと、デバッグ機能２１は、連携メニューオブジェクト７８を表示させる。これに応じて、デバッグ機能２１は、選択された読み値「ｓｐ」に対応したレジスタ番地を特定する。
【０１０２】
デバッグ機能２１は、デバッグ情報３２ａなどから所定の読み値の割り当て先を抽出する。図１４（ｂ）に示すようにユーザにより連携メニューオブジェクト７８において「故障注入」→「命令」→「読み値Ａ」が選択されたら、デバッグ機能２１は、選択された読み値に対応したレジスタ番地のレジスタ値の故障が故障注入の動作に選択されたものと認識する。そして、デバッグ機能２１は、レジスタ番地のレジスタ値の故障が故障注入の動作に選択されたことに応じて、その故障注入の動作情報を故障注入モジュール１１に通知する。
【０１０３】
あるいは、故障注入の動作をＣ言語のソースウィンドウ７１から決定する代わりに、故障注入の動作をメモリダンプウィンドウ７２から決定してもよい。Ｓ５１において、デバッグ機能２１は、メモリダンプウィンドウ７２上にメモリ６２からダンプされた内容を表示する。メモリダンプウィンドウ７２上でユーザが所望のメモリ値を選択し、所定の操作を行うと、デバッグ機能２１は、連携メニューオブジェクト７８を表示させる。
【０１０４】
ユーザにより連携メニューオブジェクト７８において「故障注入」→「メモリ値」が選択されたら、デバッグ機能２１は、デバッグ情報３２ａ等を参照して、選択されたメモリ値のメモリアドレスを特定する。デバッグ機能２１は、そのメモリアドレスのメモリ値の故障を故障注入の動作として特定する。これ以降の動作は第３の実施形態と同様である。
【０１０５】
あるいは、故障注入の動作をレジスタウィンドウ７３から決定してもよい。Ｓ５１において、デバッグ機能２１は、レジスタウィンドウ７３上にレジスタ６３から取得された内容を表示する。レジスタウィンドウ７３上でユーザが所望のレジスタ値を選択し、所定の操作を行うと、デバッグ機能２１は、連携メニューオブジェクト７８を表示させる。
【０１０６】
デバッグ機能２１は、レジスタ値が選択された状態で、マウスが右クリックされたことなどに応じてレジスタウィンドウ７３に重ねて連携メニューオブジェクト７８を表示する。ユーザにより連携メニューオブジェクト７８において「故障注入」→「レジスタ値」が選択されたら、デバッグ機能２１は、デバッグ情報３２ａ等を参照して、選択されたレジスタ値のレジスタ番地を特定する。デバッグ機能２１は、そのレジスタ番地のレジスタ値の故障を故障注入の動作として特定する。これ以降の動作は第３の実施形態と同様である。
【０１０７】
あるいは、故障注入の動作をウォッチウィンドウ７４から決定してもよい。Ｓ５１において、デバッグ機能２１は、Ｃソースウィンドウ７１上にソースファイル３１のソースコードを表示する。ソースウィンドウ７１上でユーザが所定範囲のソースコードを選択すると、デバッグ機能２１は、所定範囲のソースコードに含まれる変数、その値、及び変数型を、ウォッチウィンドウ７４上に表示する。ウォッチウィンドウ７４上でユーザが所望の変数を選択し、所定の操作を行うと、デバッグ機能２１は、連携メニューオブジェクト７８を表示させる。デバッグ機能２１は、デバッグ情報３２ａなどから、選択された変数の割り当て先を抽出する。
【０１０８】
ユーザにより連携メニューオブジェクト７８において「故障注入」→「メモリ値」が選択されたら、デバッグ機能２１は、デバッグ情報３２ａ等を参照して、選択された変数に割り当てられたメモリアドレスを特定する。デバッグ機能２１は、そのメモリアドレスのメモリ値の故障を故障注入の動作として特定する。これ以降の動作は第３の実施形態と同様である。
【０１０９】
このように、故障注入モジュール１１が各ウィンドウと連携して動作指定を決定することができる。これにより、命令行の実行に使用される変数及びその属性を確認しながら、故障すべき変換に関する動作指定を決定できるので、動作指定を正確に決定することができる。
【０１１０】
なお、第１の実施形態〜第３の実施形態において、故障注入させるための各条件を外部トリガ通知（ＧＰＩＯ）に流用してもよい。各条件によるプログラム中の任意のタイミングを外部トリガ通知（ＧＰＩＯ）に用いてもよい。これにより、デバッグ機能と連携して設定した条件成立で外部へ通知することができる。
【０１１１】
ＰＣ条件（タイミング条件）、タイマ条件（＝タイミング条件＋タイマ動作）、メモリアクセス条件（発生条件）、メモリ値条件（発生条件）などの組み合わせで外部へ通知することができる。外部ツール（ＨＩＬＳなど）を使用したシミュレーション環境において、あるプログラムカウンタ値の実行時に回転数センサが壊れてほしい場合、次のような動作を行う。
【０１１２】
（１）ソースコード上から外部トリガ通知設定を行う。（ＰＣ条件とＧＰＩＯトリガ通知動作が故障注入回路に設定される。）デバッグ機能２１は、制御プログラム３０のソースコード上で所望の命令行が選択された状態で連携メニューオブジェクト７８において「ＧＰＩＯトリガ通知」が選択されたら、所望の命令行をＧＰＩＯトリガ通知ポイントに選択する。デバッグ機能２１は、連携メニューオブジェクト７８において所望の命令行がＧＰＩＯトリガ通知ポイントに選択されたことに応じて、デバッグ情報３２ａを参照して、所望の命令行に対応したプログラムカウンタ値を特定する。
【０１１３】
（２）プログラム実行中に条件成立でＧＰＩＯトリガ通知される。実行中のプログラムカウンタ値が（１）で設定したプログラムカウンタ値になったら、「条件成立したのでモータの回転数センサを故障させてください。」という内容がＦＰＧＡボードのＧＰＩＯ端子から外部ツール（ＨＩＬＳなど）へＧＰＩＯトリガ通知される。
【０１１４】
（３）外部ツール（ＨＩＬＳなど）において回転数センサが壊れたことにして故障したアナログ値（電圧／電流）をＭＣＵボードに入力する。
（４）故障した回転数入力を元に計算したモータ制御指令で、モータがおかしな動作をするかどうか、壊れるかどうか監視する。
【０１１５】
このように、外部へのトリガ通知のタイミング制御によりプログラム実行中の任意のタイミングを外部（ＨＩＬＳなどの外部ツール）へ通知することができる。
【０１１６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１１７】
１０  故障注入プログラム、１１  故障注入モジュール、２１  デバッグ機能、１００  故障注入システム。
【図１】
2015141539.tif 000003
【図２】
2015141539.tif 000004
【図３】
2015141539.tif 000005
【図４】
2015141539.tif 000006
【図５】
2015141539.tif 000007
【図６】
2015141539.tif 000008
【図７】
2015141539.tif 000009
【図８】
2015141539.tif 000010
【図９】
2015141539.tif 000011
【図１０】
2015141539.tif 000012
【図１１】
2015141539.tif 000013
【図１２】
2015141539.tif 000014
【図１３】
2015141539.tif 000015
【図１４】
2015141539.tif 000016