(57)【要約】  複数のコンポーネントを含むコンピュータ・システムにおいて、コンピュータがコンポーネントの動作状態を検出する。コンポーネントにコマンドライン・インタフェース上のコマンド（ＣＬＩコマンド）を送るステップＳ１１と、コンポーネントからＣＬＩコマンドに対する出力文字列を受け取るステップＳ１２と、出力文字列をデータの意味を表すラベル文字列と、データ自体を表すデータ文字列とを含む有意部分文字列に分解するステップＳ１３と、有意部分文字列の各々に対応する正規表現を設定するステップＳ１４と、設定された正規表現の各々と対応する有意部分文字列との差異を文字列距離として算出するステップＳ１５と、算出された文字列距離を対応する所定のしきい値と比較するステップＳ１６と、比較の結果に応じて、コンポーネントの動作状態を出力するステップＳ１７と、を含む。
2014057743.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンポーネントを含むコンピュータ・システムにおいて、コンピュータがコンポーネントの動作状態を検出するための方法であって、
コンポーネントにコマンドライン・インタフェース上のコマンド（ＣＬＩコマンド）を送るステップと、
前記コンポーネントから前記ＣＬＩコマンドに対する出力文字列を受け取るステップと、
前記出力文字列をデータの意味を表すラベル文字列と、データ自体を表すデータ文字列とを含む有意部分文字列に分解するステップと、
前記有意部分文字列の各々に対応する正規表現を設定するステップと、
設定された前記正規表現の各々と、対応する前記有意部分文字列との差異を文字列距離として算出するステップと、
算出された前記文字列距離を対応する所定のしきい値と比較するステップと、
前記比較の結果に応じて、前記コンポーネントの動作状態を出力するステップと、を含む方法。
【請求項２】
前記有意部分文字列は、前記出力文字列の前記データ文字列として、ユーザにとって見やすくなるための文字列をさらに含む、請求項１の方法。
【請求項３】
前記正規表現は、対応する前記有意部分文字列が採り得る文字列範囲を含む、請求項１の方法。
【請求項４】
前記文字列距離を算出するステップは、編集距離（Edit Distance）を用いて前記文字列距離を算出する、請求項１の方法。
【請求項５】
前記コンポーネントの動作状態を出力するステップは、前記文字列距離が対応する所定のしきい値よりも大きい場合に、記憶装置のログに残すことあるいは表示装置に警告を表示させることの少なくともいずれか一方をおこなうことを含む、請求項１の方法。
【請求項６】
請求項１〜５のいずれか１項の各ステップを前記コンピュータに実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・システムにおけるコンピュータによるコンポーネントの動作状態の検出に関し、より具体的には、コンピュータによるコマンドライン・インタフェース上のコマンド（以下「ＣＬＩコマンド」と呼ぶ）を用いたコンポーネントの動作状態の検出方法に関する。
【背景技術】
【０００２】
コンピュータ・システムが大規模化してくると、複数の汎用的なモジュールやデバイスを組み合わせてシステムを構成することがある。このようなシステムにおいて、各モジュールやデバイスの動作状態を調べるために、それらが提供するＣＬＩコマンドを呼び出し、そのＣＬＩコマンドに対する出力文字列を解析するプログラム（以下「出力解析プログラム」と呼ぶ）を作成し利用することがある。【０００３】
出力解析プログラムを正しく作成するために、ＣＬＩコマンドに対する出力形式を知る必要があるが、通常ＣＬＩコマンドに対する詳細かつ厳密な出力形式を知ることは非常に困難である。そのため、ある時点での実際のＣＬＩコマンドに対する出力形式に合わせてプログラミングすることになる。したがって、ＣＬＩコマンドに対する出力形式が変更された場合には、出力解析プログラムが正しく動作しなくなる可能性がある。例えば、テスト中に、ＣＬＩコマンドに対する出力形式が変更されたことによって出力解析プログラムが突然動作しなくなることもある。【０００４】
出力解析プログラムはシステムの状態を監視するために作られているため、出力解析プログラムが動かなくなることはシステムテストにおいて大きなインパクトがある。例えば、システムのテストを実行する前には、テスト対象のシステムが正しく動作しているか確認する必要があり、出力解析プログラムが動かない場合には、この確認が行えなくなってしまうからである。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開2010-271875号公報
【特許文献２】特許第4796664号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、上述した従来の出力解析プログラムを用いた場合の問題を解決／軽減することであって、具体的には、ＣＬＩコマンドに対する出力形式が変更された場合であっても、ＣＬＩコマンドに対する出力文字列を解析することにより、テスト対象のシステム（コンポーネント、モジュール、デバイス等）の動作状態を検出／確認することを可能にすることである。
【課題を解決するための手段】
【０００７】
本発明は、複数のコンポーネントを含むコンピュータ・システムにおいて、コンピュータがコンポーネントの動作状態を検出するための方法を提供する。その方法は、コンポーネントにＣＬＩコマンドを送るステップと、コンポーネントからＣＬＩコマンドに対する出力文字列を受け取るステップと、出力文字列をデータの意味を表すラベル文字列と、データ自体を表すデータ文字列とを含む有意部分文字列に分解するステップと、有意部分文字列の各々に対応する正規表現を設定するステップと、設定された正規表現の各々と対応する有意部分文字列との差異を文字列距離として算出するステップと、算出された文字列距離を対応する所定のしきい値と比較するステップと、その比較の結果に応じて、コンポーネントの動作状態を出力するステップと、を含む。【０００８】
本発明の方法によれば、コンポーネントからのＣＬＩコマンドに対する出力文字列を有意部分文字列に分解し、各有意部分文字列を対応する正規表現と比較して、そのコンポーネントの動作状態を検出するので、たとえＣＬＩコマンドに対する出力形式が変更された場合であっても、コンポーネントの動作状態を検出し出力することができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の方法が実施されるコンピュータ・システムの構成例を示すブロック図である。
【図２】本発明の方法を実行するコンピュータの構成例を示す図である。
【図３】ＣＬＩコマンドに対する出力文字列の一実施形態を示す図である。
【図４】図３の出力文字列を有意部分文字列に分解した一実施形態の図である。
【図５】本発明の方法の一実施形態のフローを示す図である。
【図６】本発明の方法の一実施形態のフローを示す図である。
【発明を実施するための形態】
【００１０】
図面を参照しながら本発明の実施の形態を説明する。図１は、本発明の方法が実施されるコンピュータ・システムの構成例を示す図である。システム１００は、イーサネット（登録商標）・スイッチ（ＬＡＮスイッチ）４０を介して相互に通信可能に接続されたホスト（サーバー）１０、ＰＣ（端末）２０、ネットワーク・ドライブ３０を含む。ネットワーク・ドライブ３０は、ＨＤＤやテープドライブ等の記憶手段を含む。これらの各装置は、本発明で使用する「コンポーネント」の１つとなり、また各装置に付随するモジュールやデバイスも「コンポーネント」の１つとなり得る。図１では、ホスト（サーバー）１０、ＰＣ（端末）２０、およびネットワーク・ドライブ３０は、それぞれ１つしか描かれていないが、これはあくまで例示であって、各装置がそれぞれ２以上の任意の台数を含むことができることは言うまでもない。
【００１１】
本発明の方法は、図１の構成において、例えばＰＣ２０が、サーバー１０やネットワーク・ドライブ３０からからダウンロードしたソフトウェア、あるいは自己の内蔵する記憶手段（ＨＤＤ等）内に保管されたソフトウェアを呼び出して実行することにより実施される。なお、ネットワークに接続されないスタンドアローンのＰＣによって、本発明の方法が実施可能であることは言うまでもない。
【００１２】
図２は、本発明の方法を実行するコンピュータの構成例を示すブロック図である。図２では、図１のＰＣ２０の構成例を例示している。ＰＣ２０は、バス２３０を介して相互に接続された演算処理装置（ＣＰＵ）２００、記憶手段２１０、各種Ｉ／Ｆ２２０を含む。各種Ｉ／Ｆ２２０は、入力Ｉ／Ｆ、出力Ｉ／Ｆ、外部記憶Ｉ／Ｆ、外部通信Ｉ／Ｆ等を含む総称として用いられ、各Ｉ／Ｆが、それぞれ対応するキーボード、マウス等の入力手段２４０、ＣＲＴ、ＬＣＤ等の表示手段２５０、ＵＳＢ接続の半導体メモリやＨＤＤ等の外部記憶手段２６０等に接続する。記憶手段２１０は、ＲＡＭ、ＲＯＭ等の半導体メモリ、ＨＤＤ等を含むことができる。
【００１３】
ここで、本発明の方法において使用する各用語について説明する。以下の説明では、ＣＬＩコマンドとしてLinux（登録商標）システムで用いられるｄｆコマンドを例にとり説明する。ｄｆコマンドは、システムにマウントされたファイルシステムの情報（ディスク残量等）を出力させるためのコマンドである。なお、本発明で使用可能なＣＬＩコマンドは、ｄｆコマンドに限定されるものではなく、他の任意のＣＬＩコマンドを使用することができる。
【００１４】
（Ａ）出力文字列
図３にｄｆコマンドに対する出力文字列の一実施形態を示す。１列目のFilesystemは、ファイルシステム（デバイス）名を意味する。２列目の1K-blocksは、最大サイズ（容量）を意味する。３列目のUsedは、使用されているサイズを意味する。４列目のAvailableは、利用可能なサイズ（残量）を意味する。５列目のUse%は、使用されているサイズの割合（％）を意味する。６列目のMounted onは、デバイスのマウント先を意味する。各列において、２行目以降が実際のデータを示している。例えば、５列目のUse%においては、デバイス：/dev/sda2では91%使用済みであり、デバイス：tmpfsでは0%使用済みであり、デバイス：/dev/gpfs0では30%使用済みであることをそれぞれ示している。
【００１５】
（Ｂ）有意部分文字列
図４に、図３のｄｆコマンドに対する出力文字列を有意部分文字列に分解した一実施形態を示す。図４において、［・・・］で囲われた各部分が有意部分文字列に相当する。有意部分文字列は、出力文字列において意味のある部分文字列のことを意味する。意味のある部分文字列とは、例えば以下のように分類することができる。
（ｉ）データの意味を表す文字列（Filesystem、Used等）
（ｉｉ）データ自体を表す文字列 （/dev/sda2、115357916等）
（ｉｉｉ）出力を見やすくするための文字列（空白部分、区切り文字、改行等）
ここで、（ｉ）データの意味を表す文字列は、コマンドを実行する環境・タイミングに関わらず、常に同じ出力が現れることが期待できるので、便宜上、ラベル文字列と呼ぶことができる。また、（ｉｉ）データ自体を表す文字列と（ｉｉｉ）出力を見やすくするための文字列は、コマンドを実行する環境やタイミングによって出力が変化し得るので、便宜上、各々をデータ文字列と呼ぶことができる。
【００１６】
（Ｃ）正規表現
各有意部分文字列について、実際にＣＬＩコマンドを実行しその出力を見ることで、「どのような出力があり得るのか」を推測することができる。この情報を元に、ＣＬＩコマンドにおける各有意部分文字列について、実際の出力とマッチする正規表現を定義することができる。例えば、上述したｄｆコマンドの出力のうち、「Use%」列について考える。ｄｆコマンドの出力の詳細な定義を知らなくても、「Use%」という文字列等から、この列は対応するファイルシステムの使用量を百分率で表しているものだと推測できる。このことから、「Use%」列の値は、「0%から100%の範囲にある整数の百分率の値」であると推測できる。
【００１７】
また、ｄｆコマンドを何度か実行することで、この値の最後は常に%で終わる、という事実も確認できるはずである。したがって、この列に現れることが期待される値を、例えばUnix（登録商標）システムで一般的に用いられる正規表現で表すと“（0｜［0-9］［0-9］｜100）%”となる。ここで、0と100は0〜100％の範囲を意味し、［0-9］と［0-9］は、１ケタ目が0〜9までの整数をとり、２ケタ目も同じように0〜9までの整数をとることを意味する。
【００１８】
このようにして、全ての有意部分文字列について、コマンド出力の形式が変わらない限り、実際の出力の対応する部分とマッチする正規表現を定義できる。ここで、本発明では出力形式の仕様が分からないことを前提としているので、正規表現は一意には定まらないことに注意する。例えば、上記の「Use%」列の場合、「99.5%」という実数値の出力は許容していないが、実際にはあり得るかもしれない。したがって、正規表現を決める場合、「警告を出して欲しいあるいは停止して欲しいデータ」に対しては、マッチしないような正規表現を用いるのがより好ましい。
【００１９】
（Ｄ）文字列距離
文字列距離を算出するために、最初に以下のような言葉を定義する。あるＣＬＩコマンドCの、ある時点での実際の出力をO(C)とし、O(C)における有意部分文字列の列をO=（o1、o2、・・・、oN）とする。このＣＬＩコマンドCに対して、それが出力すると期待できる出力として、期待出力Pを定義する。ただし、Pとは以下で定義するような（E、 A、 B）からなる3つ組である。
E = （e1、 e2、・・・、eN）: eiはi番目の有意部分文字列に対する正規表現
A =｛i｜i番目の有意部分文字列がラベル文字列｝
B =｛i｜i番目の有意部分文字列がデータ文字列｝
# A + B = E かつ A ∩ B = 空集合だからBは必要ないが、説明の便宜上AとBの両方を導入する。
例えば、図４に示したｄｆコマンドに対する有意部分文字列の「Use%」列の20番目にある有意部分文字列（91%）を例に取ると、O=（o1、o2、・・・、oN）とE = （e1、 e2、・・・、eN）の中のo20とe20とは、
o20 = 91%
e20 =（0｜［0-9］［0-9］｜100）%
と表すことができる。他の順番（ｉ）の有意部分文字列（oi）についても同様に表すことができる。
【００２０】
次に、1≦ｉ≦Ｎなiに対して、eiとoiの文字列距離D（ei、oi）を、次のような性質を持つ関数と定義する。
（ｉ）実際の出力oiが定義された正規表現eiと一致した場合、D（ei、oi）=0
（ｉｉ）実際の出力oiが定義された正規表現と異なれば異なるほどD（ei、oi）は大きくなる。
（ｉｉｉ）D（ei、oi）は0以上の実数
例えば文字列距離D（ei、oi）は、編集距離（Edit Distance）を用いて算出することができる。例えば、上述した「Use%」列のo20 = 91%、e20 =（0｜［0-9］［0-9］｜100）%の場合を例にとると、実際の出力に“％”が無い場合、あるいは“105%”と100以外の３桁の数字になっている場合は、D（e20、o20）=1となり、これらの両方が違っている場合（％なしで100以外の３桁の数字）は、D（e20、o20）=2となる、といったように相違点が増えるにつれて数値が大きくなるように文字列距離D（ei、oi）を算出する。
【００２１】
次に、図５と図６を参照しながら、上述した（Ａ）出力文字列、（Ｂ）有意部分文字列、（Ｃ）正規表現、および（Ｄ）文字列距離を用いた本発明の方法の一実施形態のフローについて説明する。なお、両図の方法のフローは、図２に例示したコンピュータ（ＰＣ２０）が対応するソフトウェアを実行することにより実施される。
【００２２】
最初に図５を参照する。ステップＳ１１において、コンピュータがコンポーネントにＣＬＩコマンドを送る。ＣＬＩコマンドは、例えば上述したｄｆコマンド等である。ステップＳ１２において、コンピュータがコンポーネントからＣＬＩコマンドに対する出力文字列を受け取る。出力文字列は、例えば上述した図３に例示されるｄｆコマンドに対する出力文字列等である。ステップＳ１３において、受け取った出力文字列をデータの意味を表すラベル文字列と、データ自体を表すデータ文字列とを含む有意部分文字列に分解する。有意部分文字列は、図４を参照して上述したように、データ文字列としてユーザにとって見やすくなるための文字列をさらに含むことができる。
【００２３】
ステップＳ１４において、得られた有意部分文字列の各々に対応する正規表現を設定する。正規表現の内容は既に上述した通りであり、予め各有意部分文字列について定義したものを記憶手段（メモリ）に格納しておき、これを呼び出して使用することができる。ステップＳ１５において、設定された正規表現の各々と、対応する有意部分文字列との差異を文字列距離として算出する。文字列距離の算出は、上述した（Ｄ）文字列距離D（ei、oi）において説明した通りであり、各有意部分文字列について算出される。
【００２４】
ステップＳ１６において、算出された文字列距離を対応する所定のしきい値と比較する。所定のしきい値は、対応する有意部分文字列（ラベル文字列）に対して個別に設定される。しきい値として、例えば以下の３つのしきい値を定義する。
T1: ゆるいしきい値
T2: 厳しいしきい値（例えば、T2=T1＊2）
T3: 全体のしきい値（例えば、T3=T1＊N、Nは有意部分文字列の総数）
これらはシステム（コンポーネント）の特性によって静的に定義できる。この３つのしきい値T1〜T3と文字列距離D（ei、oi）との比較については、図６を参照しながらさらに後述する。
【００２５】
ステップＳ１７において、ステップＳ１６の比較の結果に応じて、コンポーネントの動作状態を出力する。具体的には、比較の結果に応じて、その結果を記憶装置のログに残す、あるいは表示装置に警告を表示させる、少なくともいずれか一方をおこなう。ステップＳ１８において、全ての文字列距離と対応するしきい値との比較が終了したか否かを判定する。判定結果がＮｏの場合は、ステップＳ１６に戻り、さらにステップＳ１６とＳ１７を繰り返す。判定結果がＹｅｓの場合は、一連の処理を終了する。ユーザは、ログに記憶された情報（結果）を後から見ることにより、コンポーネントの動作状態を事後的に確認することができる。また、表示装置に表示される警告によって、ユーザは警告が表示される時点で直ちにコンポーネントの動作を停止させることが可能となる。
【００２６】
次に、図６を参照しながら、上述した３つのしきい値T1〜T3と文字列距離D（ei、oi）との比較について説明する。ステップＳ２０において、文字列距離D（ei、oi）の初期化をおこなう。すなわち、ｉ＝１およびＳ＝０がセットされる。Ｓの意味は後述する。ステップＳ２１において、ｉ≦Ｎを判定する。この判定がＹｅｓの場合、ステップＳ２２において、D（ei、oi）＊W(i) ≧T2を判定する。ここで、T2は上述した厳しいしきい値である。
【００２７】
一方、W(i)は、i番目の有意部分文字列の重み係数を意味する。W(i)は、eiとoiが異なっていることに対する問題の程度（重要性）の大きさを表すものである。例えば、i番目の有意部分文字列について、事前に用意した正規表現eiと出力oiとが少しでも異なっていれば警告を出して欲しい場合、W(i)は大きい値に設定する。逆に、正規表現eiと出力oiとが多少異なっていても、それが大きな問題ではない（重要でない）場合は、W(i)は小さい値に設定する。
【００２８】
ステップＳ２２の判定がＹｅｓの場合、ステップＳ２７において、その結果をログに残すこと、あるいは警告表示のいずれか一方または双方をおこなう。ステップＳ２２の判定がＮｏの場合、ステップＳ２３において、D（ei、oi）＊W(i) ≧T1を判定する。ここで、T1は上述したゆるいしきい値である。この判定がＹｅｓの場合、ステップＳ２４において、その結果をログに残すこと、あるいは警告表示のいずれか一方または双方をおこなう。ステップＳ２３の判定がＮｏの場合、ステップＳ２５において、S＝S＋D（ei、oi）＊W(i)、ｉ＝ｉ＋１をセットし、ステップＳ２１に戻り一連のステップを繰り返す。ここで、ＳはD（ei、oi）＊W(i)の合計、すなわちΣ（D（ei、oi）＊W(i)、ｉ＝１〜Ｎ）を意味する。
【００２９】
ステップＳ２１の判定がＮｏの場合、ステップＳ２６において、S≧T3を判定する。すなわち、D（ei、oi）＊W(i)の合計Ｓ（ΣD（ei、oi）、ｉ＝1〜N）を上述した全体のしきい値と比較する。この判定がＹｅｓの場合、ステップＳ２７において、その結果をログに残すこと、あるいは警告表示のいずれか一方または双方をおこなう。ステップＳ２６の判定がＮｏの場合、一連の処理を終了する。
【００３０】
図６に示した一連のフロー（ステップ）は、総括的に以下のように表現することができる。
（ａ）ＣＬＩコマンドCを実行したときに、その出力文字列を有意文字列O(C)= ｛o1、・・・、oN｝に分割する。
（ｂ）予めあらかじめ用意しておいた期待出力P を用いて、各iについて文字列距離D（ei、oi）と重みW(i)の積D（ei、oi）＊W(i)を求める。
（ｃ）積D（ei、oi）＊W(i)としきい値T1、T2とを比較する。
（ｄ）積D（ei、oi）＊W(i)がT2以上であれば、ログの出力または警告表示をおこなって終了する。
（ｅ）D（ei、oi）＊W(i)が、T1以上であればログの出力または警告表示をおこなうが、コンポーネントの動作は継続する。
（ｆ）さらに、全ての出力oiについての積D（ei、oi）＊W(i)の和を考慮し、D（ei、oi）＊W(i)の合計Ｓ（ΣD（ei、oi）＊W(i)、ｉ＝1〜N）の値とT3との比較を最後に行い、この和がT3以上であった場合も、ログの出力または警告表示をおこなって終了する。
【００３１】
上述した実施形態により詳細に説明された本発明の方法によれば、ＣＬＩコマンドに対する出力形式が変更された場合であっても、ＣＬＩコマンドに対する出力文字列を解析することにより、テスト対象のシステム（コンポーネント、モジュール、デバイス等）の動作状態を検出／確認し、その動作を停止させる等の対応を適切におこなうことが可能となる。
【００３２】
本発明の実施形態について、図を参照しながら説明をした。しかし、本発明はこれらの実施形態に限られるものではない。本発明はその趣旨を逸脱しない範囲で当業者の知識に基づき種々なる改良、修正、変形を加えた態様で実施できるものである。
【符号の説明】
【００３３】
１０  サーバー（ホスト）
２０  ＰＣ
３０  ネットワーク・ドライブ
４０  イーサネット（登録商標）・スイッチ（ＬＡＮスイッチ）
１００  コンピュータ・システム
【図１】
2014057743.tif 000003
【図２】
2014057743.tif 000004
【図３】
2014057743.tif 000005
【図４】
2014057743.tif 000006
【図５】
2014057743.tif 000007
【図６】
2014057743.tif 000008
【国際調査報告】
2014057743.tif 000009
2014057743.tif 000010
2014057743.tif 000011
2014057743.tif 000012