(57)【要約】  追跡対象のインスタンスが分割、複製等されて新たなインスタンスが発生する場合に、元のインスタンスと新たなインスタンスとに関連するイベントの履歴を容易に連続して追跡できるようにする。インスタンス毎にイベントに挙動ＩＤを付して、インスタンス毎にイベントの発生順序を管理する。また、あるイベントでインスタンスから新たなインスタンスが発生した場合、そのイベントについて上記新たなインスタンスに対して新たな挙動ＩＤを付す。そして、そのイベントについて発生元のインスタンスに対して付された識別子と上記新たな識別子とを関連付けする。
2009107234.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションで発生したイベントの履歴を記憶するイベント履歴記憶装置であり、
所定の種別を示すクラスのうち、追跡の対象となるクラスに属するインスタンス毎に、そのインスタンスに関連して発生したイベントに識別子を付し、そのインスタンスに関連して発生したイベントの発生順序を上記識別子により表した順序関係情報を記憶装置に記憶する順序関係記憶部と、
上記順序関係記憶部が発生順序を記憶したイベントによってインスタンスから新たなインスタンスが発生した場合、上記イベントについて上記新たなインスタンスに対して新たな識別子を付し、上記イベントについて発生元のインスタンスに対して付された識別子と上記新たな識別子とを関連付けした階層関係情報を記憶装置に記憶する階層関係記憶部と、
上記順序関係記憶部と上記階層関係記憶部とのいずれかが異なるクラスに属するインスタンスに対して付した識別子であって、同一のイベントについて付した識別子を関連付けした関係構造情報を記憶装置に記憶する関係構造記憶部と
を備えることを特徴とするイベント履歴記憶装置。
【請求項２】
上記階層関係記憶部は、新たなインスタンスに付された新たな識別子を子とし、発生元のインスタンスに対して付された識別子を親として、上記新たな識別子と発生元のインスタンスに対して付された識別子とを関連付けした階層関係情報を記憶する
ことを特徴とする請求項１に記載のイベント履歴記憶装置。
【請求項３】
上記階層関係記憶部は、イベントによってインスタンスが分割又は統合又は複製された場合に、新たなインスタンスが発生したとみなす
ことを特徴とする請求項１に記載のイベント履歴記憶装置。
【請求項４】
請求項１に記載のイベント履歴記憶装置が記憶したイベントの履歴から、所定のインスタンスについてのイベントの履歴を追跡するイベント履歴追跡装置であり、
追跡する対象となるインスタンスを特定する条件情報を入力装置により入力する条件入力部と、
上記条件入力部が入力した条件情報により特定されるインスタンスに関連して発生したイベントを上記順序関係記憶部が記憶した順序関係情報が示す順に取得する順序関係追跡部と、
上記順序関係追跡部が取得したイベントに付された識別子と上記階層関係記憶部が関連付けした識別子を辿ることにより、上記条件情報により特定されるインスタンスから発生した新たなインスタンス又は上記条件情報により特定されるインスタンスの発生元のインスタンスである次の階層のインスタンスと、上記次の階層のインスタンスに関連して発生したイベントとを取得する階層関係追跡部と
を備えることを特徴とするイベント履歴追跡装置。
【請求項５】
上記条件入力部は、上記条件情報とともに、追跡する範囲を絞り込むための範囲情報であって、クラスを特定する範囲情報を入力し、
上記イベント履歴追跡装置は、さらに、
上記順序関係追跡部と上記階層関係追跡部とが取得したイベントに付された識別子と上記関係構造記憶部が関連付けした識別子であって、上記範囲情報が示すクラスに属するインスタンスに付された識別子を辿ることにより、上記条件情報により特定されるインスタンスに関連するとともに上記範囲情報により特定されるクラスに属するインスタンスである他クラスインスタンスと、上記他クラスインスタンスに関連して発生したイベントとを取得するクラス間関係追跡部
を備えることを特徴とする請求項４に記載のイベント履歴追跡装置。
【請求項６】
上記階層関係追跡部は、さらに、上記次の階層のインスタンスに付された識別子と上記階層関係記憶部が関連付けした識別子を辿ることにより、さらに次の階層のインスタンスと、上記さらに次の階層のインスタンスに関連して発生したイベントとを取得する階層関係追跡処理を繰り返す
ことを特徴とする請求項４に記載のイベント履歴追跡装置。
【請求項７】
上記条件入力部は、上記条件情報とともに、追跡する階層の数を示す階層情報を入力し、
上記階層関係追跡部は、上記階層情報が示す階層の数だけ階層関係追跡処理を繰り返して、階層関係追跡処理を終了する
ことを特徴とする請求項４に記載のイベント履歴追跡装置。
【請求項８】
アプリケーションで発生したイベントの履歴を記憶するイベント履歴記憶方法であり、
処理装置が、所定の種別を示すクラスのうち、追跡の対象となるクラスに属するインスタンス毎に、そのインスタンスに関連して発生したイベントに識別子を付し、記憶装置が、そのインスタンスに関連して発生したイベントの発生順序を上記識別子により表した順序関係情報を記憶する順序関係記憶ステップと、
処理装置が、上記順序関係記憶ステップで発生順序を記憶したイベントによってインスタンスから新たなインスタンスが発生した場合、上記イベントについて上記新たなインスタンスに対して新たな識別子を付し、記憶装置が、上記イベントについて発生元のインスタンスに対して付された識別子と上記新たな識別子とを関連付けした階層関係情報を記憶する階層関係記憶ステップと、
記憶装置が、上記順序関係記憶ステップと上記階層関係記憶ステップとのいずれかで異なるクラスに属するインスタンスに対して付した識別子であって、同一のイベントについて付した識別子を関連付けした関係構造情報を記憶する関係構造記憶ステップと
を備えることを特徴とするイベント履歴記憶方法。
【請求項９】
アプリケーションで発生したイベントの履歴を記憶するイベント履歴記憶プログラムであり、
所定の種別を示すクラスのうち、追跡の対象となるクラスに属するインスタンス毎に、そのインスタンスに関連して発生したイベントに識別子を付し、そのインスタンスに関連して発生したイベントの発生順序を上記識別子により表した順序関係情報を記憶装置に記憶する順序関係記憶処理と、
上記順序関係記憶処理で発生順序を記憶したイベントによってインスタンスから新たなインスタンスが発生した場合、上記イベントについて上記新たなインスタンスに対して新たな識別子を付し、上記イベントについて発生元のインスタンスに対して付された識別子と上記新たな識別子とを関連付けした階層関係情報を記憶装置に記憶する階層関係記憶処理と、
上記順序関係記憶処理と上記階層関係記憶処理とのいずれかで異なるクラスに属するインスタンスに対して付した識別子であって、同一のイベントについて付した識別子を関連付けした関係構造情報を記憶装置に記憶する関係構造記憶処理と
をコンピュータに実行させることを特徴とするイベント履歴記憶プログラム。
【請求項１０】
アプリケーションで発生したイベントの履歴を記憶するためのデータ構造であり、
所定の種別を示すクラスのうち、追跡の対象となるクラスに属するインスタンス毎に、情報を記憶するインスタンス情報記憶領域を備え、
上記インスタンス情報記憶領域の上記インスタンス毎の記憶領域は、
そのインスタンスに関連して発生したイベント毎に、そのイベントに付された挙動識別子であって、そのインスタンスに対して付された挙動識別子と、上記インスタンスに関連して発生したイベントであって、上記挙動識別子が付されたイベントの前に発生したイベントに付された挙動識別子と後に発生したイベントに付された挙動識別子との少なくともいずれかの挙動識別子を記憶する挙動識別子記憶領域と、
上記インスタンスから発生した新たなインスタンスを識別するインスタンス識別子と、上記新たなインスタンスを発生させたイベントについて上記新たなインスタンスに対して付された挙動識別子とを記憶する子インスタンス記憶領域、又は、上記インスタンスを発生させた発生元のインスタンスを識別するインスタンス識別子と、上記インスタンスを発生させたイベントについて上記発生元のインスタンスに対して付された挙動識別子とを記憶する親インスタンス記憶領域の少なくともいずれかとを備え、
上記挙動識別子記憶領域の上記イベント毎の記憶領域は、
そのイベントと同一のイベントに付された挙動識別子であって、他のクラスに属するインスタンスに対して付された挙動識別子を記憶する関係構造記憶領域
を備えることを特徴とするデータ構造。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、アプリケーションの動作ログに含まれる情報の追跡を容易にかつ効率よく実現するためのデータ管理技術と、上記データ管理技術により管理されたデータを用いた履歴の追跡技術に関するものである。
【背景技術】
【０００２】
情報セキュリティ、ネットワーク監視、設備管理などの分野を中心に、収集蓄積されたログデータから情報漏えい、不正アクセス、機器故障などの履歴を監視し、情報、ネットワーク、設備を高度に管理している。
例えば、追跡対象であるインスタンスに対して発生したイベントの履歴データを収集し、そのイベントの履歴データに基づき、一定期間にそのインスタンスがどのような振舞いをしたかを追跡する。追跡対象とは、追跡・監視対象となる対象であり、例えば、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）で生成されたファイル等である。また、追跡対象の実体をインスタンスと呼ぶ。つまり、追跡対象がファイルであれば、インスタンスはファイルＡ、ファイルＢ等の具体的なファイルを指す。つまり、インスタンスの振舞いとは、例えば、ファイルＡが編集され、保存された等である。【０００３】
通常、イベントの履歴データには、イベントに関連したインスタンスを識別する追跡対象ＩＤ（識別子）、イベントが発生した時刻を示すタイムスタンプ、イベントの動作情報が記録されている。つまり、「ファイルＡが編集された」というイベントの履歴データには、ファイルＡの識別子と、編集された日時情報と、編集という動作を示す情報とが記録されている。【０００４】
特許文献１では、複数のデータベースに分散して記録された各インスタンスに対して統一的な識別子を付すとともに、各インスタンスが処理された順序を示す情報をインスタンス毎に持たせる。これにより、複数のデータベースに分散してイベント履歴データが記録された場合であっても、インスタンス毎の処理を順に追跡することを容易にしている。
【特許文献１】特開平１１−２１２８３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来のイベント履歴管理方法では、インスタンスが分割される場合等には、分割前のインスタンスの振舞いと、分割後のインスタンスの振舞いとを連続して追跡することは困難である。つまり、インスタンスが分割されると、分割され生成された新たなインスタンスには新たな識別子が付され、元のインスタンス（分割前のインスタンス）と新たなインスタンス（分割後のインスタンス）とは異なる識別子が付されてしまう。そのため、元のインスタンスと新たなインスタンスとの間の関連性がなくなり、元のインスタンスと新たなインスタンスとを連続して追跡することが困難となる。すなわち、インスタンスから新たなインスタンスが発生する場合には、元のインスタンスと新たなインスタンスとを連続して追跡することが困難である（手間がかかる）。
インスタンスが分割される場合に限らず、インスタンスが統合、複製等される場合も同様である。【０００６】
例えば、インスタンスがＰＣで生成されたファイルであるときに、そのファイルがコピー、リネーム等された場合や、インスタンスが製造工程における原料であるときに、その原料が分割、統合された場合には、処理前のインスタンスと処理後のインスタンスとを連続して追跡することは困難である。
つまり、ファイルがコピーされ新たなファイルが生成されると、コピー元のファイルと新たなファイルとには異なる識別子が付される。そのため、コピー元のファイルと新たなファイルとの振舞いを連続して追跡することは困難である。【０００７】
また、従来のイベント履歴管理方法では、あるインスタンスについての動作を異なる視点から追跡することは困難である（手間がかかる）。
例えば、複数のファイルがあり、その複数のファイルを複数のユーザが使用する場合において、あるファイルについての振舞いを、そのファイルを使用したユーザという視点から追跡するということは困難である。つまり、あるファイルについて、保存され、開かれ、再び保存されたという追跡は行えたとしても、あるファイルについて、ユーザ１が保存して、ユーザ２により開かれ、ユーザ２により再び保存されたという追跡を行うことは困難である。【０００８】
本発明は、例えば、インスタンスから新たなインスタンスが発生する場合であっても、元のインスタンスと新たなインスタンスとのイベント履歴を容易に連続して追跡可能とすることを目的とする。
また、本発明は、例えば、あるインスタンスについての動作を異なる視点から容易に追跡可能とすることを目的とする。
【課題を解決するための手段】
【０００９】
本発明に係るイベント履歴記憶装置は、例えば、アプリケーションで発生したイベントの履歴を記憶するイベント履歴記憶装置であり、
所定の種別を示すクラスのうち、追跡の対象となるクラスに属するインスタンス毎に、そのインスタンスに関連して発生したイベントに識別子を付し、そのインスタンスに関連して発生したイベントの発生順序を上記識別子により表した順序関係情報を記憶装置に記憶する順序関係記憶部と、
上記順序関係記憶部が発生順序を記憶したイベントによってインスタンスから新たなインスタンスが発生した場合、上記イベントについて上記新たなインスタンスに対して新たな識別子を付し、上記イベントについて発生元のインスタンスに対して付された識別子と上記新たな識別子とを関連付けした階層関係情報を記憶装置に記憶する階層関係記憶部と、
上記順序関係記憶部と上記階層関係記憶部とのいずれかが異なるクラスに属するインスタンスに対して付した識別子であって、同一のイベントについて付した識別子を関連付けした関係構造情報を記憶装置に記憶する関係構造記憶部と
を備えることを特徴とする。【００１０】
上記階層関係記憶部は、新たなインスタンスに付された新たな識別子を子とし、発生元のインスタンスに対して付された識別子を親として、上記新たな識別子と発生元のインスタンスに対して付された識別子とを関連付けした階層関係情報を記憶する
ことを特徴とする。【００１１】
上記階層関係記憶部は、イベントによってインスタンスが分割又は統合又は複製された場合に、新たなインスタンスが発生したとみなす
ことを特徴とする。【００１２】
本発明に係るイベント履歴追跡装置は、例えば、上記イベント履歴記憶装置が記憶したイベントの履歴から、所定のインスタンスについてのイベントの履歴を追跡するイベント履歴追跡装置であり、
追跡する対象となるインスタンスを特定する条件情報を入力装置により入力する条件入力部と、
上記条件入力部が入力した条件情報により特定されるインスタンスに関連して発生したイベントを上記順序関係記憶部が記憶した順序関係情報が示す順に取得する順序関係追跡部と、
上記順序関係追跡部が取得したイベントに付された識別子と上記階層関係記憶部が関連付けした識別子を辿ることにより、上記条件情報により特定されるインスタンスから発生した新たなインスタンス又は上記条件情報により特定されるインスタンスの発生元のインスタンスである次の階層のインスタンスと、上記次の階層のインスタンスに関連して発生したイベントとを取得する階層関係追跡部と
を備えることを特徴とする。【００１３】
上記条件入力部は、上記条件情報とともに、追跡する範囲を絞り込むための範囲情報であって、クラスを特定する範囲情報を入力し、
上記イベント履歴追跡装置は、さらに、
上記順序関係追跡部と上記階層関係追跡部とが取得したイベントに付された識別子と上記関係構造記憶部が関連付けした識別子であって、上記範囲情報が示すクラスに属するインスタンスに付された識別子を辿ることにより、上記条件情報により特定されるインスタンスに関連するとともに上記範囲情報により特定されるクラスに属するインスタンスである他クラスインスタンスと、上記他クラスインスタンスに関連して発生したイベントとを取得するクラス間関係追跡部
を備えることを特徴とする。【００１４】
上記階層関係追跡部は、さらに、上記次の階層のインスタンスに付された識別子と上記階層関係記憶部が関連付けした識別子を辿ることにより、さらに次の階層のインスタンスと、上記さらに次の階層のインスタンスに関連して発生したイベントとを取得する階層関係追跡処理を繰り返す
ことを特徴とする。【００１５】
上記条件入力部は、上記条件情報とともに、追跡する階層の数を示す階層情報を入力し、
上記階層関係追跡部は、上記階層情報が示す階層の数だけ階層関係追跡処理を繰り返して、階層関係追跡処理を終了する
ことを特徴とする。【００１６】
本発明に係るイベント履歴記憶方法は、例えば、アプリケーションで発生したイベントの履歴を記憶するイベント履歴記憶方法であり、
処理装置が、所定の種別を示すクラスのうち、追跡の対象となるクラスに属するインスタンス毎に、そのインスタンスに関連して発生したイベントに識別子を付し、記憶装置が、そのインスタンスに関連して発生したイベントの発生順序を上記識別子により表した順序関係情報を記憶する順序関係記憶ステップと、
処理装置が、上記順序関係記憶ステップで発生順序を記憶したイベントによってインスタンスから新たなインスタンスが発生した場合、上記イベントについて上記新たなインスタンスに対して新たな識別子を付し、記憶装置が、上記イベントについて発生元のインスタンスに対して付された識別子と上記新たな識別子とを関連付けした階層関係情報を記憶する階層関係記憶ステップと、
記憶装置が、上記順序関係記憶ステップと上記階層関係記憶ステップとのいずれかで異なるクラスに属するインスタンスに対して付した識別子であって、同一のイベントについて付した識別子を関連付けした関係構造情報を記憶する関係構造記憶ステップと
を備えることを特徴とする。【００１７】
本発明に係るイベント履歴記憶プログラムは、例えば、アプリケーションで発生したイベントの履歴を記憶するイベント履歴記憶プログラムであり、
所定の種別を示すクラスのうち、追跡の対象となるクラスに属するインスタンス毎に、そのインスタンスに関連して発生したイベントに識別子を付し、そのインスタンスに関連して発生したイベントの発生順序を上記識別子により表した順序関係情報を記憶装置に記憶する順序関係記憶処理と、
上記順序関係記憶処理で発生順序を記憶したイベントによってインスタンスから新たなインスタンスが発生した場合、上記イベントについて上記新たなインスタンスに対して新たな識別子を付し、上記イベントについて発生元のインスタンスに対して付された識別子と上記新たな識別子とを関連付けした階層関係情報を記憶装置に記憶する階層関係記憶処理と、
上記順序関係記憶処理と上記階層関係記憶処理とのいずれかで異なるクラスに属するインスタンスに対して付した識別子であって、同一のイベントについて付した識別子を関連付けした関係構造情報を記憶装置に記憶する関係構造記憶処理と
をコンピュータに実行させることを特徴とする。【００１８】
本発明に係るデータ構造は、例えば、アプリケーションで発生したイベントの履歴を記憶するためのデータ構造であり、
所定の種別を示すクラスのうち、追跡の対象となるクラスに属するインスタンス毎に、情報を記憶するインスタンス情報記憶領域を備え、
上記インスタンス情報記憶領域の上記インスタンス毎の記憶領域は、
そのインスタンスに関連して発生したイベント毎に、そのイベントに付された挙動識別子であって、そのインスタンスに対して付された挙動識別子と、上記インスタンスに関連して発生したイベントであって、上記挙動識別子が付されたイベントの前に発生したイベントに付された挙動識別子と後に発生したイベントに付された挙動識別子との少なくともいずれかの挙動識別子を記憶する挙動識別子記憶領域と、
上記インスタンスから発生した新たなインスタンスを識別するインスタンス識別子と、上記新たなインスタンスを発生させたイベントについて上記新たなインスタンスに対して付された挙動識別子とを記憶する子インスタンス記憶領域、又は、上記インスタンスを発生させた発生元のインスタンスを識別するインスタンス識別子と、上記インスタンスを発生させたイベントについて上記発生元のインスタンスに対して付された挙動識別子とを記憶する親インスタンス記憶領域の少なくともいずれかとを備え、
上記挙動識別子記憶領域の上記イベント毎の記憶領域は、
そのイベントと同一のイベントに付された挙動識別子であって、他のクラスに属するインスタンスに対して付された挙動識別子を記憶する関係構造記憶領域
を備えることを特徴とする。
【発明の効果】
【００１９】
本発明に係るイベント履歴記憶装置は、インスタンス毎にイベントに識別子を付してイベントの発生順序を管理する。また、あるイベントでインスタンスから新たなインスタンスが発生した場合、そのイベントについて上記新たなインスタンスに対して新たな識別子を付し、そのイベントについて発生元のインスタンスに対して付された識別子と上記新たな識別子とを関連付けする。したがって、各インスタンスに関連して発生したイベントの履歴（インスタンスの振舞い）を追跡することができるとともに、インスタンスから新たなインスタンスが発生する場合であっても、元のインスタンスと新たなインスタンスとを容易に連続して追跡することができる。
また、本発明に係るイベント履歴記憶装置は、異なるクラスに属するインスタンスに対して付した識別子であって、同一のイベントについて付した識別子を関連付けする。したがって、あるインスタンスについての動作を異なる視点から容易に追跡することができる。
【発明を実施するための最良の形態】
【００２０】
実施の形態１．
この実施の形態では、所定のアプリケーションで発生したイベント履歴の記憶方法について説明する。【００２１】
図１は、この実施の形態に係るイベント履歴記憶装置１０の機能を示す機能ブロック図である。
イベント履歴記憶装置１０は、履歴データ統合部１１、条件指定記憶部１２、統合定義記憶部１３、統合データ記憶部１４、要素抽出部１５、クラス情報生成部１６、インスタンス情報生成部１７、順序関係記憶部１８、階層関係記憶部１９、関係構造記憶部２０、挙動インデックス記憶部２１を備える。【００２２】
履歴データ統合部１１は、複数のイベント履歴データベース２２のそれぞれの形式で記憶されたイベントの履歴データを各イベント履歴データベース２２から取得して、条件指定記憶部１２が記憶した条件指定ファイルと統合定義記憶部１３が記憶した統合データ定義ファイルとに基づき、統一的な形式の統合データに変換する。
条件指定記憶部１２は、イベント履歴データベース２２に記憶されたイベント履歴データに含まれる情報からインスタンスを抽出するための絞込条件を指定した条件指定ファイルを記憶装置に記憶する。条件指定ファイルは、例えば、ファイル操作に関連したイベントのみを抽出する等の条件を指定する。この場合、条件指定ファイルは、例えば、イベント履歴データに実行されたコマンド名が含まれていれば、ファイル操作に関連したコマンド名が記憶されたイベント履歴データを抽出する条件を指定する。
統合定義記憶部１３は、条件指定ファイルが指定する条件に基づき抽出されたイベント履歴データの各項目が、統合データのどのカラムに格納されるかを定義した統合データ定義ファイルを記憶装置に記憶する。つまり、統合データ定義ファイルは、例えば、各形式のイベント履歴データのカラムと、統合データのカラムとの対応関係を示す。
統合データ記憶部１４は、履歴データ統合部１１が変換した統合データを記憶装置に記憶する。【００２３】
図２は、統合データのデータ形式の一例を示す図である。
図２に示す統合データは、ヘッダ情報１１０、イベントＩＤ１２０、クラス数１３０、追跡対象情報１４０の項目を備える。
ヘッダ情報１１０は、タイムスタンプ１１１、元のログ指定情報１１２を備える。タイムスタンプ１１１には、イベントの発生した日時情報が記憶される。元のログ指定情報１１２には、イベント履歴データの抽出元のデータベースとそのデータベースのどのレコードから抽出されたかを示す行番号（レコード番号）とが記憶される。つまり、元のログ指定情報１１２には、イベント履歴データがどのデータベースのどのレコードから抽出されたかを示す情報が記憶される。
イベントＩＤ１２０には、イベントを一意に特定する識別子が記憶される。イベントＩＤ１２０には、例えば、抽出元のデータベースでそのイベントに付された識別子が記憶されてもよい。
クラス数１３０には、そのレコードに含まれるクラスの数（追跡対象情報１４０の数、図２ではｎ）が記憶される。
追跡対象情報１４０には、そのイベントに含まれるインスタンスについての情報が記憶される。１つのイベントに複数のインスタンスが含まれる場合は、複数のインスタンスそれぞれについての情報が全て記憶される。追跡対象情報１４０は、インスタンス毎に、追跡対象クラスＩＤ１４１、追跡対象インスタンスＩＤ１４２、子の個数１４３、親の個数１４４、親・子のインスタンスＩＤバッファ１４５を備える。
追跡対象クラスＩＤ１４１には、そのインスタンスの属するクラスを一意に識別するクラスＩＤが記憶される。追跡対象インスタンスＩＤ１４２には、そのインスタンスを一意に識別するインスタンスＩＤが記憶される。子の個数１４３には、そのインスタンスの子インスタンスの個数が記憶される。そのインスタンスに子インスタンスがない場合には、０が記憶される。親の個数１４４には、そのインスタンスの親インスタンスの個数が記憶される。そのインスタンスに親インスタンスがない場合には、０が記憶される。親・子のインスタンスＩＤバッファ１４５は、子インスタンス又は親インスタンスがある場合に、その子インスタンス又は親インスタンスとのインスタンスＩＤが記憶される。【００２４】
なお、クラスとは、所定の種別を示すものである。例えば、ファイルであることを示すファイルクラス、ユーザであることを示すユーザクラス等である。また、インスタンスとは、追跡対象の実体を示すものである。例えば、ファイルクラスに属するインスタンスであれば、ファイルＡ、ファイルＢ等の実際のファイルであるし、ユーザクラスに属するインスタンスであれば、ユーザ１、ユーザ２等の実際のユーザである。
また、子インスタンスとは、そのインスタンスが分割、統合、複製等されることにより発生した新たなインスタンスである。例えば、インスタンスがＰＣで生成されたファイルであるとすると、ファイルがコピーされ、新たなファイルが生成された場合、新たなファイルはコピー元のファイルの子インスタンスである。一方、上記新たなファイルに対してコピー元のファイルは親インスタンスである。
ここで、例えば、ファイルＡがコピーされてファイルＢが生成された場合、ファイルＡについてのイベント履歴データを辿れば、「ユーザ１によってファイルＡがコピーされてファイルＢが生成された」という情報を得ることができる。つまり、ファイルＡについてのイベント履歴データを辿れば、ファイルＢがファイルＡの子インスタンスであるという情報を得ることができる。一方、ファイルＢについてのイベント履歴データを辿っても、「ユーザ１によってファイルＡがコピーされてファイルＢが生成された」という情報を得ることはできない。つまり、ファイルＢについてのイベント履歴データを辿っても、ファイルＡがファイルＢの親インスタンスであるという情報を得ることはできない。すなわち、親側のインスタンスから子側のインスタンスを知ることはできるが、子側のインスタンスから親側のインスタンスを知ることはできない。この場合には、親側のインスタンスの子の個数１４３には、子の数が入れられ、親・子のインスタンスＩＤバッファ１４５には子インスタンスのインスタンスＩＤが入れられる。しかし、子側のインスタンスの親の個数１４４には、親の数が入れられず、親・子のインスタンスＩＤバッファ１４５にも親インスタンスのインスタンスＩＤは入らない。
また、例えば、電子メールのメッセージ１に対してメッセージ２が返信された場合、メッセージ１に対してメッセージ２は子インスタンスであり、メッセージ２に対してメッセージ１は親インスタンスである。ここで、メッセージ１についてのイベント履歴データからは、メッセージ１に対してメッセージ２が返信されたという情報を得ることができない。つまり、メッセージ１についてのイベント履歴データからは、メッセージ１に対してメッセージ２は子インスタンスであるという情報を得ることはできない。一方、メッセージ２についてのイベント履歴データからは、メッセージ１に対してメッセージ２が返信されたという情報を得ることができる。つまり、メッセージ２についてのイベント履歴データからは、メッセージ２に対してメッセージ１は親インスタンスであるという情報を得ることができる。この場合には、親側のインスタンスの子の個数１４３には、子の数が入れられず、親・子のインスタンスＩＤバッファ１４５にも子インスタンスのインスタンスＩＤは入らない。しかし、子側のインスタンスの親の個数１４４には、親の数が入れられ、親・子のインスタンスＩＤバッファ１４５には親インスタンスのインスタンスＩＤが入れられる。
つまり、統合データでは、親側のインスタンスの情報に子側のインスタンスのＩＤを持たせる、または子側のインスタンスの情報に親側のインスタンスのＩＤを持たせるだけでよい。そのため、親側のインスタンスから子側のインスタンスを知ることはできるが、子側のインスタンスから親側のインスタンスを知ることはできない場合であっても、子側のインスタンスから親側のインスタンスを知ることはできるが、親側のインスタンスから子側のインスタンスを知ることはできない場合であっても、全てのイベント履歴データを統合データの形式に変換することができる。【００２５】
要素抽出部１５は、統合データ記憶部１４から１件ずつイベント履歴データを読み出して、統合定義記憶部１３が記憶した統合データ定義ファイルを参照しながら、イベントＩＤ、クラスＩＤ、追跡対象インスタンスＩＤ、親子関係の有無等の後述する挙動インデックスを生成するために必要な情報を抽出する。
クラス情報生成部１６とインスタンス情報生成部１７とは、要素抽出部１５が抽出した情報から固定的な情報を生成して、挙動インデックス記憶部２１に記憶する。
順序関係記憶部１８と階層関係記憶部１９と関係構造記憶部２０とは、インスタンス毎に発生したイベントとそのイベントによる状態の変化（挙動）とを関連付けたグラフ構造のデータを生成して、挙動インデックス記憶部２１に記憶する。
クラス情報生成部１６、インスタンス情報生成部１７、順序関係記憶部１８、階層関係記憶部１９、関係構造記憶部２０について詳しくは後述する。【００２６】
図３は、所定の情報装置（ＰＣ等）で生成された電子ファイルに対する操作履歴を例に挙動インデックス記憶部２１で管理されるデータモデルの構造を表した図である。
図３は、ファイルＡをユーザ１が保存し、そのファイルＡをユーザ２がＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）メモリにコピーし、さらにコピー元のファイルＡをユーザ１が開き、ユーザ２は退室したという挙動を表現している。【００２７】
図２に示す統合データのデータ形式と、図３に示すグラフ構造とに基づき、クラス情報生成部１６、インスタンス情報生成部１７、順序関係記憶部１８、階層関係記憶部１９、関係構造記憶部２０について説明する。
クラス情報生成部１６は、統合データの追跡対象クラスＩＤ１４１に記憶されたクラスＩＤに基づき、ファイルクラスとユーザクラスとのクラスを生成する。
インスタンス情報生成部１７は、統合データの追跡対象インスタンスＩＤ１４２に記憶されたインスタンスＩＤに基づき、ファイルクラスにファイルＡとファイルＢとを、ユーザクラスにユーザ１とユーザ２とのインスタンスを生成する。
順序関係記憶部１８は、ファイルＡにおける「保存、ＵＳＢコピー、開く」という順序を示す履歴（順序関係情報）と、ユーザ１における「保存、開く」という順序を示す履歴（順序関係情報）と、ユーザ２における「ＵＳＢコピー、退室」という順序を示す履歴（順序関係情報）とをそれぞれ生成する。つまり、順序関係記憶部１８は、図３に示す横向きの矢印（有向辺）の情報を生成する。
階層関係記憶部１９は、ＵＳＢコピーイベントによりファイルＡからファイルＢが生成されたことを示す階層関係情報を生成する。つまり、階層関係記憶部１９は、図３に示すファイルＡからファイルＢへの矢印の情報を生成する。
関係構造記憶部２０は、ファイルクラスのインスタンスとユーザクラスのインスタンスとの間の対応する（同一の）イベントの関係を示す関係構造情報を生成する。つまり、関係構造記憶部２０は、ファイルクラスのインスタンスとユーザクラスのインスタンスとの間の破線矢印の情報を生成する。
挙動インデックス記憶部２１は、クラス情報生成部１６、インスタンス情報生成部１７、順序関係記憶部１８、階層関係記憶部１９、関係構造記憶部２０によって生成された情報を挙動インデックスとして記憶装置に記憶する。
つまり、イベント履歴記憶装置１０は、インスタンスに関連して発生したイベントの履歴データを、各インスタンスの状態の変化を示す挙動を関連付けしたグラフ構造によって記憶する。【００２８】
図４は、挙動インデックスのデータ構造を示す図である。
挙動インデックス２００には、クラス毎にクラス情報テーブル２１０が生成される。つまり、図３の例では、挙動インデックス２００には、ファイルクラスとユーザクラスとのそれぞれに対してクラス情報テーブル２１０が生成される。【００２９】
各クラス情報テーブル２１０は、クラスＩＤ２１１、インスタンス数２１２、インスタンスＩＤ配列２１３を備える。
クラスＩＤ２１１には、そのクラスを識別するクラスＩＤが記憶される。
インスタンス数２１２には、そのクラスに属するインスタンスの数が記憶される。
インスタンスＩＤ配列２１３は、そのクラスに属するインスタンス毎にインスタンス情報テーブル２２０（インスタンス情報記憶領域）が生成される。
つまり、図３のファイルクラスにおいては、クラスＩＤ２１１には、ファイルクラスを示す識別子が記憶される。また、インスタンスは、ファイルＡとファイルＢとの２つであるので、インスタンス数２１２には「２」が記憶される。さらに、ファイルＡとファイルＢとのそれぞれに対してインスタンス情報テーブル２２０が生成される。【００３０】
各インスタンス情報テーブル２２０は、インスタンスヘッダ情報２２１、挙動ＩＤ配列２２２、子供情報管理配列２２３、親情報管理配列２２４を備える。
インスタンスヘッダ情報２２１には、インスタンスＩＤ等の情報が記憶される。
挙動ＩＤ配列２２２には、そのインスタンスに関連して発生したイベントの情報である挙動情報テーブル２３０（挙動識別子記憶領域）が生成される。つまり、そのインスタンスの状態の変化を示す挙動の情報が記憶される。
子供情報管理配列２２３には、そのインスタンスの子インスタンスの情報である子インスタンス情報テーブル２５０（子インスタンス記憶領域）が生成される。
親情報管理配列２２４には、そのインスタンスの親インスタンスの情報である親インスタンス情報テーブル２６０（親インスタンス記憶領域）が生成される。
つまり、図３のファイルクラスのファイルＡにおいては、インスタンスヘッダ情報２２１には、ファイルＡの識別子が記憶される。また、挙動ＩＤ配列２２２には、ファイルＡの「保存」、「ＵＳＢコピー」、「開く」というそれぞれの挙動についての情報が記憶される。さらに、子供情報管理配列２２３には、ファイルＡの子インスタンスであるファイルＢについての情報が記憶される。また、さらに、親情報管理配列２２４には、ファイルＡに親インスタンスがないため、親インスタンスなしを示す情報が記憶される。一方、ファイルＢにおいては、インスタンスヘッダ情報２２１には、ファイルＢの識別子が記憶される。また、挙動ＩＤ配列２２２には、ファイルＢの「ＵＳＢコピー」という挙動についての情報が記憶される。さらに、子供情報管理配列２２３には、ファイルＢに子インスタンスがないため、子インスタンスなしを示す情報が記憶される。親情報管理配列２２４には、ファイルＢの親インスタンスであるファイルＡについての情報が記憶される。【００３１】
各挙動情報テーブル２３０は、挙動ＩＤ２３１、イベントＩＤ２３２、次挙動ＩＤ２３３、前挙動ＩＤ２３４、クラス間関係管理配列２３５を備える。
挙動ＩＤ２３１には、その挙動を一意に識別する挙動ＩＤが記憶される。挙動とは、イベントによるインスタンスの状態の変化である。つまり、挙動は、イベント毎、インスタンス毎に起こるものであり、挙動ＩＤは、イベント毎、インスタンス毎に割り当てられる。
イベントＩＤ２３２には、その挙動を発生させたイベントのイベントＩＤが記憶される。
次挙動ＩＤ２３３には、その挙動の次に発生する挙動を示す挙動ＩＤが記憶される。
前挙動ＩＤ２３４には、その挙動の前に発生した挙動を示す挙動ＩＤが記憶される。
クラス間関係管理配列２３５には、その挙動を発生させたイベントが他のクラスのインスタンスに対して発生させた挙動についての情報（関係構造情報）である関係構造情報テーブル２４０（関係構造記憶領域）が生成される。
つまり、図３のファイルクラスのファイルＡの「ＵＳＢコピー」という挙動においては、挙動ＩＤ２３１には、ファイルＡについての「ＵＳＢコピー」という挙動を示す挙動ＩＤが記憶される。また、イベントＩＤ２３２には、「ＵＳＢコピー」のイベントを示すイベントＩＤが記憶される。さらに、次挙動ＩＤ２３３には、「ＵＳＢコピー」の次の挙動である「開く」という挙動を示す挙動ＩＤが記憶される。また、さらに、前挙動ＩＤ２３４には、「ＵＳＢコピー」の前の挙動である「保存」という挙動を示す挙動ＩＤが記憶される。また、クラス間関係管理配列２３５には、ファイルＡの「ＵＳＢコピー」の挙動を発生させたイベントが、ファイルＡが属するファイルクラスと異なるユーザクラスに発生させた挙動（関連した挙動）についての情報が記憶される。つまり、ここでは、ユーザ２の「ＵＳＢコピー」という挙動についての情報が記憶される。【００３２】
関係構造情報テーブル２４０は、クラスＩＤ２４１、インスタンスＩＤ２４２、挙動ＩＤ２４３を備える。
クラスＩＤ２４１には、関連した挙動が発生したインスタンスの属するクラスＩＤが記憶される。
インスタンスＩＤ２４２には、関連した挙動が発生したインスタンスのインスタンスＩＤが記憶される。
挙動ＩＤ２４３には、関連した挙動の挙動ＩＤが記憶される。
つまり、ファイルＡの「ＵＳＢコピー」の挙動に関連した挙動であるユーザ２の「ＵＳＢコピー」という挙動においては、クラスＩＤ２４１には、ユーザクラスのクラスＩＤが記憶される。また、インスタンスＩＤ２４２には、ユーザ２のユーザＩＤが記憶される。挙動ＩＤ２４３には、ユーザ２についての「ＵＳＢコピー」という挙動を示す挙動ＩＤが記憶される。【００３３】
子インスタンス情報テーブル２５０は、子インスタンスＩＤ２５１、挙動ＩＤ２５２を備える。
子インスタンスＩＤ２５１には、そのインスタンスの子インスタンスのインスタンスＩＤが記憶される。
挙動ＩＤ２５２には、子インスタンスを発生させたイベントによる子インスタンスの挙動を示す挙動ＩＤが記憶される。
つまり、図３のファイルクラスのファイルＡにおいては、子インスタンスＩＤ２５１には、ファイルＡの子インスタンスであるファイルＢを示すインスタンスＩＤが記憶される。また、挙動ＩＤ２５２には、ファイルＢが発生した挙動であって、ファイルＢについての挙動である「ＵＳＢコピー」という挙動を示す挙動ＩＤが記憶される。つまり、挙動ＩＤ２５２には、図３において、ファイルＡからファイルＢへの矢印の挙動を示す挙動ＩＤが記憶される。【００３４】
親インスタンス情報テーブル２６０は、親インスタンスＩＤ２６１、挙動ＩＤ２６２を備える。
親インスタンスＩＤ２６１には、そのインスタンスの親インスタンスのインスタンスＩＤが記憶される。
挙動ＩＤ２６２には、そのインスタンスを発生させたイベントによる親インスタンスの挙動を示す挙動ＩＤが記憶される。
つまり、図３のファイルクラスのファイルＢにおいては、親インスタンスＩＤ２６１には、ファイルＢの親インスタンスであるファイルＡを示すインスタンスＩＤが記憶される。また、挙動ＩＤ２６２には、ファイルＢが発生した挙動であって、ファイルＡについての挙動である「ＵＳＢコピー」という挙動を示す挙動ＩＤが記憶される。つまり、挙動ＩＤ２６２には、図３において、ファイルＡについてのＵＳＢコピーの挙動を示すの横向き矢印の挙動ＩＤが記憶される。【００３５】
次に、挙動インデックスの生成処理について説明する。
まず、クラス情報生成部１６、インスタンス情報生成部１７、順序関係記憶部１８による処理について説明する。図５は、クラス情報生成部１６、インスタンス情報生成部１７、順序関係記憶部１８による順序関係情報生成処理を示すフローチャートである。
順序関係情報生成処理では、統合データの１レコードを要素抽出部１５が読み込み、そのレコードに含まれる情報を取得し、そのレコードに含まれる追跡対象情報１４０の数だけ以下の処理を行なう。なお、順序関係情報生成処理は、統合データの前のレコードから後のレコードへ順に実行される。つまり、先に発生したイベントについてのレコードから後に発生したイベントについてのレコードへ順に行う。順序関係情報生成処理を行うことにより、図３に示す各クラスの情報と、各インスタンスの情報と、各インスタンスにおける挙動の順序（横向きの矢印）の情報とが生成される。【００３６】
（Ｓ１０１）：要素抽出部１５は、統合データの未処理レコードの最も前のレコードから、クラス数１３０に記憶された、そのレコードに記憶されているクラスの数（追跡対象情報１４０の数）を取得する。
（Ｓ１０２）：要素抽出部１５は、（Ｓ１０１）で取得したクラスの数に基づき、すべての追跡対象情報１４０についての処理を行ったか否かを判定する。すべての追跡対象情報１４０についての処理を行ったと判定した場合（Ｓ１０２でＹＥＳ）、処理を終了する。一方、すべての追跡対象情報１４０についての処理を行っていないと判定した場合（Ｓ１０２でＮＯ）、（Ｓ１０３）へ進む。
（Ｓ１０３）：要素抽出部１５は、処理の済んでいない追跡対象情報１４０の追跡対象クラスＩＤ１４１に記憶されたクラスＩＤを取得する。
（Ｓ１０４）：クラス情報生成部１６は、（Ｓ１０３）で取得したクラスＩＤについての処理が済んでいるか否か、つまりそのクラスＩＤについてのクラス情報テーブル２１０を生成済であるか否かを判定する。そのクラスＩＤについての処理が済んでいると判定した場合（Ｓ１０４でＹＥＳ）、（Ｓ１０７）へ進む。一方、そのクラスＩＤについての処理が済んでいないと判定した場合（Ｓ１０４でＮＯ）、（Ｓ１０５）へ進む。
（Ｓ１０５）：クラス情報生成部１６は、（Ｓ１０３）で取得したクラスＩＤについてのクラス情報テーブル２１０を生成する。
（Ｓ１０６）：クラス情報生成部１６は、（Ｓ１０５）で生成したクラス情報テーブル２１０に情報を格納する。なお初期情報としては、クラスＩＤ２１１のみに情報を格納し、インスタンス数２１２には０、インスタンスＩＤ配列２１３にはＮＵＬＬを格納する。【００３７】
（Ｓ１０７）：要素抽出部１５は、上記追跡対象情報１４０（（Ｓ１０３）でクラスＩＤを取得した追跡対象情報１４０）の追跡対象インスタンスＩＤ１４２に記憶されたインスタンスＩＤを取得する。
（Ｓ１０８）：インスタンス情報生成部１７は、（Ｓ１０７）で取得したインスタンスＩＤについての処理が済んでいるか否か、つまりそのインスタンスＩＤについてのインスタンス情報テーブル２２０を生成済であるか否かを判定する。そのインスタンスＩＤについての処理が済んでいると判定した場合（Ｓ１０８でＹＥＳ）、（Ｓ１１１）へ進む。一方、そのインスタンスＩＤについての処理が済んでいないと判定した場合（Ｓ１０８でＮＯ）、（Ｓ１０９）へ進む。
（Ｓ１０９）：インスタンス情報生成部１７は、（Ｓ１０７）で取得したインスタンスＩＤについてのインスタンス情報テーブル２２０を生成する。
（Ｓ１１０）：インスタンス情報生成部１７は、（Ｓ１０９）で生成したインスタンス情報テーブル２２０のインスタンスヘッダ情報２２１に情報を格納する。合わせて、インスタンス数２１２のインスタンス数に１加算（インクリメント）する。【００３８】
（Ｓ１１１）：順序関係記憶部１８は、（Ｓ１０７）で取得したインスタンスＩＤに対しての挙動情報テーブル２３０を生成する。
（Ｓ１１２）：順序関係記憶部１８は、このレコードのイベントＩＤ１２０に記憶されたイベントＩＤを取得して、このイベントＩＤが示すイベントについての上記インスタンスＩＤに対する挙動ＩＤを生成する。そして、順序関係記憶部１８は、生成した挙動ＩＤを挙動ＩＤ２３１に記憶するとともに、上記イベントＩＤをイベントＩＤ２３２に記憶する。
（Ｓ１１３）：順序関係記憶部１８は、現在処理している挙動情報テーブル２３０の前挙動ＩＤ２３４に１つ前の挙動の挙動ＩＤを記憶する。つまり、順序関係記憶部１８は、現在処理しているインスタンスについての挙動であって、（Ｓ１１２）で記憶した挙動ＩＤが示す挙動の１つ前の挙動の挙動ＩＤを前挙動ＩＤ２３４に記憶する。順序関係記憶部１８は、例えば、現在処理しているインスタンス情報テーブル２２０の挙動ＩＤ配列２２２から、最後尾の挙動情報テーブル２３０を検索して、その挙動情報テーブル２３０の挙動ＩＤ２３１に記憶された挙動ＩＤを取得することにより、１つ前の挙動の挙動ＩＤを取得することができる。
（Ｓ１１４）：順序関係記憶部１８は、現在処理している挙動情報テーブル２３０の次挙動ＩＤ２３３に０を記憶する。次の挙動ＩＤに０が格納されている場合は、次の挙動が存在しないこと、つまりこの挙動情報テーブル２３０が最後尾の挙動であることを表す。
（Ｓ１１５）：順序関係記憶部１８は、上記最後尾の挙動情報テーブル２３０の次挙動ＩＤ２３３に現在の（Ｓ１１２）で生成した挙動ＩＤを記憶する。
（Ｓ１１６）：現在処理している挙動情報テーブル２３０を挙動ＩＤ配列２２２の最後尾に追加する。【００３９】
つまり、順序関係記憶部１８は、所定の種別を示すクラスのうち、追跡の対象となるクラスに属するインスタンス毎に、そのインスタンスに関連して発生したイベントに挙動識別子を付し、そのインスタンスに関連して発生したイベントの発生順序を上記挙動識別子により表した順序関係情報を記憶装置に記憶する。【００４０】
次に、階層関係記憶部１９による処理について説明する。図６は、階層関係記憶部１９による階層関係情報生成処理を示すフローチャートである。
ここでは、図５に基づき説明した順序関係情報生成処理に続き、階層関係情報生成処理を実行する。つまり、順序関係情報生成処理の１レコード分の処理の終了に続き、以下に説明する（Ｓ２０１）を実行する。この場合以下で説明する（Ｓ２０１）では、順序関係情報生成処理で対象としたレコードの追跡対象情報１４０から情報を取得するものとする。なお、順序関係情報生成処理の１レコード分の処理の終了に続き階層関係情報生成処理を実行しなくてもよいが、親となる側の挙動情報テーブル２３０が順序関係情報生成処理で生成されている必要がある。
階層関係情報生成処理を統合データの各レコードに対して行うことにより、図２に示す同一クラス内におけるインスタンス間を接続する挙動（斜めの実線矢印）の情報が生成される。【００４１】
（Ｓ２０１）：要素抽出部１５は、所定のレコードの所定の追跡対象情報１４０の子の個数１４３に記憶された値を取得する。
なお、以下の説明で、上記所定のレコードを現在処理しているレコードと呼び、上記所定の追跡対象情報１４０の追跡対象インスタンスＩＤ１４２に記憶されたインスタンスＩＤを現在処理しているインスタンスＩＤと呼ぶ。また、上記所定の追跡対象情報１４０の追跡対象クラスＩＤ１４１に記憶されたクラスＩＤから特定されるクラス情報テーブル２１０を現在処理しているクラス情報テーブル２１０と呼び、上記現在処理しているインスタンスＩＤから特定されるインスタンス情報テーブル２２０を現在処理しているインスタンス情報テーブル２２０と呼ぶ。
（Ｓ２０２）：階層関係記憶部１９は、（Ｓ２０１）で取得した値に基づき、そのインスタンスに子インスタンスが存在するか否かを判定する。つまり、階層関係記憶部１９は、取得した値が０であれば、子インスタンスが存在しないと判定し、それ以外であれば子インスタンスが存在すると判定する。子インスタンスが存在すると判定した場合（Ｓ２０２でＹＥＳ）、（Ｓ２０３）へ進む。一方、子インスタンスが存在しないと判定した場合（Ｓ２０２でＮＯ）、処理を終了する。【００４２】
（Ｓ２０３）：階層関係記憶部１９は、親・子のインスタンスＩＤバッファ１４５に記憶した子インスタンスのインスタンスＩＤを取得する。
（Ｓ２０４）：階層関係記憶部１９は、（Ｓ２０３）で取得した子インスタンスのインスタンスＩＤについてのインスタンス情報テーブル２２０が既に存在するか否かを判定する。インスタンス情報テーブル２２０が既に存在すると判定した場合（Ｓ２０４でＹＥＳ）、（Ｓ２０６）へ進む。一方、インスタンス情報テーブル２２０がまだ存在しないと判定した場合（Ｓ２０４でＮＯ）、（Ｓ２０５）へ進む。
（Ｓ２０５）：階層関係記憶部１９は、現在処理しているクラス情報テーブル２１０のインスタンスＩＤ配列２１３に子インスタンスのインスタンスＩＤについてのインスタンス情報テーブル２２０を生成する。そして、生成したインスタンス情報テーブル２２０のインスタンスヘッダ情報２２１に子インスタンスのインスタンスＩＤを記憶する。
（Ｓ２０６）：階層関係記憶部１９は、（Ｓ２０５）で生成したインスタンス情報テーブル２２０の親情報管理配列２２４の最後尾に、親インスタンス情報テーブル２６０を生成する。そして、階層関係記憶部１９は、生成した親インスタンス情報テーブル２６０の親インスタンスＩＤ２６１に現在処理しているインスタンスＩＤを記憶するとともに、挙動ＩＤ２６２に、現在処理しているレコードのイベントについての現在処理しているインスタンスに対する挙動ＩＤを記憶する。なお、この挙動ＩＤは、既に順序関係情報生成処理にて生成されている。
また、階層関係記憶部１９は、（Ｓ２０５）で生成した子インスタンスについてのインスタンス情報テーブル２２０の挙動ＩＤ配列２２２の最後尾に、挙動情報テーブル２３０を生成する。階層関係記憶部１９は、現在処理しているレコードのイベントについての子インスタンスに対する挙動ＩＤを生成して、生成した挙動情報テーブル２３０の挙動ＩＤ２３１に記憶する。また、階層関係記憶部１９は、上記イベントのイベントＩＤをイベントＩＤ２３２に記憶する。さらに、階層関係記憶部１９は、次挙動ＩＤ２３３と前挙動ＩＤ２３４とに０を記憶する。
（Ｓ２０７）：階層関係記憶部１９は、現在処理しているインスタンス情報テーブル２２０の子供情報管理配列２２３の最後尾に、子インスタンスについての子インスタンス情報テーブル２５０を生成する。そして、階層関係記憶部１９は、子インスタンスのインスタンスＩＤを生成した子インスタンス情報テーブル２５０の子インスタンスＩＤ２５１に記憶するとともに、（Ｓ２０６）で生成した挙動ＩＤを挙動ＩＤ２５２に記憶する。
（Ｓ２０８）：階層関係記憶部１９は、（Ｓ２０１）で取得した値が示す子インスタンスの個数分処理を実行したか否かを判定する。子インスタンスの個数分処理を実行したと判定した場合（Ｓ２０８でＹＥＳ）、処理を終了する。一方、子インスタンスの個数分処理を実行していないと判定した場合（Ｓ２０８でＮＯ）、（Ｓ２０３）へ戻る。【００４３】
以上の処理は、親側のインスタンスから子側のインスタンスを知ることができる場合を例として説明した。しかし、子側のインスタンスから親側のインスタンスを知ることができる場合についても、上記処理の親と子とを読み替えして、同様の考え方による処理を行うことで実現できる。【００４４】
つまり、階層関係記憶部１９は、順序関係記憶部１８が発生順序を記憶したイベントによってあるインスタンスから新たなインスタンスが発生した場合、上記イベントについて上記新たなインスタンスに対する新たな挙動識別子を付し、上記イベントについて発生元のインスタンスに対して付された挙動識別子と上記新たな挙動識別子とを関連付けした階層関係情報を記憶装置に記憶する。
また、階層関係記憶部１９は、新たなインスタンスに付された新たな識別子を子とし、発生元のインスタンスに対して付された識別子を親として、上記新たな識別子と発生元のインスタンスに対して付された識別子とを関連付けした階層関係情報を記憶する。【００４５】
次に、関係構造記憶部２０による処理について説明する。図７は、関係構造記憶部２０による関係構造情報生成処理を示すフローチャートである。
ここでは、図５と図６とに基づき説明した順序関係情報生成処理と階層関係情報生成処理とに続き、階層関係情報生成処理を実行する。つまり、階層関係情報生成処理の１レコード分の処理の終了に続き、以下に説明する（Ｓ３０１）を実行する。この場合、（Ｓ３０１）では、順序関係情報生成処理と階層関係情報生成処理とで対象としたレコードから情報を取得する。なお、階層関係情報生成処理の１レコード分の処理の終了に続き、以下に説明する（Ｓ３０１）を実行しなくてもよい。しかし、関係構造情報生成処理の前に、順序関係情報生成処理と階層関係情報生成処理とにより、各クラスの情報と、各インスタンスの情報と、各インスタンスにおける挙動の順序の情報と、同一クラス内におけるインスタンス間を接続する挙動の情報とが生成されている必要がある。
関係構造情報生成処理を統合データの各レコードに対して行うことにより、図２に示すクラス間におけるインスタンス間の関係（破線の矢印）の情報が生成される。【００４６】
（Ｓ３０１）：関係構造記憶部２０は、統合データから取得した１つのレコード内に異なるクラスに属するインスタンスが存在するか否かを判定する。例えば、要素抽出部１５は、レコードの全ての追跡対象情報１４０の追跡対象クラスＩＤ１４１に記憶されたクラスＩＤを取得する。そして、関係構造記憶部２０は、要素抽出部１５が取得したクラスＩＤに異なるクラスＩＤが存在するか否かを判定することにより、異なるクラスに属するインスタンスが存在するかを判定する。異なるクラスに属するインスタンスが存在すると判定した場合（Ｓ３０１でＹＥＳ）、（Ｓ３０２）へ進む。一方、異なるクラスに属するインスタンスが存在しないと判定した場合（Ｓ３０１でＮＯ）、処理を終了する。
（Ｓ３０２）：要素抽出部１５は、統合データの異なるクラスに属する追跡対象情報１４０の追跡対象クラスＩＤ１４１と追跡対象インスタンスＩＤ１４２とに記憶されたクラスＩＤとインスタンスＩＤとをそれぞれ取得する。つまり、統合データの１つのレコードに２つの追跡対象情報１４０が存在し、それぞれ異なるクラスに属する場合には、各追跡対象情報１４０からクラスＩＤとインスタンスＩＤとを取得する。
（Ｓ３０３）：関係構造記憶部２０は、（Ｓ３０２）で取得した各インスタンスＩＤから特定されるインスタンス情報テーブル２２０の挙動ＩＤ配列２２２に登録された挙動情報テーブル２３０であって、現在処理しているレコードのイベントＩＤ１２０に記憶されたイベントＩＤについての挙動情報テーブル２３０のクラス間関係管理配列２３５の最後尾に、関係構造情報テーブル２４０を生成する。つまり、図３の「保存」のイベントのレコードを取得した場合には、ファイルＡについてのインスタンス情報テーブル２２０の「保存」イベントについての挙動情報テーブル２３０のクラス間関係管理配列２３５と、ユーザ１についてのインスタンス情報テーブル２２０の「保存」イベントについての挙動情報テーブル２３０のクラス間関係管理配列２３５とにそれぞれ、関係構造情報テーブル２４０を生成する。そして、関係構造記憶部２０は、生成した関係構造情報テーブル２４０のそれぞれのクラスＩＤ２４１とインスタンスＩＤ２４２と挙動ＩＤ２４３に、（Ｓ３０２）で取得した相手側のクラスＩＤとインスタンスＩＤと挙動ＩＤとをそれぞれ記憶する。つまり、図３の「保存」のイベントのレコードを取得した場合には、ファイルＡのクラス間関係管理配列２３５には、ユーザ１のクラスＩＤ「ユーザクラス」と、インスタンスＩＤ「ユーザ１」と、保存についてのユーザ１に対する挙動ＩＤとを記憶する。また、ユーザ１のクラス間関係管理配列２３５には、ファイルＡのクラスＩＤ「ファイルクラス」と、インスタンスＩＤ「ファイルＡ」と、保存についてのファイルＡに対する挙動ＩＤとを記憶する。【００４７】
つまり、関係構造記憶部２０は、順序関係記憶部１８と階層関係記憶部１９とのいずれかが異なるクラスに属するインスタンスに対して付した挙動識別子であって、同一のイベントについて付した挙動識別子を関連付けした関係構造情報を記憶装置に記憶する。【００４８】
以上の順序関係情報生成処理と階層関係情報生成処理と関係構造情報生成処理とにより、挙動インデックスが生成され、挙動インデックス記憶部２１には生成された挙動インデックスが記憶される。【００４９】
以上のように、この実施の形態に係るイベント履歴記憶装置１０によれば、インスタンスに関連して発生したイベントの履歴データを、インスタンスの挙動のグラフ構造として表す。この挙動のグラフ構造を辿ることにより、インスタンスに関連して発生したイベントの履歴（インスタンスの振舞い）を追跡することができるとともに、インスタンスから新たなインスタンスが発生する場合であっても、元のインスタンスと新たなインスタンスとを容易に連続して追跡することができる。
また、同様に、イベント履歴記憶装置１０は、異なるクラスに属するインスタンスに対して付した識別子であって、同一のイベントについて付した識別子を関連付けする。したがって、あるインスタンス（ファイル）についての動作を異なるクラス（ユーザ）の視点から容易に追跡することができる。【００５０】
実施の形態２．
この実施の形態では、実施の形態１で説明したイベント履歴記憶装置１０が記憶した挙動インデックスを用いて、イベント履歴の追跡を行う方法について説明する。【００５１】
図８は、この実施の形態に係るイベント履歴追跡装置３０の機能を示す機能ブロック図である。イベント履歴追跡装置３０は、順序関係追跡部３１、階層関係追跡部３２、クラス間関係追跡部３３を備える。
順序関係追跡部３１は、追跡条件として指定されたクラスＩＤとインスタンスＩＤから特定されるインスタンスの順序関係情報（挙動ＩＤの前後関係）に基づき、インスタンスに関連して発生したイベントの発生順序を処理装置により追跡する。つまり、順序関係追跡部３１は、条件入力部３４が入力した条件情報により特定されるインスタンスに関連して発生したイベントを順序関係記憶部１８が記憶した順序関係情報が示す順に取得して追跡する。
階層関係追跡部３２は、階層関係情報に基づき、インスタンスの子インスタンスまたは親インスタンスを追跡する。つまり、階層関係追跡部３２は、順序関係追跡部３１が取得したイベントに付された挙動識別子と上記階層関係記憶部が関連付けした挙動識別子を辿ることにより、上記条件情報により特定されるインスタンスから発生した新たなインスタンス又は上記条件情報により特定されるインスタンスの発生元のインスタンスである次の階層のインスタンスと、上記次の階層のインスタンスに関連して発生したイベントとを取得して追跡する。さらに、階層関係追跡部３２により追跡した子インスタンスまたは親インスタンスについて、順序関係追跡部３１は、順序関係構造に基づきイベントの発生順序を処理装置により追跡する。
クラス間関係追跡部３３は、順序関係追跡部３１が追跡した挙動ＩＤに関連付けされた異なるクラスに属するインスタンスＩＤ及び挙動ＩＤを追跡して、他のクラスに属するインスタンスを処理装置により追跡する。つまり、クラス間関係追跡部３３は、順序関係追跡部３１と階層関係追跡部３２とが取得したイベントに付された挙動識別子と関係構造記憶部２０が関連付けした挙動識別子であって、追跡範囲として指定されたクラスに属するインスタンスに付された挙動識別子を辿ることにより、上記条件情報により特定されるインスタンスに関連するとともに追跡範囲として指定されたクラスに属するインスタンスである他クラスインスタンスと、上記他クラスインスタンスに関連して発生したイベントとを取得して追跡する。
条件入力部３４は、追跡する対象となるインスタンスを特定する条件情報と追跡する範囲を絞り込むための範囲情報（追跡範囲）を入力装置により入力する。【００５２】
ここでは、メールの送受信履歴の例を用いて、イベント履歴追跡処理について説明する。
図９は、メールの送受信履歴をイメージ化した図である。
図９は、ユーザＡがユーザＢとユーザＣとへメッセージ１を送信し（１）、次に、ユーザＢがユーザＡへメッセージを１への返信としてメッセージ２を送信した（２）という挙動を表現している。
なお、メッセージを識別するＩＤやユーザを識別するＩＤとしては本来はメッセージＩＤやメールアドレスなどの一意性を確保できるものが使われるべきであるがここでは抽象化して表現している。【００５３】
図１０は、図９で示したメールの送受信履歴データに対して、実施の形態１で説明したイベント履歴記憶装置１０が生成した挙動インデックスのデータモデルの構造を示した図である。
図１０において、メールの送受信履歴で追跡の対象となるクラスは、メッセージクラスとユーザクラスとである。メッセージクラスには、インスタンスとしてメッセージ１とメッセージ２とが存在する。ユーザクラスにはインスタンスとしてユーザＡ、ユーザＢ、ユーザＣが存在する。これらインスタンスで生成された挙動のデータモデル構造がグラフ構造をとして表現される。【００５４】
次に、挙動インデックスに基づき、イベント履歴を追跡するイベント履歴追跡処理について説明する。図１１は、イベント履歴追跡装置３０によるイベント履歴追跡処理を示すフローチャートである。
（Ｓ４０１）：条件入力部３４は、追跡条件を入力する。追跡条件として、追跡対象のデータを指定するクラスＩＤとインスタンスＩＤと、追跡範囲を指定するクラスＩＤを入力する。例えば、追跡条件として、メールのメッセージを一意に識別するインスタンスＩＤ（ここでは、メッセージ１）と、追跡範囲としてユーザクラスを指定する。この追跡条件により指定したメッセージ１が誰に配信されたかを追跡する。なお、ここでは追跡範囲クラスを１つ指定しているが、複数個指定することも可能である。
（Ｓ４０２）：順序関係追跡部３１は、（Ｓ４０１）で入力されたクラスＩＤとインスタンスＩＤとに基づき、追跡するインスタンスについてのインスタンス情報テーブル２２０を特定する。
（Ｓ４０３）：順序関係追跡部３１は、（Ｓ４０２）で特定したインスタンス情報テーブル２２０の挙動ＩＤ配列２２２の先頭に登録された挙動情報テーブル２３０を特定する。
（Ｓ４０４）：順序関係追跡部３１は、（Ｓ４０３）で特定した挙動情報テーブル２３０に記憶された挙動情報を取得する。
（Ｓ４０５）：クラス間関係追跡部３３は、（Ｓ４０３）で取得した挙動情報テーブル２３０のクラス間関係管理配列２３５に登録された関係構造情報テーブル２４０から、追跡範囲として指定されたクラスＩＤがクラスＩＤ２４１に記憶された関係構造情報テーブル２４０を検索する。そして、クラス間関係追跡部３３は、検索した関係構造情報テーブル２４０のインスタンスＩＤ２４２に記憶されたインスタンスＩＤと、挙動ＩＤ２４３に記憶された挙動ＩＤとを取得する。
例えば、図９と図１０に示す例においては、追跡条件として指定されたメッセージ１の初めの挙動である「送信」と関連付けされた他のクラスに属するインスタンスであるユーザＡと、挙動「送信」とが取得される。つまり、メッセージ１をユーザＡが送信したという情報が得られる。【００５５】
（Ｓ４０６）：順序関係追跡部３１は、（Ｓ４０２）で特定したインスタンス情報テーブル２２０の挙動ＩＤ配列２２２のすべての挙動情報テーブル２３０から挙動情報を取得したか否かを判定する。すべての挙動情報テーブル２３０から挙動情報を取得したと判定した場合（Ｓ４０６でＹＥＳ）、（Ｓ４０８）へ進む。一方、すべての挙動情報テーブル２３０から挙動情報を取得していないと判定した場合（Ｓ４０６でＮＯ）、（Ｓ４０７）へ進む。
（Ｓ４０７）：順序関係追跡部３１は、現在処理している挙動情報テーブル２３０の次挙動ＩＤ２３３に基づき、次の挙動情報テーブル２３０を特定する。そして、（Ｓ４０４）へ戻り、特定した次の挙動情報テーブル２３０から挙動情報を取得し、クラス間関係追跡部３３は、次の挙動情報テーブル２３０のクラス間関係管理配列２３５に登録された関係構造情報テーブル２４０から、追跡範囲として指定されたクラスのインスタンスＩＤと、その挙動ＩＤとを取得する。
例えば、図９と図１０に示す例においては、追跡条件として指定されたメッセージ１の次の挙動である「受信」と関連付けされた他のクラスに属するインスタンスであるユーザＢと、挙動「受信」、及びユーザＣと、挙動「受信」とが取得される。つまり、メッセージ１をユーザＢとユーザＣとが受信したという情報が得られる。そして、メッセージ１には次の挙動がないため、（Ｓ４０６でＹＥＳ）となり（Ｓ４０８）へ進む。【００５６】
（Ｓ４０８）：階層関係追跡部３２は、（Ｓ４０２）で特定したインスタンス情報テーブル２２０の子供情報管理配列２２３を参照して、このインスタンスから発生した子インスタンスが存在するか否かを判定する。子インスタンスが存在すると判定した場合（Ｓ４０８でＹＥＳ）、（Ｓ４０９）へ進む。一方、子インスタンスが存在しないと判定した場合（Ｓ４０８でＮＯ）、処理を終了する。
（Ｓ４０９）：階層関係追跡部３２は、子供情報管理配列２２３の子インスタンス情報テーブル２５０の子インスタンスＩＤ２５１に記憶されたインスタンスＩＤを取得する。そして、（Ｓ４０１）で入力されたクラスＩＤと、取得したインスタンスＩＤとを追跡条件として、（Ｓ４０２）へ戻り追跡処理を行う。なお、子供情報管理配列２２３に複数の子インスタンス情報テーブル２５０が登録されている場合には、各子インスタンス情報テーブル２５０の子インスタンスＩＤ２５１に記憶されたインスタンスＩＤを追跡条件として追跡処理を行う。
例えば、図９と図１０に示す例においては、追跡条件として指定されたメッセージ１の子インスタンスとしてメッセージ２が登録されている。そこで、メッセージ２を追跡条件として、追跡処理を行う。すると、メッセージ２の初めの挙動である「送信」と関連付けされた他のクラスに属するインスタンスであるユーザＢと、挙動「送信」とが取得される。つまり、メッセージ２をユーザＢが送信したという情報が得られる。続いて、メッセージ２の次の挙動である「受信」と関連付けされた他のクラスに属するインスタンスであるユーザＡと、挙動「受信」とが取得される。つまり、メッセージ２をユーザＡが受信したという情報が得られる。そして、メッセージ２には次の挙動がないため、（Ｓ４０６でＹＥＳ）となり（Ｓ４０８）へ進む。また、メッセージ２には子インスタンスがないため、処理が終了する。【００５７】
上記の例では追跡条件として指定したメッセージＩＤが最初に送信されたものでありグラフ構造のルートとなるインスタンスであった。そのため、階層関係追跡部３２は、親インスタンスの追跡処理を行うことなく、子インスタンスの追跡処理のみ行えば足りた。しかし、例えば、メッセージ２を追跡対象するインスタンスとして指定した場合は、子インスタンスの追跡では何も情報を得ることができない。一方、メッセージ２には親インスタンスが存在しており、親インスタンスの追跡処理が必要である。
つまり、階層関係追跡部３２が親インスタンスの階層関係を辿ってルートとなるインスタンス（図１０であれば、メッセージ１）を取得し、その取得したルートメッセージに対して図１１の手順にしたがって追跡する必要がある。なお、ルートとなるインスタンスとは、親インスタンスを持たないインスタンスのことである。
次に、親インスタンスの階層関係を辿りルートとなるインスタンスを取得する手順について説明する。図１２は、ルートとなるインスタンスを取得する処理を示すフローチャートである。【００５８】
（Ｓ５０１）：（Ｓ４０１）と（Ｓ４０２）と同様に、順序関係追跡部３１は、追跡対象するインスタンスについてのインスタンス情報テーブル２２０を特定する。
（Ｓ５０２）：（Ｓ５０１）で特定したインスタンス情報テーブル２２０の親情報管理配列２２４を参照して、このインスタンスの発生元である親インスタンスが存在するか否かを判定する。親インスタンスが存在すると判定した場合（Ｓ５０２でＹＥＳ）、（Ｓ５０３）へ進む。一方、親インスタンスが存在しないと判定した場合（Ｓ５０２でＮＯ）、（Ｓ５０５）へ進む。
（Ｓ５０３）：階層関係追跡部３２は、上記親情報管理配列２２４に登録された親インスタンス情報テーブル２６０の親インスタンスＩＤ２６１に記憶されたインスタンスＩＤを取得する。
（Ｓ５０４）：階層関係追跡部３２は、（Ｓ５０３）で取得したインスタンスＩＤを追跡対象のインスタンスＩＤとして（Ｓ５０２）へ戻り、処理を繰り返す。
（Ｓ５０５）：階層関係追跡部３２は、そのインスタンスをルートとして終了する。【００５９】
以上の処理によりルートとなるインスタンスが判明する。そこで、ルートとなるインスタンスを指定して、図１１に基づき説明したイベント履歴追跡処理を行うことで、すべてのイベントを追跡することができる。
なお、（Ｓ５０３）で親情報管理配列２２４に複数の親インスタンス情報テーブル２６０が登録されている場合には、各親インスタンス情報テーブル２６０の親インスタンスＩＤ２６１に記憶されたインスタンスＩＤを取得し、各インスタンスＩＤに対して親インスタンスを探す処理を行う。つまり、ルートとなるインスタンスが複数存在する場合もある。この場合には、ルートとなる複数のインスタンスそれぞれから図１１に基づき説明したイベント履歴追跡処理を行う。【００６０】
なお、ここではルートとなるインスタンスを取得することが目的であったため挙動の情報を取得するステップを省略したが、挙動情報が必要な場合は子供のＩＤを取得した場合と同様の手順で親の挙動情報を取得することができる。【００６１】
以上のように、この実施の形態に係るイベント履歴追跡装置３０によれば、イベント履歴記憶装置１０がインスタンスの挙動のグラフ構造として表して記憶したイベントの履歴データから、インスタンスに関連して発生したイベントの履歴（インスタンスの振舞い）を追跡することができるとともに、インスタンスから新たなインスタンスが発生する場合であっても、元のインスタンスと新たなインスタンスとを容易に連続して追跡することができる。
また、同様に、イベント履歴追跡装置３０によれば、あるインスタンス（例えば、メッセージ１）についての動作を異なるインスタンス（ユーザ）の視点から容易に追跡することができる。【００６２】
実施の形態３．
この実施の形態では、実施の形態２とは異なるイベント履歴の追跡処理の例について説明する。特に、この実施の形態では、追跡する階層レベルを指定した追跡処理について説明する。
ここで、階層とは、インスタンスの親子関係のことであり、階層レベルとは、何階層離れているかを意味する。つまり、所定のインスタンスに対して、子インスタンスは１階層（１レベル）離れている。また、上記子インスタンスの子インスタンスは、上記所定のインスタンスに対して２階層（２レベル）離れている。同様に、所定のインスタンスに対して、親インスタンスは−１階層（−１レベル）離れている。また、上記親インスタンスの親インスタンスは、上記所定のインスタンスに対して−２階層（−２レベル）離れている。【００６３】
図１３は、製造工程をイメージ化した図である。
図１３では、工程として攪拌工程、燃焼工程、冷却工程の３つの工程を備える。それぞれの工程で製造単位を一意に識別する製造単位番号（バッチ番号）が割り当てられている。攪拌工程では攪拌１、燃焼工程では燃焼１から燃焼ｎまで、冷却工程では冷却１から冷却ｎまでが製造単位番号である。
なお工程の前後の製造単位番号の関連性（たとえば攪拌１と燃焼１）はシステムで管理されているものとする。また、挙動インデックスの構造としては各工程がクラスに、製造単位番号がインスタンスに該当する。【００６４】
図１３において、燃焼工程の次の工程は冷却工程であり、燃焼１の次に冷却１へと進む。ここで、燃焼１されたものの一部は再生処理として再度燃焼工程に戻り燃焼２へ進む。このような操作の場合、燃焼１と燃焼２とは挙動インデックスで階層関係構造として管理される。つまり、燃焼１（インスタンス）の子インスタンスとして燃焼２が管理され、燃焼２の子インスタンスとして燃焼３が管理される。
つまり、燃焼２に対して、燃焼３は１階層（１レベル）離れている。また、燃焼４は、燃焼２に対して２階層（２レベル）離れている。同様に、燃焼２に対して、燃焼１は−１階層（−１レベル）離れている。【００６５】
ここで、ある製造単位番号を指定して上流工程から下流工程、又は下流工程から上流工程へインスタンスを追跡する場合、すべての情報を追跡するのではなく、あらかじめ指定した深さまで追跡してそれ以上の深さの追跡を打ち切ることが想定される。そのような追跡では追跡の範囲として階層のレベルを指定して追跡を実行する。【００６６】
次に、挙動インデックスに基づき、指定された階層レベルまでイベント履歴を追跡するイベント履歴追跡処理について説明する。図１４は、指定された階層レベルまでイベント履歴を追跡するイベント履歴追跡処理を示すフローチャートである。
（Ｓ６０１）：条件入力部３４は、追跡条件を入力する。追跡条件として、追跡対象のデータを指定するクラスＩＤとインスタンスＩＤと、追跡範囲を指定するクラスＩＤと、追跡する階層レベルとを入力する。例えば、追跡条件として、製造単位番号を一意に識別するインスタンスＩＤ（ここでは、燃焼２）と、追跡範囲として燃焼クラスと、階層レベルｎ（ここでは、ｎ＝２）とを指定する。
（Ｓ６０２）：階層関係追跡部３２は、現在の階層レベルを表す値Ｄに０をセットする。階層レベルを表す値はこのように挙動インデックス内部に固定的に持つのではなく追跡時に動的に算出することにより挙動インデックスの更新がきわめて容易になる。
（Ｓ６０３）：順序関係追跡部３１は、（Ｓ６０１）で入力されたクラスＩＤとインスタンスＩＤとに基づき、インスタンスについてのインスタンス情報テーブル２２０を特定する。
（Ｓ６０４）：（Ｓ４０３）から（Ｓ４０７）までの処理を実行する。
（Ｓ６０５）：階層関係追跡部３２は、条件として指定された階層レベルｎと、現在の階層レベルの値Ｄとを比較して、Ｄ≧ｎであるか否かを判定する。Ｄ≧ｎであると判定した場合（Ｓ６０５でＹＥＳ）、処理を終了する。一方、Ｄ≧ｎでないと判定した場合（Ｓ６０５でＮＯ）、（Ｓ６０６）へ進む。
（Ｓ６０６）：階層関係追跡部３２は、（Ｓ６０２）で特定したインスタンス情報テーブル２２０の子供情報管理配列２２３を参照して、このインスタンスから発生した子インスタンスが存在するか否かを判定する。子インスタンスが存在すると判定した場合（Ｓ６０６でＹＥＳ）、（Ｓ６０７）へ進む。一方、子インスタンスが存在しないと判定した場合（Ｓ６０６でＮＯ）、処理を終了する。
（Ｓ６０７）：階層関係追跡部３２は、現在の階層レベルを表す値Ｄに１加算（インクリメント）する。【００６７】
例えば、図１３に示す例においては、条件として階層レベルを２と指定したため、インスタンスとして指定した燃焼２の２階層下の燃焼４まで追跡するが、それよりも下の階層（燃焼５以降）は追跡しない。
また燃焼２をインスタンスインスタンスＩＤ、打ち切りの階層レベルｎに±１を指定すると燃焼１と燃焼３とを追跡することになる。【００６８】
図１４の手順では指定する階層レベルを指定する値が正の場合を想定して処理手順を説明したが、値が負の場合であれば（Ｓ６０７）で−１加算（デクリメント）し、（Ｓ６０６）で親がいるかどうかの判定を行うことで親インスタンスの追跡においても階層レベルを指定して追跡することが可能である。【００６９】
以上のように、この実施の形態に係るイベント履歴追跡装置３０によれば、追跡する階層レベルを限定して追跡を行うことができる。【００７０】
以上実施の形態では、例としてファイル操作、メール送受信、製造工程などの履歴データを例として説明したがこれに限定されるものではなく、別の例として、入退室ログによる人の行動パターンの追跡、ネットワーク通信ログによる通信経路の追跡等、いなかるイベント履歴の追跡へも適用することができる。【００７１】
以上をまとめると以下のようになる。
上記実施の形態に係る履歴追跡型データ管理方式は、複数の蓄積された履歴データを処理する装置において、履歴データの１単位に含まれる１つ以上のインスタンスを抽出するインスタンス抽出手段と、前記インスタンス抽出手段によって抽出されたインスタンスにおいて発生したイベントによるインスタンスの順序関係を管理する順序関係構造管理手段と、発生したイベントにおいてインスタンスが統合または分割される場合においてインスタンスの階層関係を管理する階層関係構造管理手段と、発生したあるイベントに対して複数の異なるクラスに属するインスタンスが関係する場合において異なるクラスに属するインスタンス間の関連性を管理するクラス間関係構造管理手段とを備えることを特徴とする。【００７２】
また、上記実施の形態に係る履歴追跡型データ管理方式は、さらに、前記履歴データを事前に定義ファイルに指定した統一的な形式のデータに統合する履歴データ統合手段を備えることを特徴とする。【００７３】
また、前記履歴データ統合手段は、事前にインスタンス条件などを定義ファイルに指定することで全履歴データの中から必要な対象だけを統合データに生成するインスタンス絞込み機能を備えることを特徴とする。【００７４】
また、上記実施の形態に係る履歴追跡型データ管理方式は、さらに、前記履歴データから個々のインスタンス及びインスタンスに発生した動作を抽出する要素抽出手段を備えることを特徴とする。【００７５】
また、前記順序関係構造管理手段は、すべてのインスタンスに発生したイベントとインスタンスの状態をテーブルに管理し、そのテーブルに一意に識別可能な挙動ＩＤを付加し、かつ挙動ＩＤの前後関係を管理するための挙動管理機能を備えたことを特徴とする。【００７６】
また、前記階層関係構造管理手段は、あるイベントがインスタンスを同一クラス内で分割、統合、複製を発生させる場合において異なるインスタンス間で発生する関係でイベント発生前のインスタンスを親として識別する親ＩＤ識別機能と、イベント発生後のインスタンスを子供として識別する子ＩＤ識別機能と、親または子のＩＤに関連するインスタンスのイベントを管理する階層情報管理機能とを備えることを特徴とする。【００７７】
また、前記クラス間関係構造管理手段は、あるイベントが発生した場合において該イベントに対して属するクラスが異なる複数のインスタンスが関連するとき、異なるクラスに属するインスタンスの挙動間を関係付けて管理するクラス間関係管理機能を備えることを特徴とする。【００７８】
また、前記順序関係構造管理手段と階層関係管理手段とクラス間関係構造管理手段によって生成された３つの関係構造を挙動インデックスとして生成する挙動インデックス生成手段とを備えることを特徴とする。【００７９】
また、上記実施の形態に係る履歴追跡型データ管理方式は、指定したインスタンスの振舞いを前記挙動インデックスが管理する前記順序関係を指定したインスタンスに基づいて追跡する順序関係追跡手段と、階層関係を階層構造関係に基づいて追跡する階層関係追跡手段と、異なるクラス間におけるクラス間関係に基づいて追跡するクラス間関係追跡手段とを備えることを特徴とする。【００８０】
また、前記クラス間関係追跡手段は、ユーザの入力により追跡する範囲となるクラスを複数指定する追跡範囲指定機能と、指定された範囲のクラスだけに限定して追跡する追跡範囲クラス限定機能を備えることを特徴とする。【００８１】
また、前記階層関係追跡手段は、ユーザの入力により階層のレベルを指定するレベル指定機能と、指定されたレベルの階層内に追跡範囲を限定する階層レベル限定追跡機能を備えることを特徴とする。【００８２】
次に、上記実施の形態におけるイベント履歴記憶装置１０とイベント履歴追跡装置３０とのハードウェア構成について説明する。
図１５は、イベント履歴記憶装置１０とイベント履歴追跡装置３０とのハードウェア構成の一例を示す図である。
図１５に示すように、イベント履歴記憶装置１０とイベント履歴追跡装置３０とは、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、ＬＣＤ９０１（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）、キーボード９０２、マウス９０３、通信ボード９１５、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。【００８３】
ＲＯＭ９１３、磁気ディスク装置９２０は、不揮発性メモリの一例である。ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３とＲＡＭ９１４と磁気ディスク装置９２０とは、記憶装置の一例である。通信ボード９１５とキーボード９０２とは、入力装置の一例である。また、通信ボード９１５は、出力装置の一例である。さらに、通信ボード９１５は、通信装置の一例である。また、さらに、ＬＣＤ９０１は、表示装置の一例である。【００８４】
磁気ディスク装置９２０又はＲＯＭ９１３などには、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。【００８５】
プログラム群９２３には、上記の説明において「履歴データ統合部１１」、「要素抽出部１５」、「クラス情報生成部１６」、「インスタンス情報生成部１７」、「順序関係記憶部１８」、「階層関係記憶部１９」、「関係構造記憶部２０」等として説明した機能を実行するプログラムやその他のプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、上記の説明において「条件指定記憶部１２」、「統合定義記憶部１３」、「統合データ記憶部１４」、「挙動インデックス記憶部２１」等として説明した情報やデータや信号値や変数値やパラメータが、「ファイル」や「データベース」の各項目として記憶される。「ファイル」や「データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵ９１１の動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵ９１１の動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、上記の説明におけるフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、その他光ディスク等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。【００８６】
また、上記の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「〜手段」、「〜機能」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。また、「〜装置」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「〜手段」、「〜機能」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。さらに、「〜処理」として説明するものは「〜ステップ」であっても構わない。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、ＲＯＭ９１３等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、上記で述べた「〜部」としてコンピュータ等を機能させるものである。あるいは、上記で述べた「〜部」の手順や方法をコンピュータ等に実行させるものである。
【図面の簡単な説明】
【００８７】
【図１】イベント履歴記憶装置１０の機能を示す機能ブロック図。
【図２】統合データのデータ形式の一例を示す図。
【図３】挙動インデックス記憶部２１で管理されるデータモデルの構造を表した図。
【図４】挙動インデックスのデータ構造を示す図。
【図５】クラス情報生成部１６、インスタンス情報生成部１７、順序関係記憶部１８による順序関係情報生成処理を示すフローチャート。
【図６】階層関係記憶部１９による階層関係情報生成処理を示すフローチャート。
【図７】関係構造記憶部２０による関係構造情報生成処理を示すフローチャート。
【図８】イベント履歴追跡装置３０の機能を示す機能ブロック図。
【図９】メールの送受信履歴をイメージ化した図。
【図１０】図９で示したメールの送受信履歴データに対する挙動インデックスのデータモデルの構造を示した図。
【図１１】イベント履歴追跡装置３０によるイベント履歴追跡処理を示すフローチャート。
【図１２】ルートとなるインスタンスを取得する処理を示すフローチャート。
【図１３】製造工程をイメージ化した図。
【図１４】指定された階層レベルまでイベント履歴を追跡するイベント履歴追跡処理を示すフローチャート。
【図１５】イベント履歴記憶装置１０とイベント履歴追跡装置３０とのハードウェア構成の一例を示す図。
【符号の説明】
【００８８】
１０  イベント履歴記憶装置、１１  履歴データ統合部、１２  条件指定記憶部、１３  統合定義記憶部、１４  統合データ記憶部、１５  要素抽出部、１６  クラス情報生成部、１７  インスタンス情報生成部、１８  順序関係記憶部、１９  階層関係記憶部、２０  関係構造記憶部、２１  挙動インデックス記憶部、２２  イベント履歴データベース、３０  イベント履歴追跡装置、３１  順序関係追跡部、３２  階層関係追跡部、３３  クラス間関係追跡部、３４  条件入力部、１１０  ヘッダ情報、１１１  タイムスタンプ、１１２  元のログ指定情報、１２０  イベントＩＤ、１３０  クラス数、１４０  追跡対象情報、１４１  追跡対象クラスＩＤ、１４２  追跡対象インスタンスＩＤ、１４３  子の個数、１４４  親の個数、１４５  親・子のインスタンスＩＤバッファ、２００  挙動インデックス、２１０  クラス情報テーブル、２１１  クラスＩＤ、２１２  インスタンス数、２１３  インスタンスＩＤ配列、２２０  インスタンス情報テーブル、２２１  インスタンスヘッダ情報、２２２  挙動ＩＤ配列、２２３  子供情報管理配列、２２４  親情報管理配列、２３０  挙動情報テーブル、２３１  挙動ＩＤ、２３２  イベントＩＤ、２３３  次挙動ＩＤ、２３４  前挙動ＩＤ、２３５  クラス間関係管理配列、２４０  関係構造情報テーブル、２４１  クラスＩＤ、２４２  インスタンスＩＤ、２４３  挙動ＩＤ、２５０  子インスタンス情報テーブル、２５１  子インスタンスＩＤ、２５２  挙動ＩＤ、２６０  親インスタンス情報テーブル、２６１  親インスタンスＩＤ、２６２  挙動ＩＤ。
【図１】
2009107234.tif 000003
【図２】
2009107234.tif 000004
【図３】
2009107234.tif 000005
【図４】
2009107234.tif 000006
【図５】
2009107234.tif 000007
【図６】
2009107234.tif 000008
【図７】
2009107234.tif 000009
【図８】
2009107234.tif 000010
【図９】
2009107234.tif 000011
【図１０】
2009107234.tif 000012
【図１１】
2009107234.tif 000013
【図１２】
2009107234.tif 000014
【図１３】
2009107234.tif 000015
【図１４】
2009107234.tif 000016
【図１５】
2009107234.tif 000017
【国際調査報告】
2009107234.tif 000018
2009107234.tif 000019
2009107234.tif 000020
2009107234.tif 000021
2009107234.tif 000022