(57)【要約】【課題】従来の冗長化の仕組みを改良し、正常な最終出力値が得られる可能性が一層高まる異常監視回復装置等を提供する。【解決手段】ｎ個のバリアント１３が並列的に処理を行い、中間出力値２３を出力する（Ｓ１２）。次に、ｎ個の正常判定部１４が並列的に処理を行い、正常判定の結果２４を出力する（Ｓ１３）。決定部１６は、正常判定で「間違いなく正常」と判定されたバリアント１３が存在するか否かを確認する（Ｓ２１）。存在する場合（Ｓ２１のＹ）、決定部１６は、「間違いなく正常」と判定されたバリアント１３の中間出力値２３を最終出力値２５として出力する（Ｓ２３）。【選択図】図６
2013186878.tif 000002
【特許請求の範囲】
【請求項１】
システムにおける異常の発生を監視するとともに、異常が発生した場合にシステムを正常な状態に回復させるための異常監視回復装置であって、
前記システムの全体又は一部分に対する入力値を分配する分配部と、
前記分配部から前記入力値を受け取り、前記システムにおける同一の機能を果たす複数のバリアントと、
前記バリアントが前記システムの正常動作をもたらす動作決定変数群の値の組み合わせを示す正常動作パターンを記憶する記憶部と、
前記バリアントと１対１の対応関係にあり、前記記憶部から前記正常動作パターンを取得し、前記バリアントの動作が前記正常動作パターンに含まれるか否かの正常判定を行い、前記正常判定の結果を出力する複数の正常判定部と、
前記正常判定の結果の少なくとも１つが間違いなく正常である場合には、間違いなく正常と判定された前記バリアントの出力値を最終出力値として出力する決定部と、
を具備する異常監視回復装置。
【請求項２】
前記バリアントと１対１の対応関係にあり、前記バリアントの動作が正常の必要条件を満足するか否かを判定する複数の受理テスト、を更に具備し、
前記正常判定部は、前記受理テストによって正常の必要条件を満足すると判定された前記バリアントに対してのみ前記正常判定を行い、
前記決定部は、全ての前記正常判定の結果が正常か異常か不明である場合、更に、所定数以上の前記バリアントの出力値が一致するか否かを判断し、一致する場合にはその値を前記最終出力値として出力し、一致しない場合には例外を出力する
請求項１に記載の異常監視回復装置。
【請求項３】
前記記憶部は、前記バリアントの制御フローごとに前記正常動作パターンを記憶し、
前記正常判定部は、前記バリアントの実行時、前記バリアントの動作に対応する前記制御フローを特定して前記記憶部を検索することによって、前記正常判定に用いる前記正常動作パターンを取得する
請求項１又は請求項２に記載の異常監視回復装置。
【請求項４】
前記システムは、通常の動作を行うための通常モード、及び前記正常動作パターンを更新するための更新モードの切り替えを可能とし、
前記更新モードにおける前記動作決定変数群の値を収集することによって、前記正常動作パターンを更新する更新部、を更に具備する
請求項１から請求項３のいずれかに記載の異常監視回復装置。
【請求項５】
システムにおける異常の発生を監視するとともに、異常が発生した場合にシステムを正常な状態に回復させるための異常監視回復方法であって、
分配部が、前記システムの全体又は一部分に対する入力値を分配するステップと、
複数のバリアントが、前記入力値を受け取り、前記システムにおける同一の機能を果たすステップと、
前記バリアントと１対１の対応関係にある複数の正常判定部が、前記バリアントが前記システムの正常動作をもたらす動作決定変数群の値の組み合わせを示す正常動作パターンを記憶する記憶部から前記正常動作パターンを取得し、前記バリアントの動作が前記正常動作パターンに含まれるか否かの正常判定を行い、前記正常判定の結果を出力するステップと、
決定部が、前記正常判定の結果の少なくとも１つが間違いなく正常である場合には、間違いなく正常と判定された前記バリアントの出力値を最終出力値として出力するステップと、
を含む異常監視回復方法。
【請求項６】
コンピュータを、システムにおける異常の発生を監視するとともに、異常が発生した場合にシステムを正常な状態に回復させるための異常監視回復装置として機能させるためのプログラムであって、
前記システムの全体又は一部分に対する入力値を分配する分配部と、
前記分配部から前記入力値を受け取り、前記システムにおける同一の機能を果たす複数のバリアントと、
前記バリアントが前記システムの正常動作をもたらす動作決定変数群の値の組み合わせを示す正常動作パターンを記憶する記憶部と、
前記バリアントと１対１の対応関係にあり、前記記憶部から前記正常動作パターンを取得し、前記バリアントの動作が前記正常動作パターンに含まれるか否かの正常判定を行い、前記正常判定の結果を出力する複数の正常判定部と、
前記正常判定の結果の少なくとも１つが間違いなく正常である場合には、間違いなく正常と判定された前記バリアントの出力値を最終出力値として出力する決定部と、
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システムにおける異常の発生を監視するとともに、異常が発生した場合にシステムを正常な状態に回復させるための異常監視回復装置等に関するものである。
【背景技術】
【０００２】
近年、車載システム、宇宙機器システム、航空システムなどの高い信頼性が求められる制御システム（以下、単に「システム」と記載する。）においては、システムを構成するハードウエア並びにソフトウエアの大規模化、複雑化が顕著に進んでいる。その為、ハードウエアやソフトウエアの製造時の不具合が残留する可能性が高まり、それゆえに、市場に出たり、実際に運用されたりした後に、その不具合が顕在化する可能性が高まっている。また、残留している不具合に起因してシステムが異常となる危険性、すなわちシステムが設計者の意図通りに動作しない危険性が高まっている。従って、市場に出たり、実際に運用されたりした後のシステム稼働時（以下、「実行時」と記載する。）において、システムに異常が発生したか否かを監視するとともに、システムに異常が発生した場合、システムを正常な状態に回復させることは、システムの高い信頼性を維持する上での有効な選択肢となり得る。
【０００３】
システムの異常を監視し、回復させる仕組みの一つとして、「冗長化」が挙げられる。冗長化とは、システムの全体又は一部分に対して、同じ機能を果たす複数の実装（以下、「バリアント」と記載する。）を用意し、多様性を持たせ、バリアント間で同時に異常が発生することを極力低減し、正常な出力が得られる可能性を高める方式である。
【０００４】
冗長化の１例として、特許文献１には、３重系の計算機システムが記載されている。特許文献１に記載の発明の目的は、３重系を構成しているプロセッサボードの２台が故障した後も、故障していない残り１台のプロセッサボードを使用して正しい結果を出力することである。この目的を果たす為に、特許文献１では、３重系を構成するプロセッサボード内に自己故障検知回路を搭載し、自己のプロセッサボードの故障を検知することにより、３重系を構成しているプロセッサボードが２台故障した後も正常に動作している残りの１台のプロセッサボードの出力を選択することを可能としている。
【０００５】
また、非特許文献１には、「アクセプタンスボーティング」（Acceptance
Voting：以下、「ＡｃＶ」と記載する。）という仕組みが記載されている。ＡｃＶとは、複数個の各バリアントで得られた結果（以下、「中間出力値」と記載する。）を受理テスト（Acceptance Test）でチェックし、受理テストをパスした中間出力値のみを決定器（多数決決定器等）に渡し、決定器が最終的な結果（以下、「最終出力値」と記載する。）を決定するという仕組みである。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−２５９４４０号公報
【非特許文献】
【０００７】
【非特許文献１】Laura L. Pullum, “SoftwareFault Tolerance Techniques and Implementation”, Artech House Publishers, 2001
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１及び非特許文献１に記載の仕組みでは、２つの問題がある。１つ目の問題は、「正常値の取りこぼし」が発生する場合があることである。「正常値の取りこぼし」とは、正常値の中間出力値が最終出力値にならないことを意味する。また、２つ目の問題は、「異常値の見逃し」が発生する場合があることである。「異常値の見逃し」とは、異常値の中間出力値が最終出力値になってしまうことを意味する。「正常値の取りこぼし」及び「異常値の見逃し」のいずれの場合も、正常な最終出力値が得られないことになる。
【０００９】
本発明は、前述した問題点に鑑みてなされたものであり、その目的とすることは、従来の冗長化の仕組みを改良し、正常な最終出力値が得られる可能性が一層高まる異常監視回復装置等を提供することである。
【課題を解決するための手段】
【００１０】
前述した目的を達成するために第１の発明は、システムにおける異常の発生を監視するとともに、異常が発生した場合にシステムを正常な状態に回復させるための異常監視回復装置であって、前記システムの全体又は一部分に対する入力値を分配する分配部と、前記分配部から前記入力値を受け取り、前記システムにおける同一の機能を果たす複数のバリアントと、前記バリアントが前記システムの正常動作をもたらす動作決定変数群の値の組み合わせを示す正常動作パターンを記憶する記憶部と、前記バリアントと１対１の対応関係にあり、前記記憶部から前記正常動作パターンを取得し、前記バリアントの動作が前記正常動作パターンに含まれるか否かの正常判定を行い、前記正常判定の結果を出力する複数の正常判定部と、前記正常判定の結果の少なくとも１つが間違いなく正常である場合には、間違いなく正常と判定された前記バリアントの出力値を最終出力値として出力する決定部と、を具備する異常監視回復装置である。第１の発明によって、従来の冗長化の仕組みを改良し、正常な最終出力値が得られる可能性を一層高めることができる。特に、「正常値の取りこぼし」を防止することができる。
【００１１】
第１の発明は、前記バリアントと１対１の対応関係にあり、前記バリアントの動作が正常の必要条件を満足するか否かを判定する複数の受理テスト、を更に具備し、前記正常判定部は、前記受理テストによって正常の必要条件を満足すると判定された前記バリアントに対してのみ前記正常判定を行い、前記決定部は、全ての前記正常判定の結果が正常か異常か不明である場合、更に、所定数以上の前記バリアントの出力値が一致するか否かを判断し、一致する場合にはその値を前記最終出力値として出力し、一致しない場合には例外を出力することが望ましい。これによって、従来の冗長化の仕組みを改良し、正常な最終出力値が得られる可能性を一層高めることができる。特に、「正常値の取りこぼし」及び「異常値の見逃し」を防止することができる。更に、２つのバリアントに共通のバグがあり、例外が出力できないというケースを減らすことができる。
【００１２】
また、第１の発明における前記記憶部は、前記バリアントの制御フローごとに前記正常動作パターンを記憶し、前記正常判定部は、前記バリアントの実行時、前記バリアントの動作に対応する前記制御フローを特定して前記記憶部を検索することによって、前記正常判定に用いる前記正常動作パターンを取得することが望ましい。これによって、制御フローごとに正常動作パターンを記憶させるので、正常判定における探索の際に探索パターンを限定できる。また、動作決定変数も絞り込めるので、実行時のオーバヘッドを削減でき、リアルタイム性が向上する。
【００１３】
また、第１の発明における前記システムは、通常の動作を行うための通常モード、及び前記正常動作パターンを更新するための更新モードの切り替えを可能とし、前記更新モードにおける前記動作決定変数群の値を収集することによって、前記正常動作パターンを更新する更新部、を更に具備することが望ましい。これによって、システムの経年劣化やシステム特性の変化等に起因する正常動作パターンの変化にも対応することができ、正常判定の誤りを低減することができる。
【００１４】
第２の発明は、システムにおける異常の発生を監視するとともに、異常が発生した場合にシステムを正常な状態に回復させるための異常監視回復方法であって、分配部が、前記システムの全体又は一部分に対する入力値を分配するステップと、複数のバリアントが、前記入力値を受け取り、前記システムにおける同一の機能を果たすステップと、前記バリアントと１対１の対応関係にある複数の正常判定部が、前記バリアントが前記システムの正常動作をもたらす動作決定変数群の値の組み合わせを示す正常動作パターンを記憶する記憶部から前記正常動作パターンを取得し、前記バリアントの動作が前記正常動作パターンに含まれるか否かの正常判定を行い、前記正常判定の結果を出力するステップと、決定部が、前記正常判定の結果の少なくとも１つが間違いなく正常である場合には、間違いなく正常と判定された前記バリアントの出力値を最終出力値として出力するステップと、を含む異常監視回復方法である。第２の発明によって、従来の冗長化の仕組みを改良し、正常な最終出力値が得られる可能性を一層高めることができる。特に、「正常値の取りこぼし」を防止することができる。
【００１５】
第３の発明は、コンピュータを、システムにおける異常の発生を監視するとともに、異常が発生した場合にシステムを正常な状態に回復させるための異常監視回復装置として機能させるためのプログラムであって、前記システムの全体又は一部分に対する入力値を分配する分配部と、前記分配部から前記入力値を受け取り、前記システムにおける同一の機能を果たす複数のバリアントと、前記バリアントが前記システムの正常動作をもたらす動作決定変数群の値の組み合わせを示す正常動作パターンを記憶する記憶部と、前記バリアントと１対１の対応関係にあり、前記記憶部から前記正常動作パターンを取得し、前記バリアントの動作が前記正常動作パターンに含まれるか否かの正常判定を行い、前記正常判定の結果を出力する複数の正常判定部と、前記正常判定の結果の少なくとも１つが間違いなく正常である場合には、間違いなく正常と判定された前記バリアントの出力値を最終出力値として出力する決定部と、して機能させるためのプログラムである。第３の発明のプログラムを汎用のコンピュータにインストールすることによって、第１の発明の異常監視回復装置を得ることができる。
【発明の効果】
【００１６】
本発明により、従来の冗長化の仕組みを改良し、正常な最終出力値が得られる可能性が一層高まる異常監視回復装置等を提供することができる。
【図面の簡単な説明】
【００１７】
【図１】バリアントの１例を示す図
【図２】受理テストを考慮した動作決定変数の分類を示す図
【図３】従来技術の概要を説明するための図
【図４】従来技術の動作パターンを示す図
【図５】本発明の第１実施形態における異常監視回復装置の構成を示す図
【図６】本発明の第１実施形態における異常監視回復装置の処理の流れを示すフローチャート
【図７】正常判定部の第１の例を説明するための図
【図８】正常判定部の第１の例の処理の流れを示すフローチャート
【図９】正常判定部の第２の例を説明するための図
【図１０】正常判定部の第２の例の処理の流れを示すフローチャート
【図１１】本発明の第１実施形態における動作決定変数の集合を示す図
【図１２】本発明の第１実施形態における動作パターンを示す図
【図１３】本発明の第２実施形態における異常監視回復装置の構成を示す図
【図１４】本発明の第２実施形態における異常監視回復装置の処理の流れを示すフローチャート
【図１５】本発明の第２実施形態における動作決定変数の集合を示す図
【図１６】本発明の第２実施形態における動作パターンを示す図
【図１７】本発明の第３実施形態における異常監視回復装置の構成を示す図
【図１８】本発明の第３実施形態における異常監視回復装置の処理の流れを示すフローチャート
【発明を実施するための形態】
【００１８】
以下図面に基づいて、本発明の実施形態を詳細に説明する。最初に、図１〜図４を参照しながら、用語の説明と従来技術の問題点を説明する。
【００１９】
図１は、バリアントの１例を示す図である。前述したように、バリアントは、冗長化されるシステムにおける同じ機能を果たす複数の実装である。バリアントの実装形態は、ハードウエアでも良いし、ソフトウエアでも良い。図１は、ソフトウエアの例を示している。図１（ａ）に示すように、１例として説明するバリアントは、引数が「整数型」、返値が「整数型」、動作が「引数の二乗を返す」という仕様である。この仕様に対して、図１（ｂ）では、Ｃ言語によって実装したバリアントを図示している。
【００２０】
図１（ｂ）には、動作決定変数として、「ｘ」（参照される引数）と「ｒｅｓｕｌｔ」（スタティック変数）が図示されている。動作決定変数とは、バリアントの動作を決定する変数であり、データフロー表現におけるデータ発生源に相当する。例えば、Ｃ言語による実装であれば、バリアントに与えられる引数のうち、バリアントの実行中に参照される引数、並びにバリアントの実行中に参照されるスタティック変数及びグローバル変数である。動作決定変数によってバリアントの動作が決まることから、バリアントがシステムの正常動作をもたらすか又はシステムの異常動作をもたらすかを動作決定変数によって分類可能である。ここで、「バリアントがシステムの正常動作をもたらす」とは、バリアントの動作が仕様と一致することを意味する。また、「バリアントがシステムの異常動作をもたらす」とは、バリアントの動作が仕様と一致しないことを意味する。
【００２１】
動作決定変数によってバリアントがシステムの正常動作をもたらすか否かを分類するために、図１（ｃ）に示すように、動作開始箇所における動作決定変数の値の組合せ（以下、「動作パターン」ともいう。）を考える。
【００２２】
図１（ｃ）には、正常動作をもたらす集合と異常動作をもたらす集合が図示されている。実は、図１（ｂ）に示すバリアントにはバグが潜んでいる。具体的には、２回目以降の関数呼出しの際、「ｒｅｓｕｌｔ」が前の値のまま呼び出されてしまうことにより、仕様と一致しない（引数の二乗を返さない）という第１のバグと、「ｘ＜０」の場合に返値が「０」となってしまい、仕様と一致しない（引数の二乗を返さない）という第２のバグである。
【００２３】
第１のバグ及び第２のバグが潜んでいるにも関わらず、正常動作をもたらす集合は、（ｘ、ｒｅｓｕｌｔ）＝｛（１、０）、（２、０）、・・・｝である。一方、第１のバグによって異常動作をもたらす集合は、（ｘ、ｒｅｓｕｌｔ）＝｛（１、１）、（２、１）、・・・｝である。また、第２のバグによって異常動作をもたらす集合は、（ｘ、ｒｅｓｕｌｔ）＝｛（−１、０）、（−２、０）、・・・｝である。本発明の目的は、仮に一部のバリアントにバグが潜んでいたり、故障したりしていても、システム全体としては正常な最終出力値が得られる可能性を高めることである。
【００２４】
図２は、受理テストを考慮した動作決定変数の分類を示す図である。「受理テスト」とは、バリアントが正常動作をもたらすことの必要条件を満たすか否かを判定する実装である。この必要条件は、バリアントの仕様から導出されるものであり、例えば、実装者が導出する。また、バリアントの仕様が仕様記述言語（ＶＤＭ、Ｚ等）で記述されている場合、コンピュータが自動的に必要条件を抽出することも可能となる。受理テストの実装形態は、ハードウエアでも良いし、ソフトウエアでも良い。図２は、ソフトウエアの例を示している。図２（ａ）では、Ｃ言語によって受理テストを導入したバリアントを図示している。図２（ａ）の例では、「ａｓｓｅｒｔ」マクロ（ＡＮＳＩ  Ｃの標準仕様に含まれているマクロ）を用いている。
【００２５】
図２（ａ）に示す受理テストでは、“「ｘ＝＝０」が真ならば「ｒｅｓｕｌｔ＝＝０」、「ｘ＝＝０」が偽ならば「ｒｅｓｕｌｔ＞０」”、を満たすか否かを判定している。つまり、“ｘが０ならばｒｅｓｕｌｔは０、ｘが０でないならばｒｅｓｕｌｔは正”、を満たすか否かを判定している。この判定条件は、「引数の二乗を返す」という仕様から導出される。
【００２６】
図２（ｂ）では、受理テストを考慮した動作決定変数の値の組合せ（動作パターン）の分類を示している。図２（ｂ）では、以下の集合が示されている。
Ｕ１：全体集合
Ｕ２：受理テストをパスする集合
Ｕ３：正常動作をもたらす集合
Ｕ４：受理テストをパスするにもかかわらず異常動作をもたらす集合
Ｕ５：受理テストをパスせず異常動作をもたらす集合
【００２７】
ここで、∪を和集合の記号、∩を積集合の記号とすると、Ｕ１＝Ｕ２∪Ｕ５（Ｕ２∩Ｕ５＝φ）、Ｕ２＝Ｕ３∪Ｕ４（Ｕ３∩Ｕ４＝φ）、が成り立つ。また、Ｕ５には、何らかの原因で受理テストが実行できない場合も含める。何らかの原因としては、例えば、バリアントからの出力が出ない、バリアントが無限ループに陥る等が考えられる。
【００２８】
図２（ｃ）には、異常動作をもたらす集合の細分化が図示されている。Ｕ４は、（ｘ、ｒｅｓｕｌｔ）＝｛（１、１）、（２、１）、・・・｝である。また、Ｕ５は、（ｘ、ｒｅｓｕｌｔ）＝｛（−１、０）、（−２、０）、・・・｝である。
【００２９】
図２を見れば分かるように、受理テストをパスしない場合、間違いなく「異常動作をもたらす」（＝Ｕ５）。一方、受理テストをパスしても、間違いなく「正常動作をもたらす」（＝Ｕ３）とは限らず、「異常動作をもたらす」（＝Ｕ４）場合もある。
【００３０】
図３は、従来技術の概要を説明するための図である。図３では、非特許文献１におけるＡｃＶの例を示している。説明を分かり易くする為に、図３では、バリアントを２つにしている。図３（ａ）に示すように、従来技術ＡｃＶの概略構成は、２つのバリアントＡ、Ｂと、２つの受理テストＡ、Ｂと、１つの決定器である。バリアントＡは中間出力値ａを出力し、バリアントＢは中間出力値ｂを出力する。この場合、図３（ｂ）及び図３（ｃ）に示すように、各バリアントＡ、Ｂの動作パターンが、動作決定変数によって図２（ｂ）と同様に分類される。
【００３１】
図４は、従来技術の動作パターンを示す図である。図４に示す表の列項目を説明する。「動作パターン」は、システム全体の動作パターンを一意に識別する項目である。「バリアントＡの動作決定変数の値」は、バリアントＡの動作決定変数の値の組合せが属する集合を示す項目である。「バリアントＢの動作決定変数の値」は、バリアントＢの動作決定変数の値の組合せが属する集合を示す項目である。「受理テストＡ」は、受理テストＡによる判定結果を示す項目である。「受理テストＢ」は、受理テストＢによる判定結果を示す項目である。「決定器（多数決）」は、決定器に入力される複数の値の一致／不一致、多数決による判断不要、又は例外の区別を示す項目である。「最終出力値」は、システム全体が出力する最終的な値を示す項目である。「理想出力値」は、システム全体が出力すべき理想的な値を示す項目である。「問題点」は、動作パターンごとの問題点の有無及び問題点の区別を示す項目である。
【００３２】
図４に示す凡例を説明する。「最終出力値」の列項目に図示される太線の囲み線は、「出力誤り」であることを示す。「受理テストＡ」及び「受理テストＢ」の列項目に図示される「○」の記号は、受理テストの判定結果が「正常の必要条件を満たす」ことを示す。「受理テストＡ」及び「受理テストＢ」の列項目に図示される「×」の記号は、受理テストの判定結果が「間違いなく異常」であることを示す。
【００３３】
動作パターンが「Ｐ１」の場合、バリアントＡ及びＢの両方の動作パターンがＵ３（＝正常動作をもたらす集合）であるから、受理テストＡ及び受理テストＢの両方の判定結果が正常の必要条件を満たす。また、決定器に入力される値も一致する。そして、最終出力値は「ａ｜ｂ」（同一の値）となる。この場合、最終出力値は理想出力値と同一であるから、問題点はない。同様に問題点がない動作パターンは、「Ｐ３」、「Ｐ７」、「Ｐ９」である。
【００３４】
動作パターンが「Ｐ２」の場合、バリアントＡの動作パターンがＵ３（＝正常動作をもたらす集合）であるから、受理テストＡの判定結果が正常の必要条件を満たす。一方、バリアントＢの動作パターンがＵ４（＝受理テストをパスするにもかかわらず異常動作をもたらす集合）であるから、受理テストＢの判定結果は正常の必要条件を満たすにもかかわらず、決定器に入力される値は不一致となる。そして、最終出力値は「例外」となる。この場合、最終出力値は理想出力値（＝「ａ」）と異なり、正常値の取りこぼしという問題点（１）がある。同様に問題点（１）がある動作パターンは、「Ｐ４」である。
【００３５】
動作パターンが「Ｐ６」の場合、バリアントＡの動作パターンがＵ４（＝受理テストをパスするにもかかわらず異常動作をもたらす集合）であるから、受理テストＡの判定結果は正常の必要条件を満たす。一方、バリアントＢの動作パターンがＵ５（＝受理テストをパスせず異常動作をもたらす集合）であるから、受理テストＢの判定結果は間違いなく異常となる。バリアントＡの出力値だけが受理テストをパスしたことから、決定器では「判断不要」となり、最終出力値は「ａ」となる。この場合、最終出力値は理想出力値（＝「例外」）と異なり、異常値の見逃しという問題点（２）がある。同様に問題点（２）がある動作パターンは、「Ｐ８」である。
【００３６】
動作パターンが「Ｐ５」の場合、バリアントＡ及びＢの両方の動作パターンがＵ４（＝受理テストをパスするにもかかわらず異常動作をもたらす集合）であるから、受理テストＡ及び受理テストＢの両方の判定結果が正常の必要条件を満たす。しかし、両方とも異常動作をもたらす集合であるから、決定器に入力される値が一致する場合もあれば、一致しない場合もある。決定器に入力される値が一致する場合には、最終出力値は「ａ｜ｂ」（同一の値）となる。また、決定器に入力される値が一致しない場合には、最終出力値は「例外」となる。決定器に入力される値が一致する場合には、最終出力値は理想出力値（＝「例外」）と異なり、２つのバリアントに共通のバグがあり、例外が出力できないという問題点（３）がある。問題点（３）の例としては、バリアントの仕様自体にバグがあり、Ａ、Ｂの両方に同一のバグが入り込んでしまう場合や、受理テストが厳密に作成されていない場合などが考えられる。
【００３７】
以上、従来技術における問題点を整理すると、以下の３つとなる。
問題点（１）：正常値の取りこぼし
問題点（２）：異常値の見逃し
問題点（３）：２つのバリアントに共通のバグがあり、例外が出力できない
【００３８】
本発明では、問題点（１）及び（２）を解決し、仮に一部のバリアントにバグが潜んでいたとしても、正常な最終出力値が得られる可能性を高める。問題点（３）については、仕様上のバグを減らすことや厳密な受理テストを作成することが基本的な解決策であるので、本発明では対象としない。
【００３９】
［第１実施形態］
次に、図５〜図１２を参照しながら、本発明の第１実施形態を説明する。
【００４０】
図５は、本発明の第１実施形態における異常監視回復装置の構成を示す図である。説明を分かり易くする為に、図５では、バリアントを２つにしている。異常監視回復装置１は、入力部１１、分配部１２、バリアントＡ１３ａ、バリアントＢ１３ｂ、正常判定部Ａ１４ａ、正常判定部Ｂ１４ｂ、記憶部（正常動作パターンＡ）１５ａ、記憶部（正常動作パターンＢ）１５ｂ、決定部１６、出力部１７等を備える。
【００４１】
入力部１１は、外部システム又は他の機能から値を入力し、入力値２１として分配部１２に出力する。分配部１２は、入力値２１を分配し、バリアントＡ１３ａに分配入力値２２ａを出力するとともに、バリアントＢ１３ｂに分配入力値２２ｂを出力する。バリアントＡ１３ａは、分配入力値２２ａを受け取り、自らの機能を実行し、中間出力値２３ａを正常判定部Ａ１４ａに出力する。同様に、バリアントＢ１３ｂは、分配入力値２２ｂを受け取り、自らの機能を実行し、中間出力値２３ｂを正常判定部Ｂ１４ｂに出力する。
【００４２】
記憶部１５ａは、バリアントＡ１３ａがシステムの正常動作をもたらす動作決定変数群の値の組み合わせを示す正常動作パターンＡを記憶する。同様に、記憶部１５ｂは、バリアントＢ１３ｂがシステムの正常動作をもたらす動作決定変数群の値の組み合わせを示す正常動作パターンＢを記憶する。
【００４３】
正常動作パターンＡ、Ｂの例としては、例えば、以下が挙げられる。
・正常動作時のバリアントＡ、Ｂの入出力値
・正常動作時のバリアントＡ、Ｂの内部状態値
【００４４】
正常動作パターンＡ、Ｂは、バリアントＡ、Ｂのテスト（「受理テスト」とは異なる。）時に構築可能である。バリアントＡ、Ｂのテスト時に異常が発見された場合、異常が出ないようにバリアントを修正した上で回帰テスト（＝プログラム等を変更した際に、その変更によって予想外の影響が現れていないかどうか確認するテスト）を行うことによって、最終的な正常動作パターンＡ、Ｂが得られる。
【００４５】
正常判定部Ａ１４ａは、バリアントＡ１３ａと１対１の対応関係にあり、記憶部１５ａから正常動作パターンＡを取得し、バリアントＡ１３ａの動作が正常動作パターンＡに含まれるか否かの正常判定を行い、正常判定の結果２４ａを決定部１６に出力する。同様に、正常判定部Ｂ１４ｂは、バリアントＢ１３ｂと１対１の対応関係にあり、記憶部１５ｂから正常動作パターンＢを取得し、バリアントＢ１３ｂの動作が正常動作パターンＢに含まれるか否かの正常判定を行い、正常判定の結果２４ｂを決定部１６に出力する。
【００４６】
決定部１６は、正常判定の結果２３ａ、２３ｂの少なくとも１つが間違いなく正常である場合には、間違いなく正常と判定されたバリアントの出力値を最終出力値２５として出力部１７に出力する。出力部１７は、最終出力値２５を外部システム又は他の機能に出力する。
【００４７】
異常監視回復装置１の実装形態は、ハードウエアでも良いし、ソフトウエアでも良い。例えば、異常監視対象のシステムがコンピュータシステムの場合、異常監視回復装置１は、制御装置、記憶装置、及び入出力装置等がバスを介して接続されて構成されるコンピュータとして実現される。
【００４８】
制御装置は、ＣＰＵ（Central Processing Unit）、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）等で構成される。ＣＰＵは、記憶装置、ＲＯＭ等に格納されるプログラムをＲＡＭ上のワークメモリ領域に呼び出して実行し、バスを介して接続された各装置を駆動制御し、異常監視回復装置１が行う後述する処理を実現する。ＲＯＭは、不揮発性メモリであり、異常監視回復装置１のブートプログラムやＢＩＯＳ等のプログラム、データ等を恒久的に保持している。ＲＡＭは、揮発性メモリであり、記憶装置、ＲＯＭ等からロードしたプログラム、データ等を一時的に保持するとともに、制御装置が各種処理を行う為に使用するワークエリアを備える。記憶装置は、ＨＤＤ（Hard Disk Drive）またはＥＥＰＲＯＭ（Electrically  Erasable  Programmable  ROM）等であり、制御装置が実行するプログラム、プログラム実行に必要なデータ等が格納される。プログラムは、制御装置により必要に応じて読み出されてＲＡＭに移され、ＣＰＵに読み出されて各種の手段として実行される。入出力装置は、他の装置との入出力を媒介するインタフェースである。入力装置は、例えば、キーボードやマウス等である。出力装置は、例えば、液晶ディスプレイやスピーカ等である。
【００４９】
例えば、図５に示す入力部１１は入力装置として実現される。また、分配部１２、バリアントＡ１３ａ、バリアントＢ１３ｂ、正常判定部Ａ１４ａ、正常判定部Ｂ１４ｂ、及び決定部１６は、各部を実現するためのプログラムを制御装置が実行することによって実現される。記憶部１５ａ及び記憶部１５ｂは、記憶装置として実現される。出力部１７は出力装置として実現される。
【００５０】
図６は、本発明の第１実施形態における異常監視回復装置の処理の流れを示すフローチャートである。以下、バリアント、正常判定部、記憶部を総称するときは、それぞれ、符号１３、１４、１５を付ける。また、分配入力値、中間出力値、正常判定の結果を総称するときは、それぞれ、符号２２、２３、２４を付ける。
【００５１】
図６に示すように、分配部１２が処理を行い、入力値２１を分配すると（Ｓ１１）、ｎ個のバリアント１３が並列的に処理を行い、分配入力値２２を受け取り、自らの機能を実行し、中間出力値２３を出力する（Ｓ１２）。次に、ｎ個の正常判定部１４が並列的に処理を行い、正常判定の結果２４を出力する（Ｓ１３）。次に、決定部１６が処理を行う（Ｓ１４）。
【００５２】
決定部１６は、正常判定で「間違いなく正常」と判定されたバリアント１３が存在するか否かを確認する（Ｓ２１）。存在する場合（Ｓ２１のＹ）、決定部１６は、「間違いなく正常」と判定されたバリアント１３の中間出力値２３を最終出力値２５として出力する（Ｓ２３）。
【００５３】
存在しない場合（Ｓ２１のＮ）、決定部１６は、中間出力値２３から最終出力値２５を決定できるか否か確認する（Ｓ２２）。例えば、決定部１６が多数決決定器の場合、過半数を超えるバリアント１３が同じ値の中間出力値２３を出力していれば、中間出力値２３から最終出力値２５を決定できるものとする。決定できる場合（Ｓ２２のＹ）、決定部１６は、過半数を超えるバリアント１３が出力する中間出力値２３を最終出力値２５として出力する（Ｓ２３）。決定できない場合、決定部１６は例外を出力する（Ｓ２４）。
【００５４】
図７は、正常判定部の第１の例を説明するための図である。図７（ａ）は、実装したバリアント１３を示している。図７（ａ）は、図１（ｂ）と同様である。図７（ｂ）は、記憶部１５に記憶される正常動作パターンの一例である。記憶部１５には、予め行われるバリアント１３のテスト時に、正常動作をもたらす動作決定変数（ｘ、ｒｅｓｕｌｔ）の値を記憶させておく。記憶部１５に記憶させる際、例えば、パターンごとにハッシュ値に変換し、探索効率が良いデータ形式（例えば、Ｊｕｄｙ配列等）によって格納しておくことにより、実行時の処理速度を上げることができる。
【００５５】
図８は、正常判定部の第１の例の処理の流れを示すフローチャートである。第１の例では、正常判定部１４は、実行時の動作決定変数の値を抽出し（Ｓ３１）、記憶部１５から正常動作パターンを取得する（Ｓ３２）。そして、正常判定部１４は、実行時の動作決定変数の値が正常動作パターンに含まれるか否かを探索し（Ｓ３３）、含まれる場合には（Ｓ３３のＹ）、「間違いなく正常」と判定し（Ｓ３４）、含まれない場合には（Ｓ３３のＮ）、「正常か異常か不明」と判定する（Ｓ３５）。
【００５６】
図９は、正常判定部の第２の例を説明するための図である。図９（ａ）は、実装したバリアント１３を示している。「ｘ１」、「ｘ２」、「ｘ３」は参照される引数であり、動作決定変数である。また、「ｓ」はグローバル変数であり、動作決定変数である。図９（ａ）に示すバリアント１３は、分岐（ｉｆ文）が含まれている。そこで、制御フローごとに正常動作パターンを構築することが考えられる。図９（ａ）に示すバリアント１３では、「ｒｅｔｕｒｎ  ｘ３−ｔ；」が制御フロー（１）、「ｒｅｔｕｒｎ  ｘ２−ｔ；」が制御フロー（２）である。
【００５７】
図９（ｂ）は、記憶部１５に記憶される正常動作パターンの一例である。まず、プリプロセッサによって、制御フロー（１）を通過する場合には（ｘ１、ｘ２、ｘ３、ｓ）の４つが動作決定変数であること、及び制御フロー（２）を通過する場合には（ｘ１、ｘ２、ｓ）の３つが動作決定変数であることを静的に解析しておく。そして、記憶部１５には、予め行われるバリアント１３のテスト時に、制御フローごとに、正常動作をもたらす動作決定変数の値を記憶させておく。つまり、制御フロー（１）を通過する場合、動作決定変数（ｘ１、ｘ２、ｘ３、ｓ）の値を記憶させておく。また、制御フロー（２）を通過する場合、動作決定変数（ｘ１、ｘ２、ｓ）の値を記憶させておく。記憶部１５に記憶させる際、例えば、パターンごとにハッシュ値に変換し、探索効率が良いデータ形式（例えば、Ｊｕｄｙ配列等）によって格納しておくことにより、実行時の処理速度を上げることができる。
【００５８】
図１０は、正常判定部の第２の例の処理の流れを示すフローチャートである。第２の例では、正常判定部１４は、実行時の制御フロー及び動作決定変数の値を抽出し（Ｓ４１）、制御フローを検索条件として記憶部１５を検索し、制御フローごとの正常動作パターンを取得する（Ｓ４２）。そして、正常判定部１４は、実行時の動作決定変数の値が正常動作パターンに含まれるか否かを探索し（Ｓ４３）、含まれる場合には（Ｓ４３のＹ）、「間違いなく正常」と判定し（Ｓ４４）、含まれない場合には（Ｓ３３のＮ）、「正常か異常か不明」と判定する（Ｓ４５）。
【００５９】
第２の例では、制御フローごとに正常動作パターンを記憶させるので、Ｓ４３の探索の際、探索パターンが限定できる。また、動作決定変数も絞り込めるので、実行時のオーバヘッドを削減でき、リアルタイム性が向上する。
【００６０】
図１１は、本発明の第１実施形態における動作決定変数の集合を示す図である。図１１では、以下の集合が示されている。
Ｕ１：全体集合
Ｕ３：正常動作をもたらす集合
Ｕ３１：正常動作をもたらす集合のうち、テスト実施済の集合
Ｕ３２：正常動作をもたらす集合のうち、テスト未実施の集合
Ｕ６：異常動作をもたらす集合
【００６１】
ここで、∪を和集合の記号、∩を積集合の記号とすると、Ｕ１＝Ｕ３∪Ｕ６（Ｕ３∩Ｕ６＝φ）、Ｕ３＝Ｕ３１∪Ｕ３２（Ｕ３１∩Ｕ３２＝φ）、が成り立つ。
【００６２】
図１２は、本発明の第１実施形態における動作パターンを示す図である。図１２に示す表の列項目を説明する。「動作パターン」、「バリアントＡの動作決定変数の値」、「バリアントＢの動作決定変数の値」は、図４と同様である。「正常判定Ａ」は、正常判定部Ａ１４ａによる正常判定の結果２４ａを示す項目である。「正常判定Ｂ」は、正常判定部Ｂ１４ｂによる正常判定の結果２４ｂを示す項目である。「決定器（多数決）」、「最終出力値」、「理想出力値」は、図４と同様である。「備考」は、動作パターンごとの問題点の有無、本発明の効果及び改善策を示す項目である。
【００６３】
図１２に示す凡例を説明する。「最終出力値」の列項目に図示される太線の囲み線は、図４と同様である。「正常判定Ａ」及び「正常判定Ｂ」の列項目に図示される「◎」の記号は、正常判定の結果が「間違いなく正常」であることを示す。「正常判定Ａ」及び「正常判定Ｂ」の列項目に図示される「△」の記号は、正常判定の結果が「正常か異常か不明」であることを示す。
【００６４】
動作パターンが「Ｐ１」の場合、バリアントＡ及びＢの両方の動作パターンがＵ３１（＝正常動作をもたらす集合のうち、テスト実施済の集合）であるから、正常判定Ａ及び正常判定Ｂの両方が間違いなく正常となる。また、決定器に入力される値も一致する。そして、最終出力値は「ａ｜ｂ」（同一の値）となる。この場合、最終出力値は理想出力値と同一であるから、問題点はない。
【００６５】
同様に問題点がない動作パターンは、「Ｐ２」〜「Ｐ５」、「Ｐ７」である。特に、動作パターンが「Ｐ３」及び「Ｐ７」については、本発明によって、従来技術における問題点（１）の「正常値の取りこぼし」を防止することができている為（＝本発明の効果）、最終出力値が理想出力値と同一になっている。また、第１実施形態における異常監視回復装置１の構成には受理テストが含まれていないので、従来技術における問題点（２）の「異常値の見逃し」を防止することができていることは自明である。
【００６６】
動作パターンが「Ｐ６」については、最終出力値が「例外」となっており、理想出力値（＝「ａ」）と一致しない。しかしながら、バリアントＡのテストを増やすことによって、バリアントＡの動作パターンがＵ３２（＝正常動作をもたらす集合のうち、テスト未実施の集合）から、Ｕ３１（＝正常動作をもたらす集合のうち、テスト実施済の集合）に移行し、動作パターンが「Ｐ３」の場合と同様に、最終出力値が理想出力値と同一となる。
【００６７】
また、動作パターンが「Ｐ８」についても、最終出力値が「例外」となっており、理想出力値（＝「ｂ」）と一致しない。しかしながら、バリアントＢのテストを増やすことによって、バリアントＢの動作パターンがＵ３２（＝正常動作をもたらす集合のうち、テスト未実施の集合）から、Ｕ３１（＝正常動作をもたらす集合のうち、テスト実施済の集合）に移行し、動作パターンが「Ｐ７」の場合と同様に、最終出力値が理想出力値と同一となる。
【００６８】
尚、動作パターンが「Ｐ９」については、従来技術における問題点（３）が残るものの、前述した通り、本発明では対象外の問題点である。
【００６９】
以上、本発明の第１実施形態における異常監視回復装置１によって、従来の冗長化の仕組みを改良し、正常な最終出力値が得られる可能性が一層高まる。
【００７０】
［第２実施形態］
次に、図１３〜図１６を参照しながら、本発明の第２実施形態を説明する。以下では、第１実施形態における要素と同一の要素については同一の符号を付し、重複する説明を省略する。
【００７１】
図１３は、本発明の第２実施形態における異常監視回復装置の構成を示す図である。説明を分かり易くする為に、図１３では、バリアントを２つにしている。異常監視回復装置２は、入力部１１、分配部１２、バリアントＡ１３ａ、バリアントＢ１３ｂ、受理テストＡ１８ａ、受理テストＢ１８ｂ、正常判定部Ａ１４ａ、正常判定部Ｂ１４ｂ、記憶部（正常動作パターンＡ）１５ａ、記憶部（正常動作パターンＢ）１５ｂ、決定部１６、出力部１７等を備える。
【００７２】
受理テストＡ１８ａは、バリアントＡ１３ａと１対１の対応関係にあり、バリアントＡ１３ａの動作が正常の必要条件を満足するか否かを判定し、中間出力値（受理テストの結果を含む。）２６ａを正常判定部Ａ１４ａに出力する。同様に、受理テストＢ１８ｂは、バリアントＢ１３ｂと１対１の対応関係にあり、バリアントＢ１３ｂの動作が正常の必要条件を満足するか否かを判定し、中間出力値（受理テストの結果を含む。）２６ｂを正常判定部Ｂ１４ｂに出力する。
【００７３】
正常判定部１４は、記憶部１５から正常動作パターンを取得し、バリアント１３の動作が正常動作パターンＡに含まれるか否かの正常判定を行い、正常判定の結果２４を決定部１６に出力する。特に、第２の実施の形態における正常判定部１４は、受理テスト１８（受理テストＡ１８ａ及び受理テストＢ１８ｂの総称）によって正常の必要条件を満足すると判定されたバリアント１３に対してのみ正常判定を行う。
【００７４】
決定部１６は、正常判定の結果２３の少なくとも１つが間違いなく正常である場合には、間違いなく正常と判定されたバリアント１３の出力値を最終出力値２５として出力部１７に出力する。更に、決定部１６は、全ての正常判定の結果２３が正常か異常か不明である場合、例えば多数決決定器であれば、所定数以上のバリアント１３の出力値が一致するか否かを判断し、一致する場合にはその値を最終出力値２５として出力し、一致しない場合には例外を出力する。
【００７５】
異常監視回復装置２の実装形態は、ハードウエアでも良いし、ソフトウエアでも良い。例えば、異常監視対象のシステムがコンピュータシステムの場合、異常監視回復装置２は、制御装置、記憶装置、及び入出力装置等がバスを介して接続されて構成されるコンピュータとして実現される。例えば、図１３に示す入力部１１は入力装置として実現される。また、分配部１２、バリアントＡ１３ａ、バリアントＢ１３ｂ、受理テストＡ１８ａ、受理テストＢ１８ｂ、正常判定部Ａ１４ａ、正常判定部Ｂ１４ｂ、及び決定部１６は、各部を実現するためのプログラムを制御装置が実行することによって実現される。記憶部１５ａ及び記憶部１５ｂは、記憶装置として実現される。出力部１７は出力装置として実現される。
【００７６】
図１４は、本発明の第２実施形態における異常監視回復装置の処理の流れを示すフローチャートである。
【００７７】
図１４に示すように、分配部１２が処理を行い、入力値２１を分配すると（Ｓ５１）、ｎ個のバリアント１３が並列的に処理を行い、分配入力値２２を受け取り、自らの機能を実行し、中間出力値２３を出力する（Ｓ５２）。次に、ｎ個の受理テスト１８が並列的に処理を行い、受理テストの結果を含む中間出力値２６を出力する（Ｓ５３）。次に、受理テスト１８によって受理されたバリアント１３に対応するｍ個の正常判定部１４が並列的に処理を行い、正常判定の結果２４を出力する（Ｓ５４）。次に、決定部１６が処理を行う（Ｓ５５）。
【００７８】
決定部１６は、正常判定で「間違いなく正常」と判定されたバリアント１３が存在するか否かを確認する（Ｓ６１）。存在する場合（Ｓ６１のＹ）、決定部１６は、「間違いなく正常」と判定されたバリアント１３の中間出力値２６を最終出力値２５として出力する（Ｓ６５）。
【００７９】
存在しない場合（Ｓ６１のＮ）、決定部１６は、受理テスト１８で受理された中間出力値２６が存在するか否かを確認する（Ｓ６２）。存在する場合（Ｓ６２のＹ）、決定部１６はＳ６３に進む。存在しない場合（Ｓ６２のＮ）、決定部１６は例外を出力する（Ｓ６６）。
【００８０】
Ｓ６３では、決定部１６は、受理テスト１８で受理された中間出力値２６を取得する。そして、決定部１６は、受理された中間出力値２６から最終出力値２５を決定できるか否か確認する（Ｓ６４）。例えば、決定部１６が多数決決定器の場合、過半数を超える受理テスト１８が同じ値の中間出力値２６を受理していれば、中間出力値２６から最終出力値２５を決定できるものとする。決定できる場合（Ｓ６４のＹ）、決定部１６は、過半数を超える受理テスト１８が受理する中間出力値２６を最終出力値２５として出力する（Ｓ６５）。決定できない場合、決定部１６は例外を出力する（Ｓ６６）。
【００８１】
図１５は、本発明の第２実施形態における動作決定変数の集合を示す図である。図１５では、以下の集合が示されている。
Ｕ１：全体集合
Ｕ２：受理テストをパスする集合
Ｕ３：正常動作をもたらす集合
Ｕ３１：正常動作をもたらす集合のうち、テスト実施済の集合
Ｕ３２：正常動作をもたらす集合のうち、テスト未実施の集合
Ｕ４：受理テストをパスするにもかかわらず異常動作をもたらす集合
Ｕ５：受理テストをパスせず異常動作をもたらす集合
【００８２】
ここで、∪を和集合の記号、∩を積集合の記号とすると、Ｕ１＝Ｕ２∪Ｕ５（Ｕ２∩Ｕ５＝φ）、Ｕ２＝Ｕ３∪Ｕ４（Ｕ３∩Ｕ４＝φ）、Ｕ３＝Ｕ３１∪Ｕ３２（Ｕ３１∩Ｕ３２＝φ）、が成り立つ。
【００８３】
図１６は、本発明の第２実施形態における動作パターンを示す図である。図１６に示す表の列項目を説明する。「動作パターン」、「バリアントＡの動作決定変数の値」、「バリアントＢの動作決定変数の値」、「受理テストＡ」、「受理テストＢ」は、図４と同様である。「正常判定Ａ」、「正常判定Ｂ」は、図１２と同様である。「決定器（多数決）」、「最終出力値」、「理想出力値」は、図４と同様である。「備考」は、図１２と同様である。
【００８４】
図１６に示す凡例を説明する。「最終出力値」の列項目に図示される太線の囲み線、「受理テストＡ」及び「受理テストＢ」の列項目に図示される「○」の記号並びに「×」の記号は、図４と同様である。「正常判定Ａ」及び「正常判定Ｂ」の列項目に図示される「◎」並びに「△」の記号は、図１２と同様である。「正常判定Ａ」及び「正常判定Ｂ」の列項目に図示される「−」の記号は、受理テストが受理されていないことから、正常判定の処理を実行しないことを示す。
【００８５】
動作パターンが「Ｐ１」の場合、バリアントＡ及びＢの両方の動作パターンがＵ３１（＝正常動作をもたらす集合のうち、テスト実施済の集合）であるから、正常判定Ａ及び正常判定Ｂの両方が間違いなく正常となる。また、決定器に入力される値も一致する。そして、最終出力値は「ａ｜ｂ」（同一の値）となる。この場合、最終出力値は理想出力値と同一であるから、問題点はない。
【００８６】
同様に問題点がない動作パターンは、「Ｐ２」〜「Ｐ６」、「Ｐ９」、「Ｐ１２」、「Ｐ１３」、「Ｐ１５」、「Ｐ１６」である。特に、動作パターンが「Ｐ３」、「Ｐ４」、「Ｐ９」、「Ｐ１３」については、本発明によって、従来技術における問題点（１）の「正常値の取りこぼし」を防止することができている為（＝本発明の効果１）、最終出力値が理想出力値と同一になっている。また、動作パターンが「Ｐ１２」、「Ｐ１５」については、本発明によって、従来技術における問題点（２）の「異常値の見逃し」を防止することができている為（＝本発明の効果２）、最終出力値が理想出力値と同一になっている。
【００８７】
動作パターンが「Ｐ７」、「Ｐ８」については、最終出力値が「例外」となっており、理想出力値（＝「ａ」）と一致しない。しかしながら、バリアントＡのテストを増やすことによって、バリアントＡの動作パターンがＵ３２（＝正常動作をもたらす集合のうち、テスト未実施の集合）から、Ｕ３１（＝正常動作をもたらす集合のうち、テスト実施済の集合）に移行し、動作パターンが「Ｐ３」、「Ｐ４」の場合と同様に、最終出力値が理想出力値と同一となる。
【００８８】
また、動作パターンが「Ｐ１０」、「Ｐ１４」についても、最終出力値が「例外」となっており、理想出力値（＝「ｂ」）と一致しない。しかしながら、バリアントＢのテストを増やすことによって、バリアントＢの動作パターンがＵ３２（＝正常動作をもたらす集合のうち、テスト未実施の集合）から、Ｕ３１（＝正常動作をもたらす集合のうち、テスト実施済の集合）に移行し、動作パターンが「Ｐ９」、「Ｐ１３」の場合と同様に、最終出力値が理想出力値と同一となる。
【００８９】
尚、動作パターンが「Ｐ１１」については、従来技術における問題点（３）が残るものの、前述した通り、本発明では対象外の問題点である。
【００９０】
以上、本発明の第２実施形態における異常監視回復装置２によって、従来の冗長化の仕組みを改良し、正常な最終出力値が得られる可能性が一層高まる。更に、第２実施形態では、第１実施形態と比較して、従来技術における問題点（３）の発生する割合が低くなるという長所がある。つまり、第２実施形態では、２つのバリアントに共通のバグがあり、例外が出力できないというケースを減らすことができる。なぜなら、第２実施形態では受理テスト１８を備えているので、Ｕ５（＝受理テストをパスせず異常動作をもたらす集合）を判別できる割合が増えることによって、異常値の中間出力値２６が決定部１６に入力される割合が減るからである。
【００９１】
［第３実施形態］
次に、図１７、図１８を参照しながら、本発明の第３実施形態を説明する。以下では、第１実施形態及び第２実施形態における要素と同一の要素については同一の符号を付し、重複する説明を省略する。
【００９２】
図１７は、本発明の第３実施形態における異常監視回復装置の構成を示す図である。説明を分かり易くする為に、図１７では、バリアントを２つにしている。異常監視回復装置３は、入力部１１、分配部１２、バリアントＡ１３ａ、バリアントＢ１３ｂ、受理テストＡ１８ａ、受理テストＢ１８ｂ、正常判定部Ａ１４ａ、正常判定部Ｂ１４ｂ、記憶部（正常動作パターンＡ）１５ａ、記憶部（正常動作パターンＢ）１５ｂ、決定部１６、出力部１７、更新部１９等を備える。
【００９３】
第３実施形態における異常監視対象のシステムは、通常の動作を行うための通常モード、及び記憶部１５に記憶されている正常動作パターンを更新するための更新モードの切り替えを可能とする。ここで、図１７に示す凡例を説明する。実線の矢印は、通常モード時のデータの流れを示す。点線の矢印は、更新モード時のデータの流れを示す。
【００９４】
更新部１９は、更新モードにおける動作決定変数群の値を収集することによって、記憶部１５に記憶されている正常動作パターンを更新する。
【００９５】
異常監視回復装置３の実装形態は、ハードウエアでも良いし、ソフトウエアでも良い。例えば、異常監視対象のシステムが車載システムの場合、異常監視回復装置３は、ＥＣＵ（Electric Control Unit：電子制御装置）、センサ、アクチュエータ等が車載ネットワークを介して接続されて構成される。例えば、図１３に示す入力部１１は、車速センサ等のセンサ群として実現される。また、分配部１２、バリアントＡ１３ａ、バリアントＢ１３ｂ、受理テストＡ１８ａ、受理テストＢ１８ｂ、正常判定部Ａ１４ａ、正常判定部Ｂ１４ｂ、決定部１６、及び更新部１９は、各部を実現するためのプログラムをＥＣＵが実行することによって実現される。記憶部１５ａ及び記憶部１５ｂは、記憶装置として実現される。出力部１７は、スロットル制御用モータ等のアクチュエータ群として実現される。
【００９６】
車載システムの場合、通常モードは、車両の走行が可能なモードである。更新モードは、例えば、アクティブテスト（＝本来、一定の条件が成立しなければ作動しないアクチュエータを、作動条件にかかわらず外部診断器で作動させるテスト）を行うモードである。更新部１９は、アクティブテスト時、外部診断器と通信モジュールを介して通信を行い、記憶部１５に記憶されている正常動作パターンを更新する。
【００９７】
図１８は、本発明の第３実施形態における異常監視回復装置の処理の流れを示すフローチャートである。
【００９８】
図１８に示すように、外部診断器が更新モードによるアクティブテストを実行すると（Ｓ７１）、更新部１９は、間違いなく正常と判定される動作決定変数の値を収集する（Ｓ７２）。そして、更新部１９は、収集された動作決定変数の値に基づいて、記憶部１５に記憶されている正常動作パターンを更新する（Ｓ７３）。
【００９９】
車載システムの場合、車載システムの一部を構成するセンサ及びアクチュエータ等の経年劣化や外部要因（運転環境、運転者等）によるシステム特性の変化等に起因して、正常動作パターンとしてあるべき動作決定変数の値が、市場投入直後から変化することが考えられる。そして、市場投入前又は市場投入時に記憶部１５に記憶させた正常動作パターンをそのまま使い続けると、正常判定に誤りが発生する可能性がある。これに対して、第３実施形態によれば、システムの経年劣化やシステム特性の変化等に起因する正常動作パターンの変化にも対応することができ、正常判定の誤りを低減することができる。
【０１００】
以上、添付図面を参照しながら、本発明に係る異常監視回復装置等の好適な実施形態について説明したが、本発明はかかる例に限定されない。当業者であれば、本願で開示した技術的思想の範疇内において、各種の変更例又は修正例に想到し得ることは明らかであり、それらについても当然に本発明の技術的範囲に属するものと了解される。
【符号の説明】
【０１０１】
１、２、３………異常監視回復装置
１１………入力部
１２………分配部
１３、１３ａ、１３ｂ………バリアント
１４、１４ａ、１４ｂ………正常判定部
１５、１５ａ、１５ｂ………記憶部
１６………決定部
１７………出力部
１８、１８ａ、１８ｂ………受理テスト
１９………更新部
２１………入力値
２２、２２ａ、２２ｂ………分配入力値
２３、２３ａ、２３ｂ………中間出力値
２４、２４ａ、２４ｂ………正常判定の結果
２５………最終出力値（又は例外）
２６、２６ａ、２６ｂ………中間出力値（受理テストの結果を含む。）
Ｕ１・・・全体集合
Ｕ２・・・受理テストをパスする集合
Ｕ３・・・正常動作をもたらす集合
Ｕ３−１・・・正常動作をもたらす集合のうち、テスト実施済の集合
Ｕ３−２・・・正常動作をもたらす集合のうち、テスト未実施の集合
Ｕ４・・・受理テストをパスするにもかかわらず異常動作をもたらす集合
Ｕ５・・・受理テストをパスせず異常動作をもたらす集合
Ｕ６・・・異常動作をもたらす集合
【図１】
2013186878.tif 000003
【図２】
2013186878.tif 000004
【図３】
2013186878.tif 000005
【図４】
2013186878.tif 000006
【図５】
2013186878.tif 000007
【図６】
2013186878.tif 000008
【図７】
2013186878.tif 000009
【図８】
2013186878.tif 000010
【図９】
2013186878.tif 000011
【図１０】
2013186878.tif 000012
【図１１】
2013186878.tif 000013
【図１２】
2013186878.tif 000014
【図１３】
2013186878.tif 000015
【図１４】
2013186878.tif 000016
【図１５】
2013186878.tif 000017
【図１６】
2013186878.tif 000018
【図１７】
2013186878.tif 000019
【図１８】
2013186878.tif 000020