(57)【特許請求の範囲】
【請求項１】
互いに入出力のやり取りを行う複数のモジュールによって構成されているソフトウェアの動作を監視するソフトウェア動作監視装置であって、
モジュールの実行時の動作が記録される実行動作記録部を具備し、前記モジュールの実行時の動作を抽出し、前記実行動作記録部に記録するモジュール動作抽出部と、
予め前記モジュールの正常動作が記録されている正常動作記録部を具備し、前記実行動作記録部及び前記正常動作記録部を参照し、前記モジュールの実行時の動作が正常、又は正常であるのか否かが判別不明、のいずれかを示す正常パターン比較表を更新するモジュール動作解析部と、
前記正常パターン比較表を参照し、正常であるのか否かが判別不明であったモジュールが連続している故障伝播の度合いを示す故障伝播レベル表を更新する故障伝播解析部と、
を具備することを特徴とするソフトウェア動作監視装置。
【請求項２】
前記故障伝播解析部は、更に、前記モジュール間の距離を示すモジュール間距離表を具備し、前記モジュール間距離表も参照して前記故障伝播レベル表を更新するものであることを特徴とする請求項１に記載のソフトウェア動作監視装置。
【請求項３】
監視対象のソフトウェアは周期実行タスクとして実行され、各モジュールは前回実行時の出力値を入力値として用いるものであって、
前記ソフトウェアの実行ごとに動作を監視するものであることを特徴とする請求項１または請求項２に記載のソフトウェア動作監視装置。
【請求項４】
前記故障伝播レベル表を参照し、故障伝播の度合いを解析し、障害への進展を予測する障害予測部、
を更に具備することを特徴とする請求項１から請求項３のいずれかに記載のソフトウェア動作監視装置。
【請求項５】
前記モジュールの動作のパターンは、システムコールの時系列パターン、条件分岐パターン、他モジュールとの通信の時系列パターン等の任意の組み合わせとして定義されるものであることを特徴とする請求項１から請求項４のいずれかに記載のソフトウェア動作監視装置。
【請求項６】
監視対象のソフトウェアは連続する処理を行う複数のモジュールで構成され、より後続の処理を行う前記モジュールに対して、テスト実施済のパターンを増やすことを特徴とする請求項１から請求項５のいずれかに記載のソフトウェア動作監視装置。
【請求項７】
制御部および記憶部を具備する装置を請求項１から請求項６のいずれかに記載のソフトウェア動作監視装置として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、互いに入出力のやり取りを行う複数のモジュールによって構成されているソフトウェアの動作を監視するソフトウェア動作監視装置、及びそのプログラムに関する。
【背景技術】
【０００２】
現在、多くの産業分野において、ソフトウェアの重要性が高まるとともに、ソフトウェアが大規模かつ複雑になっている。一例を挙げると、自動車産業においては、自動車のエレクトロニクス化が進展し、いわゆる車載システムに係るソフトウェアの開発量が急増している。こうした中で、ソフトウェアをリリースする際、全ての瑕疵（設計、コーディング等の欠陥、不具合のことであり、「バグ」とも呼ばれる。）をなくすことは非常に困難である。
【０００３】
そこで、ソフトウェアに潜在的なバグが含まれていることを前提として、システムが実際に稼動している時に、ソフトウェアのバグに起因した障害を予測または検出する仕組みが考案されている。例えば、特許文献１では、ソフトウェアの実行履歴から監視対象の動作を検出する第１の解析部と、検出された動作に対して正常動作パターンからの乖離を判定する第２の解析部とを具備するソフトウェア動作監視機構が開示されている。また、前述のソフトウェア動作監視機構を計算機の基本ソフトウェア（オペレーティングシステム）に導入し、複数のソフトウェアを監視する仕組みも開示されている。
【特許文献１】特開２００６−５３７８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、監視対象のソフトウェアの規模が大きくなると、誤検出（「正常」を「異常」と誤って判定し、検出すること。）の発生の可能性が高くなる。これは、後述するように、監視対象のソフトウェアの全ての正常動作パターンがシステム稼動前に網羅されていない場合は誤検出の発生の可能性が高くなるところ、規模が大きくなるにつれて、全ての正常動作パターンを網羅することは極めて困難になるからである。
【０００５】
ここで、図１４を参照しながら、監視対象のソフトウェアの全ての正常動作パターンがシステム稼動前に網羅されていないと誤検出の発生の可能性が高くなることについて説明する。
【０００６】
図１４は、ソフトウェアの動作の全体集合を示す図である。図１４に示すように、ソフトウェアの動作は、（１）事前条件を充足しているパターン（＝部分集合（Ｂ）、（Ｃ）、（Ｄ））、または（２）事前条件を違反しているパターン（＝部分集合（Ａ）、（Ｅ））の二つに分けられる。ここで、事前条件とは、ソフトウェアが実行されるときに必ず守られていなければならない条件である。また、事前条件を充足しているパターンの中でも、（１）−（ｂ）動作が正常かつテスト実施済のパターン（＝部分集合（Ｂ））、（１）−（ｃ）動作が正常かつテスト未実施のパターン（＝部分集合（Ｃ））、（１）−（ｄ）動作が異常のパターン（＝部分集合（Ｄ））の三つに分けられる。一方、事前条件違反のパターンの中でも、（２）−（ａ）テスト実施済のパターン（＝部分集合（Ａ））、（２）−（ｂ）テスト未実施のパターン（＝部分集合（Ｅ））の二つに分けられる。
【０００７】
ところで、システム稼動前に把握ができる正常動作パターンは、図１４に示すパターンの中で、部分集合（Ｂ）のパターンのみとなる。従って、特許文献１の仕組みにおいて、検出された動作に対して正常動作パターンからの乖離を判定する第２の解析部は、部分集合（Ｂ）のパターン以外を「異常」と判定する。しかしながら、全ての正常動作パターンがシステム稼動前に網羅されていない場合、部分集合（Ｃ）のパターンが存在することになる。そして、部分集合（Ｃ）のパターンが実行された場合、第２の解析部は、「正常」の動作を「異常」の動作と判定し、誤検出が発生する。
【０００８】
また、特許文献１の仕組みについてのもう一つの問題点は、障害の予測を行うことができず、障害を未然に防ぐことができないことである。これは、監視対象がソフトウェア全体の動作であることに起因する。そして、ソフトウェア全体の動作を監視した結果、故障が発生したか、または故障が発生していないかのいずれかを検出するのみとなる。すなわち、部分的に発生する障害の兆候を捉えることはできない。
【０００９】
本発明は、前述した問題点に鑑みてなされたもので、その目的は、大規模なソフトウェアに対して、障害に至らしめる動作を正確に観測して誤検出を低減し、更に部分的に発生する障害の兆候を捉えて障害を予測できるソフトウェア動作監視装置等を提供することである。
【課題を解決するための手段】
【００１０】
前述した目的を達成するために第１の発明は、互いに入出力のやり取りを行う複数のモジュールによって構成されているソフトウェアの動作を監視するソフトウェア動作監視装置であって、モジュールの実行時の動作が記録される実行動作記録部を具備し、前記モジュールの実行時の動作を抽出し、前記実行動作記録部に記録するモジュール動作抽出部と、予め前記モジュールの正常動作が記録されている正常動作記録部を具備し、前記実行動作記録部及び前記正常動作記録部を参照し、前記モジュールの実行時の動作が正常、又は正常であるのか否かが判別不明、のいずれかを示す正常パターン比較表を更新するモジュール動作解析部と、前記正常パターン比較表を参照し、正常であるのか否かが判別不明であったモジュールが連続している故障伝播の度合いを示す故障伝播レベル表を更新する故障伝播解析部と、を具備することを特徴とするソフトウェア動作監視装置である。前記故障伝播解析部は、更に、前記モジュール間の距離を示すモジュール間距離表を具備し、前記モジュール間距離表も参照して前記故障伝播レベル表を更新するものであって良い。
【００１１】
また、監視対象のソフトウェアが周期実行タスクとして実行され、各モジュールが前回実行時の出力値を入力値として用いるものである場合、第１の発明に係るソフトウェア動作監視装置は、前記ソフトウェアの実行ごとに動作を監視するものであることが望ましい。
【００１２】
また、第１の発明に係るソフトウェア動作監視装置は、前記故障伝播レベル表を参照し、故障伝播の度合いを解析し、障害への進展を予測する障害予測部、を更に具備するものであっても良い。
【００１３】
また、前記モジュールの動作のパターンは、システムコールの時系列パターン、条件分岐パターン、他モジュールとの通信の時系列パターン等の任意の組み合わせとして定義されるものである。
【００１４】
また、監視対象のソフトウェアは連続する処理を行う複数のモジュールで構成され、より後続の処理を行う前記モジュールに対して、テスト実施済のパターンを増やすことが望ましい。
【００１５】
第１の発明に係るソフトウェア動作監視装置は、監視対象のソフトウェアの動作が正常であるところを異常と誤って判定し、検出するという誤検出の発生を低減することができる。また、第１の発明に係るソフトウェア動作監視装置は、部分的に発生する障害の兆候を捉えて障害を予測することができる。特に、監視対象のソフトウェアが周期実行タスクとして実行され、各モジュールが前回実行時の出力値を入力値として用いるものである場合、第１の発明に係るソフトウェア動作監視装置が、ソフトウェアの実行ごとに動作を監視することで、障害を正確に予測することができる。
【００１６】
第２の発明は、制御部および記憶部を具備する装置を第１の発明に係るソフトウェア動作監視装置として機能させるプログラムである。
【発明の効果】
【００１７】
本発明により、大規模なソフトウェアに対して、障害に至らしめる動作を正確に観測して誤検出を低減し、更に部分的に発生する障害の兆候を捉えて障害を予測できるソフトウェア動作監視装置等を提供することができる。
【発明を実施するための最良の形態】
【００１８】
以下図面に基づいて、本発明の実施形態を詳細に説明する。
【００１９】
最初に、用語について説明する。まず、本発明の実施の形態におけるモジュールとは、事前条件を充足した場合にのみ事後条件を満足するプログラムである。事前条件とは、モジュールが呼び出されるときに必ず守られていなければならない条件である。また、事後条件とは、モジュールが終了するときに保証しなければならない条件である。そして、モジュールの動作が正常であるとは、仕様を満足する状態、すなわち事前条件を充足する入力値を与えたときに出力値が事後条件を満足する状態をいう。一方、モジュールの動作が異常であるとは、仕様を満足しない状態、すなわち事前条件を充足する入力値を与えたときに出力値が事後条件を満足しない状態をいう。更に、モジュールが故障しているとは、モジュールが正常に動作しない状態、すなわち異常または事前条件違反の状態である。
【００２０】
次に、図１から図５を参照しながら、本発明の基本的な考え方について説明する。尚、本発明の実施形態においては、監視対象のソフトウェアは、互いに入出力のやり取りを行う複数のモジュールによって構成されているものとする。
【００２１】
図１は、モジュールの動作の全体集合を示す図である。
図１に示すように、部分集合（Ａ）は、事前条件を違反し、かつテスト実施済のパターンである。部分集合（Ａ）に対しては、モジュールの正常動作を定義することができる。
部分集合（Ｂ）は、事前条件を充足し、かつテスト実施済のパターンである。部分集合（Ｂ）に対しては、モジュールの正常動作を定義することができる。
部分集合（Ｃ）および部分集合（Ｄ）は、事前条件を充足し、かつテスト未実施のパターンである。部分集合（Ｃ）は、モジュールの動作が正常のパターンである。一方、部分集合（Ｄ）は、モジュールの動作が異常のパターンである。このように、テスト未実施のパターンについては、モジュールの動作が正常または異常のいずれであるか判断をすることができない。
部分集合（Ｅ）は、事前条件を違反しているパターンである。この場合、モジュールの定義から言えば、出力値は事後条件を満足しないものであっても良い。
本発明の実施の形態に係るソフトウェア動作監視装置は、このようにモジュールの動作を捉えて、モジュール単位の動作を監視する。
【００２２】
図２は、モジュールの結合の一例を示す図である。モジュール同士は、互いに入出力のやり取りを行うことで結合されている。図２に示す例では、モジュールＡとモジュールＢとの間では、双方向に入出力のやり取りを行う。また、モジュールＡとモジュールＤとの間では、モジュールＡの出力値をモジュールＤの入力値として用いる。また、モジュールＢとモジュールＤとの間では、直接的な入出力のやり取りはない。このように、本発明の実施の形態においては、モジュール同士が任意のトポロジで結合していても良い。
【００２３】
図３は、故障伝播の一例を示す図である。故障伝播とは、モジュールが正常に動作しないことの連鎖である。図３に示す例では、モジュールＡの出力値がモジュールＢの入力値、モジュールＢの出力値がモジュールＣの入力値とする。図３に示すように、モジュールＡの動作が「異常」（または「事前条件違反」）の場合、モジュールＡの出力値は、後続のモジュールＢの事前条件に違反する可能性が高いと推定される。そして、図３に示すように、モジュールＡの出力値がモジュールＢの事前条件に違反する場合、モジュールＢの出力値は、更に後続のモジュールＣの事前条件に違反する可能性が高いと推定される。このように、あるモジュールの動作が正常であるのか否かが判別不明の場合、後続のモジュールも正常であるのか否かが判別不明の動作になり、故障伝播が発生することになる。本発明の着眼点は、このような故障伝播を検出し、正常であるのか否かが判別不明のモジュールの特定、及びソフトウェア全体に影響を及ぼす障害への進展の予測をすることにある。
【００２４】
図４は、故障伝播と正常動作の区別を説明するための図である。図４（１）は、故障伝播の例である。図４（２）、図４（３）は、正常動作の例である。また、各例の下段には、モジュールの動作判定を行う装置（後述するソフトウェア動作監視装置は、モジュールの動作判定を行う機能を具備する。）による判定結果を示している。
【００２５】
図４（１）では、処理３１ａにおいて、モジュールＡは事前条件を充足する入力値に対して、異常の動作をしている（黒丸で図示）。この場合、モジュールの動作判定を行う装置は、モジュールＡの動作を不明と判定する。次に、処理３１ｂにおいて、モジュールＢは事前条件を違反する入力値に対して、何らかの動作をしている（黒丸で図示）。尚、事前条件を違反する入力値に対しては、動作が正常または異常のいずれであるかを判断する基準はない。この場合、モジュールの動作判定を行う装置は、モジュールＢの動作を不明と判定する。次に、処理３１ｃにおいて、モジュールＣは事前条件を違反する入力値に対して、何らかの動作をしている（黒丸で図示）。この場合、モジュールの動作判定を行う装置は、モジュールＣの動作を不明と判定する。このように、図４（１）では、故障伝播が発生している。
【００２６】
次に、図４（２）では、処理３２ａにおいて、モジュールＡは事前条件を充足する入力値に対して、正常の動作をしている（黒丸で図示）。この場合、モジュールの動作判定を行う装置は、モジュールＡの動作を不明と判定する。これは、処理３２ａにおけるモジュールＡの動作がテスト実施済でないことから、正常または異常のいずれであるかを判断できないためである。次に、処理３２ｂにおいて、モジュールＢは事前条件を充足する入力値に対して、正常の動作をしている（黒丸で図示）。この場合、モジュールの動作判定を行う装置は、モジュールＢの動作を不明と判定する。次に、処理３２ｃにおいて、モジュールＣは事前条件を充足する入力値に対して、正常の動作をしている（黒丸で図示）。この場合、モジュールの動作判定を行う装置は、モジュールＣの動作を不明と判定する。このように、図４（２）では、故障伝播が発生していないにもかかわらず、モジュールの動作判定を行う装置は、全てのモジュールの動作を不明と判定している。これでは、図４（１）の例と図４（２）の例とを区別することができず、誤検出が発生してしまう。そこで、図４（３）の例を参照し、故障伝播を正確に検出するための一つの解決手段について説明する。
【００２７】
図４（３）では、処理３３ａにおいて、モジュールＡは事前条件を充足する入力値に対して、正常の動作をしている（黒丸で図示）。この場合、モジュールの動作判定を行う装置は、モジュールＡの動作を不明と判定する。次に、処理３３ｂにおいて、モジュールＢは事前条件を充足する入力値に対して、テスト実施済み、かつ正常の動作をしている（黒丸で図示）。この場合、モジュールの動作判定を行う装置は、モジュールＢの動作を正常と判定する。次に、処理３３ｃにおいて、モジュールＣは事前条件を充足する入力値に対して、テスト実施済み、かつ正常の動作をしている（黒丸で図示）。この場合、モジュールの動作判定を行う装置は、モジュールＣの動作を正常と判定する。このように、図４（３）では、モジュールの動作判定を行う装置は、モジュールＡの動作を不明と判定しているが、後続のモジュールＢ、モジュールＣの動作を正常と判定している。
【００２８】
図４（２）と図４（３）との相違点は、図４（３）におけるモジュールＢ、モジュールＣの動作がテスト実施済であることである。すなわち、故障伝播を正確に検出するための一つの解決手段は、テスト実施済のパターンを増やすことである。特に、連続する処理を行うモジュールで構成するソフトウェアにおいて、より後続の処理を行うモジュールに対して、テスト実施済のパターンを増やすことで、先行のモジュールが不明と判定されても、後続のモジュールの動作の判定が正常に収束し、誤検出を減らすことができる。
【００２９】
図５は、テストの実施方法を説明するための図である。本発明の実施の形態では、発明の目的を達成するために、各モジュールについて、テスト未実施のパターンを可能な限り減らし、不必要に故障が伝播しないようにすることが望ましい。そのためには、次に説明するような方法でテストを実施すれば良い。
【００３０】
図５を参照しながら、テストの実施方法を説明する。図５に示す例では、モジュールＡの出力値がモジュールＸの入力値である。ここで、モジュールＡのテストが終了し、モジュールＸのテストをする場合を考える。前述の前提を満たす為には、テストデータとしてのモジュールＸの入力値集合は、モジュールＡをテストした際の出力値集合（但し、バグがあった場合には、バグを修正した後の出力値集合とする。）に加えて、モジュールＸの事前条件を充足する他の値も含むものとすれば良い。そうすると、図５に示すように、モジュールＡがテスト未実施のパターンの動作をしても（黒丸で図示）、モジュールＡの出力値がモジュールＸの事前条件を充足する限り、モジュールＸはテスト実施済のパターンの動作をする（黒丸で図示）ことになり、不必要に故障が伝播することはない。
【００３１】
次に、図６と図７を参照しながら、動作判定の具体例について説明する。図６は、動作判定の対象となるモジュール構成の一例を示す図である。図６に示すモジュールＡ、モジュールＢ、モジュールＣは、線形変換ｙ＝Ａｘ（ｘ、ｙは２次元ベクトル、Ａは２×２行列）を実行するモジュールである。具体的には、各モジュールは、入力座標に対して、右回り変換を施した座標を出力する。但し、モジュールごとに、一定の領域内に含まれる座標群を事前条件として定めている。これは、一般に、モジュール分割によってソフトウェアを構成する場合、各モジュールの責任範囲を明確にするという考え方によるものである。
【００３２】
図６の凡例で示すように、事前条件充足の領域は、線形変換を正常に行うべき領域である。事前条件違反の領域は、線形変換を正常に行わなくてもよい領域である。正常の領域は、正常に線形変換できる領域である。異常の領域は、正常に線形変換できない領域である。テスト済の領域は、正常に線形変換できるかをテストした領域である。正常の領域とテスト済の領域が重なり合う領域は、正常パターンとして定義する領域であり、モジュールの動作判定を行う装置が確実に正常と判定できる。尚、入力値が正常の領域（テスト未実施の領域を含む。）であれば、確実に、後続のモジュールにおける事前条件充足の領域に変換されるものとする。また、それ以外の領域であれば、どの領域に変換されてもよいものとする。
【００３３】
図７は、図６に例示したモジュール構成における動作判定の一例を示す図である。図７（１）は、故障伝播と判定する例である。図７（２）は、正常動作と判定する例である。各モジュールの入力値および出力値は、黒丸で図示するものとする。
【００３４】
図７（１）に示すように、モジュールＡは、事前条件を充足する入力値（ｘａ、ｙａ）に対して、異常の動作をしている。次に、モジュールＢは、事前条件を違反する入力値（ｘｂ、ｙｂ）に対して、何らかの動作をしている。次に、モジュールＣは、事前条件を違反する入力値（ｘｃ、ｙｃ）に対して、何らかの動作をしている。これらの実行結果を受けて、モジュールの動作判定を行う装置は、モジュールＡ、モジュールＢ、モジュールＣの動作を不明と判定し、故障伝播を検出する。このように、あるモジュールにおいて異常が発生した場合、後続のモジュールにおいて事前条件違反が発生することで、不明と判定する動作が連続することになり、故障伝播を検出することができる。
【００３５】
次に、図７（２）に示すように、モジュールＡは、事前条件を充足する入力値（ｘａ、ｙａ）に対して、正常の動作をしている。次に、モジュールＢは、事前条件を違反する入力値（ｘｂ、ｙｂ）に対して、正常の動作をしている。次に、モジュールＣは、事前条件を違反する入力値（ｘｃ、ｙｃ）に対して、テスト実施済、かつ正常の動作をしている。これらの実行結果を受けて、モジュールの動作判定を行う装置は、モジュールＡ、モジュールＢの動作を不明、モジュールＣの動作を正常と判定し、ソフトウェア全体の動作としては正常であると判定する。このように、図５の説明にて前述したテスト実施方法を行ったモジュールによってソフトウェアを構成すれば、各モジュールが正常の動作をしている限り、後続のモジュールにおいてテスト実施済のパターンに収束し、ソフトウェア全体の動作を正常と判定することができる。すなわち、誤検出が発生しない。
【００３６】
次に、図８を参照しながら、本発明の実施の形態に係るソフトウェア動作監視装置１のハードウェア構成について説明する。
【００３７】
図８は、ソフトウェア動作監視装置１のハードウェア構成図である。図８に示すように、ソフトウェア動作監視装置１は、制御部３、記憶部５、通信制御部７等が、バス９を介して接続される。尚、図８のハードウェア構成は一例であり、用途、目的に応じて様々な構成を採ることが可能である。
【００３８】
制御部３は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等で構成される。
【００３９】
ＣＰＵは、記憶部５、ＲＯＭ等に格納されるプログラムをＲＡＭ上のワークメモリ領域に呼び出して実行し、バス９を介して接続された各装置を駆動制御し、ソフトウェア動作監視装置１が行う後述する処理を実現する。
ＲＯＭは、不揮発性メモリであり、ソフトウェア動作監視装置１のブートプログラムやＢＩＯＳ等のプログラム、データ等を恒久的に保持している。
ＲＡＭは、揮発性メモリであり、記憶部５、ＲＯＭ等からロードしたプログラム、データ等を一時的に保持するとともに、制御部３が各種処理を行う為に使用するワークエリアを備える。
【００４０】
記憶部５は、ＨＤＤ（ハードディスクドライブ）またはＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）等であり、制御部３が実行するプログラム、プログラム実行に必要なデータ等が格納される。プログラムに関しては、ＯＳ（オペレーティングシステム）に相当する制御プログラムや、後述の処理に相当するアプリケーションプログラムが格納されている。これらの各プログラムは、制御部３により必要に応じて読み出されてＲＡＭに移され、ＣＰＵに読み出されて各種の手段として実行される。
【００４１】
通信制御部７は、通信制御装置、通信ポート等を有し、他の装置との通信を媒介する通信インタフェースであり、他の装置との通信制御を行う。
【００４２】
次に、図９から図１３を参照しながら、ソフトウェア動作監視装置１の機能を実現する構成について説明する。以下では、監視対象のソフトウェアは周期実行タスクとして実行され、各モジュールは前回実行時の出力値を入力値として用いるものとする。そして、ソフトウェア動作監視装置１は、ソフトウェアの実行ごとに動作を監視するものとする。ソフトウェアが周期実行タスクとして実行されるようなシステムの一例としては、自動車に搭載される車載システムが挙げられる。車載システムの場合、各種のセンサを具備するモジュール（車載システムの場合、一般には、ハードウェアも含めてＥＣＵ（Ｅｌｅｃｔｒｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）と呼ばれる。）が、実行周期Ｔ（Ｔは、数ｍｓ〜数十ｍｓ程度）ごとに、並列的に自らのタスクを実行する。各モジュールの出力値は、例えば、統括的なモジュールのＲＡＭ等にバッファとして一時的に保持され、次回実行時に各モジュールの入力値として用いられる。
【００４３】
図９は、ソフトウェア動作監視装置１の機能の概要を示すブロック図である。図９に示すように、ソフトウェア動作監視装置１は、モジュール動作抽出部１３、モジュール動作解析部１５、故障伝播解析部１７等を具備する。また、１１ａはモジュールＭ１、１１ｂはモジュールＭ２、１１ｃはモジュールＭｋを示しており、これらのモジュールによって監視対象のソフトウェアが構成される。以下では、モジュールを総称する場合、モジュール１１と記載し、例えば、モジュールＭ１のように特定のものを指称する場合と区別することとする。
【００４４】
モジュール動作抽出部１３は、モジュール１１の実行時の動作が記録される実行動作記録部１９を具備し、モジュール１１の実行時の動作を抽出し、実行動作記録部１９に記録する。実行動作記録部１９は、記憶部５等に記憶されるデータの集合であり、モジュール１１が実行されると、モジュール１１の実行時の動作がデータとして記録される。尚、実行動作記録部１９に係るデータは、一定期間後に削除しても良い。
【００４５】
モジュール動作解析部１５は、予めモジュール１１の正常動作が記録されている正常動作記録部２３を具備し、実行動作記録部１９及び正常動作記録部２３を参照し、モジュール１１の実行時の動作が正常、又は正常であるのか否かが判別不明、のいずれかを示す正常パターン比較表２１を更新する。正常動作記録部２３は、記憶部５等に記憶されているデータの集合であり、モジュール１１の正常動作がデータとして記録されている。正常動作記録部２３に係るデータは、監視対象のソフトウェアに係るシステムが稼動している間に内容が更新されるものではない。正常パターン比較表２１は、例えば、記憶部５に記憶されるデータの集合であり、モジュール動作解析部１５が実行されると、モジュール動作解析部１５の解析結果がデータとして記録される。尚、正常パターン比較表２１に係るデータは、一定期間後に削除しても良い。
【００４６】
故障伝播解析部１７は、正常パターン比較表２１を参照し、正常であるのか否かが判別不明であったモジュール１１が連続している故障伝播の度合いを示す故障伝播レベル表２７を更新する。また、故障伝播解析部１７は、更に、モジュール１１間の距離を示すモジュール間距離表２５を具備し、モジュール間距離表２５も参照して故障伝播レベル表２７を更新するものであっても良い。モジュール間距離表２５は、記憶部５等に記憶されているデータの集合であり、モジュール１１同士の距離がデータとして記録されている。モジュール間距離表２５に係るデータは、監視対象のソフトウェアに係るシステムが稼動している間に内容が更新されるものではない。故障伝播レベル表２７は、記憶部５等に記憶されるデータの集合であり、故障伝播解析部１７が実行されると、故障が伝播している度合いがデータとして記録される。尚、故障伝播レベル表２７に係るデータは、一定期間後に削除しても良い。
【００４７】
また、図示はしていないが、ソフトウェア動作監視装置１は、故障伝播レベル表２７を参照し、故障伝播の度合いを解析し、障害への進展を予測する障害予測部を更に具備しても良い。障害予測部は、故障伝播レベルの値が閾値を超えた場合、高い確率で障害に進展すると判断し、監視対象のソフトウェアに係るシステムを安全に停止して、再起動等の対処処理も行うと良い。
【００４８】
図１０は、モジュール動作抽出部１３の詳細を示す図である。図１０では、監視対象のソフトウェアを構成するモジュール１１の数は３つとしている。各モジュール１１は、時刻ｔ（ｔは離散時刻であり、実行周期Ｔごとに１ずつ増加する値とする。）における実行時の動作のパターンに係る情報をソフトウェア動作監視装置１に送信する。例えば、Ｐ１（ｔ）は、モジュールＭ１の時刻ｔにおける実行時の動作のパターンを示している。モジュール動作抽出部１３は、各モジュール１１から受信した時刻ｔにおける実行時の動作のパターンに係る情報を基に、実行時の動作のパターンを抽出し、実行動作記録部１９に記録する。
【００４９】
ここで、モジュール１１の動作に係るパターンについて説明する。最初に、モジュール１１の動作をオートマトンとして捉えることができる場合を考える。オートマトンとは、（１）外から、連続している情報が入力される、（２）内部に状態を保持する、（３）外へ、何らかの情報を出力する、といった特徴を持ったシステムである。特許文献１では、システムコールの発生パターンを有限オートマトンとしてモデル化することが記載されている。この仕組みを本発明の実施の形態に応用することで、モジュール１１の実行時の動作をパターンとして定義することができる。そして、モジュール動作抽出部１３は、各モジュール１１から実行したシステムコールの時系列情報を受信し、実行時の動作のパターンとして実行動作記録部１９に記録する。尚、モデル化する対象は、システムコールだけでなく、更に、監視対象のソフトウェア独自の関数の呼び出しを含めても良い。
【００５０】
次に、モジュール１１の動作をプログラムの構造からパターンの定義ができる場合を考える。例えば、Ｃ言語によって記述したプログラムであれば、ｉｆ文、ｓｗｉｔｃｈ文などの条件分岐に着目してパターンの定義ができる。そして、各モジュール１１は、実行時にどのような条件分岐を行ったかを変数に記憶し、実行終了後に当該変数の情報をソフトウェア動作監視装置１に送信する。更に、モジュール動作抽出部１３は、各モジュール１１から当該変数の情報を受信し、実行時の動作のパターンとして実行動作記録部１９に記録する。
【００５１】
次に、モジュール１１の動作を他モジュール１１との通信の時系列パターンとして捉えることができる場合を考える。例えば、図１０に示すモジュールＭ２が、モジュールＭ１、モジュールＭ３と通信を行いながら、自らのタスクを実行するものであるとする。この場合、モジュールＭ２の動作をモジュールＭ１、モジュールＭ３との通信の時系列パターンとして捉えることができる。具体的には、通信の時系列パターンは、例えば、ｈａｐｐｅｎｓ−ｂｅｆｏｒｅ関係として定義することができる。ｈａｐｐｅｎｓ−ｂｅｆｏｒｅ関係とは、例えば、モジュールＭ１からモジュールＭ２への通信が、モジュールＭ２からモジュールＭ３への通信よりも「事前に発生」するといった関係を言う。各モジュール１１は、他モジュール１１との通信に係るｈａｐｐｅｎｓ−ｂｅｆｏｒｅ関係等の時系列情報をソフトウェア動作監視装置１に送信する。そして、モジュール動作抽出部１３は、各モジュール１１からｈａｐｐｅｎｓ−ｂｅｆｏｒｅ関係等の時系列情報を受信し、実行時の動作のパターンとして実行動作記録部１９に記録する。
【００５２】
モジュール１１の動作に係るパターンは、以上の説明に係るパターンの任意の組合せとして定義される。すなわち、モジュール１１の動作に係るパターンは、システムコールの時系列パターン、条件分岐パターン、他モジュールとの通信の時系列パターン等の任意の組み合わせとして定義されるものである。
【００５３】
図１１は、モジュール動作解析部１５の詳細を示す図である。図１１では、時刻ｔにおけるモジュールＭ１〜Ｍ３の実行時の動作のパターンＰ１（ｔ）〜Ｐ３（ｔ）が実行動作記録部１９に記録されている。また、モジュールＭ１〜Ｍ３の正常動作Ｐ１〜Ｐ３が正常動作記録部２３に記録されている。
【００５４】
モジュール動作解析部１５は、Ｐ１（ｔ）とＰ１、Ｐ２（ｔ）とＰ２、Ｐ３（ｔ）とＰ３をそれぞれ比較する。比較方法は、例えば、モジュール１１の動作をオートマトンとして定義した場合、入力Ｐ１（ｔ）がオートマトンＰ１に受理されるか否かによって行う。受理された場合、Ｐ１（ｔ）は正常と判断する。また、例えば、モジュール１１の動作をパターンとして定義した場合、パターンＰ１（ｔ）がパターン群Ｐ１の中に一致するものが存在するかどうかのパターン検索によって行う。一致するものが存在した場合、Ｐ１（ｔ）は正常と判断する。
【００５５】
次に、モジュール動作解析部１５は、比較結果から正常パターン比較表２１を更新する。図１１では、ｔ＝１のとき、モジュールＭ１〜Ｍ３の全てが正常な動作をしている。次に、ｔ＝２、３のとき、モジュールＭ１が正常であるのか否かが判別不明の動作をしている。次に、ｔ＝４のとき、モジュールＭ１、Ｍ２が正常であるのか否かが判別不明の動作をしている。次に、ｔ＝５のとき、モジュールＭ１〜Ｍ３の全てが正常であるのか否かが判別不明の動作をしている。このように、正常パターン比較表２１には、複数のモジュール１１の動作が正常か否かの情報が時系列順に記録される。
【００５６】
図１２は、故障伝播解析部１７の詳細を示す図である。図１２では、正常パターン比較表２１に、時刻ｔ＝１〜５におけるモジュールＭ１〜Ｍ３の動作が正常、又は正常であるのか否かが判別不明、のいずれかの情報が記録されている。また、モジュール間距離表２５には、モジュールＭ１〜Ｍ３のそれぞれの距離の情報が記録されている。図１２では、（Ａ）モジュールＭ１の出力値がモジュールＭ２の入力値、（Ｂ）モジュールＭ２の出力値がモジュールＭ３の入力値、という入出力の関係がある場合を示している。このように、モジュール１１間の入出力の関係が一方通行の場合、すなわち、逆の入出力の関係がない場合、モジュール間距離表２５は対称行列にはならない。尚、値が「ＮＵＬＬ」のモジュール１１間は、故障が伝播しないことを意味する。従って、値が「ＮＵＬＬ」のモジュール１１間は、故障伝播レベルの算出において無視される。
【００５７】
また、図１２では、故障伝播レベル表２７に、時刻ｔ＝５における故障伝播レベルが記録されている。これは、故障伝播解析部１７が、モジュール間距離表２５を参照しない場合の例である。正常パターン比較表２１を参照すると、時刻ｔ＝５のとき、モジュールＭ１は正常であるのか否かが判別不明の動作をしており、後続のモジュールＭ２、Ｍ３も正常であるのか否かが判別不明の動作をしている。従って、故障伝播解析部１７は、モジュールＭ１について、故障が伝播した可能性のあるモジュール数が２個と判断する。そして、故障伝播解析部１７は、故障伝播レベル表２７におけるモジュールＭ１の値を「２」に更新する。また、時刻ｔ＝５のとき、モジュールＭ２は正常であるのか否かが判別不明の動作をしており、後続のモジュールＭ３も正常であるのか否かが判別不明の動作をしている。従って、故障伝播解析部１７は、故障が伝播した可能性のあるモジュール数が１個と判断する。そして、故障伝播解析部１７は、故障伝播レベル表２７におけるモジュールＭ２の値を「１」に更新する。また、時刻ｔ＝５のとき、モジュールＭ３は正常であるのか否かが判別不明の動作をしているが、後続のモジュール１１は存在しない。従って、故障伝播解析部１７は、モジュールＭ３について、故障が伝播した可能性のあるモジュール数が０個と判断する。そして、故障伝播解析部１７は、故障伝播レベル表２７におけるモジュールＭ３の値を「０」に更新する。
【００５８】
次に、故障伝播解析部１７が、モジュール間距離表２５を参照する場合を考える。この場合、例えば、モジュールＭ１の故障伝播レベルを算出する際は、（ａ）モジュールＭ１からモジュールＭ２への距離（図１２の例では第１行第２列の行列要素であり、値が「１」である。）、（ｂ）モジュールＭ１からモジュールＭ３への距離（図１２の例では第１行第３列の行列要素であり、値が「２」である。）を参照する。そして、図１２の例では、時刻ｔ＝５のとき、モジュールＭ２、Ｍ３のいずれにも故障が伝播している可能性があることから、モジュールＭ１の故障伝播レベルは、例えば、両方の距離を足した値である「３」とする。また、モジュールＭ２の故障伝播レベルを算出する際は、（ｃ）モジュールＭ２からモジュールＭ３への距離（図１２の例では第２行第３列の行列要素であり、値が「１」である。）を参照する。そして、図１２の例では、時刻ｔ＝５のとき、モジュールＭ３にも故障が伝播している可能性があることから、モジュールＭ２の故障伝播レベルは、例えば、モジュールＭ２からモジュールＭ３への距離の値である「１」とする。また、モジュールＭ３の故障伝播レベルを算出する際は、参照する値はない。従って、モジュールＭ２の故障伝播レベルは、例えば、「０」とする。
【００５９】
次に、図１３を参照しながら、ソフトウェア動作監視装置１の動作の詳細について説明する。図１３は、時刻ｔにおけるソフトウェア動作監視装置１の全体の流れを示すフローチャートである。以下では、説明の便宜上、監視対象のソフトウェアを構成する各モジュール１１は、モジュールＭ１、モジュールＭ２、・・・、モジュールＭｋの順に処理を行うものとする。また、モジュールＭ１を除いた各モジュール１１は、一つ前のモジュール１１の出力値を入力値として用いるものとする。また、故障伝播レベルの算出については、故障伝播解析部１７がモジュール間距離表２５を参照しない場合を例にして説明する。
【００６０】
図１３に示すように、ソフトウェア動作監視装置１の制御部３は、動作解析対象のモジュールＭｎ（１≦ｎ≦ｋ）を決定する（ステップ１０１）。
【００６１】
次に、制御部３は、モジュール動作抽出部１３によって、ステップ１０１で決定したモジュールＭｎの実行パスパターンＰｎ（ｔ）を抽出する（ステップ１０２）。抽出した実行パスパターンＰｎ（ｔ）は、実行動作記録部１９に記録される。尚、モジュール１１の実行動作の抽出処理は、各モジュール１１から実行動作に係る情報を受信したときに行うようにしても良い。そして、ステップ１０２の処理が全てのモジュール１１に対して終了した後、図１３に示すフローチャートに係る処理を開始しても良い。
【００６２】
次に、制御部３は、モジュール動作解析部１５によって、実行パスパターンＰｎ（ｔ）が、正常動作記録部２３に記録されているモジュールＭｎの正常パスパターンＰｎと一致するかどうか確認する（ステップ１０３）。制御部３は、例えば、オートマトン受理、パターン検索等の方法によって、実行パスパターンＰｎ（ｔ）が正常パスパターンＰｎと一致するかどうか確認する。
一致する場合、制御部３は、モジュールＭｎの動作を「正常」と判断し（ステップ１０４）、判断結果を基に正常パターン比較表２１を更新する。
一致しない場合、制御部３は、モジュールＭｎの動作を「不明」と判断し（ステップ１０５）、判断結果を基に正常パターン比較表２１を更新する。
【００６３】
次に、制御部３は、全てのモジュール１１について動作解析が終了したかどうか確認する（ステップ１０６）。
終了していない場合、制御部３は、ステップ１０１から処理を繰り返す（ステップ１０６のＮｏ）。
終了している場合、制御部３は、ステップ１０７に進む（ステップ１０６のＹｅｓ）。
【００６４】
次に、制御部３は、故障伝播解析対象のモジュールＭｎ（１≦ｎ≦ｋ）を決定する（ステップ１０７）。
【００６５】
次に、制御部３は、故障伝播解析部１７によって、正常パターン比較表２１を参照し、ステップ１０７で決定したモジュールＭｎの動作が「正常」であるかどうか確認する（ステップ１０８）。
正常である場合、制御部３は、ステップ１１０に進む。
正常であるのか否かが判別不明の場合、制御部３は、ステップ１０７で決定したモジュールＭｎの後続のモジュール１１の中で動作が「不明」であるモジュール１１の個数Ｕｎをカウントし、故障伝播レベル表２７を更新する（ステップ１０９）。
【００６６】
次に、制御部３は、全てのモジュール１１について故障伝播解析が終了したかどうか確認する（ステップ１１０）。
終了していない場合、制御部３は、ステップ１０７から処理を繰り返す（ステップ１１０のＮｏ）。
終了している場合、制御部３は、ステップ１１１に進む（ステップ１１０のＹｅｓ）。
【００６７】
次に、制御部３は、障害進展の度合いを解析し（ステップ１１１）、必要があれば対処処理を行い、処理を終了する。
【００６８】
尚、説明の便宜上、監視対象のソフトウェアを構成する各モジュール１１は、モジュールＭ１、モジュールＭ２、・・・、モジュールＭｋの順に処理を行うとしたが、本発明が適用できるソフトウェアはこのようなものに限られない。本発明は、モジュール１１間の入出力の関係等を反映したモジュール間距離表２５を用いることで、モジュール１１同士が複雑に結合されているソフトウェアであっても、適用することができる。
【００６９】
以上説明したように、本発明の実施の形態によれば、ソフトウェア監視装置１は、ソフトウェアを構成する各モジュール１１の動作を個別的に監視し、他のモジュール１１への故障伝播を検出する。これによって、ソフトウェア監視装置１は、特定のモジュール１１が正常であるのか否かが判別不明の動作（例えば、テスト未実施の正常パターンの動作）をしているが、他のモジュール１１が正常の動作をしている場合などに即座にソフトウェア全体を故障と判断せず、誤検出を低減することができる。
【００７０】
また、ソフトウェア監視装置１は、部分的な障害の兆候を捉えることができるので、ソフトウェア全体に影響を及ぼす障害への進展を予測することができる。特に、監視対象のソフトウェアが周期実行タスクとして実行され、各モジュール１１は前回実行時の出力値を入力値として用いる場合、図１１に示した正常パターン比較表２１のように、周期ごとに故障伝播を把握することができる為、障害予測において高い効果を奏する。
【００７１】
以上、添付図面を参照しながら、本発明に係るソフトウェア監視装置等の好適な実施形態について説明したが、本発明はかかる例に限定されない。当業者であれば、本願で開示した技術的思想の範疇内において、各種の変更例又は修正例に想到し得ることは明らかであり、それらについても当然に本発明の技術的範囲に属するものと了解される。
【図面の簡単な説明】
【００７２】
【図１】モジュールの動作の全体集合を示す図
【図２】モジュールの結合の一例を示す図
【図３】故障伝播の一例を示す図
【図４】故障伝播と正常動作の区別を説明するための図
【図５】テストの実施方法を説明するための図
【図６】動作判定の対象となるモジュール構成の一例を示す図
【図７】図６に例示したモジュール構成における動作判定の一例を示す図
【図８】ソフトウェア動作監視装置１のハードウェア構成図
【図９】ソフトウェア動作監視装置１の機能の概要を示すブロック図
【図１０】モジュール動作抽出部１３の詳細を示す図
【図１１】モジュール動作解析部１５の詳細を示す図
【図１２】故障伝播解析部１７の詳細を示す図
【図１３】時刻ｔにおけるソフトウェア動作監視装置１の全体の流れを示すフローチャート
【図１４】ソフトウェアの動作の全体集合を示す図
【符号の説明】
【００７３】
１………ソフトウェア動作監視装置
３………制御部
５………記憶部
７………通信制御部
９………バス
１１………モジュール
１３………モジュール動作抽出部
１５………モジュール動作解析部
１７………故障伝播解析部
１９………実行動作記録部
２１………正常パターン比較表
２３………正常動作記録部
２５………モジュール間距離表
２７………故障伝播レベル表
【図１】
0005056396.tif 000002
【図２】
0005056396.tif 000003
【図３】
0005056396.tif 000004
【図４】
0005056396.tif 000005
【図５】
0005056396.tif 000006
【図６】
0005056396.tif 000007
【図７】
0005056396.tif 000008
【図８】
0005056396.tif 000009
【図９】
0005056396.tif 000010
【図１０】
0005056396.tif 000011
【図１１】
0005056396.tif 000012
【図１２】
0005056396.tif 000013
【図１３】
0005056396.tif 000014
【図１４】
0005056396.tif 000015