(57)【要約】【課題】１つのソースコードから生成された複数のコールツリー間の関連性を把握できるようにする。【解決手段】コールツリー生成部１０２は動作情報に基づいて１つのソースコードから第１のコールツリーと第２のコールツリーとを生成する。ノード情報生成部１０３はスコープ対応関係情報、第１のコールツリー、及び第２のコールツリーに基づいて、第１のコールツリーの構成要素である第１のノードと、第２のコールツリーの構成要素である第２のノードとの対応関係を示すノード対応関係情報を生成する。【選択図】図３
2017054380.tif 000002
【特許請求の範囲】
【請求項１】
ソースコード内で設定された複数のスコープの実行順序を示す動作情報と、前記スコープ間の包含関係を示すスコープ対応関係情報とを取得する取得部と、
前記動作情報に基づいて、１つの前記ソースコードから、１つ以上の第１のスコープを対象とする第１のコールツリーと、前記第１のスコープとは異なる１つ以上の第２のスコープを対象とする第２のコールツリーとを生成するコールツリー生成部と、
前記スコープ対応関係情報、前記第１のコールツリー、及び前記第２のコールツリーに基づいて、前記第１のコールツリーの構成要素であって前記第１のスコープのそれぞれに対応する第１のノードと、前記第２のコールツリーの構成要素であって前記第２のスコープのそれぞれに対応する第２のノードとの対応関係を示すノード対応関係情報を生成するノード情報生成部と、
を備えるプログラム情報生成システム。
【請求項２】
前記第１のスコープと前記第２のスコープとは、互いに階層が異なっている、
請求項１に記載のプログラム情報生成システム。
【請求項３】
前記第１のスコープは、自らを包含するスコープを有しないスコープであり、
前記第２のスコープは、自らを包含するスコープを有するスコープである、
請求項１に記載のプログラム情報生成システム。
【請求項４】
前記ノード対応関係情報は、前記第１のスコープに対応する前記第１のノードと、前記第１のスコープに包含される前記第２のスコープに対応する前記第２のノードとを対応付ける、
請求項３に記載のプログラム情報生成システム。
【請求項５】
前記第１のスコープは、関数単位で区切られたスコープである、
請求項１に記載のプログラム情報生成システム。
【請求項６】
前記第２のスコープは、前記関数内におけるループ処理又は分岐処理で区切られたスコープである、
請求項５に記載のプログラム情報生成システム。
【請求項７】
前記ノード情報生成部は、前記第１のノードに対応する前記第２のノードが複数存在する場合、所定の条件に適合する前記第２のノードのみが前記第１のノードに対応付けられるように前記ノード対応関係情報を生成する、
請求項１に記載のプログラム情報生成システム。
【請求項８】
前記所定の条件は、前記第２のノードに対応する複数の前記第２のスコープの中で最も動作期間が長いことである、
請求項７に記載のプログラム情報生成システム。
【請求項９】
前記ノード対応関係情報を可視化する表示部、
を更に備える請求項１に記載のプログラム情報生成システム。
【請求項１０】
ソースコード内で設定された複数のスコープの実行順序を示す動作情報と、前記スコープ間の包含関係を示すスコープ対応関係情報とを取得するステップと、
前記動作情報に基づいて、１つの前記ソースコードから、１つ以上の第１のスコープを対象とする第１のコールツリーと、前記第１のスコープとは異なる１つ以上の第２のスコープを対象とする第２のコールツリーとを生成するステップと、
前記スコープ対応関係情報、前記第１のコールツリー、及び前記第２のコールツリーに基づいて、前記第１のコールツリーの構成要素であって前記第１のスコープのそれぞれに対応する第１のノードと、前記第２のコールツリーの構成要素であって前記第２のスコープのそれぞれに対応する第２のノードとの対応関係を示すノード対応関係情報を生成するステップと、
を含むプログラム情報生成方法。
【請求項１１】
コンピュータに、
ソースコード内で設定された複数のスコープの実行順序を示す動作情報と、前記スコープ間の包含関係を示すスコープ対応関係情報とを取得する処理と、
前記動作情報に基づいて、１つの前記ソースコードから、１つ以上の第１のスコープを対象とする第１のコールツリーと、前記第１のスコープとは異なる１つ以上の第２のスコープを対象とする第２のコールツリーとを生成する処理と、
前記スコープ対応関係情報、前記第１のコールツリー、及び前記第２のコールツリーに基づいて、前記第１のコールツリーの構成要素であって前記第１のスコープのそれぞれに対応する第１のノードと、前記第２のコールツリーの構成要素であって前記第２のスコープのそれぞれに対応する第２のノードとの対応関係を示すノード対応関係情報を生成する処理と、
を実行させるプログラム情報生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、プログラム情報生成システム、方法、及びプログラムに関する。
【背景技術】
【０００２】
プログラムの開発、検査等を行うために、プログラムの実行状況を示す情報を生成するシステムが利用される。例えば、複数のプログラムの動作情報（トレース）から各動作情報に対応するコールツリー（木構造）をそれぞれ生成し、生成された複数のコールツリーの中から共通するコールツリーを同定するシステムがある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第８２６６５９５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
１つのプログラム（ソースコード）の動作情報から複数のコールツリーを生成し、これらのコールツリー間の関連性を調査する場合がある。このような調査は、１つのソースコードから１つのコールツリーを生成するシステムによっては実現することができない。
【０００５】
そこで、以下の実施形態では、１つのソースコードから生成された複数のコールツリー間の関連性を把握できるようにすることを目的とする。
【課題を解決するための手段】
【０００６】
実施形態のプログラム情報生成システムは、取得部と、コールツリー生成部と、ノード情報生成部とを備える。取得部は、ソースコード内で設定された複数のスコープの実行順序を示す動作情報と、スコープ間の包含関係を示すスコープ対応関係情報とを取得する。コールツリー生成部は、動作情報に基づいて、１つのソースコードから、１つ以上の第１のスコープを対象とする第１のコールツリーと、第１のスコープとは異なる１つ以上の第２のスコープを対象とする第２のコールツリーとを生成する。ノード情報生成部は、スコープ対応関係情報、第１のコールツリー、及び第２のコールツリーに基づいて、第１のコールツリーの構成要素であって第１のスコープのそれぞれに対応する第１のノードと、第２のコールツリーの構成要素であって第２のスコープのそれぞれに対応する第２のノードとの対応関係を示すノード対応関係情報を生成する。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態におけるプログラム情報生成システムのハードウェア構成を例示する図。
【図２】第１の実施形態における情報処理端末及びサーバの内部構成を例示する図。
【図３】第１の実施形態におけるプログラム情報生成システムの機能的構成を例示する図。
【図４】第１の実施形態におけるプログラム情報生成システムによる処理の流れを例示するフローチャート。
【図５】第１の実施形態におけるソースコードとスコープとの関係を例示する図。
【図６】第１の実施形態における動作情報を例示する図。
【図７】第１の実施形態におけるスコープ対応関係情報を例示する図。
【図８】第１の実施形態における上位コールツリーを例示する図。
【図９】第１の実施形態における下位コールツリーを例示する図。
【図１０】第１の実施形態における上位コールツリー又は下位コールツリーの生成手順を例示するフローチャート。
【図１１】第１の実施形態の第１の例におけるノード対応関係情報を例示する図。
【図１２】第１の実施形態におけるノード対応関係情報の生成手順を例示するフローチャート。
【図１３】第１の実施形態の第２の例におけるノード対応関係情報を例示する図。
【図１４】第１の実施形態の第３の例におけるノード対応関係情報を例示する図。
【図１５】第１の実施形態の第４の例におけるノード対応関係情報を例示する図。
【図１６】第２の実施形態におけるプログラム情報生成システムにより生成される、第１の上位コールツリー、第２の上位コールツリー、スコープ対応関係情報、及びノード対応関係情報を例示する図。
【図１７】第３の実施形態における上位コールツリー又は下位コールツリーの生成手順を例示するフローチャート。
【図１８】第３の実施形態において生成される上位コールツリーを例示する図。
【発明を実施するための形態】
【０００８】
（第１の実施形態）
図１は、プログラム情報生成システム１のハードウェア構成を例示する図である。本例のプログラム情報生成システム１は、情報処理端末１１、サーバ１２、及びネットワーク１３を含む。情報処理端末１１は、ユーザが使用するＰＣ（Personal  Computer）、タブレット、スマートフォン等であり得る。サーバ１２は、プログラム情報生成システム１の管理者が管理するサーバコンピュータ等であり得る。情報処理端末１１とサーバ１２とは、インターネット、ＬＡＮ(Local  Area  Network）等のネットワーク１３を介して接続されている。なお、同図においては、情報処理端末１１及びサーバ１２がそれぞれ１つずつ記載されているが、それらの両方又は一方が複数存在してもよい。
【０００９】
図２は、情報処理端末１１及びサーバ１２の内部構成を例示する図である。情報処理端末１１及びサーバ１２は、ＣＰＵ（Central  Processing  Unit）２１、ＲＯＭ（Read  Only  Memory）２２、ＲＡＭ（Random  Access  Memory）２３、入力デバイス２４、出力デバイス２５、通信Ｉ／Ｆ（Interface）２６、及びバス２７を含む。ＣＰＵ２１は、ＲＯＭ２２等に記憶された制御プログラムに従ってＲＡＭ２３をワーキングエリアとして所定の演算処理を行う。入力デバイス２４は、外部から情報を入力するためのデバイスであり、例えばキーボード、マウス、タッチパネル等である。出力デバイス２５は、内部で生成した情報を外部に出力するためのデバイスであり、例えばディスプレイ、プリンタ等である。通信Ｉ／Ｆ２６は、ネットワークを介して外部の装置との間で情報の送受信を可能にするデバイスである。
【００１０】
図３は、第１の実施形態におけるプログラム情報生成システム１の機能的構成を例示する図である。プログラム情報生成システム１は、取得部１０１、コールツリー生成部１０２、及びノード情報生成部１０３を含む。
【００１１】
取得部１０１は、動作情報及びスコープ対応関係情報を取得する。動作情報は、検査対象となるソースコード内で設定された複数のスコープの実行順序を示す情報である。スコープとは、ソースコードによる処理上の連続区間を示す範囲であり、例えば関数・関数内のループ処理・関数内の分岐処理等に対応する範囲、関数内においてループ処理及び分岐処理に含まれない連続区間等に対応する範囲等である。スコープは、これらに限られるものではなく、ソースコードの形態に合わせて適宜設定され得るものである。例えば、ソースコード内の連続区間を示すファイル名、行番号等によりスコープを設定してもよい。スコープ対応関係情報は、複数のスコープ間の包含関係（親子関係、呼び出し関係）を示す情報である。取得部１０１は、ＣＰＵ２１、ＲＯＭ２２又はＲＡＭ２３に記憶された制御プログラム、ロジックＩＣ（Integrated  Circuit）、ワーキングエリアとして使用されるＲＡＭ２３等の協働により構成される。ここでの「取得」には、外部からデータを受信すること、及び内部でデータを生成することが含まれる。すなわち、動作情報及びスコープ対応関係情報は、プログラム情報生成システム１以外のシステム（装置）によって生成されてもよいし、プログラム情報生成システム１内で生成されてもよい。動作情報及びスコープ対応関係情報の生成方法は特に限定されるものではなく、動作情報及びスコープ対応関係情報は公知又は新規の技術を用いて適宜生成されればよい。
【００１２】
コールツリー生成部１０２は、動作情報に基づいて、１つのソースコードから異なる複数のコールツリーを生成する。コールツリーとは、１つ以上のスコープ間の包含関係を示す情報であり、例えば、各スコープに一意に対応する複数のノード、ノード間を結ぶ有向線分であるエッジ等から構成される有向グラフである。本実施形態におけるコールツリー生成部１０２は、上位コールツリー（第１のコールツリー）及び下位コールツリー（第２のコールツリー）を生成する。上位コールツリーとは、自らを包含するスコープを有しないスコープ（上位スコープ：第１のスコープ）に対応するノード（上位ノード：第１のノード）を構成要素とし、複数の上位スコープ間の包含関係を示すコールツリーである。下位コールツリーとは、自らを包含するスコープを有するスコープ（下位スコープ：第２のスコープ）に対応するノード（下位ノード：第２のノード）を構成要素とし、複数の下位スコープ間の包含関係を示すコールツリーである。コールツリー生成部１０２は、ＣＰＵ２１、制御プログラム、ロジックＩＣ、ＲＡＭ２３等の協働により構成される。
【００１３】
ノード情報生成部１０３は、スコープ対応関係情報、上位コールツリー、及び下位コールツリーに基づいて、上位ノードと下位ノードとの対応関係を示すノード対応関係情報を生成する。すなわち、ノード対応関係情報は、１つのソースコードから生成された上位コールツリー及び下位コールツリー間の関連性を示す。ノード情報生成部１０３は、ＣＰＵ２１、制御プログラム、ロジックＩＣ、ＲＡＭ２３等の協働により構成される。
【００１４】
図４は、プログラム情報生成システム１による処理の流れを例示するフローチャートである。先ず、取得部１０１は、動作情報及びスコープ対応関係情報を取得する（Ｓ１０１）。コールツリー生成部１０２は、動作情報に基づいて上位コールツリー及び下位コールツリーを生成する（Ｓ１０２）。ノード情報生成部１０３は、スコープ対応関係情報、上位コールツリー、及び下位コールツリーに基づいてノード対応関係情報を生成する（Ｓ１０３）。
【００１５】
図５は、ソースコード２０１とスコープ（上位スコープ２１１及び下位スコープ２１２）との関係を例示する図である。本例のソースコード２０１は、４つの関数Ｆｕｎｃ＿Ａ、Ｆｕｎｃ＿Ｂ、Ｆｕｎｃ＿Ｃ、及びＦｕｎｃ＿Ｄを含む。関数Ｆｕｎｃ＿Ａは、分岐処理ｉｆ｛Ｆｕｎｃ＿Ｂ；｝及びループ処理ｅｌｓｅ｛Ｆｕｎｃ＿Ｃ；｝を含む。関数Ｆｕｎｃ＿Ｂは、分岐処理ｉｆ｛Ｆｕｎｃ＿Ａ；｝を含む。
【００１６】
図５に示す例では、上位スコープ２１１として、スコープＳｃｏｐｅ＿Ａ，Ｓｃｏｐｅ＿Ｂ，Ｓｃｏｐｅ＿Ｃ，Ｓｃｏｐｅ＿Ｄが設定されている。スコープＳｃｏｐｅ＿Ａは、関数Ｆｕｎｃ＿Ａに対応している。スコープＳｃｏｐｅ＿Ｂは、関数Ｆｕｎｃ＿Ｂに対応している。スコープＳｃｏｐｅ＿Ｃは、関数Ｆｕｎｃ＿Ｃに対応している。スコープＳｃｏｐｅ＿Ｄは、関数Ｆｕｎｃ＿Ｄに対応している。これらの上位スコープ２１１は、自らを包含するスコープを有していない。
【００１７】
下位スコープ２１２として、スコープＳｃｏｐｅ＿ａ２，Ｓｃｏｐｅ＿ａ３，Ｓｃｏｐｅ＿ｂ２，Ｓｃｏｐｅ＿ａ１，Ｓｃｏｐｅ＿ｂ１，Ｓｃｏｐｅ＿ｃ１，Ｓｃｏｐｅ＿ｄ１が設定されている。スコープＳｃｏｐｅ＿ａ２は、関数Ｆｕｎｃ＿Ａ内において分岐処理ｉｆ｛Ｆｕｎｃ＿Ｂ；｝に対応している。スコープＳｃｏｐｅ＿ａ３は、関数Ｆｕｎｃ＿Ａ内のループ処理ｅｌｓｅ｛Ｆｕｎｃ＿Ｃ；｝に対応している。スコープＳｃｏｐｅ＿ｂ２は、関数Ｆｕｎｃ＿Ｂ内の分岐処理ｉｆ｛Ｆｕｎｃ＿Ａ；｝に対応している。スコープＳｃｏｐｅ＿ａ１は、関数Ｆｕｎｃ＿Ａ内の分岐処理及びループ処理を含まない連続区間に対応している。スコープＳｃｏｐｅ＿ｂ１は、関数Ｆｕｎｃ＿Ｂ内の分岐処理を含まない連続区間に対応している。スコープＳｃｏｐｅ＿ｃ１は、関数Ｆｕｎｃ＿Ｃ内の分岐処理を含まない連続区間に対応している。スコープＳｃｏｐｅ＿ｄ１は、関数Ｆｕｎｃ＿Ｄ内の分岐処理を含まない連続区間に対応している。これらの下位スコープ２１２は、自らを包含するスコープ（上位スコープを含む）を有している。
【００１８】
図６は、動作情報２２１を例示する図である。本例の動作情報２２１は、上記ソースコード２０１の上位スコープ２１１から抜粋された一部のスコープ（Ｓｃｏｐｅ＿Ａ，Ｓｃｏｐｅ＿Ｂ，Ｓｃｏｐｅ＿Ｃ）に対応している。本例の動作情報２２１は、スコープＩＤ２２５、ステータス情報２２６、及び期間情報２２７を含む。
【００１９】
スコープＩＤ２２５は、各スコープに対して一意に対応する情報であり、本例ではスコープ名を示すテキストである。スコープＩＤ２２５は、これに限られるものではなく、例えば各スコープに一意に対応する数値、記号等であってもよい。ステータス情報２２６は、スコープが開始状態にあるか終了状態にあるかを示す情報であり、本例では開始状態を「ＥＮＴＥＲ」、終了状態を「ＬＥＡＶＥ」というテキストで表現している。ステータス情報２２６は、これに限られるものではなく、例えば各状態に対応する数値、記号等であってもよく、他の状態、特徴量等を示す情報を含んでもよい。期間情報２２７は、各スコープが開始状態又は終了状態になった順序を示す情報であり、本例では昇順に付される数値である。期間情報２２７は、これに限られるものではなく、例えばタイムスタンプ等であってもよい。
【００２０】
上記動作情報２２１により、各スコープの開始タイミング及び終了タイミングに基づく動作期間を特定することができ、それらに基づいて各スコープの包含関係を特定することができる。例えば、図６に示す動作情報２２１において、Ｓｃｏｐｅ＿Ａの動作期間はタイミング１→８及びタイミング３→４であり、Ｓｃｏｐｅ＿Ｂの動作期間はタイミング２→５であることが示されている。これらの情報から、Ｓｃｏｐｅ＿Ｂは、１回目のＳｃｏｐｅ＿Ａに包含され、２回目のＳｃｏｐｅ＿Ａを包含することがわかる。換言すれば、関数Ｆｕｎｃ＿Ｂは１回目の関数Ｆｕｎｃ＿Ａから呼び出されて実行され、２回目の関数Ｆｕｎｃ＿Ａは関数Ｆｕｎｃ＿Ｂから呼び出されて実行されることがわかる。
【００２１】
なお、上記例では上位スコープ２１１についてのみ動作情報２２１を示したが、下位スコープ２１２についての動作情報もこれと同様に構成することができる。このような動作情報の生成方法は特に限定されるべきものではなく、上位スコープ２１１及び下位スコープ２１２についての各動作情報は、周知又は新規な技術を用いて適宜生成されればよい。
【００２２】
図７は、スコープ対応関係情報２３１を例示する図である。スコープ対応関係情報２３１は、上位スコープ２１１と下位スコープ２１２との包含関係を示している。本例では、下位スコープＳｃｏｐｅ＿ａ１、Ｓｃｏｐｅ＿ａ２、及びＳｃｏｐｅ＿ａ３が上位スコープＳｃｏｐｅ＿Ａ（親スコープ）の子スコープであり、下位スコープＳｃｏｐｅ＿ｂ１及びＳｃｏｐｅ＿ｂ２が上位スコープＳｃｏｐｅ＿Ｂ（親スコープ）の子スコープであり、下位スコープＳｃｏｐｅ＿ｃ１が上位スコープＳｃｏｐｅ＿Ｃ（親スコープ）の子スコープであり、下位スコープＳｃｏｐｅ＿ｄ１が上位スコープＳｃｏｐｅ＿Ｄ（親スコープ）の子スコープであることが示されている。
【００２３】
なお、上記例では、各スコープを特定する情報として「Ｓｃｏｐｅ＿Ａ」等のスコープ名を示すテキストが用いられているが、スコープ対応関係情報２３１の構成はこれに限られるものではない。例えば、各スコープに一意に対応する数値、記号等を用いてもよい。また、スコープ対応関係情報２３１の構成及び生成方法は、上記に限定されるべきものではなく、スコープ対応関係情報２３１は周知又は新規な技術を用いて適宜生成されればよい。
【００２４】
図８は、上位コールツリー２４１を例示する図である。本例の上位コールツリー２４１は、上位スコープ２１１のみを対象とする動作情報２２１に基づいて生成される。上位コールツリー２４１は、各上位スコープ２１１に一意に対応する上位ノード２４５と、上位ノード２４５間を結ぶ有向線分であるエッジ２４６とを含む。エッジ２４６の始端側に接続されたノード（例えば「Ａ１」）は親ノードであり、終端側に接続されたノード（例えば「Ｂ」及び「Ｃ」）は子ノードである。例えば、本例では、上位スコープ２１１：Ｓｃｏｐｅ＿Ａの動作期間（１→８）に上位スコープ２１１：Ｓｃｏｐｅ＿Ｂが開始（２）しているので、上位スコープ２１１：Ｓｃｏｐｅ＿Ａに対応する上位ノード２４５：「Ａ１」が親ノードとなり、上位スコープ２１１：Ｓｃｏｐｅ＿Ｂに対応する上位ノード２４５：「Ｂ」が子ノードとなる。本例では、上位スコープ２１１：Ｓｃｏｐｅ＿Ａが２回動作している。上位ノード２４５：「Ａ１」は１回目に実行される上位スコープ２１１：Ｓｃｏｐｅ＿Ａ（動作期間１→８）に対応し、上位ノード２４５：「Ａ２」は２回目に実行される上位スコープ２１１：Ｓｃｏｐｅ＿Ａ（動作時間３→４）に対応している。
【００２５】
図９は、下位コールツリー２４２を例示する図である。本例の下位コールツリー２４２は、下位スコープ２１２のみを対象とする動作情報２２２に基づいて生成される。動作情報２２２は、図６及び図８に示す、上位スコープ２１１のみを対象とする動作情報２２１と同様の方法で生成することができる。下位コールツリー２４２は、各下位スコープ２１２に一意に対応する下位ノード２４７と、下位ノード２４７間を結ぶ有向線分であるエッジ２４６とを含む。図８に示す上位コールツリー２４１と同様に、エッジ２４６の始端側に接続されたノード（例えば「ａ１＿１」）は親ノードであり、終端側に接続されたノード（例えば「ａ２＿１」及び「ｃ１」）は子ノードである。例えば、本例では、下位スコープ２１２：Ｓｃｏｐｅ＿ａ１の動作期間（１→１２）に下位スコープ２１２：Ｓｃｏｐｅ＿ａ２が開始（２）しているので、下位スコープ２１２：Ｓｃｏｐｅ＿ａ１に対応する下位ノード２４７：「ａ１＿１」が親ノードとなり、下位スコープ２１２：Ｓｃｏｐｅ＿ａ２に対応する下位ノード２４７：「ａ２＿１」が子ノードとなる。本例では、下位スコープ２１２：Ｓｃｏｐｅ＿ａ１が２回動作している。下位ノード２４７：「ａ１＿１」は１回目に実行される下位スコープ２１２：Ｓｃｏｐｅ＿ａ１（動作期間１→１２）に対応し、下位ノード２４７：「ａ１＿２」は２回目に実行される下位スコープ２１２：Ｓｃｏｐｅ＿ａ１（動作時間５→６）に対応している。
【００２６】
なお、上位コールツリー２４１及び下位コールツリー２４２は、上記に限られるものではなく、周知又は新規な技術を用いて適宜生成され得るものである。図８及び図９においては、異なる２つの動作情報（上位スコープ２１１のみを対象とする動作情報２２１及び下位スコープ２１２のみを対象とする動作情報２２２）に基づいて上位コールツリー２４１及び下位コールツリー２４２を生成する例が示されている。しかし、上位スコープ２１１及び下位スコープ２１２の両方を対象とする（両スコープ２１１，２１２のステータスを示す情報が混在する）１つの動作情報に基づいて上位コールツリー２４１及び下位コールツリー２４２を生成することも可能である。
【００２７】
図１０は、上位コールツリー２４１又は下位コールツリー２４２の生成手順を例示するフローチャートである。本例においては、コールツリー生成部１０２は、動作情報２２１，２２２から各スコープ２１１，２１２の動作を順に読み取り、各スコープ２１１，２１２間の包含関係を抽出することにより、コールツリー２４１，２４２を生成する。
【００２８】
コールツリー生成部１０２は、動作情報２２１，２２２に基づいて最初に動作するスコープ２１１，２１２のスコープＩＤ２２５及びステータス情報２２６を取得する（Ｓ２０１）。スコープＩＤ２２５及びステータス情報２２６が取得されなかった場合（Ｓ２０２：ＮＯ）、このルーチンを終了し、取得された場合（Ｓ２０２：ＹＥＳ）、ルートノードが存在するか否かが判定される（Ｓ２０３）。ルートノードとは、コールツリー２４１，２４２を生成していく際に基点となるノードである。
【００２９】
ステップＳ２０３において、ルートノードが存在しない場合（Ｓ２０３：ＮＯ）、取得されたステータス情報２２６が「ＥＮＴＥＲ」であるか否かが判定される（Ｓ２０４）。取得されたステータス情報２２６が「ＥＮＴＥＲ」である場合（Ｓ２０４：ＹＥＳ）、取得されたスコープＩＤ２２５が示すスコープ２１１，２１２に対応するノードをルートノードとして生成すると共に、生成されたノードをカレントノードに設定する（Ｓ２０５）。カレントノードとは、新たに子ノードを追加する際に親ノードとなるノードである。その後、動作情報２２１，２２２から、次に動作するスコープ２１１，２１２のスコープＩＤ２２５及びステータス情報２２６が取得される（Ｓ２０６）。ステップＳ２０４において、取得されたステータス情報２２６が「ＥＮＴＥＲ」でない（「ＬＥＡＶＥ」である）場合（Ｓ２０４：ＮＯ）にも、ステップＳ２０６が実行される。
【００３０】
ステップＳ２０３において、ルートノードが存在する場合（Ｓ２０３：ＹＥＳ）、新たに取得されたステータス情報２２６が「ＥＮＴＥＲ」であるか否かが判定される（Ｓ２０７）。新たに取得されたステータス情報２２６が「ＥＮＴＥＲ」である場合（Ｓ２０７：ＹＥＳ）、新たに取得されたスコープＩＤ２２５が示すスコープ２１１，２１２に対応するノードを、カレントノードに設定されているノード（親ノード）に対する子ノードとして追加する（Ｓ２０９）。その後、追加された子ノードをカレントノードに設定した後（Ｓ２１０）、次に動作するスコープ２１１，２１２のスコープＩＤ２２５及びステータス情報２２６を取得する（Ｓ２０６）。ステップＳ２０７において、ステータス情報２２６が「ＥＮＴＥＲ」でない（「ＬＥＡＶＥ」である）場合（Ｓ２０７：ＮＯ）、カレントノードの親ノードを新たなカレントノードに再設定した後（Ｓ２０８）、ステップＳ２０６を実行する。
【００３１】
上記生成手順を、上位スコープ２１１のみを対象とする動作情報２２１及び下位スコープ２１２のみを対象とする動作情報２２２に対してそれぞれ行うことにより、上位コールツリー２４１及び下位コールツリー２４２を生成することができる。上位スコープ２１１の実行順序と下位スコープ２１２の実行順序とが混在した動作情報を用いる場合には、次に動作するスコープ２１１，２１２のスコープＩＤ２２５及びステータス情報２２６を取得するステップＳ２０６において、対象となる階層のスコープ（例えば上位スコープ２１１）の情報のみを取得し、対象外の階層のスコープ（例えば下位スコープ２１２）の情報を取得しなければよい。
【００３２】
ノード情報生成部１０３は、上記のように生成された上位コールツリー２４１及び下位コールツリー２４２、及び上述したスコープ対応関係情報２３１に基づいて、上位ノード２４５と下位ノード２４７との対応関係を示すノード対応関係情報を生成する。
【００３３】
図１１は、第１の実施形態の第１の例におけるノード対応関係情報２５１Ａを例示する図である。本例のノード対応関係情報２５１Ａは、上位ノード表示部２５５及び下位ノード表示部２５６を含む表形式の情報である。上位ノード表示部２５５には、上位コールツリー２４１を構成する上位ノード２４５を特定する情報（Ａ１，Ｂ，Ｃ，Ａ２）が表示されている。下位ノード表示部２５６には、下位コールツリー２４２を構成する下位ノード２４７を特定する情報（ａ１＿１，ａ１＿２，ｂ１，ｂ２，ｃ１，ａ２＿１）が表示されている。本例のノード対応関係情報２５１Ａにおいては、互いに対応関係を有する上位ノード２４５と下位ノード２４７とが同一の行に表示されている。例えば、１行目において、上位ノード２４５：Ａ１と下位ノード２４７：ａ１＿１，ａ１＿２とが親子関係を有することが示されている。このようなノード対応関係情報２５１Ａにより、１つのソースコード２０１から生成された異なる２つの上位コールツリー２４１及び下位コールツリー２４２の対応関係を把握することが可能となる。
【００３４】
図１２は、第１の実施形態におけるノード対応関係情報２５１Ａの生成手順を例示するフローチャートである。先ず、ノード情報生成部１０３は、上位コールツリー２４１から上位ノード２４５を選択する（Ｓ３０１）。当該選択処理は、ＲＯＭ２２に記憶された制御プログラムに従って動作するＣＰＵ２１の処理により、所定のルールに従って行われる。例えば、上位コールツリー２４１に含まれる全ての上位ノード２４５、ユーザが入力デバイス２４を介して指定した上位ノード２４５、所定の条件に適合する上位ノード２４５等が選択される。
【００３５】
次いで、ノード情報生成部１０３は、スコープ対応関係情報２３１に基づいて、選択された上位ノード２４５に対応する上位スコープ２１１と包含関係を有する下位スコープ２１２を特定する（Ｓ３０２）。例えば、図７に示すスコープ対応関係情報２３１の１行目に基づいて、上位スコープ２１１：「Ｓｃｏｐｅ＿Ａ」と２つの下位スコープ２１２：「Ｓｃｏｐｅ＿ａ１」，「Ｓｃｏｐｅ＿ａ２」とが親子関係を有することが特定される。
【００３６】
なお、スコープ対応関係情報２３１は、上記に限られるものではなく、選択された上位ノード２４５に応じて適宜生成されるものであってもよい。例えば、図８に示すような上位スコープ２１１についての動作情報２２１に基づいて、選択された上位ノード２４５に対応する上位スコープ２１１の動作期間を特定し、図９に示すような下位スコープ２１２についての動作情報２２２に基づいて、特定された動作期間内に動作した下位スコープ２１２を特定することにより、選択された上位ノード２４５に応じたスコープ対応関係情報を適宜生成することができる。
【００３７】
次いで、ノード情報生成部１０３は、選択された上位ノード２４５と、特定された下位スコープ２１２に対応する下位ノード２４７との対応関係を示すノード対応関係情報２５１Ａを生成する（Ｓ３０３）。
【００３８】
図１３は、第１の実施形態の第２の例におけるノード対応関係情報２５１Ｂを例示する図である。本例のノード対応関係情報２５１Ｂは、上位コールツリー２４１、下位コールツリー２４２、及び対応線２５９を含む。本例においては、上位コールツリー２４１及び下位コールツリー２４２が並列して表示されると共に、親子関係を有する上位ノード２４５と下位ノード２４７とが対応線２５９で連結されている。
【００３９】
図１４は、第１の実施形態の第３の例におけるノード対応関係情報２５１Ｃを例示する図である。本例のノード対応関係情報２５１Ｃにおいては、上位コールツリー２４１及び下位コールツリー２４２の中から親子関係を有する上位ノード２４５及び下位ノード２４７のみが抜き出されて表示されている。
【００４０】
図１５は、第１の実施形態の第４の例におけるノード対応関係情報２５１Ｄを例示する図である。本例のノード対応関係情報２５１Ｄは、上位ノード２４５：Ａ１と下位ノード２４７：ａ２＿１との対応を示す対応線２５９、及び上位ノード２４５：Ｂと下位ノード２４７：ｂ２との対応を示す対応線２５９が表示されていない点で、図１３に示すノード対応関係情報２５１Ｂと相違する。本例においては、１つの上位ノード２４５が複数の下位ノード２４７と親子関係を有する場合（１つの上位スコープ２１１が複数の下位スコープ２１２を包含している場合）には、所定の条件を満たす下位ノード２４７に対する対応線２５９のみが表示される。当該所定の条件とは、例えば対応する下位スコープ２１２の中で、最も動作期間が長いこと等である。これにより、対応線２５９等の対応関係を示す情報が過度に表示されることを抑制し、上位ノード２４５と下位ノード２４７との対応関係を把握しやすくすることが可能となる。
【００４１】
上記のように生成されたノード対応関係情報２５１Ａ〜２５１Ｄは、様々な目的で利用され得る。例えば、ノード対応関係情報２５１Ａ〜２５１Ｄは、そのままコンピュータのディスプレイ等に出力されてもよいし、他のシステムに提供されてもよい。他のシステムとしては、例えばＧＵＩ(Graphical  User  Interface）を利用してプログラム５２の実行状況を可視化するシステム、ソースコード２０１を検証するシステム等が考えられる。
【００４２】
上記実施形態においては、１つのソースコード２０１から階層が異なる２つのコールツリー２４１，２４２を生成する例を示した。しかし、実施形態はこれに限られるものではなく、階層が異なる又は同一の３つ以上のコールツリーを生成する場合であっても、それらのコールツリーの構成要素である複数のノード間の対応関係を示すノード対応関係情報を生成することが可能である。
【００４３】
図１及び図２に示すハードウェア構成は一例であり、プログラム情報生成システム１は、様々なハードウェア構成により実現することができる。例えば、プログラム情報生成システム１は、単体の汎用コンピュータ、組み込みプロセッサを有する専用装置等により構成されてもよい。
【００４４】
図３には、プログラム情報生成システム１の最も基本的な機能ブロックである取得部１０１、コールツリー生成部１０２、及びノード情報生成部１０３を処理の順序で接続した構成が示されているが、実施形態はこれに限らない。例えば、各機能ブロックが協調しながら並列的に動作を行う構成、機能ブロックの順序を入れ替える構成、１つの機能ブロックを複数の機能ブロックに分割する構成、これら３つの構成を組み合わせた構成等であってもよい。
【００４５】
プログラム情報生成システム１の機能を実現させる制御プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録されて提供することができる。また、制御プログラムは、ネットワークに接続された所定の記憶装置から所定のコンピュータにダウンロードすることにより提供されてもよいし、予めＲＯＭ等に組み込まれて所定の情報処理装置に提供されてもよい。また、制御プログラムは、上記取得部１０１、コールツリー生成部１０２、及びノード情報生成部１０３の機能を実現する複数のモジュールから構成されてもよい。
【００４６】
上記プログラム情報生成システム１によれば、１つのソースコード２０１から階層が異なる上位コールツリー２４１及び下位コールツリー２４２を生成した場合に、各コールツリー２４１，２４２を構成する上位ノード２４５及び下位ノード２４７間の対応関係を示すノード対応関係情報２５１Ａ〜２５１Ｄが生成される。これにより、複数のコールツリー２４１，２４２間の対応関係を容易且つ的確に把握することが可能となる。
【００４７】
以下に、他の実施形態について図面を参照して説明するが、上記第１の実施形態と同一又は同様の箇所については同一の符号を付してその説明を省略する場合がある。
【００４８】
（第２の実施形態）
図１６は、第２の実施形態におけるプログラム情報生成システム１により生成される、第１の上位コールツリー２４１Ａ、第２の上位コールツリー２４１Ｂ、スコープ対応関係情報２３２、及びノード対応関係情報２５１Ｅを例示する図である。
【００４９】
本実施形態におけるコールツリー生成部１０２は、１つの動作情報２２１から２つの上位コールツリー２４１Ａ，２４１Ｂを生成する。第１の上位コールツリー２４１Ａは、上記第１の実施形態における上位コールツリー２４１と同一である。第２の上位コールツリー２４１Ｂは、第１の上位コールツリー２４１Ａの一部を構成するコールツリーである。換言すれば、第２のコールツリー２４１Ｂを構成する全ての第２の上位ノード２４５Ｂに対応する上位スコープ２１１の動作期間は、第１のコールツリー２４１Ａを構成する全ての第１の上位ノード２４５Ａに対応する上位スコープ２１１の動作期間に包含されている。本例のスコープ対応関係情報２３２は、第１の上位ノード２４５Ａに対応する上位スコープ２１１と、第２の上位ノード２４５Ｂに対応する上位スコープ２１１との対応関係を示している。
【００５０】
本実施形態におけるノード情報生成部１０３は、上記のような第１の上位コールツリー２４１Ａ、第２の上位コールツリー２４１Ｂ、及びスコープ対応関係情報２３２に基づいて、ノード対応関係情報２５１Ｅを生成する。本例のノード対応関係情報２５１Ｅは、第１の上位ノード２４５Ａと第２の上位ノード２４５Ｂとの対応関係を示している。また、第１の上位コールツリー２４１Ａ及び第２の上位コールツリー２４１Ｂにおいて、互いに対応する第１の上位ノード２４５Ａと第２の上位ノード２４５Ｂとが対応線２５９により連結されている。なお、上記第１の実施形態におけるノード対応関係情報２５１Ａ〜２５１Ｄのように、下位ノード２４７との対応関係を示す情報が更に生成されてもよい。
【００５１】
このように、階層が同一のコールツリーを複数生成し、それらのコールツリーを構成する複数のノード間の対応関係を示すノード対応関係情報を生成してもよい。これにより、階層が異なるコールツリー間の対応関係だけでなく、階層が同一のコールツリー間の対応関係も容易且つ的確に把握することが可能となる。
【００５２】
（第３の実施形態）
図１７は、第３の実施形態における上位コールツリー２４１又は下位コールツリー２４２の生成手順を例示するフローチャートである。本実施形態におけるフローチャートは、ステップＳ４０１，Ｓ４０２を含む点で、第１の実施形態における図１０に示すフローチャートと相違する。本実施形態においては、ステップＳ２０７においてステータスが「ＥＮＴＥＲ」である場合、すなわち新たに取得されたステータス情報２２６が「ＥＮＴＥＲ」である場合（Ｓ２０７：ＹＥＳ）、新規にノードが追加されない場合がある。
【００５３】
本実施形態においては、新たに取得されたステータス情報２２６が「ＥＮＴＥＲ」である場合（Ｓ２０７：ＹＥＳ）、新たに取得されたスコープＩＤ２２５と同一のスコープＩＤ２２５が示すスコープ２１１，２１２に対応する子ノードが、コールツリー２４１，２４２内に既に存在するか否かが判定される（Ｓ４０１）。
【００５４】
ステップＳ４０１において、同一のスコープＩＤ２２５が示すスコープ２１１，２１２に対応する子ノードが既に存在する場合（Ｓ４０１：ＹＥＳ）、当該子ノードをカレントノードに設定する（Ｓ４０２）。これにより、１つのノードが複数の動作期間を示すことになる。
【００５５】
図１８は、第３の実施形態において生成される上位コールツリー２４１Ｃを例示する図である。本例の上位コールツリー２４１Ｃは、本例の動作情報３０１に基づいて図１７に示すフローチャートに従って生成されたコールツリーである。図１８に示される上位コールツリー３０２は、比較例であって、動作情報３０１に基づいて図１０に示すフローチャートに従って生成されたコールツリーである。
【００５６】
本例においては、動作情報３０１が示すように、上位スコープ２１１：Ｓｃｏｐｅ＿Ａの動作期間中に上位スコープ２１１：Ｓｃｏｐｅ＿Ｃが２回実行されている。このような動作情報３０１に基づいて、比較例である上位コールツリー３０２においては、１回目の上位スコープ２１１：Ｓｃｏｐｅ＿Ｃに対応する上位ノード３１１：Ｃ１及び２回目の上位スコープ：Ｓｃｏｐｅ＿Ｃに対応する上位ノード３１２：Ｃ２が個別に生成されている。これに対し、本実施形態の上位コールツリー２４１Ｃにおいては、上位スコープ２１１：Ｓｃｏｐｅ＿Ｃに対応する上位ノード２４５：Ｃが１つだけ生成されている。これは、図１７のステップＳ４０１，Ｓ４０２の処理により、２回目の上位スコープ２１１：Ｓｃｏｐｅ＿Ｃに対応する子ノード（上位ノード３１２：Ｃ２）が追加されなかったためである。
【００５７】
これにより、ノード数を抑制することが可能となり、複数のコールツリー間の対応関係の把握、情報量の削減、処理負荷の軽減等を実現することが可能となる。
【００５８】
以上、本発明の実施形態を説明したが、この実施形態は例として提示したものであり、発明の範囲を限定することを意図するものではない。この新規な実施形態はその他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。この実施形態及びその変形は発明の範囲及び要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５９】
１  プログラム情報生成システム
１１  情報処理端末
１２  サーバ
１３  ネットワーク
２１  ＣＰＵ
２２  ＲＯＭ
２３  ＲＡＭ
２４  入力デバイス
２５  出力デバイス
２６  通信Ｉ／Ｆ
２７  バス
１０１  取得部
１０２  コールツリー生成部
１０３  ノード情報生成部
２０１  ソースコード
２１１  上位スコープ（第１のスコープ）
２１２  下位スコープ（第２のスコープ）
２２１，２２２，３０１  動作情報
２２５  スコープＩＤ
２２６  ステータス情報
２２７  期間情報
２３１，２３２  スコープ対応関係情報
２４１，２４１Ｃ，３０２  上位コールツリー（第１のコールツリー）
２４１Ａ  第１の上位コールツリー
２４１Ｂ  第２の上位コールツリー
２４２  下位コールツリー（第２のコールツリー）
２４５，３１１，３１２  上位ノード（第１のノード）
２４５Ａ  第１の上位ノード
２４５Ｂ  第２の上位ノード
２４６  エッジ
２４７  下位ノード（第２のノード）
２５１Ａ〜２５１Ｅ  ノード対応関係情報
２５５  上位ノード表示部
２５６  下位ノード表示部
２５９  対応線
【図１】
2017054380.tif 000003
【図２】
2017054380.tif 000004
【図３】
2017054380.tif 000005
【図４】
2017054380.tif 000006
【図５】
2017054380.tif 000007
【図６】
2017054380.tif 000008
【図７】
2017054380.tif 000009
【図８】
2017054380.tif 000010
【図９】
2017054380.tif 000011
【図１０】
2017054380.tif 000012
【図１１】
2017054380.tif 000013
【図１２】
2017054380.tif 000014
【図１３】
2017054380.tif 000015
【図１４】
2017054380.tif 000016
【図１５】
2017054380.tif 000017
【図１６】
2017054380.tif 000018
【図１７】
2017054380.tif 000019
【図１８】
2017054380.tif 000020