(57)【要約】      （修正有）【課題】トレース情報の一部のみを効率的に利用できるようにする。【解決手段】トレース情報管理システム１において、トレース情報取得部１０１は、プログラムの実行により発生するイベントの状態の遷移を時系列で示すトレース情報を取得する。インデックス情報取得部１０２は、トレース情報の時間軸上に所定の間隔が空くように設定されたインデックスタイミングにおけるイベントと状態との対応関係を示すインデックス情報を取得する。設定部１０３は、所定の時間範囲を設定する。生成部１０４はトレース情報及びインデックス情報に基づいて、時間範囲の開始時点における状態を示す初期状態情報を生成する。【選択図】図３
2018055667.tif 000002
【特許請求の範囲】
【請求項１】
発生するイベントの状態の遷移を時系列で示すトレース情報を取得する第１の取得部と、
前記トレース情報の時間軸上に所定の間隔が空くように設定されたインデックスタイミングにおける前記イベントと前記状態との対応関係を示すインデックス情報を取得する第２の取得部と、
所定の時間範囲を設定する設定部と、
前記トレース情報及び前記インデックス情報に基づいて、前記時間範囲の開始時点における前記状態を示す初期状態情報を生成する生成部と、
を備えるトレース情報管理システム。
【請求項２】
前記生成部は、前記トレース情報に基づいて、前記開始時点から前記時間範囲の終了時点までに生じた前記遷移を示す状態遷移情報を更に生成する、
請求項１に記載のトレース情報管理システム。
【請求項３】
前記生成部は、前記インデックス情報から前記開始時点より早く且つ前記開始時点に最も近い前記インデックスタイミングである直前タイミングに対応する前記状態を抽出し、抽出された前記状態を、前記直前タイミングから前記開始時点までの間に生じた前記遷移に基づいて更新することにより前記初期状態情報を生成する、
請求項２に記載のトレース情報管理システム。
【請求項４】
前記トレース情報、前記インデックス情報、前記初期状態情報、及び前記状態遷移情報は、前記イベントの種別毎に前記状態を示す、
請求項２又は３に記載のトレース情報管理システム。
【請求項５】
前記状態は、開始状態又は終了状態のいずれかである、
請求項１〜４のいずれか１項に記載のトレース情報管理システム。
【請求項６】
前記初期状態情報及び前記状態遷移情報は、共通のフォーマットで生成される、
請求項１〜５のいずれか１項に記載のトレース情報管理システム。
【請求項７】
前記設定部は、前記イベントの前記種別を更に設定し、
前記生成部は、設定された前記種別に対応する前記状態のみが含まれるように前記初期状態情報及び前記状態遷移情報を生成する、
請求項４〜６のいずれか１項に記載のトレース情報管理システム。
【請求項８】
前記生成部は、前記開始時点から前記終了時点までに生じた複数回の前記遷移のうちの少なくとも１つを集約することにより前記状態遷移情報を生成する、
請求項１〜７のいずれか１項に記載のトレース情報管理システム。
【請求項９】
前記生成部は、前記時間範囲を複数の区間に分割し、同一の前記区間内で同一の前記イベントの前記状態が複数回遷移し且つ最初の前記遷移による前記状態と最後の前記遷移による前記状態とが一致する場合に、最初の前記遷移に関する情報のみを前記状態遷移情報に書き込む、
請求項８に記載のトレース情報管理システム。
【請求項１０】
前記生成部は、前記時間範囲を複数の区間に分割し、同一の前記区間内で同一の前記イベントの前記状態が複数回遷移する場合に、最初の前記遷移に関する情報及び最後の前記遷移に関する情報のみを前記状態遷移情報に書き込む、
請求項８に記載のトレース情報管理システム。
【請求項１１】
前記状態遷移情報は、前記時間範囲内において前記遷移が生じたタイミングを示す情報を含む、
請求項１〜１０のいずれか１項に記載のトレース情報管理システム。
【請求項１２】
情報処理端末と、
前記情報処理端末とネットワークを介して接続するサーバと、
を更に備え、
前記サーバは、前記第１の取得部、前記第２の取得部、及び前記生成部を含む、
請求項１〜１１のいずれか１項に記載のトレース情報管理システム。
【請求項１３】
発生するイベントの状態の遷移を時系列で示すトレース情報を取得するステップと、
前記トレース情報の時間軸上に所定の間隔が空くように設定されたインデックスタイミングにおける前記イベントと前記状態との対応関係を示すインデックス情報を取得するステップと、
所定の時間範囲を設定するステップと、
前記トレース情報及び前記インデックス情報に基づいて、前記時間範囲の開始時点における前記状態を示す初期状態情報を生成するステップと、
を含むトレース情報管理方法。
【請求項１４】
コンピュータに、
発生するイベントの状態の遷移を時系列で示すトレース情報を取得する処理と、
前記トレース情報の時間軸上に所定の間隔が空くように設定されたインデックスタイミングにおける前記イベントと前記状態との対応関係を示すインデックス情報を取得する処理と、
所定の時間範囲を設定する処理と、
前記トレース情報及び前記インデックス情報に基づいて、前記時間範囲の開始時点における前記状態を示す初期状態情報を生成する処理と、
を実行させるトレース情報管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、トレース情報管理システム、方法、及びプログラムに関する。
【背景技術】
【０００２】
時刻と属性値とが紐付けられた情報の集合であるトレース情報は様々な目的で利用される。例えば、プログラムを実行することにより発生するイベントの状態の遷移を示すトレース情報はプログラムの実行状況の可視化、プログラム性能の動的解析等に利用される。
【０００３】
トレース情報のデータ形式として、関数単位の情報をＲＤＢ（Relational  Database）に格納し、関数の種類、開始時間、及び処理時間を対応付けるだけでなく、更に関数間の呼出し関係及び呼出しの発生毎に付与される識別番号を対応付ける形式がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２００８／０１７８１５８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
トレース情報はしばしばそのデータ量が膨大となる。そのため、トレース情報の一部のみを利用することが求められる場合がある。例えば、トレース情報全体のうち所定の時間範囲内で発生したイベントの状態遷移に関する情報のみを利用して可視化等の処理を行う場合がある。
【０００６】
ＲＤＢを利用したデータベースはトレースの状態遷移を時系列で記録し、所定の時間範囲内のデータを抽出することに適している。しかし、従来のデータベースには、状態遷移が生じたタイミング（イベント（関数）が開始又は終了したタイミング）に対応するデータは含まれているが、状態遷移が生じたタイミング以外のタイミングにおけるイベントの状態を示すデータは含まれていない。従って、データベースから所定の時間範囲内のレコードを単に抽出しても、所定の時間範囲の開始時点におけるイベントの状態を把握することができない場合がある。そのため、所定の時間範囲内におけるイベントの状態遷移を把握するために、トレース情報を最初から読み込まなければならない場合がある。
【０００７】
そこで、以下の実施形態では、トレース情報の一部のみを効率的に利用できるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
実施形態のトレース情報管理システムは第１の取得部と、第２の取得部と、設定部と、生成部とを備える。第１の取得部は発生するイベントの状態の遷移を時系列で示すトレース情報を取得する。第２の取得部はトレース情報の時間軸上に所定の間隔が空くように設定されたインデックスタイミングにおけるイベントと状態との対応関係を示すインデックス情報を取得する。設定部は所定の時間範囲を設定する。生成部はトレース情報及びインデックス情報に基づいて、時間範囲の開始時点における状態を示す初期状態情報を生成する。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態に係るトレース情報管理システムのハードウェア構成を例示する図。
【図２】第１の実施形態に係る情報処理端末及びサーバの内部構成を例示する図。
【図３】第１の実施形態におけるトレース情報管理システムの機能的構成を例示する図。
【図４】第１の実施形態の第１の例に係るトレース情報を例示する図。
【図５】第１の実施形態の第１の例に係るインデックス情報を例示する図。
【図６】第１の実施形態に係る初期状態情報及び状態遷移情報を例示する図。
【図７】第１の実施形態に係るトレース情報管理システムにおける全体的な処理の流れを示すフローチャート。
【図８】第１の実施形態に係るトレース情報からインデックス情報を取得する際の処理の流れを例示するフローチャート。
【図９】第１の実施形態に係るトレース情報からインデックス情報を取得する際に用いられる内部テーブルを例示する図。
【図１０】第１の実施形態に係る初期状態情報を生成する際の処理の流れを示すフローチャート。
【図１１】第１の実施形態に係る状態遷移情報を生成する際の処理の流れを示すフローチャート。
【図１２】第１の実施形態の第２の例に係るトレース情報を例示する図。
【図１３】第１の実施形態の第２の例に係るインデックス情報を例示する図。
【図１４】第１の実施形態の第２の例に係る初期状態情報及び状態遷移情報を例示する図。
【図１５】第１の実施形態の第３の例に係るインデックス情報を例示する図。
【図１６】第１の実施形態の第４の例に係るインデックス情報を例示する図。
【図１７】第１の実施形態の第３の例に係る初期状態情報及び状態遷移情報を例示する図。
【図１８】第２の実施形態の第１の例に係る状態遷移情報を生成する際の処理を例示する図。
【図１９】第２の実施形態の第２の例に係る状態遷移情報を生成する際の処理を例示する図。
【図２０】第２の実施形態の第２の例に係る初期状態情報及び状態遷移情報を用いて時間範囲内に生じたイベントの状態遷移を可視化する表示画像を例示する図。
【図２１】第３の実施形態に係る可視化システムの機能的構成を例示する図。
【発明を実施するための形態】
【００１０】
（第１の実施形態）
図１は、第１の実施形態に係るトレース情報管理システム１のハードウェア構成を例示する図である。本例のトレース情報管理システム１は情報処理端末１１、サーバ１２、及びネットワーク１３を含む。情報処理端末１１はユーザが使用するＰＣ（Personal  Computer）、タブレット、スマートフォン等であり得る。サーバ１２はトレース情報管理システム１の管理者が管理するサーバコンピュータ等であり得る。情報処理端末１１とサーバ１２とはインターネット、ＬＡＮ（Local  Area  Network）等のネットワーク１３を介して接続されている。なお、同図においては、情報処理端末１１及びサーバ１２がそれぞれ１つずつ記載されているが、それらの両方又は一方が複数存在してもよい。
【００１１】
図２は、第１の実施形態に係る情報処理端末１１及びサーバ１２の内部構成を例示する図である。情報処理端末１１及びサーバ１２はＣＰＵ（Central  Processing  Unit）２１、ＲＯＭ（Read  Only  Memory）２２、ＲＡＭ（Random  Access  Memory）２３、入力デバイス２４、出力デバイス２５、通信Ｉ／Ｆ（Interface）２６、及びバス２７を含む。ＣＰＵ２１はＲＯＭ２２等に記憶された制御プログラムに従ってＲＡＭ２３をワーキングエリアとして所定の演算処理を行う。入力デバイス２４は外部から情報を入力するためのデバイスであり、例えばキーボード、マウス、タッチパネル等である。出力デバイス２５は内部で生成した情報を外部に出力するためのデバイスであり、例えばディスプレイ、プリンタ等である。入力デバイス２４及び出力デバイス２５は通常、情報処理端末１１には備えられるが、サーバ１２には備えられない場合がある。通信Ｉ／Ｆ２６はネットワーク１３を介して外部の装置との間で情報の送受信を可能にするデバイスである。
【００１２】
図３は、第１の実施形態におけるトレース情報管理システム１の機能的構成を例示する図である。トレース情報管理システム１はトレース情報取得部１０１（第１の取得部）、インデックス情報取得部１０２（第２の取得部）、設定部１０３、及び生成部１０４を含む。
【００１３】
トレース情報取得部１０１はトレース情報を取得する。トレース情報は時刻と属性値とが紐付けられた情報の集合である。情報は時刻の順序に並んでいることが好ましい。本実施形態においては、トレース情報はプログラム（ソースコード）の実行により発生するイベントの状態の遷移を時系列で示すものとして説明する。また、例えば、トレース情報は、センサから出力されるデータと時刻とが紐付けられた情報の集合、Ｗｅｂサービスへのアクセス履歴の集合、ハードウェアが出力する情報の集合、ソフトウェアが出力する情報の集合等であってもよい。
【００１４】
図４は、第１の実施形態の第１の例に係るトレース情報２０１を例示する図である。本例に係るトレース情報２０１はフィールドとして時間情報２１１、状態情報２１２、及び種別情報２１３を有し、これらのフィールドを対応付ける１つ以上のレコード２１０から構成されている。種別情報２１３はイベント（関数等）の種類を示す情報であり、本例ではＭａｉｎ、Ｆｕｎｃ＿Ａ、及びＦｕｎｃ＿Ｂの３種類がある。状態情報２１２は種別情報２１３が示すイベントの状態を示す情報であり、本例ではＳｔａｒｔ及びＥｎｄの２種類がある。Ｓｔａｒｔはイベントが停止状態から開始状態に遷移したことを示している。Ｅｎｄはイベントが開始状態（実行状態）から停止状態に遷移したことを示している。時間情報２１１は種別情報２１３が示すイベントが、状態情報２１２が示す状態に遷移したタイミングを示す情報であり、本例では０からカウントされる経過時間である。時間情報２１１は特に限定されるべきものではなく、経過時間の他に、例えばタイムスタンプ、クロック数等であり得る。各レコード２１０はイベントの状態がＥｎｄからＳｔａｒｔへ、又はＳｔａｒｔからＥｎｄへと遷移したときに生成される。上記データ構造は例示であり、トレース情報２０１の構造は上記に限られるものではない。
【００１５】
インデックス情報取得部１０２はインデックス情報を取得する。インデックス情報はトレース情報に基づいて取得される情報であって、トレース情報の時間軸上に所定の時間間隔が空くように設定された複数のインデックスタイミングにおけるイベントと状態との対応関係を示す情報である。
【００１６】
図５は、第１の実施形態の第１の例に係るインデックス情報２５１を例示する図である。本例に係るインデックス情報２５１はフィールドとして時間情報２６１、位置情報２６２、種別情報２６３、及び状態情報２６４を有し、これらのフィールドを対応付ける１つ以上のレコード２６０Ａ，２６０Ｂ，・・から構成されている。時間情報２６１は所定の時間間隔（本例では１００）が空くように設定された複数のインデックスタイミング（本例では０，１００，２００，…）２６５を示す情報である。トレース情報２０１の時間情報２１１及びインデックス情報２５１の時間情報２６１は共通の時間軸に基づいている。位置情報２６２はインデックスタイミング２６５がトレース情報２０１内のどの位置に対応するかを示す情報である。種別情報２６３及び状態情報２６４はインデックスタイミング２６５におけるイベントと状態との対応関係を示している。本例では、インデックスタイミング２６５：０においては全てのイベントＭａｉｎ、Ｆｕｎｃ＿Ａ、及びＦｕｎｃ＿Ｂの状態がＥｎｄであることが示され、インデックスタイミング２６５：１００においてはＭａｉｎ及びＦｕｎｃ＿ＡがＳｔａｒｔであり、Ｆｕｎｃ＿ＢがＥｎｄであることが示されている。１つのレコード２６０Ａ，２６０Ｂ，・・において、１つのインデックスタイミング２６５に対応する位置情報２６２、種別情報２６３、及び状態情報２６４が対応付けられている。上記データ構造は例示であり、インデックス情報２５１は上記に限られるものではない。例えば、上記時間間隔（複数のインデックスタイミング間の間隔：１００）は必ずしも一定である必要はなく、例えばインデックス情報２５１に含まれるレコード数が一定になる間隔、外部から指定されたテーブルに基づく間隔等であってもよい。
【００１７】
トレース情報取得部１０１は上記のようなトレース情報２０１を取得する。インデックス情報取得部１０２は上記のようなインデックス情報２５１を取得する。トレース情報取得部１０１及びインデックス情報取得部１０２は例えばＣＰＵ２１、ＲＯＭ２２に記憶された制御プログラム、ＲＡＭ２３、適宜なロジックＩＣ（Integrated  Circuit）等を利用して構成され得る。ここでの「取得」には、外部からデータを受信すること、及び内部でデータを生成することが含まれる。すなわち、トレース情報２０１及びインデックス情報２５１は、トレース情報管理システム１以外のシステムによって生成されてもよいし、トレース情報管理システム１内で生成されてもよい。トレース情報２０１及びインデックス情報２５１の生成方法は特に限定されるものではなく、トレース情報２０１及びインデックス情報２５１は公知又は新規な技術を用いて適宜生成されればよい。インデックス情報２５１の取得方法については後に詳述する。
【００１８】
設定部１０３はトレース情報２０１の時間情報２１１の時間軸における所定の時間範囲を設定する。例えば、図４に示すトレース情報２０１において時間範囲を１４０〜１９０と設定した場合、経過時間が１４１の時にＦｕｎｃ＿Ａの状態がＥｎｄに遷移したことを示すレコード２１０Ａと、経過時間が１９０の時にＭａｉｎの状態がＥｎｄに遷移したことを示すレコード２１０Ｂとが当該時間範囲に含まれるデータとなる。また、設定部１０３は種別情報２１３が示す複数のイベントの種別（Ｍａｉｎ、Ｆｕｎｃ＿Ａ、及びＦｕｎｃ＿Ｂ）の中から特定の種別を設定してもよい。イベントの種別を設定することにより、所望のイベントについての情報のみを収集することができるため、イベントの種別が多い場合、システムの処理負荷を軽減したい場合等に有効となる。このような設定は主にユーザによる入力操作に応じて行われることが想定されるが、これに限られるものではなく、例えばトレース情報管理システム１又は他のシステムにより所定の条件に基づいて自動的に行われてもよい。設定部１０３は入力デバイス２４、ＣＰＵ２１、ＲＯＭ２２に記憶された制御プログラム、ＲＡＭ２３、適宜なロジックＩＣ等を利用して構成され得る。
【００１９】
生成部１０４はトレース情報２０１、インデックス情報２５１、及び設定された時間範囲を示す時間範囲情報に基づいて初期状態情報及び状態遷移情報を生成する。初期状態情報は時間範囲の開始時点（本例では１４０）における各イベントの状態を示す情報である。状態遷移情報は開始時点から時間範囲の終了時点（本例では１９０）までに生じた各イベントの状態の遷移を示す情報である。なお、設定部１０３により種別が設定された場合には、生成部１０４は設定された種別のみに関する初期状態情報及び状態遷移情報を生成してもよい。
【００２０】
図６は、第１の実施形態に係る初期状態情報３０１及び状態遷移情報３１１を例示する図である。初期状態情報３０１及び状態遷移情報３１１はフィールドとして時間情報３２１、種別情報３２２、及び状態情報３２３を有し、これらのフィールドを対応付ける１つ以上のレコード３２０から構成されている。
【００２１】
初期状態情報３０１は設定された時間範囲（１４０〜１９０）の開始時点（１４０）における各イベント（Ｍａｉｎ、Ｆｕｎｃ＿Ａ、及びＦｕｎｃ＿Ｂ）の状態（Ｓｔａｒｔ又はＥｎｄ）を示している。初期状態情報３０１の生成方法は特に限定されるべきものではないが、開始時点（１４０）における状態に最も近い状態をインデックス情報２５１から抽出し、インデックス情報２５１から抽出された状態と実際の開始時点における状態との差分をトレース情報２０１に基づいて修正することにより、トレース情報２０１を最初から読み込むことなく初期状態情報３０１を生成することができる。具体的には、初期状態情報３０１は、インデックス情報２５１から開始時点（１４０）より早く且つ開始時点に最も近いインデックスタイミング２６５である直前タイミング２６５Ａ（１００）に対応する各イベントの状態（Ｍａｉｎ：Ｓｔａｒｔ、Ｆｕｎｃ＿Ａ：Ｓｔａｒｔ、及びＦｕｎｃ＿Ｂ：Ｅｎｄ）を抽出した後、トレース情報２０１を参照し、当該インデックス情報２５１から抽出された状態を直前タイミング２６５Ａから開始時点までに生じた状態の遷移（図４中レコード２１０Ｃ，２１０Ｄが示す遷移）に基づいて更新することにより生成することができる。初期状態情報３０１の生成方法については後に詳述する。
【００２２】
状態遷移情報３１１は時間範囲の開始時点（１４０）から終了時点（１９０）までに生じた各イベントの状態の遷移を示す情報であり、トレース情報２０１から抽出可能な情報である。本例に係る状態遷移情報３１１は図４に示すように、レコード２１０Ａ，２１０Ｂにより示される情報である。
【００２３】
上記のように生成された初期状態情報３０１及び状態遷移情報３１１は共に出力情報２９１として他の適宜なシステム、例えばプログラムの実行状況を可視化するＧＵＩ（Graphical  User  Interface）システム、プログラム性能の動的解析を行う解析システム等に出力され、利用される。他のシステムによる利用性等の観点から、初期状態情報３０１及び状態遷移情報３１１は共通のフォーマット、すなわち共通のフィールド（本例では時間情報３２１、種別情報３２２、及び状態情報３２３）を有する情報であることが好ましい。
【００２４】
図７は、第１の実施形態に係るトレース情報管理システム１における全体的な処理の流れを示すフローチャートである。先ず、トレース情報取得部１０１がトレース情報２０１を取得し（Ｓ１０１）、その後、インデックス情報取得部１０２がインデックス情報２５１を取得する（Ｓ１０２）。その後、設定部１０３はユーザによる入力操作等に応じて時間範囲を設定する（Ｓ１０３）。その後、生成部１０４はトレース情報２０１、インデックス情報２５１、及び時間範囲に基づいて初期状態情報３０１及び状態遷移情報３１１を生成する（Ｓ１０４及びＳ１０５）。その後、生成された初期状態情報３０１及び状態遷移情報３１１を含む出力情報２９１が所定のシステムに出力される（Ｓ１０６）。
【００２５】
図８は、第１の実施形態に係るトレース情報２０１からインデックス情報２５１を取得する際の処理の流れを例示するフローチャートである。図９は、第１の実施形態に係るトレース情報２０１からインデックス情報２５１を取得する際に用いられる内部テーブル３４１を例示する図である。内部テーブル３４１はインデックス情報２５１を取得する際に内部処理的に利用されるテーブルである。内部テーブル３４１に書き込まれたデータの一部がインデックス情報２５１に書き込まれることにより、インデックス情報２５１が更新されていく。
【００２６】
先ず、インデックス情報取得部１０２は先頭のインデックスタイミング２６５：０に対応するレコード２６０Ａを内部テーブル３４１及びインデックス情報２５１に書き込む（Ｓ２０１）。このとき、各イベントの状態は全てＥｎｄとなる。その後、インデックス情報取得部１０２はトレース情報２０１の先頭（位置０）にポインタを移動させる（Ｓ２０２）。その後、インデックス情報取得部１０２はポインタが指すレコード２１０を読み出す（Ｓ２０３）。
【００２７】
その後、インデックス情報取得部１０２は読み出したレコード２１０に含まれる時間情報２１１の値がインデックス境界値未満であるか否かを判定する（Ｓ２０４）。インデックス境界値とは、インデックス情報２５１に既に書き込まれたレコード（例えばレコード２６０Ａ）に対応するインデックスタイミング２６５（例えば０）の次のインデックスタイミング２６５（例えば１００）の値である。インデックス境界値はポインタの進行（インデックス情報２５１の更新）に伴い、１００，２００，３００，・・のように更新されていく。
【００２８】
読み出したレコード２１０に含まれる時間情報２１１の値がインデックス境界値未満である場合（Ｓ２０４：Ｙｅｓ）、読み出したレコード２１０に含まれる状態情報２１２及び種別情報２１３に基づいて内部テーブル３４１の情報（イベント種別毎の状態）を更新する（Ｓ２０７）。図９に示す例では、ポインタ位置が０〜３の範囲にある場合、ステップＳ２０４においてＹｅｓの判定となる。その後、インデックス情報取得部１０２はポインタを次のレコードに移動する（Ｓ２０８）。その後、インデックス情報取得部１０２は移動後のポインタの位置が有効か否かを判定し、有効である場合（Ｓ２０９：Ｙｅｓ）にはステップＳ２０３を実行し、有効でない場合（Ｓ２０９：Ｎｏ）にはこのインデックス情報２５１を取得するためのルーチンを終了する。
【００２９】
読み出したレコード２１０に含まれる時間情報２１１の値がインデックス境界値未満でない場合（Ｓ２０４：Ｎｏ）（例えばポインタ位置が４となり、時間情報２１１の値が１０５となった場合）、インデックス情報取得部１０２はインデックス境界値にインデックスタイミング２６５の時間間隔（１００）を加算し、位置情報２６２を現在のポインタ位置に変更することにより内部テーブル３４１を更新する（Ｓ２０５）。その後、インデックス情報取得部１０２はステップＳ２０５により更新された内部テーブル３４１からインデックスタイミング２６５（１００，２００，・・）に対応する（時間情報２６１の値がインデックスタイミング２６５の値と一致する）レコード２６０Ｂを抽出し、インデックス情報２５１に書き込む（Ｓ２０６）。その後、インデックス情報取得部１０２はポインタを次のレコードに移動させる（Ｓ２０８）。
【００３０】
上記のような処理により取得されたインデックス情報２５１によれば、各インデックスタイミング２６５における各イベントの状態（イベントの種別と状態との対応関係）がスナップショットのように記録される。
【００３１】
図１０は、第１の実施形態に係る初期状態情報３０１を生成する際の処理の流れを示すフローチャートである。図１１は、第１の実施形態に係る状態遷移情報３１１を生成する際の処理の流れを示すフローチャートである。先ず、生成部１０４はインデックス情報２５１から時間範囲（１４０〜１９０）の開始時点（１４０）より早く且つ開始時刻に最も近いレコード２６０（レコード２６０Ｂ）を抽出する（Ｓ３０１）。その後、生成部１０４は抽出したレコード２６０に含まれる種別情報２６３及び状態情報２６４のうち、設定部１０３により設定された種別に対応する種別情報２６３及び状態情報２６４（設定部１０３により種別が設定されなかった場合には全ての種別情報２６３及び状態情報２６４）を初期状態情報３０１の初期値に設定する（Ｓ３０２）。
【００３２】
その後、生成部１０４は位置情報２６２（４又は５）に対応する、トレース情報２０１内の位置にポインタを移動し（Ｓ３０３）、トレース情報２０１からポインタが指すレコード２１０（レコード２１０Ｃ又は２１０Ｄ）を読み出す（Ｓ３０４）。
【００３３】
その後、生成部１０４は読み出したレコード２１０の時間情報２１１の値（１０５又は１３７）が開始時点（１４０）未満か否かを判定する（Ｓ３０５）。時間情報２１１の値が開始時点未満である場合（Ｓ３０５：Ｙｅｓ）、生成部１０４は抽出したレコード２１０（レコード２１０Ｃ又は２１０Ｄ）に含まれる種別情報２１３が示す種別（Ｆｕｎｃ＿Ｂ）と現在の初期状態情報３０１に含まれる種別とがマッチするか否かを判定する（Ｓ３０６）。抽出したレコード２１０に含まれる種別情報２１３が示す種別と現在の初期状態情報３０１に含まれる種別とがマッチする場合（Ｓ３０６：Ｙｅｓ）、生成部１０４は初期状態情報３０１を、抽出したレコード２１０に含まれる状態情報２１２と一致するように更新する（Ｓ３０７）。その後、生成部１４はポインタを次のレコードに移動させ（Ｓ３０８）、再度ポイントが指すレコード２１０を読み出す（Ｓ３０４）。抽出したレコード２１０に含まれる種別情報２１３が示す種別と現在の初期状態情報３０１に含まれる種別とがマッチしない場合（Ｓ３０６：Ｎｏ）、生成部１４は初期状態情報３０１を更新せずに、ポインタを次のレコードに移動させる（Ｓ３０８）。
【００３４】
生成部１０４が読み出したレコード２１０の時間情報２１１の値が開始時点未満でない場合（Ｓ３０５：Ｎｏ）、すなわち本実施形態において時間情報２１１の値が１４１（ポインタの位置が６）となった場合、図１１に示す状態遷移情報３１１を生成するための処理が実行される。
【００３５】
図１１に示す状態遷移情報３１１を生成するための処理が実行されると、生成部１０４はポインタが指すレコード２１０（レコード２１０Ａ又は２１０Ｂ）を読み出し（Ｓ４０１）、読み出したレコード２１０の時間情報２１１の値が終了時点（１９０）以下か否かを判定する（Ｓ４０２）。時間情報２１１の値が終了時点（１９０）以下でない場合（Ｓ４０２：Ｎｏ）、この状態遷移情報３１１を生成するためのルーチンを終了する。時間情報２１１の値が終了時点以下である場合（Ｓ４０２：Ｙｅｓ）、生成部１０４は抽出したレコード２１０（レコード２１０Ａ又は２１０Ｂ）に含まれる種別情報２１３が示す種別（Ｆｕｎｃ＿Ａ又はＭａｉｎ）と設定部１０３により設定された種別（設定部１０３により種別が設定されなかった場合には全ての種別）とがマッチするか否かを判定する（Ｓ４０３）。抽出したレコード２１０に含まれる種別情報２１３が示す種別と設定部１０３により設定された種別（設定部１０３により種別が設定されなかった場合には全ての種別）とがマッチする場合（Ｓ４０３：Ｙｅｓ）、生成部１０４は抽出したレコード２１０に含まれる時間情報２１１、状態情報２１２、及び種別情報２１３を状態遷移情報３１１に追加する（Ｓ４０４）。その後、生成部１０４はポインタを次のレコードに移動させ（Ｓ４０５）、再度ポイントが指すレコード２１０を読み出す（Ｓ４０１）。抽出したレコード２１０に含まれる種別情報２１３が示す種別と設定部１０３により設定された種別（設定部１０３により種別が設定されなかった場合には全ての種別）とがマッチしない場合（Ｓ４０３：Ｎｏ）、生成部１０４は状態遷移情報３１１に新たな情報を追加せずに、ポインタを次のレコードに移動させる（Ｓ４０５）。
【００３６】
上記のように生成された初期状態情報３０１及び状態遷移情報３１１を利用することにより、任意に設定された時間範囲（１４０〜１９０）内で発生した各イベントの状態遷移を的確に把握することができる。また、本実施形態に係る初期状態情報３０１によれば、時間範囲の開始時点（１４０）における各イベントの状態を把握することができるので、トレース情報２０１を最初から読み込むというような無駄な処理を避けることができる。これにより、トレース情報の一部のみを効率的に利用して様々な処理を行うことが可能となる。
【００３７】
なお、図１及び図２に示すハードウェア構成は一例であり、トレース情報管理システム１は様々なハードウェア構成により実現することができる。例えば、単体の汎用コンピュータ、組み込みプロセッサを有する専用装置等により、上記トレース情報取得部１０１、インデックス情報取得部１０２、設定部１０３、及び生成部１０４を実現することができる。
【００３８】
図３においてトレース情報管理システム１の基本的な機能的構成が示されているが、実施形態はこれに限らない。例えば、各機能ブロックが協調しながら並列的に動作を行う構成、１つの機能ブロックを複数の機能ブロックに分割する構成、これらの構成を組み合わせた構成等であってもよい。
【００３９】
トレース情報管理システム１の機能を実現させるプログラムはインストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、所定のドライブ装置等を通じて提供することができる。プログラムはネットワークに接続された所定の記憶装置から所定のコンピュータにダウンロードすることにより提供されてもよいし、予めＲＯＭ等に組み込まれて所定の情報処理装置に提供されてもよい。プログラムは上記トレース情報取得部１０１、インデックス情報取得部１０２、設定部１０３、及び生成部１０４の機能を実現する複数のモジュールから構成されてもよい。
【００４０】
以下に、上記構成のバリエーションを示す。図１２は、第１の実施形態の第２の例に係るトレース情報５０１を例示する図である。本例に係るトレース情報５０１は時間情報２１１及び状態情報２１２を含み、図４に示す第１の例に係るトレース情報２０１には含まれている種別情報２１３を含んでいない。イベントの種別が１種類である場合等には第２の例に係るトレース情報５０１のようなデータ構造とすることができ、これによりデータ量の削減、処理負荷の軽減等を図ることができる。
【００４１】
図１３は、第１の実施形態の第２の例に係るインデックス情報５１１を例示する図である。本例に係るインデックス情報５１１は時間情報２６１、位置情報２６２、及び状態情報２６４を含み、図５に示す第１の例に係るインデックス情報２５１には含まれている種別情報２６３を含んでいない。上記第２の例に係るトレース情報５０１の場合と同様に、イベントの種別が１種類である場合等には第２の例に係るインデックス情報５１１のようなデータ構造とすることができ、これによりデータ量の削減、処理負荷の軽減等を図ることができる。
【００４２】
図１４は、第１の実施形態の第２の例に係る初期状態情報５２１及び状態遷移情報５３１を例示する図である。本例に係る初期状態情報５２１及び状態遷移情報５３１は時間情報３２１及び状態情報３２３を含み、図６に示す第１の例に係る初期状態情報３０１及び状態遷移情報３１１には含まれている種別情報３２２を含んでいない。上記第２の例に係るトレース情報５０１及びインデックス情報５１１と同様に、イベントの種別が１種類である場合等には第２の例に係る初期状態情報５２１及び状態遷移情報５３１のようなデータ構造とすることができ、これによりデータ量の削減、処理負荷の軽減等を図ることができる。
【００４３】
図１５は、第１の実施形態の第３の例に係るインデックス情報５５１を例示する図である。本例に係るインデックス情報５５１の状態情報２６４は停止状態から開始状態への遷移を示すＳｔａｒｔのみを保持し、開始状態から停止状態への遷移を示すＥｎｄを保持しない。これに伴い、本例に係るインデックス情報５５１の種別情報２６３はＳｔａｒｔの状態遷移を起こしたイベントのみを保持する。解析対象となるプログラムの特徴、インデックス情報５５１の利用形態等によってはＳｔａｒｔの状態遷移さえ把握できれば足りる場合がある。このような場合には、第３の例に係るインデックス情報５５１のようなデータ構造とすることができ、これによりデータ量の削減、処理負荷の軽減等を図ることができる。また、本例とは逆に、Ｅｎｄの状態遷移のみを記録するようにしてもよい。
【００４４】
図１６は、第１の実施形態の第４の例に係るインデックス情報５６１を例示する図である。図１７は、第１の実施形態の第３の例に係る初期状態情報５７１及び状態遷移情報５８１を例示する図である。第３の例に係る初期状態情報５７１及び状態遷移情報５８１は第４の例に係るインデックス情報５６１を利用して生成されたものである。
【００４５】
本例に係るインデックス情報５６１は図５に示す第１の例に係るインデックス情報２５１のデータ構造に加え、遷移時間情報５６５を含む。遷移時間情報５６５は状態情報２６４が示す状態遷移が生じたタイミングを示す情報である。遷移時間情報５６５は対応するトレース情報（本例では図４に示す第１の例に係るトレース情報２０１）から抽出することができる。本例に係る初期状態情報５７１の時間情報３２１はインデックス情報５６１の遷移時間情報５６５が書き込まれた情報である。本例に係る初期状態情報５７１の種別情報３２２及び状態情報３２３は図６に示す第１の例に係る初期状態情報３０１と同様に、設定された時間範囲の開始時点（１４０）における各イベントの状態を示している。すなわち、本例に係る初期状態情報５７１によれば、種別情報３２２及び状態情報３２３により開始時点における各イベントの状態を把握することができるだけでなく、時間情報３２１により各イベントが開始時点における状態に遷移したタイミングも把握することが可能となる。
【００４６】
以上のように、トレース情報、インデックス情報、初期状態情報、及び状態遷移情報は使用状況等に応じて様々なデータ構造をとることができるものである。
【００４７】
上記実施形態によれば、任意に設定された時間範囲内で発生した各イベントの状態遷移を的確に把握することが可能となる。また、上記初期状態情報により時間範囲の開始時点における各イベントの状態を把握することができるので、膨大なデータ量のトレース情報を最初から読み込むというような無駄な処理を避けることが可能となる。これにより、トレース情報の一部のみを効率的に利用してプログラムの実行状況の可視化、プログラム性能の動的解析等の様々な処理を行うことが可能となる。
【００４８】
（第２の実施形態）
以下に、第２の実施形態について説明する。第２の実施形態に係る生成部１０４は、設定された時間範囲内で生じた複数回の状態遷移のうちの少なくとも１つを集約することにより状態遷移情報を生成する。
【００４９】
図１８は、第２の実施形態の第１の例に係る状態遷移情報７１１を生成する際の処理を例示する図である。図１８において、本実施形態に係るトレース情報６０１、インデックス情報６５１、初期状態情報７０１、及び状態遷移情報７１１が示されている。本実施形態に係る時間範囲は１１０〜２０９である。
【００５０】
第２の実施形態の第１の例に係る生成部１０４は、時間範囲（１１０〜２０９）を第１の区間（１１０〜１５９）と第２の区間（１６０〜２０９）とに分割し、同一の区間内で同一のイベントの状態が複数回遷移し、最初の遷移の状態と最後の遷移の状態とが一致する場合に、最初の遷移に関する情報のみを状態遷移情報７１１に書き込む。本実施形態に係るトレース情報６０１の第１の区間（１１０〜１５９）内において、Ｆｕｎｃ＿Ｂの状態が時間情報２１１：１３７，１３８，１３９のタイミングにおいて３回遷移し、最初の遷移の状態と最後の遷移の状態とがＥｎｄで一致している。このような場合、本例に係る生成部１０４は最初の遷移に関する情報（レコード２１０Ｅに含まれる情報）のみを状態遷移情報７１１に書き込み、その後に生じたＦｕｎｃ＿Ｂの遷移に関する情報（レコード２１０Ｆ及び２１０Ｇに含まれる情報）を状態遷移情報７１１に書き込まない。このような処理により、設定された時間範囲内に同一のイベントの同一の状態遷移が多数回行われる場合等において、実質的な不利益を生ずることなく状態遷移情報７１１の情報量を削減することができる。なお、本例においては最初の遷移に関する情報のみが状態遷移情報７１１に書き込まれるが、抽出されたデータの利用法等に応じて、例えば最後の遷移に関する情報、平均化した遷移に関する情報等のみを書き込むようにしてもよい。このように、状態遷移情報７１１に書き込まれる情報は複数のレコードの遷移を特定の遷移で代表する様々な情報であり得る。
【００５１】
図１９は、第２の実施形態の第２の例に係る状態遷移情報７２１を生成する際の処理を例示する図である。本例に係る状態遷移情報７２１は図１８に示す第１の例に係る状態遷移情報７１１と異なっている。
【００５２】
第２の実施形態の第２の例に係る生成部１０４は、時間範囲（１１０〜２０９）を第１の区間（１１０〜１５９）と第２の区間（１６０〜２０９）とに分割し、同一の区間内で同一のイベントの状態が複数回遷移する場合に、最初の遷移に関する情報及び最後の遷移に関する情報のみを状態遷移情報７２１に書き込む。本実施形態に係るトレース情報６０１の第１の区間（１１０〜１５９）内において、Ｆｕｎｃ＿Ｂの状態が時間情報２１１：１３７のタイミングにおいてＥｎｄに遷移し、時間情報２１１：１３８のタイミングにおいてＳｔａｒｔに遷移し、時間情報２１１：１３９のタイミングにおいてＥｎｄに遷移している。このような場合、本例に係る生成部１０４は最初の遷移に関する情報（レコード２１０Ｅに含まれる情報）及び最後の遷移に関する情報（レコード２１０Ｇに含まれる情報）のみを状態遷移情報７２１に書き込み、それらの間で生じたＦｕｎｃ＿Ｂの遷移に関する情報（レコード２１０Ｆに含まれる情報）を状態遷移情報７２１に書き込まない。このような処理により、設定された時間範囲内に同一のイベントの同一の状態遷移が多数回行われる場合等において、実質的な不利益を生ずることなく状態遷移情報７２１の情報量を削減することができる。
【００５３】
図２０は、第２の実施形態の第２の例に係る初期状態情報７０１及び状態遷移情報７２１を用いて時間範囲内に生じたイベントの状態遷移を可視化する表示画像を例示する図である。図２０中、下部において、第２の実施形態の第２の例に係る初期状態情報７０１及び状態遷移情報７２１を用いて生成された表示画像８０１が示され、上部において、通常の初期状態情報及び状態遷移情報を用いて生成された比較例に係る表示画像８１１が示されている。すなわち、図２０において、上述したように集約された状態遷移情報７２１を用いた表示画像８０１と、集約されていない状態遷移情報を用いた表示画像８１１との比較がなされている。
【００５４】
表示画像８０１，８１１内には、Ｍａｉｎの状態遷移を示す遷移オブジェクト８５１、Ｆｕｎｃ＿Ａの状態遷移を示す遷移オブジェクト８５２、及びＦｕｎｃ＿Ｂの状態遷移を示す遷移オブジェクト８５３が描画されている。
【００５５】
上述したように、図１９に示す第２の実施形態の第２の例に係る状態遷移情報７２１は時間情報２１１：１３８に対応するレコード２１０Ｆに含まれる情報を含んでいない。そのため、状態遷移情報７２１を利用して生成された表示画像８０１内のＦｕｎｃ＿Ｂに対応する遷移オブジェクト８５３には、レコード２１０Ｆに含まれる状態遷移情報（Ｆｕｎｃ＿Ｂ：Ｓｔａｒｔ）に対応する上向き矢印のオブジェクトが表示されていない。本例においては、レコード２１０Ｆに対応するオブジェクトは大局的にみれば必ずしも必要なものではない。このように、大局的には不要といえる情報（オブジェクト）を削除することにより、情報量の削減、処理負荷の軽減、表示画像の複雑化等を避けることができる。
【００５６】
（第３の実施形態）
図２１は、第３の実施形態に係る可視化システム１００１の機能的構成を例示する図である。可視化システム１００１は時系列データを可視化するシステムである。可視化システム１００１は表示部１０１１を含む。時系列データとは、時刻とイベントの状態遷移とが紐付けられた状態遷移イベント情報を含むデータである。トレース情報２０１，５０１，６０１は時系列データの例である。
【００５７】
表示部１０１１は、第１の実施形態又は第２の実施形態に係るトレース情報管理システム１の生成部１０４により生成された出力情報２９１（初期状態情報３０１，５２１，５７１，７０１及び状態遷移情報３１１，５３１，５８１，７１１，７２１）に基づいて、時系列データを可視化する機能部である。表示部１０１１は出力デバイス２５、ＣＰＵ２１、ＲＯＭ２２に記憶された制御プログラム、ＲＡＭ２３、適宜なロジックＩＣ等を利用して構成され得る。
【００５８】
表示部１０１１は、時系列データに含まれる時間を特定期間毎に分割し、各特定期間に含まれる最初の状態遷移イベント情報と最後の状態遷移イベント情報とを抽出し、抽出された状態遷移イベント情報に基づいて特定期間毎の状態遷移を可視化する。
【００５９】
表示部１０１１は、特定期間を、可視化される時刻範囲と表示解像度とに基づいて決定してもよい。例えば、可視化される時刻範囲が１００秒から１０１００秒までの１万秒間であり、時刻がマップされるチャート上の軸の表示解像度が１００である場合、特定期間を１００００／１００＝１００と決定することができる。なお、表示解像度は、例えばディスプレイ上のピクセル数、表示装置が定める単位（例えば１０ピクセル毎に１単位とする）等である。
【００６０】
また、表示部１０１１は、特定期間に１つのイベントしか存在しない場合、当該１つのイベントのみを抽出してもよい。また、表示部１０１１は、各特定期間に含まれる最初の状態遷移イベント情報と最後の状態遷移イベント情報とを抽出する際に、特定期間に含まれる状態遷移イベント数を抽出してもよい。状態遷移イベント数とは、状態が遷移したイベントの数である。また、表示部１０１１は、抽出された状態遷移イベント数に基づいて特定期間毎の状態遷移イベント数を可視化してもよい。また、表示部１０１１は、抽出された最初の状態遷移イベント情報及び最後の状態遷移イベント情報に、状態遷移イベント数に関する情報を追加してもよい。
【００６１】
本実施形態に係る可視化システム１００１によれば、時系列データの状態遷移を高品質に可視化することが可能となる。
【００６２】
以上、本発明の実施形態を説明したが、この実施形態は例として提示したものであり、発明の範囲を限定することを意図するものではない。この新規な実施形態はその他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。この実施形態及びその変形は発明の範囲及び要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６３】
１  トレース情報管理システム
１１  情報処理端末
１２  サーバ
１３  ネットワーク
２１  ＣＰＵ
２２  ＲＯＭ
２３  ＲＡＭ
２４  入力デバイス
２５  出力デバイス
２６  通信Ｉ／Ｆ
２７  バス
１０１  トレース情報取得部（第１の取得部）
１０２  インデックス情報取得部（第２の指定部）
１０３  設定部
１０４  生成部
２０１，５０１，６０１  トレース情報
２１０，２１０Ａ〜２１０Ｇ，３２０  レコード
２１１，２６１，３２１  時間情報
２１２，２６４，３２３  状態情報
２１３，２６３，３２２  種別情報
２５１，５１１，５５１，５６１，６５１  インデックス情報
２６０Ａ，２６０Ｂ  レコード
２６２  位置情報
２６５  インデックスタイミング
２６５Ａ  直前タイミング
２９１  出力情報
３０１，５２１，５７１，７０１  初期状態情報
３１１，５３１，５８１，７１１，７２１  状態遷移情報
３４１  内部テーブル
５６５  遷移時間情報
８０１，８１１  表示画像
８５１〜８５３  遷移オブジェクト
１００１  可視化システム
１０１１  表示部
【図１】
2018055667.tif 000003
【図２】
2018055667.tif 000004
【図３】
2018055667.tif 000005
【図４】
2018055667.tif 000006
【図５】
2018055667.tif 000007
【図６】
2018055667.tif 000008
【図７】
2018055667.tif 000009
【図８】
2018055667.tif 000010
【図９】
2018055667.tif 000011
【図１０】
2018055667.tif 000012
【図１１】
2018055667.tif 000013
【図１２】
2018055667.tif 000014
【図１３】
2018055667.tif 000015
【図１４】
2018055667.tif 000016
【図１５】
2018055667.tif 000017
【図１６】
2018055667.tif 000018
【図１７】
2018055667.tif 000019
【図１８】
2018055667.tif 000020
【図１９】
2018055667.tif 000021
【図２０】
2018055667.tif 000022
【図２１】
2018055667.tif 000023