(57)【特許請求の範囲】
【請求項１】
ソースコードに含まれる複数のスコープの実行順序と実行時に観測可能な特徴量とを示すトレース情報と、前記スコープを特定する複数のスコープ特定情報毎に前記特徴量を集約した第１の属性情報とを取得する取得部と、
前記第１の属性情報の中から少なくとも１つの前記スコープ特定情報を指定する指定部と、
指定された前記スコープ特定情報に対応する情報を前記トレース情報から抽出する抽出部と、
を備えるトレース情報管理システム。
【請求項２】
前記トレース情報は、前記各スコープの開始タイミング及び終了タイミングを示す複数のレコードを含み、
前記レコードは、前記スコープ特定情報を含み、
前記抽出部は、前記指定部により指定された前記スコープ特定情報を含む前記レコードを前記トレース情報から抽出する、
請求項１に記載のトレース情報管理システム。
【請求項３】
前記取得部は、更に、前記スコープの呼び出し関係を示す呼び出し関係特定情報毎に前記特徴量を集約した第２の属性情報を取得し、
前記指定部は、更に、前記第２の属性情報の中から少なくとも１つの前記呼び出し関係特定情報を指定し、
前記抽出部は、更に、指定された前記呼び出し関係特定情報に対応する情報を前記トレース情報から抽出する、
請求項１に記載のトレース情報管理システム。
【請求項４】
前記トレース情報は、前記各スコープの開始タイミング及び終了タイミングを示す複数のレコードを含み、
前記レコードは、前記呼び出し関係特定情報を含み、
前記抽出部は、前記指定部により指定された前記呼び出し関係特定情報を含む前記レコードを前記トレース情報から抽出する、
請求項３に記載のトレース情報管理システム。
【請求項５】
前記特徴量は、前記スコープの実行期間である、
請求項１に記載のトレース情報管理システム。
【請求項６】
前記特徴量は、前記スコープの実行回数である、
請求項１に記載のトレース情報管理システム。
【請求項７】
ソースコードに含まれる複数のスコープの実行順序と実行時に観測可能な特徴量とを示すトレース情報と、前記スコープを特定する複数のスコープ特定情報毎に前記特徴量を集約した第１の属性情報とを取得するステップと、
前記第１の属性情報の中から少なくとも１つの前記スコープ特定情報を指定するステップと、
指定された前記スコープ特定情報に対応する情報を前記トレース情報から抽出するステップと、
を備えるトレース情報管理方法。
【請求項８】
コンピュータに、
ソースコードに含まれる複数のスコープの実行順序と実行時に観測可能な特徴量とを示すトレース情報と、前記スコープを特定する複数のスコープ特定情報毎に前記特徴量を集約した第１の属性情報とを取得する処理と、
前記第１の属性情報の中から少なくとも１つの前記スコープ特定情報を指定する処理と、
指定された前記スコープ特定情報に対応する情報を前記トレース情報から抽出する処理と、
を実行させるトレース情報管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、トレース情報管理システム、方法、及びプログラムに関する。
【背景技術】
【０００２】
ソースコード（プログラム）の実行時に観測可能な特徴量とその実行順序とからなるトレース情報は、様々な目的で利用される。トレース情報は、例えばソースコードの検証、ソースコードの実行状況の可視化等に利用される。トレース情報を扱う技術として、トレース情報の本体とメタデータとを分離して保存し、それらをリンクさせる情報としてソースコード上のプローブとユーザとの組に対して識別情報を付与する技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第７４３７７１６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
トレース情報の情報量はソースコードの規模、トレース情報を生成する際に設定された粒度等に応じて変化する。ソースコードが大規模である場合、粒度が細かい場合等にはトレース情報の情報量は大きくなる。また、トレース情報にはその利用目的に対して不要な情報が含まれる場合がある。
【０００５】
従来の技術においては、取得されたトレース情報を利用して所定の処理を行う際に、生成時に設定された粒度のトレース情報がそのまま使用される。すなわち、トレース情報の利用目的に対して、トレース情報の粒度が必要以上に細かい場合、不要な情報が含まれる場合等であっても、取得された状態のトレース情報を参照しなければならない。そのため、トレース情報の情報量が膨大である場合、目的の処理を行うシステムに過大な処理負荷が掛かり、作業効率の低下等の問題が生ずる。
【０００６】
そこで、以下の実施形態では、トレース情報から必要な情報を効率的に抽出できるようにすることを目的とする。
【課題を解決するための手段】
【０００７】
実施形態のトレース情報管理システムは、取得部と、指定部と、抽出部とを備える。取得部は、ソースコードに含まれる複数のスコープの実行順序と実行時に観測可能な特徴量とを示すトレース情報と、スコープを特定する複数のスコープ特定情報毎に特徴量を集約した第１の属性情報とを取得する。指定部は、第１の属性情報の中から少なくとも１つのスコープ特定情報を指定する。抽出部は、指定されたスコープ特定情報に対応する情報をトレース情報から抽出する。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態におけるトレース情報管理システムの機能的構成を例示する図。
【図２】トレース情報管理システムのハードウェア構成を例示する図。
【図３】第１の実施形態におけるソースコードを例示する図。
【図４】第１の実施形態におけるトレース情報を例示する図。
【図５】第１の実施形態における属性情報を例示する図。
【図６】第１の実施形態における抽出情報を例示する図。
【図７】第１の実施形態におけるトレース情報管理システムによる処理を示すフローチャート。
【図８】第２の実施形態におけるソースコードを例示する図。
【図９】第２の実施形態におけるトレース情報を例示する図。
【図１０】スコープ間の分岐関係を示す木構造情報を例示する図。
【図１１】第２の実施形態における第１の属性情報を例示する図。
【図１２】第２の実施形態における第２の属性情報を例示する図。
【図１３】第１の属性情報から指定された情報に基づいて生成された第１の抽出情報を例示する図。
【図１４】第２の属性情報から指定された情報に基づいて生成された第２の抽出情報を例示する図。
【図１５】関数の呼び出し関係とサイクル数との関係を例示する図。
【発明を実施するための形態】
【０００９】
（第１の実施形態）
図１は、第１の実施形態におけるトレース情報管理システム１の機能的構成を例示する図である。トレース情報管理システム１は、取得部１１、指定部１２、及び抽出部１３を含む。
【００１０】
図２は、トレース情報管理システム１のハードウェア構成を例示する図である。トレース情報管理システム１は、ＣＰＵ（Central  Processing  Unit）２１、ＲＯＭ（Read  Only  Memory）２２、ＲＡＭ（Random  Access  Memory）２３、入力デバイス２４、出力デバイス２５、通信ＩＦ（Interface）２６、バス２７、ストレージ２８、及びドライブ装置２９を含む。ＣＰＵ２１は、ＲＯＭ２２やストレージ２８等に記憶されたプログラムに従ってＲＡＭ２３やストレージ２８等をワーキングエリアとして所定の演算処理を行う。入力デバイス２４は、外部から情報を入力するためのデバイスであり、例えばキーボード、マウス、タッチパネル等である。出力デバイス２５は、内部で生成した情報を外部に出力するためのデバイスであり、例えばディスプレイ、プリンタ等である。通信ＩＦ２６は、ネットワークを介して外部の装置との間で情報の送受信を可能にするデバイスである。ドライブ装置２９は、着脱可能な記録媒体が接続可能であり、少なくとも記録媒体からのデータの読み出しを行うことが可能である。
【００１１】
取得部１１は、トレース情報及び属性情報を取得する。図３は、トレース情報の元となるソースコード５１を例示する図である。図４は、トレース情報６１を例示する図である。図５は、属性情報７１を例示する図である。
【００１２】
トレース情報６１は、ソースコード５１に基づいて生成され、ソースコード５１の実行時に観測可能な特徴量とその実行順序とを含む。特徴量とは、ソースコード５１の実行時に発生した挙動を示す情報であり、スコープが開始された時間、終了した時間等である。特徴量はこれらに限られるものではない。スコープとは、ソースコード５１内で定義された範囲であり、例えば関数（ｍａｉｎ，ｆｕｎｃＡ，ｆｕｎｃＢ）、条件文（ｉｆ）、ループ文（ｆｏｒ）等に対応する中括弧｛｝で括られた部分に対応する範囲である。スコープの定義の仕方はこれらに限られるものではなく、ソースコード５１の形態に合わせて適宜行うことができる。例えば、任意にソースコード５１中の連続区間をファイル名や行番号等により指定することでスコープを定義してもよい。また、言語に依存しない本システム用の特殊な制御構造をソースコード５１やそれをコンパイルしたバイナリに組み込み、その構造の開始及び終了のタイミングに基づいてスコープを定義してもよい。１つのスコープの中に１つ以上のスコープが含まれてもよい。
【００１３】
図３に示すソースコード５１において、各行の先頭に付された数字は、説明のための行番号である。行番号とソースコード５１の本体とはコロン（：）により分割されている。本例のソースコード５１はＣ言語の記法を模した疑似コードであるが、ソースコードのプログラム言語はこれに限定されるものではない。図３の例では、１行目から２４行目に関数ｍａｉｎが定義され、２６行目から３００行目に関数ｆｕｎｃＡが定義され、３０２行目から８００行目に関数ｆｕｎｃＢが定義されている。２行目に変数ｉが定義され、３行目から２３行目までに変数ｉをループ変数としたループ文（ｆｏｒ）及びその内部の処理が定義されている。４行目から２０行目までに変数iを２で割ったときの余りが０となる場合に実行される条件文（ｉｆ）及びその内部の処理が定義されている。３行目にループ回数が３に定義されている。ループ中、２１行目に関数ｆｕｎｃＡが実行されることが定義され、２２行目に関数ｆｕｎｃＢが実行されることが定義されている。すなわち、関数ｆｕｎｃＡ及び関数ｆｕｎｃＢはループ中にそれぞれ３回呼び出されて実行される。このとき、変数ｉを２で割ったときの余りが０となる場合は２回発生する（変数ｉが０及び２の場合）。すなわち、４行目から２０行目までの条件文の内部は２回実行される。
【００１４】
図４に示すトレース情報６１は、図３に示すソースコード５１を実行した結果取得される情報の例である。トレース情報６１は、複数のレコード６２を含む。各レコード６２は、スコープＩＤ（スコープ特定情報）６３、ステータス情報６４、及びタイミング情報６５を含む。各スコープＩＤ６３（Ａ，Ｂ，Ｃ，Ｄ，Ｅ）は、ソースコード５１の各スコープに対して一意に設定された記号である。本例では、「Ａ」が「関数：ｍａｉｎ」に対応し、「Ｂ」が「ループ文：ｆｏｒ」の中括弧｛｝で括られた内部の処理に対応し、「Ｃ」が「条件文：ｉｆ」の中括弧｛｝で括られた内部の処理に対応し、「Ｄ」が「関数：ｆｕｎｃＡ」に対応し、「Ｅ」が「関数：ｆｕｎｃＢ」に対応している。ステータス情報６４（ｓｔａｒｔ，ｅｎｄ）は、あるタイミングにおける各スコープの状態を示している。この例ではｓｔａｒｔはスコープが開始されたことを示し、ｅｎｄはスコープが終了したことを示す。タイミング情報６５は、ステータス情報６４が示す状態に至ったタイミングを示す数値である。この数値は、ソースコード５１の実行順序を示すものであり、この例では命令実行サイクル（クロック数）を示しているが、時刻、経過時間等であってもよい。また、実行順序についてはトレース情報６１に含まれる情報で表現するだけに限らず、トレース情報６１に含まれるレコード６２の並び順等で表現してもよい。ステータス情報６４及びタイミング情報６５により、各スコープの開始タイミング及び終了タイミングが示される。
【００１５】
図４に示すトレース情報６１において、１行目の「Ａ，ｓｔａｒｔ，１」は、１サイクル目に関数ｍａｉｎが開始したことを示している。２行目の「Ｂ,ｓｔａｒｔ，１０」は、１０サイクル目にソースコード５１の３行目から２３行目のループ文の内部の処理が開始したことを示している。３行目の「Ｃ,ｓｔａｒｔ，２０」は、２０サイクル目にソースコード５１の４行目から２０行目の条件文の内部の処理が開始したことを示している。４行目の「Ｃ,ｅｎｄ，５０」は、５０サイクル目にソースコード５１の４行目から２０行目の条件文の内部の処理が終了したことを示している。以降、同様に各スコープの実行順序が示されている。
【００１６】
属性情報７１は、スコープの特徴量をスコープ毎に示している。スコープの特徴量とは、スコープの特徴を示す値であり、例えばスコープの実行回数、実行期間（命令実行サイクル数、経過時間等）等である。スコープの特徴量はこれらに限られるものではない。
【００１７】
図５に示す属性情報７１は、図４に示すトレース情報６１から取得される特徴量をスコープ毎に集約したテーブル形式の情報である。本例の属性情報７１は、スコープＩＤ６３、スコープ名７４、実行回数情報７５、及び平均実行期間情報７６を含む。属性情報７１内のスコープＩＤ６３は、トレース情報６１内のスコープＩＤ６３と同一である。スコープ名７４は、スコープＩＤ６３に対応するスコープの名称又は略称を言語で表記した情報である。実行回数情報７５は、トレース情報６１が示す全期間中に各スコープが実行される回数を示している。平均実行期間情報７６は、スコープの１回実行あたりの平均実行期間を示している。
【００１８】
図５に示す属性情報７１において、１行目の「Ａ,ｍａｉｎ，１，１１１９」は、スコープＩＤ６３：「Ａ」は関数ｍａｉｎを表し、関数ｍａｉｎは全期間中１回実行され、その平均実行期間は１１１９サイクルであることが示されている。２行目の「Ｂ,ＬＯＯＰ，３，３６０」は、スコープＩＤ６３：「Ｂ」はループ文（ソースコード５１の３行目から２３行目のループ文「ｆｏｒ」内部の処理）を表し、このループ文は全期間中３回実行され、１回あたりの平均実行期間が３６０サイクルであることが示されている。３行目の「Ｃ,ＣＯＮＤ，２，３０」は、スコープＩＤ６３：「Ｃ」は条件文（ソースコード５１の４行目から２０行目の条件文「ｉｆ」内部の処理）を表し、この条件文は全期間中２回実行され、１回あたりの平均実行期間が３０サイクルであることを示している。４行目の「Ｄ,ｆｕｎｃＡ，３，１００」は、スコープＩＤ６３：「Ｄ」は関数ｆｕｎｃＡを表し、関数ｆｕｎｃＡは全期間中３回実行され、１回あたりの平均実行期間が１００サイクルであることを示している。５行目の「Ｅ,ｆｕｎｃＢ，３，２００」は、スコープＩＤ６３：「Ｅ」は関数ｆｕｎｃＢを表し、関数ｆｕｎｃＢは全期間中３回実行され、１回あたりの平均実行期間が２００サイクルであることを示している。
【００１９】
上記属性情報７１のように、スコープＩＤ６３毎に特徴量を集約した情報を用いることにより、トレース情報６１全体を俯瞰することが可能となる。本例におけるトレース情報６１のレコード６２の数はそれほど多くないが、例えばレコード６２の数が数万、数億以上である場合には、トレース情報６１の全体像を把握することは極めて困難である。このような場合に上記のような属性情報７１を用いることにより、トレース情報６１の全体像を的確に把握することが可能となる。
【００２０】
取得部１１は、例えばＣＰＵ２１、制御プログラム、ロジックＩＣ（Integrated  Circuit）、ＲＡＭ２３等を利用して構成される。ここでの「取得」には、外部からデータを受信すること、及び内部でデータを生成することが含まれる。すなわち、トレース情報６１及び属性情報７１は、トレース情報管理システム１以外のシステム（装置）によって生成されてもよいし、トレース情報管理システム１内で生成されてもよい。トレース情報６１及び属性情報７１の生成方法は特に限定されるものではなく、トレース情報６１及び属性情報７１は公知又は新規の技術を用いて適宜生成されればよい。
【００２１】
取得部１１による取得の対象となるソースコード５１は、特定の処理装置独自のプログラミング言語であってもよい。ソースコード５１は、何らかのコンパイラ装置等でコンパイルされ、特定のコンピュータ装置上で実行可能なバイナリ形式、それらの中で用いられる中間表現の形式、アセンブリ言語のような形に変換された結果等であってもよい。ソースコード５１は、何らかのオペレーションシステム等の環境下で動作するアプリケーションプログラム、オペレーションシステムや基盤システムそのものを実現するプログラム、ハードウェアを動作させるためのデバイスドライバのようなプログラム等であってもよい。ソースコード５１は、必ずしも１つのファイルに全ての情報が入っているものである必要はなく、分割された複数の情報に対応する複数のファイルからなるものであってもよい。このように、ソースコード５１は公知又は新規の技術を用いてトレース情報６１が生成可能な形態となっていればよい。
【００２２】
トレース情報６１は、特徴量の情報として、前回レコード６２を生成したタイミングや関数等のソースコード５１中の区間が終了したタイミングでメモリアクセスが何回発生したか、どのメモリにアクセスされたか、どのタイミングでどの程度メモリが利用されたか、メモリがいつ確保され、いつ開放されたかといった情報を含んでもよい。トレース情報６１は、特徴量に関係する挙動が発生したソースコード５１上の位置を示すファイル名や行番号、ソースコード５１が存在する場所を示すパスやサーバの情報を含んでもよい。トレース情報６１は、ソースコード５１の連続区間をプログラミング言語のブロックのような構造で囲った領域に付けられた名前を含んでもよい。トレース情報６１は、特定の区間毎に付与されたＩＤ、ソースコード管理システム上で発行されるＩＤ等を用いてソースコード５１のバージョンを特定する情報を含んでもよい。トレース情報６１は、レコード６２を生成するたびに一意に付与されるＩＤを含んでもよい。トレース情報６１に含まれる特徴量の情報の個数はいくらでもよい。同じソースコード５１を異なる条件で複数回実行した結果得られる複数のトレース情報６１を対象としてもよい。このように、トレース情報６１は公知又は新規の技術を用いて様々な特徴量の情報を含むように生成されればよい。
【００２３】
指定部１２は、取得された属性情報７１の中から少なくとも１つのスコープＩＤ６３を指定する。指定されたスコープＩＤ６３を示す情報は、抽出部１３による抽出処理に用いられる指定情報として指定部１２から出力される。指定部１２は、例えばＣＰＵ２１、制御プログラム、ロジックＩＣ、出力デバイス（ディスプレイ等）、入力デバイス（キーボード、マウス、タッチパネル等）等を利用して構成される。例えば、ユーザがコンピュータのディスプレイに表示された属性情報７１の中から所望のスコープＩＤ６３を指定するようにしてもよい。また、所定の条件を満たす特徴量（実行回数、実行期間等）を有するスコープがＣＰＵ２１の処理により自動的に指定されるようにしてもよい。このように、公知又は新規の技術を用いて属性情報７１から少なくとも１つのスコープＩＤ６３を指定できればよい。
【００２４】
抽出部１３は、指定部１２から出力される指定情報に基づいて、指定されたスコープＩＤ６３に対応する情報をトレース情報６１から抽出することにより、抽出情報を生成する。
【００２５】
図６は、抽出情報８１を例示する図である。本例の抽出情報８１は、図５に示す属性情報７１から関数ｆｕｎｃＡを示すスコープＩＤ６３：「Ｄ」が指定された場合の例である。抽出情報８１は、図４に示すトレース情報６１から、スコープＩＤ６３：「Ｄ」を含むレコード６２のみを抽出することにより生成された情報である。図４に示すトレース情報６１に含まれるレコード６２の数は２４であったが、図６に示す抽出情報８１に含まれるレコード６２の数は６である。このように、抽出部１３の処理により、レコード６２の数を半分以下に絞り込むことができている。
【００２６】
抽出部１３は、例えばＣＰＵ２１、制御プログラム、ロジックＩＣ等を利用して構成される。上述したように属性情報７１からスコープＩＤ６３が指定されると、トレース情報６１から当該スコープＩＤ６３を含むレコード６２が抽出される。レコード６２をトレース情報６１から抽出する処理は、公知又は新規の検索アルゴリズムを適宜利用して行うことができる。また、抽出部１３における抽出情報８１の作成方法も上述の例に限られない。例えば、不要なレコード６２を取り除くのではなく、指定したスコープＩＤ６３を含むレコード６２にフラグのような目印を付与することにより、抽出情報８１を利用する際に所望のレコード６２を識別できるようにしてもよい。また、単一のトレース情報６１だけでなく、複数のトレース情報６１からレコード６２を抽出し、抽出されたレコード６２をトレース情報６１毎にまとめてもよい。全てのトレース情報６１から抽出されたレコード６２を１つにまとめてもよい。
【００２７】
上記トレース情報管理システム１を用いることにより、例えば問題のある箇所の調査を容易にすることが可能となる。トレース情報６１中に大量の特徴量の情報を格納しておくことで、プログラム実行時の問題と関連する特徴量の変化を見つけ出し、そこから問題のある箇所の抽出、原因分析、及び修正を行うことが可能である。しかし、トレース情報６１の情報量が多くなってくると、トレース情報６１自体からそうした問題のある箇所の検出を行うことが困難になってくる。そこで、まずはスコープ６２毎に特徴量が集約されている属性情報７１を用いることにより、解決したい問題と関連している特徴量を調査する。例えば、ある関数が１００万回実行され、別の関数が１０回実行された場合、トレース情報６１には関数の開始及び終了時点の情報が１００万１０回分格納されるため、２００万２０回分のレコード６２が生成されることになる。これらの全てのレコード６２を確認しながら問題を検出するのは非常に困難である。しかし、属性情報７１を用いて１０回だけ実行されている関数に問題がありそうだということを認識し、当該関数に対応するスコープＩＤ６３を指定すれば、抽出情報８１に含まれるレコード６２は２０個となり、調査対象を大幅に削減することができる。その後、これらの２０個のレコード６２に格納されている特徴量を精査することで、常に問題が発生しているのか、特定のタイミングでの実行時のみ問題が発生しているのかといったことを調査することが可能となり、問題箇所の抽出、原因分析、及び修正につながるより詳細な情報まで容易に到達することが可能となる。
【００２８】
上記のように生成された抽出情報８１は、様々な目的で利用することができるものである。抽出情報８１は、そのままコンピュータのディスプレイ等に出力されてもよいし、他のシステム、例えばソースコード５１を検証するシステム、ソースコード５１の実行状況を可視化するシステム等に提供されてもよい。
【００２９】
図７は、上記トレース情報管理システム１による処理を示すフローチャートである。先ず、取得部１１はトレース情報６１及び属性情報７１を取得する（Ｓ１０１）。次に、指定部１２は属性情報７１から抽出したいスコープに対応するスコープＩＤ６３を指定する（Ｓ１０２）。次に、抽出部１３は指定されたスコープＩＤ６３を含むレコード６２をトレース情報６１から抽出し、抽出情報８１を生成する（Ｓ１０３）。
【００３０】
なお、図２に示すハードウェア構成は一例であり、トレース情報管理システム１は、様々なハードウェア構成により実現することができる。例えば、単体の汎用コンピュータ、
組み込みプロセッサを有する専用装置、ユーザ端末とサーバとがインターネット等を介して接続されたインタラクティブシステム等により、上記取得部１１、指定部１２、及び抽出部１３を実現することができる。
【００３１】
また、図１には、トレース情報管理システム１の最も基本的な機能ブロックである取得部１１、指定部１２、及び抽出部１３を処理の順序で接続した構成が示されているが、実施形態はこれに限らない。例えば、各機能ブロックが協調しながら並列的に動作を行う構成、機能ブロックの順序を入れ替える構成、１つの機能ブロックを複数の機能ブロックに分割する構成、これら３つの構成を組み合わせた構成等であってもよい。
【００３２】
トレース情報管理システム１の機能を実現させるプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、ドライブ装置２９等を通じて提供することができる。また、プログラムは、ネットワークに接続された所定の記憶装置から所定のコンピュータにダウンロードすることにより提供されてもよいし、予めＲＯＭ等に組み込まれて所定の情報処理装置に提供されてもよい。また、プログラムは、上記取得部１１、指定部１２、及び抽出部１３の機能を実現する複数のモジュールから構成されてもよい。
【００３３】
上記トレース情報管理システム１によれば、スコープを特定するスコープＩＤ６３毎にスコープの特徴量を集約した属性情報７１を利用してトレース情報６１の粒度を取得時の粒度から変更することが可能となる。これにより、情報量が膨大なトレース情報６１であってもその全体像の把握が容易となり、トレース情報６１から必要な情報を効率的に抽出することが可能となる。
【００３４】
（第２の実施形態）
以下に、第２の実施形態について図面を参照して説明するが、上記第１の実施形態と同一又は同様の箇所については同一の符号を付してその説明を省略する場合がある。
【００３５】
上記第１の実施形態においては、スコープＩＤ６３に基づいてトレース情報６１の粒度を調整する構成が示された。第２の実施形態においては、更に、複数のスコープ間の呼び出し関係に基づいてトレース情報の粒度を調整する構成を示す。
【００３６】
図８は、第２の実施形態におけるソースコード９１を例示する図である。本例のソースコード９１においては、１行目から７行目に関数ｍａｉｎが定義され、９行目から３００行目に関数ｆｕｎｃＡが定義され、３０２行目から８００行目において関数ｆｕｎｃＢが定義され、８０２行目から１０００行目に関数ｆｕｎｃＣが定義されている。２行目に変数ｉが定義され、３行目から６行目に変数ｉをループ変数としたｆｏｒ文によるループが定義され、３行目にループ回数が３に定義されている。ループ中において、４行目に関数ｆｕｎｃＡが実行されることが定義され、５行目に関数ｆｕｎｃＢが実行されることが定義されている。すなわち、関数ｆｕｎｃＡ及びｆｕｎｃＢはループ中にそれぞれ３回呼び出されて実行される。関数ｆｕｎｃＡ内部の２００行目及び関数ｆｕｎｃＢ内部の５００行目に、関数ｆｕｎｃＣが実行されることが定義されている。関数ｆｕｎｃＡ及び関数ｆｕｎｃＢはそれぞれ３回実行されるので、関数ｆｕｎｃＣは６回実行される。
【００３７】
図９は、第２の実施形態におけるトレース情報１０１を例示する図である。図９に示すトレース情報１０１は、図８に示すソースコード９１を実行した結果取得される情報の例である。トレース情報１０１は、複数のレコード１０２を含む。各レコード１０２は、スコープＩＤ６３、呼び出し関係ＩＤ（呼び出し関係特定情報）１０３、ステータス情報６４、及びタイミング情報６５を含む。第２の実施形態におけるレコード１０２は、呼び出し関係ＩＤ１０３を含んでいる点で上記第１の実施形態におけるレコード６２と相違する。
【００３８】
第２の実施形態における各スコープＩＤ６３（Ａ，Ｂ，Ｃ，Ｄ）は、ソースコード９１内の各関数に対して一意に設定された記号である。「Ａ」は「関数：ｍａｉｎ」に対応し、「Ｂ」は「関数：ｆｕｎｃＡ」に対応し、「Ｃ」は「関数：ｆｕｎｃＢ」に対応し、「Ｄ」は「関数：ｆｕｎｃＣ」に対応している。すなわち、本実施形態においては、関数以外の命令文（ループ文、条件文等）の内部の処理についてはスコープＩＤ６３が割り当てられていない。なお、このようなスコープＩＤ６３の割り当て方は一例であって、これに限られる必要はない。
【００３９】
図９に示す呼び出し関係ＩＤ１０３：「１」〜「５」は、各関数Ａ：ｍａｉｎ，Ｂ：ｆｕｎｃＡ，Ｃ：ｆｕｎｃＢ，Ｄ：ｆｕｎｃＣの呼び出し関係を示している。図１０は、スコープ（関数）間の呼び出し関係を示す木構造情報１１１を例示する図である。本例の木構造情報１１１は、５つのノード１００１〜１００５を含んでいる。各ノード１００１〜１００５に記載された記号Ａ〜Ｄは、それぞれ図９中のスコープＩＤ６３：Ａ〜Ｄに対応している。
【００４０】
木構造情報１１１のノード１００１〜１００３は、関数ｆｕｎｃＡ及び関数ｆｕｎｃＢは関数ｍａｉｎから呼び出されることを示している。ノード１００２，１００４は、関数ｆｕｎｃＣは関数ｆｕｎｃＡから呼び出されることを示している。ノード１００３，１００５は、関数ｆｕｎｃＣは関数ｆｕｎｃＢから呼び出されることを示している。
【００４１】
図９に示す各レコード１０２に含まれる呼び出し関係ＩＤ１０３：「１」〜「５」は、それぞれ図１０に示す木構造情報１１１のノード１００１〜１００５に対応している。すなわち、呼び出し関係ＩＤ１０３：「１」はノード１００１（スコープＩＤ６３：「Ａ」、関数ｍａｉｎ）に対応し、呼び出し関係ＩＤ１０３：「２」はノード１００２（スコープＩＤ６３：「Ｂ」、関数ｆｕｎｃＡ）に対応し、呼び出し関係ＩＤ１０３：「３」はノード１００３（スコープＩＤ６３：「Ｃ」、関数ｆｕｎｃＢ）に対応し、呼び出し関係ＩＤ１０３：「４」はノード１００４（スコープＩＤ６３：「Ｄ」、関数ｆｕｎｃＣ）に対応し、呼び出し関係ＩＤ１０３：「５」はノード１００５（スコープＩＤ６３：「Ｄ」、関数ｆｕｎｃＣ）に対応している。
【００４２】
図９に示すトレース情報１０１において、１行目の「Ａ，１,ｓｔａｒｔ，１」は、１サイクル目に木構造情報１１１におけるノード１００１と対応し、全体で最初に呼び出される関数ｍａｉｎが開始したことを示している。２行目の「Ｂ，２,ｓｔａｒｔ，４０」は、４０サイクル目に木構造情報１１１におけるノード１００２と対応し、関数ｍａｉｎから呼び出される関数ｆｕｎｃＡが開始したことを示している。３行目の「Ｄ，４,ｓｔａｒｔ，１００」は、１００サイクル目に木構造情報１１１におけるノード１００４と対応し、関数ｆｕｎｃＡから呼び出される関数ｆｕｎｃＣが開始したことを示している。４行目の「Ｄ，４,ｅｎｄ，１１０」は、１１０サイクル目に木構造情報１１１におけるノード１００４と対応し、関数ｆｕｎｃＡから呼び出される関数ｆｕｎｃＣが終了したことを示している。５行目の「Ｂ，２,ｅｎｄ，１４０」は、１４０サイクル目に木構造情報１１１におけるノード１００２と対応し、関数ｍａｉｎから呼び出される関数ｆｕｎｃＡが終了したことを示している。以降、同様に各関数の実行順序が示されている。
【００４３】
図１１は、第２の実施形態における第１の属性情報１２１を例示する図である。図１２は、第２の実施形態における第２の属性情報１３１を例示する図である。
【００４４】
図１１に示す第１の属性情報１２１は、スコープＩＤ６３、スコープ名７４、実行回数情報７５、及び平均実行期間情報７６を含む。第１の属性情報１２１に含まれるこれらの情報は、実質的に図５に示す第１の実施形態における属性情報７１と同様である。
【００４５】
図１２に示す第２の属性情報１３１は、呼び出し関係ＩＤ１０３、スコープＩＤ６３、実行回数情報７５、及び平均実行期間情報７６を含む。上述したように、分岐ＩＤ１０３：「１」〜「５」は、それぞれ図１０に示す木構造情報１１１のノード１００１〜１００５に対応している。
【００４６】
本例の第２の属性情報１３１は具体的には次のような状況を示している。１行目の「１，Ａ，１，９９９」は、最初に呼び出される関数ｍａｉｎ（スコープＩＤ６３：「Ａ」）に対応するノード１００１が全期間中１回実行され、その平均実行期間が９９９サイクルであることを示している。２行目の「２，Ｂ，３，１００」は、関数ｍａｉｎから呼び出される関数ｆｕｎｃＡ（スコープＩＤ６３：「Ｂ」）と対応するノード１００２が全期間中３回実行され、１回あたりの平均実行期間が１００サイクルであることを示している。３行目の「３,Ｃ，３，２００」は、関数ｍａｉｎから呼び出される関数ｆｕｎｃＢ（スコープＩＤ６３：「Ｃ」）と対応するノード１００３が全期間中３回実行され、１回あたりの平均実行期間が２００サイクルであることを示している。４行目の「４，Ｄ，３，１０」は、関数ｆｕｎｃＡから呼び出される関数ｆｕｎｃＣ（スコープＩＤ６３：「Ｄ」）に対応するノード１００４が全期間中３回実行され、１回あたりの平均実行期間が１０サイクルであることを示している。５行目の「５，Ｄ，３，２０」は、関数ｆｕｎｃＢから呼び出される関数ｆｕｎｃＣ（スコープＩＤ６３：「Ｄ」）に対応するノード１００５が全期間中３回実行され、１回あたりの平均実行期間が２０サイクルであることを示している。
【００４７】
上記第２の属性情報１３１において、４行目と５行目とで平均実行期間情報７６の値が異なっていることから、同じ関数ｆｕｎｃＣであっても呼び出し元（関数ｆｕｎｃＡ又は関数ｆｕｎｃＢ）に応じてその挙動が変化することが分かる。このような判断は、第１の属性情報１２１の４行目「Ｄ，ｆｕｎｃＣ，６，１５」に示される情報のみによってはなされない。
【００４８】
第１の属性情報１２１及び第２の属性情報１３１に格納する情報は、スコープ内やノード１００１〜１００５内の特徴量を集約した情報に限られない。あるスコープから別のスコープを呼び出した場合等には、複数のスコープやノード１００１〜１００５が重複するが、このような場合には、重複した分の情報を無視したり、呼び出し関係の深さや関係性を指定することで対象となるスコープやノード以外の情報を無視したりすることができる。例えば、図１５のように関数ｆｕｎｃＡから関数ｆｕｎｃＢが呼び出される場合を考える。単純に開始サイクルから終了サイクルまでの数値を採用すると、図１５に示す例では、関数ｆｕｎｃＡは１００サイクル目から６００サイクル目まで実行されているので、実行サイクル数は５００サイクルとなる。しかし、関数ｆｕｎｃＢが呼び出されている時間には関数ｆｕｎｃＡ自体の処理は行われないので、この時間を削除したい場合がある。図１５に示す例では、関数ｆｕｎｃＢは２００サイクル目から４００サイクル目まで実行されているので、実行サイクル数は２００サイクルとなる。関数ｆｕｎｃＡの実際の実行サイクル数を求めるためには、関数ｆｕｎｃＢの実行サイクル数を差し引く必要があるので、関数ｆｕｎｃＡの実際の実行サイクル数は３００サイクルとなる。このように、特徴量の情報を単純に集約するだけでなく、必要ない情報を無視してもよい。また、第１の属性情報１２１及び第２の属性情報１３１は、対象となるスコープやノードがどのファイルと対応するのか、何行目と対応するのかといった情報を含んでもよい。さらに、トレース情報１０１の各レコード１０２に格納されている特徴量の情報と直接的に関係がない情報であっても、スコープＩＤ６３や呼び出し関係ＩＤ１０３と紐付けることが可能な情報であれば、それらの情報を第１の属性情報１２１及び第２の属性情報１３１に格納してもよい。例えば、木構造の深さや、ノードの数といった情報を第２の属性情報１３１に格納してもよい。このように、何らかの特徴量の情報がスコープＩＤ６３及び呼び出し関係ＩＤ１０３と紐付けられることが可能であれば、第１の属性情報１２１及び第２の属性情報１３１に格納される特徴量の情報の内容は問わない。
【００４９】
本実施形態における指定部１２は、第１の属性情報１２１及び第２の属性情報１３１の両方を用いて、抽出部１３による抽出処理に用いられる指定情報を生成する。図１３は、第１の属性情報１２１から指定された情報に基づいて生成された第１の抽出情報１４１を例示する図である。図１４は、第１の属性情報１２１及び第２の属性情報１３１から指定された情報に基づいて生成された第２の抽出情報１５１を例示する図である。第１の抽出情報１４１及び第２の抽出情報１５１の各レコード１０２は、スコープＩＤ６３、呼び出し関係ＩＤ１０３、ステータス情報６４、及びタイミング情報６５を含む。
【００５０】
図１３に示す第１の抽出情報１４１は、図１１に示す第１の属性情報１２１からスコープＩＤ６３：「Ｄ」(関数ｆｕｎｃＣ）を指定した場合の例である。第１の抽出情報１４１は、図９に示すトレース情報１０１からスコープＩＤ６３：「Ｄ」を含むレコード１０２を抽出することにより生成された情報である。図９に示すトレース情報１０１に含まれるレコード１０２の数は２６であったが、図１３に示す第１の抽出情報１４１に含まれるレコード１０２は１２である。このように、抽出部１３の処理により、レコード１０２の数を半分以下に絞り込むことができている。
【００５１】
図１４に示す第２の抽出情報１５１は、図１２に示す第２の属性情報１３１から呼び出し関係ＩＤ１０３：「５」を指定した場合の例である。第２の抽出情報１５１は、図９に示すトレース情報１０１から、呼び出し関係ＩＤ１０３：「５」を含むレコード１０２を抽出することにより生成された情報である。図９に示すトレース情報１０１に含まれるレコード１０２の数は２６であったが、図１３に示す第１の抽出情報１４１に含まれるレコード１０２の数は１２である。このように、抽出部１３の処理により、レコード１０２の数を半分以下に絞り込むことができている。
【００５２】
上記本実施形態におけるトレース情報管理システム１を用いることにより、例えば問題のある箇所の調査をさらに容易にすることが可能となる。例えば、ある関数が１００万回実行され、この関数は関数Ａ、関数Ｂ、関数Ｃの３つの関数から呼び出され、それぞれ８０万回、１９万９９９０回、１０回呼び出しが行われた場合を考える。この場合、トレース情報１０１には関数の開始及び終了時点の情報が１００万回分格納され、これらは全てが同じ関数の実行の結果を示す情報となる。そのため、第１の抽出情報１４１には２００万個のレコード６２が残り、情報の絞込みが不十分となる。しかし、呼び出し関係ＩＤ１０３を用いることで、関数の呼び出し元によって１００万回の実行を３種類に分類することができる。このように呼び出し関係ＩＤ１０３毎に集約された属性情報（第２の属性情報１３１）を用いて、例えば関数Ｃが呼び出し元になっている１０回の実行に問題がありそうだということを認識し、当該関数に対応する呼び出し関係ＩＤ１０３を指定すれば、レコード１０２の数が２０に絞られた抽出情報（第２の抽出情報１５１）を生成することができる。これにより調査対象を大幅に削減することができる。その後、これらの２０個のレコード１０２に格納されている特徴量を精査することで、常に問題が発生しているのか、特定のタイミングでの実行時のみ問題が発生しているのかといったことを調査することが可能となり、問題箇所の抽出、原因分析、修正につながるより詳細な情報まで容易に到達することが可能となる。
【００５３】
このように生成された第１の抽出情報１４１及び第２の抽出情報１５１は、上記第１の実施形態における抽出情報８１と同様に、様々な目的で利用することができるものである。
【００５４】
上記のように、スコープを特定する情報（スコープＩＤ６３）に基づいて作成された第１の属性情報１２１だけでなく、木構造情報１１１における呼び出し位置を特定する情報（呼び出し関係ＩＤ１０３）に基づいて作成された第２の属性情報１３１も利用して、トレース情報１０１から所望の情報（レコード１０２）を抽出することにより、トレース情報１０１の粒度をより効果的に調整することが可能となる。
【００５５】
このように、様々な情報を基準として作成された属性情報を利用することにより、トレース情報（ソースコード）の特徴をあらゆる視点から捉えることが可能となり、粒度の調整の自由度を向上させることが可能となる。
【００５６】
以上、本発明の実施形態を説明したが、この実施形態は例として提示したものであり、発明の範囲を限定することを意図するものではない。この新規な実施形態はその他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。この実施形態及びその変形は発明の範囲及び要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５７】
１  トレース情報管理システム
１１  取得部
１２  指定部
１３  抽出部
２１  ＣＰＵ
２２  ＲＯＭ
２３  ＲＡＭ
２４  入力デバイス
２５  出力デバイス
２６  通信ＩＦ
２７  バス
２８  ストレージ
２９  ディスク装置
５１，９１  ソースコード
６１，１０１  トレース情報
６２，１０２  レコード
６３  スコープＩＤ
６４  ステータス情報
６５  タイミング情報
７１  属性情報
７４  スコープ名
７５  実行回数情報
７６  平均実行期間情報
８１  抽出情報
１０３  呼び出し関係ＩＤ
１１１  木構造情報
１２１  第１の属性情報
１３１  第２の属性情報
１４１  第１の抽出情報
１５１  第２の抽出情報
１６１  表示画像
１００１〜１００５  ノード
２００１〜２００５  スコープオブジェクト
【図１】
0006437396.tif 000002
【図２】
0006437396.tif 000003
【図３】
0006437396.tif 000004
【図４】
0006437396.tif 000005
【図５】
0006437396.tif 000006
【図６】
0006437396.tif 000007
【図７】
0006437396.tif 000008
【図８】
0006437396.tif 000009
【図９】
0006437396.tif 000010
【図１０】
0006437396.tif 000011
【図１１】
0006437396.tif 000012
【図１２】
0006437396.tif 000013
【図１３】
0006437396.tif 000014
【図１４】
0006437396.tif 000015
【図１５】
0006437396.tif 000016