(57)【要約】  第１情報処理装置（２０００）は、辞書データ（３０）を用いて、複数のイベント履歴（１２）によって表されるイベント列の代替表現（２０）を特定する。第１情報処理装置（２０００）は、特定された代替表現（２０）を含む情報を出力する。辞書データ（３０）は、イベント列と、そのイベント列に対応する代替表現（２０）とを対応付けて示す。
2020065960.tif 000002
【特許請求の範囲】
【請求項１】
辞書データを用いて、複数のイベント履歴によって表されるイベント列の代替表現を特定する特定部と、
前記特定された代替表現を含む情報を出力する出力部と、を有し、
前記辞書データは、イベント列と、そのイベント列に対応する代替表現とを対応付けて示す、情報処理装置。
【請求項２】
前記特定部は、
同一の動作主体の動作によって発生した各イベントの前記イベント履歴で構成されるイベント列から、前記辞書データに示されるいずれかのイベント列とマッチする部分イベント列を１つ以上抽出し、
前記部分イベント列とマッチした前記辞書データのイベント列に対応する代替表現を、その部分イベント列に対応する代替表現として特定する、請求項１に記載の情報処理装置。
【請求項３】
前記特定部は、
複数のイベント履歴を示すイベント履歴列を取得し、前記イベント履歴列に含まれる複数のイベント履歴を、イベントの動作主体ごとのグループに分け、
前記グループごとに、そのグループに含まれる複数のイベント履歴で構成されるイベント列から、前記辞書データに示されるいずれかのイベント列とマッチする部分イベント列を抽出する、請求項２に記載の情報処理装置。
【請求項４】
前記出力部は、複数のイベント履歴で構成されるイベント列について、そのイベント列から抽出した各前記部分イベント列をその部分イベント列とマッチした前記代替表現で置き換えたイベント列を生成し、前記生成したイベント列を表す情報を出力する、請求項２又は３に記載の情報処理装置。
【請求項５】
前記辞書データが示す代替表現は、関数の識別情報を含み、
前記辞書データが示すイベント列は、対応づけられた識別情報によって特定される関数の実行によって生じるイベントの列を示す、請求項１乃至４いずれか一項に記載の情報処理装置。
【請求項６】
前記関数は API（Application Programming Interface）である、請求項５に記載の情報処理装置。
【請求項７】
コンピュータによって実行される制御方法であって、
辞書データを用いて、複数のイベント履歴によって表されるイベント列の代替表現を特定する特定ステップと、
前記特定された代替表現を含む情報を出力する出力ステップと、を有し、
前記辞書データは、イベント列と、そのイベント列に対応する代替表現とを対応付けて示す、制御方法。
【請求項８】
前記特定ステップにおいて、
同一の動作主体の動作によって発生した各イベントの前記イベント履歴で構成されるイベント列から、前記辞書データに示されるいずれかのイベント列とマッチする部分イベント列を１つ以上抽出し、
前記部分イベント列とマッチした前記辞書データのイベント列に対応する代替表現を、その部分イベント列に対応する代替表現として特定する、請求項７に記載の制御方法。
【請求項９】
前記特定ステップにおいて、
複数のイベント履歴を示すイベント履歴列を取得し、前記イベント履歴列に含まれる複数のイベント履歴を、イベントの動作主体ごとのグループに分け、
前記グループごとに、そのグループに含まれる複数のイベント履歴で構成されるイベント列から、前記辞書データに示されるいずれかのイベント列とマッチする部分イベント列を抽出する、請求項８に記載の制御方法。
【請求項１０】
前記出力ステップにおいて、複数のイベント履歴で構成されるイベント列について、そのイベント列から抽出した各前記部分イベント列をその部分イベント列とマッチした前記代替表現で置き換えたイベント列を生成し、前記生成したイベント列を表す情報を出力する、請求項８又は９に記載の制御方法。
【請求項１１】
前記辞書データが示す代替表現は、関数の識別情報を含み、
前記辞書データが示すイベント列は、対応づけられた識別情報によって特定される関数の実行によって生じるイベントの列を示す、請求項７乃至１０いずれか一項に記載の制御方法。
【請求項１２】
前記関数は API（Application Programming Interface）である、請求項１１に記載の制御方法。
【請求項１３】
請求項７乃至１２いずれか一項に記載の制御方法の各ステップをコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は履歴の管理に関する。
【背景技術】
【０００２】
種々のイベントの履歴を管理する技術が開発されている。例えば特許文献１は、循環バッファで調査対象イベントのログを管理する技術を開示している。循環バッファであるため、バッファの最後尾までログが書き込まれたら、バッファの先頭に戻り、既存のログを上書きってログの書き込みが継続される。ただし、所定ＩＤのイベントが格納されている領域については、上書きを行わないようにする。【０００３】
特許文献２は、ログのデータ量が閾値以上になった場合に、ログファイルからエラーログ及びエラーログに関連するログを抽出し、抽出したログ以外のログをログファイルから削除する技術を開示している。ここで、エラーログに関連するログは、エラーログの前後ｎ秒に記録されたログ、又はエラーログの前後ｎ件に記録されたログである。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−１４６０７４号公報
【特許文献２】特開２０１３−０６５２４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１や特許文献２の技術を利用すると、特定のイベント以外のイベントについての情報をログから削除することができる。しかしながら、これらの技術では、当該特定のイベントについての情報はログにそのまま残ることになる。そのため例えば、ログに残すように設定された特定のイベントが多く発生した場合には、ログのサイズが大きくなってしまう。【０００６】
本発明は、上述の課題に鑑みてなされたものであり、その目的の一つは、イベントの履歴を効率的に管理する技術を提供することである。
【課題を解決するための手段】
【０００７】
本発明の情報処理装置は、１）辞書データを用いて、複数のイベント履歴によって表されるイベント列の代替表現を特定する特定部と、２）特定された代替表現を含む情報を出力する出力部と、を有する。辞書データは、イベント列と、そのイベント列に対応する代替表現とを対応付けて示す。【０００８】
本発明の制御方法はコンピュータによって実行される。当該制御方法は、１）辞書データを用いて、複数のイベント履歴によって表されるイベント列の代替表現を特定する特定ステップと、２）特定された代替表現を含む情報を出力する出力ステップと、を有する。辞書データは、イベント列と、そのイベント列に対応する代替表現とを対応付けて示す。【０００９】
本発明のプログラムは、本発明の制御方法が有する各ステップをコンピュータに実行させる。
【発明の効果】
【００１０】
本発明によれば、イベントの履歴を効率的に管理する技術が提供される。
【図面の簡単な説明】
【００１１】
上述した目的、およびその他の目的、特徴および利点は、以下に述べる好適な実施の形態、およびそれに付随する以下の図面によってさらに明らかになる。
【図１】実施形態１の情報処理装置の動作の概要を表す図である。
【図２】実施形態１の第１情報処理装置の構成を例示する図である。
【図３】第１情報処理装置を実現するための計算機を例示する図である。
【図４】実施形態１の第１情報処理装置によって実行される処理の流れを例示するフローチャートである。
【図５】イベント履歴をテーブル形式で例示する図である。
【図６】整流部を有する第１情報処理装置を例示するブロック図である。
【図７】辞書データをテーブル形式で例示する図である。
【図８】第２イベント履歴列をテーブル形式で例示する図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態について、図面を用いて説明する。尚、すべての図面において、同様な構成要素には同様の符号を付し、適宜説明を省略する。また、特に説明する場合を除き、各ブロック図において、各ブロックは、ハードウエア単位の構成ではなく、機能単位の構成を表している。
【００１３】
［実施形態１］
＜概要＞
図１は、実施形態１の情報処理装置の動作の概要を表す図である。図１は情報処理装置２０００の動作についての理解を容易にするための概念的な図であり、情報処理装置２０００の動作を具体的に限定するものではない。
【００１４】
情報処理装置２０００は、複数のイベント履歴１２によって表されるイベント列を、より簡潔な代替表現２０で表す。イベント履歴１２は、対象のコンピュータシステム（以下、対象システム）において発生したイベントに関する情報である。対象システムは、１つ以上の任意のマシンで構成される。マシンは、物理マシンであってもよいし、仮想マシンであってもよい。イベントは、例えば、対象システムに含まれるマシンで動作するプロセスが行った活動（ファイルや他のプロセスへのアクセスなど）を表す。
【００１５】
代替表現２０は、イベント列を別の形で表す情報である。例えば、代替表現２０は、イベント列が持つ意味や、イベント列によって実現される一連の処理の名称などを表す。例えば、プロセスの活動をシステムコール単位でイベント履歴１２に記録するように構成された対象システムにおいて、複数のシステムコールの実行を伴う API（Application Programming Interface） X が実行されたとする。この場合、API X の中で実行される複数のシステムコールそれぞれについてのイベント履歴１２が記録される。そのため、これらのイベント履歴１２によって示されるイベント列（複数のシステムコールの列）は、API X の実行という１つのまとまった意味を持つ。よって、このケースでは、複数のイベント履歴１２によって示されるイベント列を、「API X の実行」などといった代替表現２０で簡潔に表現できる。
【００１６】
そこで情報処理装置２０００は、複数のイベント履歴１２によって表されるイベント列について、代替表現２０を特定する。代替表現２０の特定は、辞書データ３０を利用して行われる。辞書データ３０は、イベント列と、そのイベント列に対応する代替表現２０とを対応づけた情報である。さらに情報処理装置２０００は、特定した代替表現２０を含む出力情報を出力する。
【００１７】
例えば図１の例において、情報処理装置２０００は、「e1, e10, e3, e4, e5」というイベント列を取得している。ここで、辞書データ３０において、「e1, e10」というイベント列に対して、「API 1」という代替表現２０が対応づけられている。また、辞書データ３０において、「e3, e4, e5」というイベント列に対して、「API 3」という代替表現２０が対応づけられている。そこで、情報処理装置２０００は、取得したイベント列のうち、「e1, e10」というイベント列に対して「API 1」という代替表現２０を特定し、「e3, e4, e5」というイベント列に対して「API 3」という代替表現２０を特定する。そして情報処理装置２０００は、「API 1」という代替表現２０及び「API 3」という代替表現２０を含む情報を出力する。例えば、情報処理装置２０００は、これらの代替表現２０を順に示すファイルを記憶装置に記憶する。
【００１８】
＜作用効果＞
本実施形態の情報処理装置２０００によれば、辞書データ３０を用い、複数のイベント履歴１２によって表されるイベント列について、代替表現２０が特定される。そして、代替表現２０を含む情報が出力される。こうすることで、複数のイベント履歴１２の代わりに、これらをより簡潔に表した代替表現２０を管理することで、対象システムで発生したイベントを管理することができる。これにより、対象システムで発生したイベントの履歴の管理に要する計算機資源（記憶装置に容量など）を少なくすることができるため、イベントの履歴を効率よく管理できるようになる。
【００１９】
また、代替表現２０でイベントの履歴を管理することにより、対象システムの挙動を人が理解しやすくなる。例えば、API の実行に伴って複数のシステムコールが実行されたとする。この場合、各システムコールの名称等を見るよりも、それらのシステムコールを呼び出した API の名称等を見た方が、対象システムの挙動を容易に理解することができる。
【００２０】
以下、本実施形態の情報処理装置２０００についてさらに詳細に説明する。
【００２１】
＜情報処理装置２０００の機能構成の例＞
図２は、実施形態１の情報処理装置２０００の構成を例示する図である。情報処理装置２０００は、特定部２０２０及び出力部２０４０を有する。特定部２０２０は、複数のイベント履歴１２によって表されるイベント列について、辞書データ３０を用いて、代替表現２０を特定する。出力部２０４０は、代替表現２０を含む出力情報を出力する。辞書データ３０は、イベント列と、そのイベント列に対応する代替表現２０との対応付けを示す。
【００２２】
＜情報処理装置２０００のハードウエア構成＞
情報処理装置２０００の各機能構成部は、各機能構成部を実現するハードウエア（例：ハードワイヤードされた電子回路など）で実現されてもよいし、ハードウエアとソフトウエアとの組み合わせ（例：電子回路とそれを制御するプログラムの組み合わせなど）で実現されてもよい。以下、情報処理装置２０００の各機能構成部がハードウエアとソフトウエアとの組み合わせで実現される場合について、さらに説明する。
【００２３】
図３は、情報処理装置２０００を実現するための計算機１０００を例示する図である。計算機１０００は任意の計算機である。例えば計算機１０００は、Personal Computer（PC）やサーバマシンなどの据え置き型の計算機である。その他にも例えば、計算機１０００は、スマートフォンやタブレット端末などの可搬型の計算機である。計算機１０００は、情報処理装置２０００を実現するために設計された専用の計算機であってもよいし、汎用の計算機であってもよい。
【００２４】
計算機１０００は、バス１０２０、プロセッサ１０４０、メモリ１０６０、ストレージデバイス１０８０、入出力インタフェース１１００、及びネットワークインタフェース１１２０を有する。バス１０２０は、プロセッサ１０４０、メモリ１０６０、ストレージデバイス１０８０、入出力インタフェース１１００、及びネットワークインタフェース１１２０が、相互にデータを送受信するためのデータ伝送路である。ただし、プロセッサ１０４０などを互いに接続する方法は、バス接続に限定されない。
【００２５】
プロセッサ１０４０は、CPU（Central Processing Unit）、GPU（Graphics Processing Unit）、FPGA（Field−Programmable Gate Array）などの種々のプロセッサである。メモリ１０６０は、RAM（Random Access Memory）などを用いて実現される主記憶装置である。ストレージデバイス１０８０は、ハードディスク、SSD（Solid State Drive）、メモリカード、又は ROM（Read Only Memory）などを用いて実現される補助記憶装置である。
【００２６】
入出力インタフェース１１００は、計算機１０００と入出力デバイスとを接続するためのインタフェースである。例えば入出力インタフェース１１００には、キーボードなどの入力装置や、ディスプレイ装置などの出力装置が接続される。
【００２７】
ネットワークインタフェース１１２０は、計算機１０００を通信網に接続するためのインタフェースである。この通信網は、例えば LAN（Local Area Network）や WAN（Wide Area Network）である。ネットワークインタフェース１１２０が通信網に接続する方法は、無線接続であってもよいし、有線接続であってもよい。
【００２８】
ストレージデバイス１０８０は、情報処理装置２０００の各機能構成部を実現するプログラムモジュールを記憶している。プロセッサ１０４０は、これら各プログラムモジュールをメモリ１０６０に読み出して実行することで、各プログラムモジュールに対応する機能を実現する。
【００２９】
＜処理の流れ＞
図４は、実施形態１の情報処理装置２０００によって実行される処理の流れを例示するフローチャートである。特定部２０２０は、辞書データ３０を用いて、複数のイベント履歴１２によって表されるイベント列についての代替表現２０を特定する（Ｓ１０２）。出力部２０４０は、代替表現２０を含む出力情報を出力する（Ｓ１０４）。
【００３０】
＜イベント履歴１２について＞
イベント履歴１２は、過去の或る時点において対象システム上で（対象システムに含まれるマシン上で）発生したイベントに関する情報である。イベント履歴１２は、イベントの発生時刻とイベントの内容とを対応づけて示す。
【００３１】
例えばイベント履歴１２は、コンピュータシステム１０上で動作するプロセスの活動の履歴を表す。例えばプロセスの活動は、システムコール単位で記録される。或るプロセスが他のプロセスを客体として活動する場合、これらのプロセスは互いに同一の OS（Operating System）上で動作するものであってもよいし、互いに異なる OS 上で動作するものであってもよい。後者の例としては、例えば、ソケットインタフェースを利用することで、或るプロセスが他の OS 上で動作する別のプロセスと通信を行うことが考えられる。
【００３２】
例えばイベントは、主体、客体、活動内容、及び発生時刻という４つの要素を表す情報によって識別される。そこで例えば、イベント履歴１２は、主体を表す主体情報、客体を表す客体情報、活動の内容を表す内容情報、及び発生時刻の組み合わせを示す。
【００３３】
主体情報は、例えば、そのイベントを発生させたプロセスを識別する情報である。以下、プロセスを識別する情報をプロセス識別情報と呼ぶ。具体的には、プロセス識別情報は、プロセスＩＤ（Identifier）を含む。ただし、複数のスレッドが動作するプロセスについてのプロセス識別情報は、プロセスＩＤに加え、スレッドＩＤをさらに含む。
【００３４】
また、プロセス識別情報は、プロセスの実行ファイルに関する情報をさらに含んでもよい。プロセスの実行ファイルに関する情報とは、例えば、実行ファイルの名称やパス、実行ファイルのハッシュ値、実行ファイルのデジタル署名、又は実行ファイルで実現されるアプリケーションの名称などである。
【００３５】
客体情報は、例えば、その客体の種別及び識別情報である。客体の種別は、例えば、プロセス、ファイル、又はソケットなどである。客体がプロセスである場合、客体情報にはそのプロセスのプロセス識別情報が含まれる。
【００３６】
客体がファイルである場合、客体情報には、そのファイルを識別する情報（以下、ファイル識別情報）が含まれる。ファイル識別情報は、例えばファイルの名称やパスなどである。また、客体がファイルである場合、客体情報には、そのファイルのハッシュ値や、ファイルシステムの識別子とファイルシステム上でのファイルを構成するディスクブロックの識別子（inode 番号やオブジェクトID）の組み合わせなどが含まれていてもよい。
【００３７】
客体がソケットである場合、例えば客体情報には、ソケットに割り当てられた識別子が含まれる。
【００３８】
内容情報は、例えば、種々ある活動内容に予め割り当てておく識別子である。例えば、「プロセスを起動する」、「プロセスを停止する」、「ファイルをオープンする」、「ファイルからデータを読み込む」、「ファイルにデータを書き込む」、「ソケットをオープンする」、「ソケットからデータを読み込む」、又は「ソケットにデータを書き込む」などといった活動の内容に、互いに異なる識別子を割り当てておく。なお、ソケットに対するアクセスは、そのソケットに対応づけられた他の装置へのアクセスを意味する。
【００３９】
システムコール単位でイベントが記録される場合、内容情報は、システムコールの識別情報を示してもよい。システムコールの識別情報は、例えば、システムコール名やシステムコール番号である。また、内容情報には、システムコールに与えた引数の内容（引数自体の値や、引数として与えたポインタが指し示すメモリ領域に格納されているデータ）など、システムコールがどのような条件下で実行されたかを表す情報がさらに示されてもよい。
【００４０】
図５は、イベント履歴１２をテーブル形式で例示する図である。以下、図５のテーブルをテーブル２００と呼ぶ。テーブル２００の各レコードは、１つのイベント履歴１２を表す。テーブル２００は、主体情報２０２、客体情報２０４、内容情報２０６、及び発生時刻２０７を含む。主体情報２０２は、プロセスＩＤ２０８、スレッドＩＤ２０９、及びパス２１０を含む。客体情報２０４は、種別２１２及び識別情報２１４を含む。発生時刻２０７は、イベントが発生した時刻を示す。
【００４１】
ここで、イベント履歴１２は、対象システム上におけるプロセスの活動を記録することで生成される。プロセスの活動を記録する技術には、既存の技術を利用することができる。
【００４２】
＜イベント履歴１２の取得＞
特定部２０２０は、処理対象とする複数のイベント履歴１２を取得する。具体的には、特定部２０２０は、イベント履歴１２が時系列で並べられたイベント履歴列１０を取得する。イベント履歴列１０は、特定部２０２０からアクセス可能な記憶装置に記憶されている。この記憶装置を、履歴記憶装置を呼ぶ。履歴記憶装置は、情報処理装置２０００の内部に設けられていてもよいし、情報処理装置２０００の外部に設けられていてもよい。
【００４３】
例えば履歴記憶部には、ログファイルが記憶されている。例えばこのログファイルには、発生時刻の昇順に、複数のイベント履歴１２が記録されている。特定部２０２０は、このログファイルに記録されている情報を順に読み出すことで、イベント履歴列１０を取得する。
【００４４】
＜＜イベントの整流＞＞
ここで、イベント履歴列１０には、様々な動作主体の動作によって生じたイベントの履歴が含まれうる。このような場合、情報処理装置２０００は、イベント履歴列１０に含まれるイベント履歴１２を、動作主体ごとにグループ分けする。このグループ分けを「イベントの整流」とも呼ぶ。
【００４５】
イベントの整流を行う機能を有する機能構成部を、整流部２０６０と呼ぶ。図６は、整流部２０６０を有する情報処理装置２０００を例示するブロック図である。整流部２０６０は、イベント履歴列１０に含まれるイベント履歴１２を、動作主体が同一であるイベント履歴１２ごとにグループ分けする。動作主体は、イベント履歴１２の主体情報に含まれるプロセスＩＤによって特定できる。ただし、動作主体がスレッドである場合には、動作主体は、「プロセスＩＤ、スレッドＩＤ」のペアによって特定される。
【００４６】
なお、イベントの整流は、情報処理装置２０００以外の装置によって行われてもよい。この場合、特定部２０２０は、グループごとにイベント履歴列１０を取得する。
【００４７】
＜代替表現２０の特定：Ｓ１０２＞
特定部２０２０は、辞書データ３０を用いて、複数のイベント履歴１２によって示されるイベント列についての代替表現２０を特定する（Ｓ１０２）。具体的には、特定部２０２０は、イベント履歴列１０を取得し、取得したイベント履歴列１０に含まれる複数のイベント履歴１２によって示されるイベントの列（以下、第１イベント列１４）について、１つ以上の代替表現２０の特定を行う。
【００４８】
＜＜辞書データ３０について＞＞
ここで、代替表現２０の特定には、辞書データ３０が利用される。ここでは、辞書データ３０について具体的に説明する。辞書データ３０は、イベント列と、そのイベント列に対応する代替表現２０とを対応づけたデータである。ここで、辞書データ３０に示されるイベント列を第２イベント列と呼ぶ。
【００４９】
図７は、辞書データ３０をテーブル形式で例示する図である。図７に示されるテーブルを、テーブル３００と表記する。テーブル３００は、第２イベント列３０２と、代替表現３０４という２つの列を有する。第２イベント列３０２は、イベントを表す情報が時系列で並べられたデータである。代替表現３０４は、第２イベント列３０２に示される第２イベント列に対応づけられる代替表現２０である。
【００５０】
ここで、第２イベント列３０２に含まれる各イベントは、例えば、プロセスの活動の客体と内容の組み合わせ（何に対して何をしたか）によって定められる。例えば、「ファイルＡの読み込み」は、「ファイルＡ」を客体とし、「ファイルの読み込み」を内容とするプロセスの活動である。そこで例えば、第２イベント列３０２が示す各イベントの情報は、イベント履歴１２における客体情報と内容情報の組み合わせ（図５のテーブル２００における客体情報２０４及び内容情報２０６）とすることができる。
【００５１】
辞書データ３０が示す代替表現２０は、例えば、対応する第２イベント列が持つ意味や、対応する第２イベント列によって実現される処理の名称などを表す。例えば、或る API の実行に伴って生じるイベントの列を第２イベント列に示すケースは、対応する代替表現２０は、その API の識別情報（名称など）を表す。なお、同一名称の API が複数バージョン存在し、バージョンによって発生するイベント列が異なる場合、API の識別情報には、バージョン情報も含めることが好適である。
【００５２】
また、API によっては、API の実行条件（API に与える引数の内容や環境変数など）によって、実行される処理が異なることもある。この様な場合、代替表現２０には、API の識別情報に加え、実行条件を表す情報も含めることが好適である。例えば図７のテーブル３００は、代替表現３０４において、API 識別情報３０６に加え、実行条件３０８を示している。
【００５３】
なお、代替表現２０が示す情報は、人が目で見る情報として出力されることを考慮して、人の目で見て理解しやすいテキストデータであってもよい。例えば、hoo という API があるとする。また、引数 a の値を０以上として hoo を実行するとイベント A 及び B が発生し、引数 a の値を０未満として hoo を実行するとイベント C 及び D が発生するとする。この場合、「A, B」という第２イベント列に対応づける代替表現２０は、「API：hoo; 引数：a>=0」というテキストデータとし、「C, D」という第２イベント列に対応づける代替表現２０は、「API：hoo; 引数：a<0」というテキストデータとする。このようなテキストデータを出力することにより、「どの API がどのような実行条件の下で実行されたのか」を人が容易に把握できる。
【００５４】
なお、辞書データ３０が示すのは、イベント列と API との対応づけに限定されない。例えば辞書データ３０は、API に限らず、任意の関数と、その関数の実行によって生じるイベントの列とを対応づけてもよい。なお、ここでいう関数とは、一連の処理を１つにまとめて定義した処理群を意味し、プロシージャやメソッドなども含まれるものとする。また、イベント列に対応づけられるのは、関数に限定されなくてもよい。
【００５５】
＜＜代替表現２０の特定方法＞＞
例えば特定部２０２０は、第１イベント列１４から、いずれかの第２イベント列とマッチする部分イベント列を１つ以上抽出する。そして、情報処理装置２０００は、抽出した各部分イベント列についての代替表現２０を特定する。具体的には、特定部２０２０は、部分イベント列とマッチした第２イベント列に対応する代替表現２０を、その部分イベント列についての代替表現２０として特定する。
【００５６】
第１イベント列と第２イベント列とのマッチングについて、より具体的に説明する。例えば特定部２０２０は、辞書データ３０に示される各第２イベント列について、第１イベント列の先頭から始まる部分イベント列との類似度を算出する。例えば、長さがｎの第２イベント列については、第１イベント列の先頭から始まる長さｎの部分イベント列と比較する。特定部２０２０は、閾値以上の類似度が算出された部分イベント列と第２イベント列のペアについて、これらがマッチしたものとして扱う。
【００５７】
特定部２０２０は、或る部分イベント列と第２イベント列とがマッチしたら、その部分イベント列を、第１イベント列１４から抽出する。そして、特定部２０２０は、抽出した部分イベント列とマッチした第２イベント列に対応する（辞書データ３０において対応づけられている）代替表現２０を、その部分イベント列についての代替表現２０として特定する。特定部２０２０は、抽出した部分イベント列を除外した第１イベント列１４について、さらに同様の処理を繰り返し行う。処理の繰り返しは、第１イベント列１４が無くなるまでおこなわれる。
【００５８】
なお、第１イベント列１４の先頭から始まる部分イベント列が、いずれの第２イベント列ともマッチしなかったとする。この場合、例えば特定部２０２０は、先頭のイベント履歴１２を第１イベント列１４から除外した後、さらに第１イベント列１４と第２イベント列とのマッチングを行う。
【００５９】
また、第１イベント列１４の先頭から始まる部分イベント列との類似度が閾値以上である第２イベント列が複数存在したとする。この場合、例えば特定部２０２０は、閾値以上の類似度が算出された部分イベント列のうち、最長の部分イベント列を第１イベント列１４から抽出する。そして、特定部２０２０は、その部分イベント列とマッチした第２イベント列に対応する代替表現２０を、その部分イベント列の代替表現２０として特定する。
【００６０】
例えば、第１イベント列１４の先頭から始まる長さ２の部分イベント列Ａ１が第２イベント列Ｂ１とマッチし、第１イベント列１４の先頭から始まる長さ４の部分イベント列Ａ２が第２イベント列Ｂ２とマッチしたとする。この場合、特定部２０２０は、長さ４の部分イベント列Ａ２を第１イベント列１４から抽出し、部分イベント列Ａ２の代替表現２０を、辞書データ３０において第２イベント列Ｂ２と対応づけられている代替表現２０とする。
【００６１】
＜＜類似度について＞＞
イベント列間の類似度を定める方法について説明する。特定部２０２０は、部分イベント列が示す複数のイベントと、第２イベント列が示すイベントとについて、先頭から互いに同一の順位にあるイベント同士で類似度を算出する。すなわち、特定部２０２０は、「第２イベント列のｎ番目のイベントについて、部分イベント列のｎ番目のイベント（第１イベント列１４の先頭からｎ番目のイベント）との類似度を算出する」という処理を、第２イベント列に含まれる全てのイベントについて行う。そして、特定部２０２０は、算出された複数の類似度を用いて、第２イベント列と部分イベント列との間の類似度を算出する。例えば、特定部２０２０は、算出された複数の類似度を合計した値、掛け合わせた値、又は平均した値などを、第２イベント列と部分イベント列との間の類似度として算出する。
【００６２】
イベント同士の類似度は、例えば、そのイベントによって表されるプロセスの活動の客体及び活動内容の類似度合いに基づいて算出する。例えば特定部２０２０は、部分イベント列のｉ番目のイベントの客体及び内容（ｉ番目のイベント履歴１２が示す客体情報及び内容情報）と、第２イベント列のｉ番目のイベントの客体と活動内容との類似度を算出する。例えば特定部２０２０は、客体同士の類似度と、活動内容同士の類似度とについて、合計値、乗算値、又は平均値などを算出し、算出した値をイベント同士の類似度とする。
【００６３】
より具体的な例として、プロセスの活動がシステムコールなどの関数単位で記録されるとする。この場合、イベント履歴１２が示すプロセスの活動の客体と内容は、関数の識別情報及びその関数の実行条件（引数の内容など）によって特定される。そこで、イベント履歴１２と第２イベント列のいずれもが、イベントを表す情報として、関数の識別情報とその実行条件を含むようにしておく。そして特定部２０２０は、部分イベント列が示す各関数の識別情報及び実行条件と、第２イベント列が示す各関数の識別情報及び実行条件との類似度を算出する。
【００６４】
例えば類似度は、０以上１以下の値で定める。そして、比較するイベント同士で、関数の識別情報と実行条件の全てが一致すれば、類似度を１とする。そして、イベント同士で一致する情報が少ないほど、類似度が小さくなるようにする。ただし、関数の識別情報の一致・不一致には、実行条件の一致・不一致よりも大きな重みを与えることが好適である。関数が異なれば処理の内容は大きく異なる一方で、引数などの実行条件が多少違っても処理の内容はあまり変わらないことが多いためである。
【００６５】
例えば、イベント同士の類似度の最大値１のうち、0.5 は、関数の識別情報の一致・不一致で定める。すなわち、関数の識別情報が一致したら、類似度の値に 0.5 を設定する。そして、この類似度に対し、実行条件の一致度合い（0から0.5の間の値）を加算した値を、イベント同士の類似度とする。
【００６６】
＜＜動作主体が複数存在するケースについて＞＞
前述した様に、イベント履歴列１０には、それぞれ異なる動作主体についてのイベント履歴１２が含まれることがある。この場合、特定部２０２０は、イベント履歴列１０を前述したグループに分割し、グループごとに第１イベント列１４を得て、各第１イベント列１４について代替表現２０の特定を行う。
【００６７】
＜出力情報の出力：Ｓ１０６＞
出力部２０４０は、代替表現２０を含む情報を出力する（Ｓ１０６）。例えば出力部２０４０は、第１イベント列１４から第２イベント履歴列を生成し、第２イベント履歴列を出力する。第２イベント履歴列は、第２イベント履歴を時系列で示す。１つの第２イベント履歴は、第１イベント列１４から抽出された１つの部分イベント列について特定された代替表現２０を示す。言い換えれば、第２イベント履歴列は、第１イベント列１４に含まれるイベント履歴１２を第２イベント履歴で置き換えたものである。
【００６８】
図８は、第２イベント履歴列をテーブル形式で例示する図である。図８のテーブルをテーブル４００と呼ぶ。テーブル４００は、発生時刻４０２及び代替表現４０４という２つの列を有する。
【００６９】
第２イベント履歴は、複数のイベント履歴１２を１つに集約したものであると言える。そのため、対象システムで発生したイベントの履歴を、イベント履歴１２に変えて第２イベント履歴で管理することにより、対象システムで発生したイベントの履歴の管理に要する計算機資源（記憶装置に容量など）を少なくすることができる。
【００７０】
また、第２イベント履歴でイベントの履歴を管理することにより、対象システムの挙動を人が理解しやすくなる。例えば、API の実行に伴って複数のシステムコールが実行されたとする。この場合、各システムコールの名称等を見るよりも、それらのシステムコールを呼び出した API の名称等を見た方が、対象システムの挙動を容易に理解することができる。
【００７１】
第２イベント履歴の出力先は、例えば記憶装置である。例えば出力部２０４０は、第１イベント列１４ごと（動作主体ごと）に、第２イベント履歴が記録されたログファイルを生成する。すなわち、出力部２０４０は、１つの第１イベント列１４から生成した１つ以上の第２イベント履歴を、発生時刻順にログファイルに記録して、記憶装置に記憶させる。ただし、第２イベント履歴の出力先は、ディスプレイ装置や他の装置（サーバマシンなど）であってもよい。
【００７２】
＜辞書データ３０の生成方法について＞
辞書データ３０は、予め生成して記憶装置に記憶させておく。ここでは、辞書データ３０を生成する方法について例示する。辞書データ３０の生成は、情報処理装置２０００によって行われてもよいし、情報処理装置２０００以外の装置によって行われてもよい。以下、辞書データ３０の生成を行う装置を、第２情報処理装置３０００と呼ぶ。
【００７３】
第２情報処理装置３０００は、テストシステムの挙動の記録を解析することによって、辞書データ３０を生成する。テストシステムは、対象システムと同様に、イベント履歴１２を記憶装置に記憶させるように構成されている。
【００７４】
さらに、テストシステムは、代替表現２０を利用して表現したい一連のイベントについて、その開始時点を表す情報（以下、開始情報）と、その終了時点を表す情報（以下、終了情報）も、記憶装置に記憶させる。例えば、開始情報と終了情報は、イベント履歴１２と共に、ログファイルに記録される。
【００７５】
例えば、API の実行によって発生する一連のシステムコールの実行を、一連のイベントとして扱いたいとする。この場合、例えばテストシステムは、API 呼び出しをフックし、その API の実行の前で、API に関する情報（識別情報や実行条件）を示す開始情報を記録する。さらにテストシステムは、API の実行の後に、開始情報との対応が分かる態様で、終了情報を記録する。例えば、開始情報と終了情報に同一の識別情報（例えば、ランダム値）を含めることで、開始情報と終了情報との対応を把握することができる。
【００７６】
ここで、API 呼び出しをフックして、API の実行の前後で所定の処理が実行されるようにする技術には、既存の技術を利用することができる。例えば、フック対象の API について、その API が呼び出された際に代わりに呼び出されるラッパ関数を定義しておく。そして、ラッパ関数は、「開始情報の記録、API の実行、終了情報の記録」という順で処理を行うように実装される。このようなラッパ関数を定義しておけば、API 呼び出しを行うことによって対応するラッパ関数が実行されるため、「開始情報、API の実行に伴って発生する各イベントを表すイベント履歴１２、終了情報」という順に情報が記録されるようになる。
【００７７】
テストシステムの操作者は、テストシステム上で、辞書データ３０に含めたい API を呼び出すアプリケーションや OS を実行することで、その API の実行によって発生するイベントの記録を行う。ここで、同一の API であっても、実行条件に応じて実行される処理がそれぞれ異なることがある。そのため、テストシステムでは、同一の API を様々な実行条件で実行し、各実行条件下でイベントの記録を行うことが好ましい。そこで例えば、対象の API を呼び出す種々のアプリケーション（OS 付属のアプリケーションや、対象システムが導入されている組織で標準的に使用されているアプリケーションなど）を複数回実行させて、イベントの記録を行う。なお、アプリケーションや OS に複数のバージョンがある場合、様々なバージョンのアプリケーションや OS を実行させることが好ましい。
【００７８】
第２情報処理装置３０００は、開始情報と終了情報との間に記録された一連のイベントを第２イベント列とする辞書データ３０を生成する。例えば前述したように、「開始情報、API の実行によって生じる各イベントについてのイベント履歴１２、及び終了情報」という順にログファイルに記録されるとする。この場合、第２情報処理装置３０００は、ログファイルを解析することで、開始情報と終了情報のペアを特定する。そして、特定されたペアの開始情報と終了情報の間に記録されている複数のイベント履歴１２によって表されるイベント列を第２イベント列とし、開始情報に示されている API に関する情報を代替表現２０として、辞書データ３０を生成する。代替表現２０は、例えば、開始情報に示されているAPI の識別情報及び API の実行条件で表される。
【００７９】
ここで、対象システムで複数の動作主体が動作する場合、ログファイルには、様々な動作主体の動作によって生じるイベントがインタリーブした状態で記憶されうる。そこで、ログファイルに出力される各情報には、イベントの動作主体が示されるようにしておく。例えばイベント履歴１２には、動作主体を示す主体情報が含まれる。また、開始情報にも、イベント履歴１２の主体情報に相当する主体情報（プロセスＩＤやスレッドＩＤなど）を含めるようにする。第２情報処理装置３０００は、開始情報と終了情報のペアを特定したら、開始情報と終了情報の間に記録されているイベント履歴１２の中から、開始情報が示す主体情報と一致する主体情報を示すイベント履歴１２を抽出する。そして、抽出したイベント履歴１２を、開始情報と終了情報で特定される API の実行によって発生するイベントとして特定する。
【００８０】
以上、図面を参照して本発明の実施形態について述べたが、これらは本発明の例示であり、上記各実施形態の組み合わせ、又は上記以外の様々な構成を採用することもできる。
【００８１】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
１．  辞書データを用いて、複数のイベント履歴によって表されるイベント列の代替表現を特定する特定部と、
前記特定された代替表現を含む情報を出力する出力部と、を有し、
前記辞書データは、イベント列と、そのイベント列に対応する代替表現とを対応付けて示す、情報処理装置。
２．  前記特定部は、
同一の動作主体の動作によって発生した各イベントの前記イベント履歴で構成されるイベント列から、前記辞書データに示されるいずれかのイベント列とマッチする部分イベント列を１つ以上抽出し、
前記部分イベント列とマッチした前記辞書データのイベント列に対応する代替表現を、その部分イベント列に対応する代替表現として特定する、１．に記載の情報処理装置。
３．  前記特定部は、
複数のイベント履歴を示すイベント履歴列を取得し、前記イベント履歴列に含まれる複数のイベント履歴を、イベントの動作主体ごとのグループに分け、
前記グループごとに、そのグループに含まれる複数のイベント履歴で構成されるイベント列から、前記辞書データに示されるいずれかのイベント列とマッチする部分イベント列を抽出する、２．に記載の情報処理装置。
４．  前記出力部は、複数のイベント履歴で構成されるイベント列について、そのイベント列から抽出した各前記部分イベント列をその部分イベント列とマッチした前記代替表現で置き換えたイベント列を生成し、前記生成したイベント列を表す情報を出力する、２．又は３．に記載の情報処理装置。
５．  前記辞書データが示す代替表現は、関数の識別情報を含み、
前記辞書データが示すイベント列は、対応づけられた識別情報によって特定される関数の実行によって生じるイベントの列を示す、１．乃至４．いずれか一つに記載の情報処理装置。
６．  前記関数は API（Application Programming Interface）である、５．に記載の情報処理装置。
【００８２】
７．  コンピュータによって実行される制御方法であって、
辞書データを用いて、複数のイベント履歴によって表されるイベント列の代替表現を特定する特定ステップと、
前記特定された代替表現を含む情報を出力する出力ステップと、を有し、
前記辞書データは、イベント列と、そのイベント列に対応する代替表現とを対応付けて示す、制御方法。
８．  前記特定ステップにおいて、
同一の動作主体の動作によって発生した各イベントの前記イベント履歴で構成されるイベント列から、前記辞書データに示されるいずれかのイベント列とマッチする部分イベント列を１つ以上抽出し、
前記部分イベント列とマッチした前記辞書データのイベント列に対応する代替表現を、その部分イベント列に対応する代替表現として特定する、７．に記載の制御方法。
９．  前記特定ステップにおいて、
複数のイベント履歴を示すイベント履歴列を取得し、前記イベント履歴列に含まれる複数のイベント履歴を、イベントの動作主体ごとのグループに分け、
前記グループごとに、そのグループに含まれる複数のイベント履歴で構成されるイベント列から、前記辞書データに示されるいずれかのイベント列とマッチする部分イベント列を抽出する、８．に記載の制御方法。
１０．  前記出力ステップにおいて、複数のイベント履歴で構成されるイベント列について、そのイベント列から抽出した各前記部分イベント列をその部分イベント列とマッチした前記代替表現で置き換えたイベント列を生成し、前記生成したイベント列を表す情報を出力する、８．又は９．に記載の制御方法。
１１．  前記辞書データが示す代替表現は、関数の識別情報を含み、
前記辞書データが示すイベント列は、対応づけられた識別情報によって特定される関数の実行によって生じるイベントの列を示す、７．乃至１０．いずれか一つに記載の制御方法。
１２．  前記関数は API（Application Programming Interface）である、１１．に記載の制御方法。
【００８３】
１３．  ７．乃至１２．いずれか一つに記載の制御方法の各ステップをコンピュータに実行させるプログラム。
【図１】
2020065960.tif 000003
【図２】
2020065960.tif 000004
【図３】
2020065960.tif 000005
【図４】
2020065960.tif 000006
【図５】
2020065960.tif 000007
【図６】
2020065960.tif 000008
【図７】
2020065960.tif 000009
【図８】
2020065960.tif 000010
【手続補正書】
【提出日】令和3年3月10日(2021.3.10)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００４３
【補正方法】変更
【補正の内容】
【００４３】
例えば履歴記憶装置には、ログファイルが記憶されている。例えばこのログファイルには、発生時刻の昇順に、複数のイベント履歴１２が記録されている。特定部２０２０は、このログファイルに記録されている情報を順に読み出すことで、イベント履歴列１０を取得する。
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図１
【補正方法】変更
【補正の内容】
【図１】
2020065960.tif 000011
【国際調査報告】
2020065960.tif 000012
2020065960.tif 000013