(57)【要約】【課題】  プログラムが実際に動いた軌跡を、ソースコードの制御構文に沿った矢印で表現し、プログラムの実行過程をより解りやすく提示すること。【解決手段】  ソースコードをコンパイルした実行クラスと構文解析結果である抽象構文木の情報を入力とし、実行クラスを構成するメソッドの開始、終了位置及び変数宣言、判定式、宣言文、リターン文の先頭に、これらに対応するソースコードの行番号位置を実行情報として出力する命令を埋め込む第１のステップと、実行情報を埋め込んだ前記実行クラスを実行する第２のステップと、実行クラスが出力した前記実行情報を回収し、実行時刻順にソートした後、メソッド単位に分類し、その分類結果と抽象構文木の情報との基づき前記実行クラスにおけるメソッド等の実行過程を追跡する第３のステップと、追跡した実行過程を、表示画面に表示した当該プログラムのソースコード上に矢印により表示する第４のステップとを備える。【選択図】      図３
2008059515.tif 000002
【特許請求の範囲】
【請求項１】
対象となるプログラムの実行過程を表示画面に表示した当該プログラムのソースコード上に表示する方法であって、
前記プログラムのソースコードをコンパイルした実行クラスと構文解析結果である抽象構文木の情報を入力として受け付け、前記抽象構文木の情報に基づき前記実行クラスを構成するメソッドの開始、終了位置及び変数宣言、判定式、宣言文、リターン文の先頭に、これらに対応するソースコードの行番号位置を実行情報として出力する命令を第１の手段によって埋め込む第１のステップと、
前記実行情報を埋め込んだ前記実行クラスを第２の手段によって実行する第２のステップと、
前記第２の手段によって実行された実行クラスが出力した前記実行情報を回収し、実行時刻順にソートした後、メソッド単位に分類し、その分類結果と前記抽象構文木の情報との基づき前記実行クラスにおけるメソッド、変数宣言、判定式、宣言文、リターン文の実行過程を第３の手段によって追跡する第３のステップと、
追跡した実行過程を、表示画面に表示した当該プログラムのソースコード上に第４の手段によって矢印により表示する第４のステップと
を備えることを特徴とするプログラム実行過程の表示方法。
【請求項２】
対象となるプログラムの実行過程を表示画面に表示した当該プログラムのソースコード上に表示するシステムであって、
前記プログラムのソースコードをコンパイルした実行クラスと構文解析結果である抽象構文木の情報を入力として受け付け、前記抽象構文木の情報に基づき前記実行クラスを構成するメソッドの開始、終了位置及び変数宣言、判定式、宣言文、リターン文の先頭に、これらに対応するソースコードの行番号位置を実行情報として出力する命令を埋め込む第１の手段と、
前記実行情報を埋め込んだ前記実行クラスを実行する第２の手段と、
前記第２の手段によって実行された実行クラスが出力した前記実行情報を回収し、実行時刻順にソートした後、メソッド単位に分類し、その分類結果と前記抽象構文木の情報との基づき前記実行クラスにおけるメソッド、変数宣言、判定式、宣言文、リターン文の実行過程を追跡する第３の手段と、
追跡した実行過程を、表示画面に表示した当該プログラムのソースコード上に矢印により表示する第４の手段と
を備えることを特徴とするプログラム実行過程の表示システム。
【請求項３】
対象プログラムの実行過程を表示画面に表示した当該プログラムのソースコード上に表示するコンピュータプログラムであって、
コンピュータを、
前記対象プログラムのソースコードをコンパイルした実行クラスと構文解析結果である抽象構文木の情報を入力として受け付け、前記抽象構文木の情報に基づき前記実行クラスを構成するメソッドの開始、終了位置及び変数宣言、判定式、宣言文、リターン文の先頭に、これらに対応するソースコードの行番号位置を実行情報として出力する命令を埋め込む第１の手段と、
前記実行情報を埋め込んだ前記実行クラスを実行する第２の手段と、
前記第２の手段によって実行された実行クラスが出力した前記実行情報を回収し、実行時刻順にソートした後、メソッド単位に分類し、その分類結果と前記抽象構文木の情報との基づき前記実行クラスにおけるメソッド、変数宣言、判定式、宣言文、リターン文の実行過程を追跡する第３の手段と、
追跡した実行過程を、表示画面に表示した当該プログラムのソースコード上に矢印により表示する第４の手段と
して機能させるステップを備えることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム実行過程の表示方法及びシステム並びにプログラムに係り、詳しくは、プログラムの実行単位毎に処理の分岐過程、繰り返し過程などの実行過程を追跡し、その実行過程を表示画面に表示したソースコード上に矢印によって視覚的に表示する方法及びシステム並びにプログラムに関するものである。
【背景技術】
【０００２】
コンピュータの利用の拡大によってプログラムの規模と複雑さが増大しており、その品質や生産性の改善が重要な課題となってきている。
近年のプログラム開発の現場では、障害の発生箇所を特定するためにプログラムを実行し、実行ステップに対応するソースコードの行を順次ハイライトさせて実際に動作した過程を確認することが非常に良く行われている。
【０００３】
図２５はこのようなプログラム開発環境の実行画面を示す図である。
本環境は、実行情報の出力命令をステップ毎に挿入してからプログラムを実行し、出力された実行情報を解析することで実行ステップに対応するソースコードの行を順次ハイライトしていくものである。図の例では４５行目の２５０１から５０行目の２５０２にハイライトが切り替わっているので、開発者は４５行目の次に５０行目が実行された事が解る。
ここで実行情報とは、実行したステップに対応するソースコード上の位置を特定する情報であり、例えばMyClass.javaファイルの４５行目といった情報を指す。
本発明に関連する公知技術文献としては下記特許文献１があげられる。
【０００４】
【特許文献１】特願２００５−２８２５７１
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、ソースコードには反復や条件分岐、例外処理といった制御構文が存在するため、ハイライト位置は単純に上から下へ切り替わっていくだけではなく、行をまたいで切り替わる事がある。
このため、動作した過程が処理的に正常か判定するには、それまでのハイライトされた順番を開発者が記憶し、次にハイライトされる行を予測しながら観察する必要があった。よって、対象プログラムに対する深い知識が必要となり、経験の浅い初心者や、担当者以外の者がこのような手法で障害の発生箇所を特定するのは困難であった。
これは、ハイライトされた経過を色の濃淡で表現することで解決できる。
【０００６】
しかし、該当行に至った原因はハイライトされた経過だけからは判定できない。例えば、着目行が実行されなかった場合、それが条件分岐によって実行されなかったのか、あるいは例外処理によって中断されなかったのかハイライトされた経過からは読み解く事ができない。よって、結局は開発者がソースコードの構文を判読する必要がある。
また、通常、１つの行は複数回実行されるものであり、個々の実行をどのように区別して表現するかという課題も残る。
【０００７】
本発明の目的は、プログラムが実際に動いた軌跡を、ソースコードの制御構文に沿った矢印で表現し、プログラムの実行過程をより解りやすく提示することができるプログラム実行過程の表示方法及びシステム並びにプログラムを提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明に係るプログラムの実行過程の表示方法は、対象となるプログラムの実行過程を表示画面に表示した当該プログラムのソースコード上に表示する方法であって、
前記プログラムのソースコードをコンパイルした実行クラスと構文解析結果である抽象構文木の情報を入力として受け付け、前記抽象構文木の情報に基づき前記実行クラスを構成するメソッドの開始、終了位置及び変数宣言、判定式、宣言文、リターン文の先頭に、これらに対応するソースコードの行番号位置を実行情報として出力する命令を第１の手段によって埋め込む第１のステップと、前記実行情報を埋め込んだ前記実行クラスを第２の手段によって実行する第２のステップと、前記第２の手段によって実行された実行クラスが出力した前記実行情報を回収し、実行時刻順にソートした後、メソッド単位に分類し、その分類結果と前記抽象構文木の情報との基づき前記実行クラスにおけるメソッド、変数宣言、判定式、宣言文、リターン文の実行過程を第３の手段によって追跡する第３のステップと、追跡した実行過程を、表示画面に表示した当該プログラムのソースコード上に第４の手段によって矢印により表示する第４のステップとを備えることを特徴とする。
【０００９】
また、本発明に係るプログラムの実行過程の表示システムは、対象となるプログラムの実行過程を表示画面に表示した当該プログラムのソースコード上に表示するシステムであって、
前記プログラムのソースコードをコンパイルした実行クラスと構文解析結果である抽象構文木の情報を入力として受け付け、前記抽象構文木の情報に基づき前記実行クラスを構成するメソッドの開始、終了位置及び変数宣言、判定式、宣言文、リターン文の先頭に、これらに対応するソースコードの行番号位置を実行情報として出力する命令を埋め込む第１の手段と、前記実行情報を埋め込んだ前記実行クラスを実行する第２の手段と、前記第２の手段によって実行された実行クラスが出力した前記実行情報を回収し、実行時刻順にソートした後、メソッド単位に分類し、その分類結果と前記抽象構文木の情報との基づき前記実行クラスにおけるメソッド、変数宣言、判定式、宣言文、リターン文の実行過程を追跡する第３の手段と、追跡した実行過程を、表示画面に表示した当該プログラムのソースコード上に矢印により表示する第４の手段とを備えることを特徴とする。
【００１０】
また、本発明に係るプログラムの実行過程の表示プログラムは、対象プログラムの実行過程を表示画面に表示した当該プログラムのソースコード上に表示するコンピュータプログラムであって、
コンピュータを、
前記対象プログラムのソースコードをコンパイルした実行クラスと構文解析結果である抽象構文木の情報を入力として受け付け、前記抽象構文木の情報に基づき前記実行クラスを構成するメソッドの開始、終了位置及び変数宣言、判定式、宣言文、リターン文の先頭に、これらに対応するソースコードの行番号位置を実行情報として出力する命令を埋め込む第１の手段と、前記実行情報を埋め込んだ前記実行クラスを実行する第２の手段と、前記第２の手段によって実行された実行クラスが出力した前記実行情報を回収し、実行時刻順にソートした後、メソッド単位に分類し、その分類結果と前記抽象構文木の情報との基づき前記実行クラスにおけるメソッド、変数宣言、判定式、宣言文、リターン文の実行過程を追跡する第３の手段と、追跡した実行過程を、表示画面に表示した当該プログラムのソースコード上に矢印により表示する第４の手段として機能させるステップを備えることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、対象プログラムを構文解析し、その抽象構文木により対象プログラムの実行クラスを構成するメソッドの開始、終了位置及び変数宣言、判定式、宣言文、リターン文の先頭に、これらに対応するソースコードの行番号位置を実行情報として出力する命令を埋め込み、この実行情報を埋め込んだプログラムを実行することによって得られた実行情報を回収し、各メソッド等の実行過程を追跡し、実行過程を示す矢印を生成して対象プログラムのソースコード上に表示するため、例えば、着目行が実行されなかった場合、それが条件分岐によって実行されなかったのか、あるいは着目行が何回実行されたかを視覚的に認識することができる。
この結果、プログラムの実行過程が直感的に理解できるようになり、障害の発生箇所の特定が容易となる。また、経験の浅い初心者でもプログラム処理の流れを理解できるようになるので、プログラム教育の場における教材としても利用できる。
【発明を実施するための最良の形態】
【００１２】
図１は、本発明を適用したプログラム開発システムの一実施形態を示すシステム構成図である。
この実施形態のプログラム開発システムは、Java（サンマイクロシステムズ社の登録商標）のアプリケーション開発を対象としており、プログラム開発環境１０１を備えた計算機１０２と、プログラム実行環境１０３を備えた計算機１０４とから構成される。
個々の計算機１０２，１０４は開発者の入力を受け付けるためのキーボード１０５と、マウス１０６を備える。また、プログラム開発環境１０１の実行画面を表示するための画面表示装置１０７を備える。
なお、この実施形態ではプログラム開発環境１０１と、プログラム実行環境１０３を異なる計算機１０２，１０４上に搭載しているが、１つの計算機が両方の環境を搭載しても構わない。
【００１３】
プログラム開発環境１０１は、プログラムの開発を行うための環境であり、ソースコードを格納するソースコード保持部１０８と、格納したソースコードの表示と操作を行うソースコード編集部１０９と、ソースコードをコンパイルするコンパイラ１１０と、コンパイラ１１０によって生成された実行クラスを格納する実行クラス保持部１１１と、ソースコードの構文を解析する構文解析部１１２と、構文解析部１１２から生成された抽象構文木を格納する抽象構文木保持部１１３と、抽象構文木を基に、実行クラスに対して実行情報の出力処理を埋め込む実行情報出力命令埋め込み部１１４と、出力された実行情報１１５を実行単位に分類する実行情報分類部１１６と、分類された実行情報と抽象構文木を基に動作過程情報を生成する動作過程追跡部１１７と、動作過程情報（実行過程情報）を格納する動作過程情報保持部１１８と、動作過程情報に基づいてソースコード編集部１０９が表示したソースコードに矢印を描画する動作過程情報描画部１１９から構成される。
【００１４】
一方、プログラム実行環境１０３は、プログラム開発環境１０１によって作成されたプログラムを実行するための環境であり、対象となる実行クラスを格納する実行クラス保持部１２０と、プログラムを実行するプログラム実行部１２１から構成される。
なお、プログラム実行部１２１において、実行情報出力命令埋め込み部１１４によって実行情報の出力命令が埋め込まれたものを実行した場合は実行情報１１５を出力する。
なお、実行情報１１５とは、実行したステップに対応するソースコード上の位置を特定する情報である。
【００１５】
図２は、図１で述べたプログラム開発環境１０１の実行画面を示し、上の画面は実行過程を表示する前の状態であり、下の画面は実行過程を表示した後の状態である。
プログラム開発環境１０１は、プログラムを編集するための領域２０１と、行番号を示すための領域２０２と、コンパイルボタン２０３と、動作過程の表示ボタン２０４と、プログラムの動作過程を示す矢印２０５から構成される。
一連の矢印２０５はそれぞれ個別の実行過程を示す。図の内容を例とすると、行番号＝３５のメソッドshowDetailは縦方向に３本の矢印線が行番号＝３７のメソッドとの間で往来していることから、１回のプログラム実行によって計３回実行された事を示す。
また、各矢印は、その水平位置で実行されたかどうかを示す。例えば図の内容を例とすると、３８行目のSystem.out.println命令は全体で３回実行されたうち、縦方向に２本の矢印線が往来していることから２回が実際に実行された事を示す。
また、反復に関しては４１行目から４３行目に示すような繰り返した矢印で表現している。矢印の本数は反復実行された回数を示し、例えば４２行目のｎｅｘｔ命令は、全体で計３回実行されたうちの１回によって、８回反復実行されたことを意味する。
また、障害によって処理が中断された行は、「×」マークで表現している。例えば４０行目のgetItemメソッドは、計３回実行されたうちの１回において障害が発生し、中断された事を意味する。
【００１６】
図３は、図１の実施形態のプログラム開発システムにおける開発工程の全体の流れを示すフローチャートである。
まず、開発者はプログラム開発環境１０１を起動する（ステップ３０１）。プログラム開発環境１０１はソースコード保持部１０８から指定されたソースコードを読み込み、プログラム編集領域２０１に表示する。
開発者はキーボード１０５とマウス１０６を使用してソースコードの編集を行い、実装が完了したらインデントの深さなどを整形してコンパイルボタン２０３を押下する。
するとプログラム開発環境１０１はコンパイラ１１０を使用して実行クラスを生成する（ステップ３０２，３０３）。
なお、ソースコードから実行クラスを生成するのは公知の技術であるので説明を省略する。
【００１７】
コンパイルが完了すると、続いてプログラム開発環境１０１は構文解析部１１２で抽象構文木を作成し、実行情報出力命令埋め込み部１１４で実行クラスに対して実行情報の出力処理を埋め込む（ステップ３０４）。
次に開発者は実行情報の出力処理が埋め込まれた実行クラスをプログラム実行環境１０３において実行し、出力された実行情報１１５を回収する（ステップ３０５）。
次に開発者はプログラム開発環境１０１において動作過程の表示ボタン２０４を押す。するとプログラム開発環境１０１は回収した実行情報１１５を読み込み、実行情報分類部１１６において読み込んだ実行情報１１５を実行単位に分類する。そして、動作過程追跡部１１７において分類した結果と構文解析木を基に動作過程情報を生成する（ステップ３０６）。次に、動作過程情報描画部１１９は動作過程情報を基にプログラム編集領域２０１へ矢印２０５を描画して終了する（ステップ３０７）。
【００１８】
図４は構文解析部１１２によって生成される抽象構文木の一例を示す図である。
抽象構文木とは、木構造でソースコードの内容を表現したものであり、４０１のような節で制御構文の範囲を表現し、４０２のような葉でメソッド実行や変数宣言といった行単位の内容を表現する。また、葉は対応するソースコード上の行番号４０３や先頭位置の桁番号４０４を属性で保持する。
なお、ソースコードから抽象構文木を生成する技術は公知であるので構文解析部１１２の詳細な内部処理は説明を省略する。
【００１９】
図５は、図３におけるステップ３０４の実行情報の出力処理命令を埋め込む処理の詳細を示すフローチャートである。
実行情報出力命令埋め込み部１１４は、ソースコード編集部１０９で開いているソースコードに対する抽象構文木を取得し（ステップ５０１）、ソースコードに存在する全てのメソッド定義を走査し（ステップ５０２）、各メソッドの開始行と終了行に対し実行情報の出力命令をバイトコード操作によって挿入する（ステップ５０３）。
また、抽象構文木の該当メソッドの内容を走査し（ステップ５０４，５０５）、取得した行が変数宣言文（ステップ５０６）、または判定式（ステップ５０７）、またはメソッド実行文（ステップ５０８）、またはリターン命令（ステップ５０９）を含む場合に、行の先頭に実行情報の出力命令をバイトコード操作によって埋め込む（ステップ５１０）。
ここで、メソッドの開始行や終了行、または指定位置に特定の命令をバイトコード操作によって埋め込む技術については公知であるので説明を省略する。また、終了行に埋め込む出力命令は処理が中断された場合であっても必ず出力されるように埋め込む。これは対象コード全体をtry節で囲み、そのfinally節でログ出力命令を呼び出すようにバイトコード操作することで実現できる。
【００２０】
図６は出力される実行情報１１５の例を示す図である。
実行情報は、出力時刻６０１、スレッドＩＤ６０２、対象クラス名６０３、対象メソッド名６０４、行番号６０５から構成される。このうち出力時刻６０１とスレッドＩＤ６０２は、プログラム実行中に内部で動的に決定して出力する。
ここでスレッドＩＤ６０２とは実行されたスレッドを一意に識別するものである。
対象クラス名６０３、対象メソッド名６０４、行番号６０５は、実行情報の埋め込み時に引数に指定された静的な文字列を出力する。また、行番号６０５では、それがメソッド開始・終了行に出力されるものである場合は、行番号の代わりに開始（Ｓ）と終了（Ｅ）を表す識別子をそれぞれ出力するものとする。
【００２１】
図７は実行情報分類部１１６によって分類した結果の例を示す図である。
実行情報分類部１１６は、回収した実行情報１１５を出力時刻６０１でソートし、対象クラス名７０１と、対象メソッド７０２と、スレッドＩＤ７０３ごとに分類し、開始識別子（Ｓ）から終了識別子（Ｅ）までの一連の実行情報を１つにまとめる。
７０４に示すような開始識別子（Ｓ）と終了識別子（Ｅ）に挟まれた一連の実行情報の組をここではコンテキストと呼び、コンテキスト中の個々のデータの行番号をコンテキストデータと呼ぶ。コンテキストは一回のメソッド実行において、実行された行の順番を示すものであり、図に示すように一つのメソッドは複数のコンテキストを保持する場合があり、１つのスレッドで複数個のコンテキストを保持する場合がある。
以降ではコンテキストと抽象構文木からソースコード編集部１０９へ矢印２０５を描画する手順を説明する。
図４に示したように、抽象構文木はメソッド宣言といった属性や、ブロック範囲といった様々な情報を保持するが、ここでは説明を簡略化するために制御構文の構造と行番号のみを保持する簡略化された抽象構文木を例示して
説明する。
【００２２】
図８はこのような簡略化した抽象構文木の一例を示す図である。
この抽象構文木では、ルートの属性で対象メソッド名を表現し、ノードの属性で行番号を表現する。また、この抽象構文木では実行情報出力処理埋め込み部において埋め込み対象となった行、すなわち、変数宣言、判定式、メソッド実行文、リターン文のいずれかが存在する行のみを対象とする。以降、これらの行を有効行と呼ぶ。
例えば、図８の内容は図２に示したソースコードの内容を表したものであるが、図２の４４行目、４６行目、４９行目は上記の命令を含まないので有効行ではない。各ノードに連結した矢印は実行する有効行の順番を意味する。図の内容を例とすると、showDetailメソッド８０１は３６行目８６の次に３７行目を実行する。また、１つのノードから複数の矢印がのびている場合はｉｆ節やswitch節の判定式を表しており、複数のノードのうちどれか１つを実行することを意味する。図の内容を例とすると、３７行目が判定式であり、３８行目か４７行目のいずれかを次に実行する事を意味する。
【００２３】
ノード間を矢印ではなく“直線”で連結した場合はfor節やwhile節の判定式を表しており、連結された一連のノードを反復実行することを意味する。図の内容を例とすると、４１行目が判定式であり、４２行目から４３行目を反復実行する事を意味する。
また、曲線で連結した場合は、連結先のノードが例外処理のジャンプ先であることを表現する。曲線の例は後述する。
矢印が連結されていない終端のノードは、反復かメソッド実行の終点である事を表現する。図の内容を例とすると、５０行目か４８行目でshowDetailメソッドの実行が終了する。また、４３行目で反復処理が終了する。
【００２４】
図９は、図８で示した簡略化した抽象構文木のデータ構造を示す図である。
この抽象構文木は、ルートとノードの２種類のテーブルを備え、ルートのテーブル９０１はクラス名９０３とメソッド名９０４と、次行ＩＤ９０５を備える。このうちクラス名９０３は対象クラスの完全修飾名が格納される。また、メソッド名９０４には対象メソッドの名前と引数の型が格納される。なお、クラス名９０３とメソッド名９０４の組み合わせは対象プログラムの中で一意となる。次行ＩＤ９０５には対象となるメソッド中で最初に実行する行のＩＤを格納する。
【００２５】
ノードのテーブル９０２は、ＩＤ９０６と行番号９０７と次行ＩＤ９０８と反復開始行ＩＤ９０９と、ジャンプ行ＩＤ９１０から構成される。このうち、ＩＤ９０６には対象プログラムで一意となる値が格納される。行番号９０７には対応するソースコード上の行番号が格納される。次行ＩＤ９０８には、次に実行する行のＩＤ９０６が格納される。対象行が条件分岐の判定式の場合は複数の次行ＩＤ９０８が格納される。また、該当行が反復かメソッド実行の終点である場合、次行ＩＤ９０８は空となる。反復開始行ＩＤ９０９、ジャンプ行ＩＤ９１０にはそれぞれ、反復を開始する行のＩＤ９０６と、例外が発生した場合にジャンプする行のＩＤ９０６が格納される。反復開始行ＩＤ９０９は常に１つであるが、ジャンプ行ＩＤ９１０は１つのノードに複数存在する場合がある。
【００２６】
図１０は、動作過程追跡部１１７によって生成される動作過程情報のデータ構造を示す図である。
動作過程情報はソースコード編集部１０９に矢印を描画する基となる情報であり、有効行ごとに実行したかどうかといった情報を記憶する。また、１つのコンテキストに対して１つの動作過程情報が生成される。
各動作過程情報は対象となるクラス名１００１とメソッド名１００２を格納する領域を備える。
また、１つの動作過程情報はメインフローと呼ばれる反復処理を除いた有効行の動作過程を保持し、メインフローは部分フローと呼ばれる反復区間の動作過程を保持する。部分フローがさらに部分フローを保持する事もある。メインフローと部分フローはフローＩＤ１００３、行番号１００４、状態１００５、部分フロー１００６、ジャンプ行１００７から構成される。フローＩＤ１００３は１つの動作過程情報の中でメインフローと各部分フローを特定する数値であり、メインフローの値は１となる。
【００２７】
行番号１００４はソースコードの行番号と対応するものである。
状態１００５はnone、exec、error、returnのいずれかの値をとり、それぞれ該当行が、実行されなかった事、実行された事、実行されるはずであったが障害が発生して中断された事、リターン処理によって中断された事を意味する。
部分フロー１００６が存在するノードは、該当行が反復の判定式であり、反復実行された回数だけ部分フローの領域が生成され、そのフローＩＤ１００３が格納される。例えば例の８６行目は２つの部分フロー１００６を保持するので、２回反復処理を実行したことを示し、フローＩＤが２と３で表現される２つの部分フローを実行した事を意味する。
ジャンプ行１００７には、例外処理が行われた場合にジャンプ先の行が格納される。
【００２８】
図１１は、図３のステップ３０６における構文解析木と実行情報から動作過程情報を生成する処理の詳細を示すフローチャートである。
まず、プログラム開発環境１０１は実行情報分類部１１６によって分類されたコンテキストを取得する（ステップ１１０１，１１０２）。
次に、クラス名７０１とメソッド名７０２をコンテキストから取得し、それらが一致するメソッド定義を抽象構文木から取得する（ステップ１１０３）。次に、１つの動作過程情報の領域を生成し、取得したクラス名とメソッド名を格納する（ステップ１１０４）。
次に、取得した抽象構文木のルートテーブル９０１のデータに次行ＩＤ９０５が存在するか調べる（ステップ１１０５）。もし存在しない場合は、次のコンテキストを処理する（ステップ１１０１）。
【００２９】
存在する場合は次行ＩＤが示すノードを走査し、反復区間を除く有効行の行数をカウントする。そしてその数だけ動作過程情報にＩＤが１であるメインフローの領域を確保して対応する行番号１００４を格納し、それぞれの状態１００５をnoneで初期化する（ステップ１１０６，１１０７，１１０８）。そしてコンテキストと抽象構文木の内容を比較し、その結果を動作過程情報に格納していく（ステップ１１０９）。
１つのコンテキストに対する処理を終了すると、次のコンテキストを処理し、全てのコンテキストを処理した時点で終了となる（ステップ１１０１）。
【００３０】
図１２は、ステップ１１０９のコンテキストと抽象構文木の内容を比較してその結果を動作過程情報に格納する処理の詳細を示すフローチャートである。
動作過程追跡部１１７はまずノードポインタと呼ぶ抽象構文木の参照位置を、ルートテーブルの該当データの位置で初期化する（ステップ１２０１）。
次にノードポインタが指すデータを取得する（ステップ１２０２）。
次に動作過程追跡部１１７は対象コンテキストからコンテキストデータを取得する（ステップ１２０３）。
次に動作過程追跡部１１７はノードポインタが指すデータの次行ＩＤ９０５，９０８に値が存在するか確認する（ステップ１２０４）。存在する場合はＩＤ９０６が一致するノードから行番号９０７を取得してコンテキストデータと比較する（ステップ１２０５）。
一致する場合は、一致した行番号に対応するノードの位置をノードポインタに格納し（ステップ１２０６）、一致した行番号に対応する動作過程情報のデータの状態１００５をexecで上書きして（ステップ１２０７）、残りのコンテキストデータを処理する（ステップ１２０２）。
【００３１】
次行ＩＤ９０５，９０８に値が存在しない場合や、一致しない場合はノードポインタが指すデータに反復開始行ＩＤ９０９に値が存在するかどうか調べる（ステップ１２０８）。なお、ノードポインタが初期状態であるルートテーブル９０１のデータを指している場合、反復開始行ＩＤ９０９は必ず存在しない。
ノードポインタがノードテーブル９０２のデータを参照しており、反復開始行ＩＤ９０９が存在する場合は（ステップ１２０７）、コンテキストデータの内容を調べる（ステップ１２０９）。コンテキストデータがnullで残りが存在しない場合は、反復の判定の結果、実行されずに正常終了したと考えられるので、ノードポインタが指すデータの行番号９０７に対応する動作過程情報のデータの状態１００５をreturnで上書きして（ステップ１２１０）、このコンテキストに対する処理を終了する。
【００３２】
コンテキストデータが存在する場合は、反復開始行ＩＤ９０９とＩＤ９０６が一致するノードの行番号９０７を取得して比較する（ステップ１２１１）。一致した場合は反復区間の処理が開始されたと考えられるので、ノードポインタが指すデータをスタックに格納し（ステップ１２１２）、動作過程情報に部分フローの領域を生成する（ステップ１２１３）。
次にノードポインタへ反復開始行ＩＤ９０９とＩＤ９０６が一致するノードデータの位置を格納して（ステップ１２１４）、さらに一致した行番号９０７に対応する動作過程情報のデータの状態１００５をexecで上書きして（ステップ１２０７）、残りのコンテキストデータを処理する。
【００３３】
反復開始行ＩＤ９０９が存在しなかったり、コンテキストデータと一致しなかったりした場合は、ノードポインタが指すデータにジャンプ行ＩＤ９１０が存在するかどうか調べる（ステップ１２１５）。なお、ノードポインタが初期状態であるルートテーブル９０１のデータを指している場合、ジャンプ行ＩＤ９１０は必ず存在しない。
ノードポインタがノードテーブル９０２のデータを参照しており、ジャンプ行ＩＤ９１０が存在する場合はジャンプ行ＩＤ９１０に格納されたものとＩＤ９０６が一致するデータの行番号９０８を取得してコンテキストデータと比較する（ステップ１２１６）。コンテキストデータと一致する場合は、例外処理が行われたと考えられるので、ノードポインタが指すデータの行番号９０７に対応する動作過程情報のデータのジャンプ行１００７へ一致した行番号９０７を格納する（ステップ１２１７）。
【００３４】
次にノードポインタにジャンプ行ＩＤ９１０がＩＤ９０６と一致するデータの位置を格納する（ステップ１２１８）。次に一致した行番号９０７に対応する動作過程情報のデータの状態１００５をexecで上書きして（ステップ１２０７）、残りのコンテキストデータを処理する。ジャンプ行ＩＤ９１０にＩＤが存在しなかったり、コンテキストデータと一致しなかったりした場合は、スタックに退避したデータが存在するかどうか調べる（ステップ１２１９）。
スタックにデータが存在する場合は、反復ブロックの処理が完了した可能性があるので、スタックからデータを取得し（ステップ１２２０）、その行番号９０７と、コンテキストデータを比較する（ステップ１２２１）。一致した場合は、反復処理が終了し、判定式が再度実行されたと考えられるので、ノードポインタに取得したデータの位置を格納して（ステップ１２２２）、一致した行番号９０７に対応する動作過程情報のデータの状態１００５をexecで上書きし（ステップ１２０７）、残りのコンテキストデータを処理する。
【００３５】
スタックにデータが存在しない場合や、スタックのデータの行番号９０７がコンテキストデータの内容と一致しない場合はエラーか正常終了の可能性があるので、ノードポインタが指すデータが次行ＩＤ９０８を保持するか再度確認する。存在する場合は抽象構文木の内容と反するので、ノードポインタが指すデータの行番号９０７に対応する動作過程情報の状態１００５をerrorで上書きして対象コンテキストの処理を終了する（ステップ１２２４）。
存在しない場合は、プログラムが正常終了したと考えられるので、ノードポインタが指すデータの行番号９０７に対応する動作過程情報の状態１００５をｒｅｔｕｒｎで上書きして対象コンテキストの処理を終了する（ステップ１２１０）。
【００３６】
図１３はステップ１２１３の動作過程情報に部分フローの領域を生成する処理の詳細を示すフローチャートである。
動作過程追跡部１１７はまず、反復開始行ＩＤ９０９から反復実行する区間を抽象構文木から取得し、反復区間にさらに反復開始行ＩＤ９０９が存在するデータがある場合は、それらを除いた行番号９０７に対応する領域を動作過程情報に確保して各データに行番号１００４を格納する（ステップ１３０１）。
例えば、反復区間が２１，２２，２３，２４，２５行目であり、２２，２３，２４行目がさらに反復区間である場合、それを除いた２１，２５行目に対応する領域が動作過程情報に生成される。
【００３７】
次に、生成した領域のフローＩＤ１００３に、動作過程情報の中で最も大きい値を１増加したものを格納する（ステップ１３０２）。そして格納したＩＤを、ノードポインタが指すデータの行番号１００４に対応する動作過程情報のデータの部分フロー１００６に追加し（ステップ１３０３）、生成した領域の状態１００５を全てnoneで初期化して終了する（ステップ１３０４）。
【００３８】
図１４から図１８は、図１２の処理を具体的に説明するための図である。
なお、これらの例では図の右側で処理対象のコンテキストの内容を、図の中央で処理対象の抽象構文木の内容を、図の左側で処理結果の動作過程情報の内容を表現する。また、抽象構文木において白地の矢印で示す箇所はノードポインタの位置を表現する。
図１４はステップ１２０５において次行ＩＤ９０８が示すデータの行番号とコンテキストデータが一致してexecが格納される場合と、ステップ１２２４においてノードポインタが指すデータに次行ＩＤの値が存在しなくてerrorが格納される場合の具体例を示す。
この例の抽象構文木１４０１は１１行目から１４行目まで逐次実行する事を表現する。また動作過程情報１４０２には、抽象構文木に対応する１１行目から１４行目までのメインフローの領域がステップ１１０６によって作成される。
まず、動作過程追跡部１１７はステップ１２０１に従って、ノードポインタにルートテーブル９０１のデータの位置１４０３を格納する。
【００３９】
次に、コンテキストデータを取得する。この段階では最初の取得であるので先頭の１１となる。
次にステップ１２０４に従って、ノードポインタが指すデータの次行の行番号を取得する。この例では１１行目となる。
次にステップ１２０５に従ってコンテキストデータの値と一致するかどうか調べる。この例では１４０４に示すように共に１１であるので、１１行目に相当するノードのデータ１４０５の位置をノードポインタに格納し（ステップ１２０６）、ステップ１２０７に従って動作過程情報の１１行目の状態をexecで上書きする。
次に１２，１３行目を同様に処理して該当する動作過程情報の状態をexecで上書きする。１３行目に対応する動作過程情報の状態をexecで上書きした段階で、ノードポインタは１３行目に対応するノードのデータ１４０６を指している。このデータは次行ＩＤ９０８に、１４行目に対応するノードのＩＤを格納しているが、コンテキストデータが存在しなくnullであり、１４０７に示すように一致しないため、最終的にステップ１２２４に至り、ノードポインタが指す１３行目に対応する動作過程情報の状態１００５をerrorで再度上書きして終了する。
【００４０】
図１５は、ステップ１２０５において、次行ＩＤ９０８が複数存在する場合と、ステップ１２１０によって正常終了する場合の具体例を示す図である。
この例の抽象構文木１５０１は３行目が判定式となっており、判定式の結果によって４、５、８行目か６、７行目のどちらか片方が実行される。また、動作過程情報１５０２には、抽象構文木に対応する２行目から８行目に対応するメインフローの領域がステップ１１０６によって作成される。
動作過程追跡部１１７は３行目に対応する動作過程情報の状態をexecで上書きした後、次行ＩＤが示す４行目と６行目を取得してコンテキストデータと比較する。この時参照しているコンテキストデータは“４”であるので、ステップ１２０６に従って、ノードポインタに行番号が“４”であるノードの位置１５０３を格納し、４行目に対応する動作過程情報の状態１００５をステップ１２０７に従ってexecで上書きする。そして５，８行目を同様に処理し、８行目の状態をexecで上書きした後、ノードポインタ１５０４が指すデータの内容を確認し、次行ＩＤ、反復開始行ＩＤ、ジャンプ行ＩＤ、およびスタックに積まれているノードが全て存在しないので、ステップ１２１０に至り、ノードポインタ１５０４が指す８行目に対応する動作過程情報の状態をreturnで再度上書きして終了する。
【００４１】
図１６は、ステップ１２１３によって部分フローが生成される場合の具体例を示す図である。
この例の抽象構文木１６０１は、６行目の次に反復処理の判定式となる７行目を実行し、その結果に従って８，９行目を反復実行し、反復実行を抜けた後に１０行目を実行して終了する。また、動作過程情報１６０２には、反復区間である８，９行目を除く６，７，１０行目に対応するメインフロー領域がステップ１１０６によって生成される。
動作過程追跡部１１７は７行目に対応する動作過程情報の状態１００５をexecで上書きした後、次行ＩＤ９０８が示す１０行目のノードを取得するが、コンテキストデータは８行目となっているのでステップ１２１１に至り、反復開始行と一致するので、ノードポインタ１６０３が指しているノードをスタック１６０４に格納し、ステップ１３０１、１３０２に従って８行目と９行目に対応する部分フローの領域をフローＩＤ２で生成する。
【００４２】
次にステップ１３０３に従って、ノードポインタ１６０３が指す７行目に対応する動作過程情報の部分フロー１００６に２を追加した後、確保したフローＩＤ２のデータの状態１００５をステップ１３０４に従ってnoneで初期化する。そしてステップ１２１４に従って、ノードポインタに８行目に対応するノードの位置を格納し、さらにステップ１２０７に従って８行目に対応する動作過程情報の状態１００５をexecで上書きする。
動作過程追跡部１１７はその後、９行目に対応する動作過程情報の状態をexecで上書きした後、ノードポインタ１６０５が指すデータには次行もジャンプ行も反復開始行も存在しないので、ステップ１２２０に従ってスタックに積まれている７行目に対応するノードのデータを取得した上でコンテキストデータと比較し、共に７行目で一致するのでノードポインタに７行目に対応するノードの位置を格納する。そして７行目に対応する動作過程情報の状態１００５をexecで上書きして次のコンテキストデータを処理する。
【００４３】
図１７はステップ１２１３によってノードがスタックに積まれる例のうち、スタックに複数のデータが積まれる場合の具体例を示す図である。
この例の抽象構文木１７０１は、１４行目を実行したのち、１５行目で反復処理の判定処理を行い、その結果に従って１６行目と１８行目を反復実行する。また、１６行目は反復処理の判定式であり、その結果に従って１７行目を反復実行する。
動作過程情報１７０２には反復区間を除く１４、１５行目に対応するメインフローの領域がステップ１１０６によって生成される。
【００４４】
動作過程追跡部１１７は、１５行目に該当する動作過程情報の状態をexecで上書きしたのち、反復開始行である１６行目がコンテキストデータと一致するので、１５行目に対応するノードをスタックに格納する。そしてステップ１３０１，１３０２に従って、反復区間である１６，１７，１８行目から、さらなる反復区間である１７行目を除いた１６、１８行目に対応する部分フロー領域をフローＩＤ２で生成する。
また、ステップ１３０３に従って、ノードポインタ１７０３が指す１５行目に対応する動作過程情報のデータの部分フロー１００６に、フローＩＤ２を格納する。また、ステップ１２１４に従って、ノードポインタに１６行目に対応するノードの位置を格納し、さらに１６行目に対応する動作過程情報の状態をexecで上書きする。次にノードポインタ１７０４が指す反復開始行と、コンテキストデータの内容が共に１７行目で一致するので、ステップ１２１２に従ってノードポインタ１７０４が指す１６行目に対応するノードのデータをスタックに格納する。
【００４５】
次にステップ１３０１，１３０２に従って反復区間である１７行目に対応する部分フロー領域をＩＤ３で確保して処理する。
次にスタックに積まれた内容とコンテキストデータの内容が共に１６行目で一致するので、ステップ１２２２に従って、ノードポインタに１６行目に対応するノードの位置を格納する。また、ステップ１２０７に従って１６行目に対応する動作過程情報のデータの状態をexecで上書きして次のコンテキストデータを処理する。
【００４６】
図１８はステップ１２１５によってジャンプ行１００７が格納される場合の具体例を示す図である。
この例の抽象構文木１８０１は３４，３５，４５行目を逐次実行する。３４行目と３５行目を表現するノードから伸びている実線の曲線１８０３はジャンプ先を表現しており、３４，３５行目を実行した際に例外が発生した場合は４０，４１行目が代わりに実行される事を示す。
動作過程情報１８０２には３４，３５，４０，４１，４５行目に対応するメインフローの領域がステップ１１０６によって生成される。
【００４７】
動作追跡部１１７は３４行目に対応する動作過程情報のデータの状態をexecで上書きしたあと、コンテキストデータと、ノードポインタ１８０４が指すデータのジャンプ行が一致するので、ステップ１２１７に従ってノードポインタが指す３４行目に対応するノードの、ジャンプ行ＩＤ９１０とＩＤが一致するデータの行番号４０を、３４行目に対応する動作過程情報のデータのジャンプ行に格納する。
次にステップ１２１８に従って４０行目に対応するノードの位置をノードポインタに格納し、ステップ１２０７に従って４０行目に対応する動作過程情報のデータの状態をexecで上書きして残りのコンテキストデータを処理する。
【００４８】
図１９は、図３におけるステップ３０７の動作過程情報をソースコード編集部上へ描画する処理の詳細を示すフローチャートである。
まず、動作過程情報描画部１１９は動作過程情報保持部１１８から１つの動作過程情報を取得し、そのクラス名１００１とメソッド名１００２が一致する動作過程情報を全て取得する（ステップ１９０１，１９０２）。
次に、補正値と呼ぶ矢印を描画する水平方向の位置を補正する値を“０”で初期化する（ステップ１９０３）。
次に、ステップ１９０２で取得した動作過程情報群から一つの動作過程情報を取得する（ステップ１９０４）。
次に、ソースコード編集部１０９から該当メソッドの宣言行の行番号を取得し、その位置へ左から右方向の矢印を描画する（ステップ１９０５）。
次に、メソッド宣言の先頭文字の水平位置を桁数から算出し、それに補正値を加えたものを取得する。この位置を以降では左側の位置と呼ぶ（ステップ１９０６）。
次に、動作過程情報のメインフローから一つのデータを順に取得する（ステップ１９０７）。
【００４９】
次に、取得したデータに対応する行の先頭の水平位置を桁数から計算し、それに補正値を加えたものを取得する。以降ではこの水平位置を右側と呼ぶ（ステップ１９０８）。
なお、右側に線が描画された行は、その行が実行された事を意味し、左側に線が描画された行は、その行が実行されなかった事を意味する。描画する線の水平位置が直前に描いたものと異なる場合は、２つの線を連結する水平方向の矢印が描画されるものとする。
次に、取得したデータの状態１００５を調べ、errorやreturnである場合は（ステップ１９０９，１９１０）、右側に上下の直線を描き、直線の終端から左方向へ矢印を描画する（ステップ１９１１）。そして、補正値に定数を加算して（ステップ１９１２）、残りの動作過程情報を処理する（ステップ１９０４）。
【００５０】
状態がerrorである場合はさらに右側に「×」マークを描画する（ステップ１９１３）。なお、ステップ１９１２によって補正値に固定値が加算されるので、動作過程情報が複数ある場合でも描かれた矢印は重なる事がない。
取得したデータにジャンプ行１００７が存在する場合は（ステップ１９１３）、右側に上下方向へ直線を描き、その終端からジャンプ先の行の右側までを曲線で結ぶ（ステップ１９１４）。そして、ジャンプ先行の以降の動作過程情報のデータを処理していく（ステップ１９１５，１９０７）。
【００５１】
取得したデータに部分フロー１００６が含まれる場合は（ステップ１９１６）、反復処理の描画を行い（ステップ１９１７）、動作過程情報の次のデータを処理する（ステップ１９０７）。反復処理の描画は後述する。
データの状態１００５がnoneである場合は（ステップ１９１８）、左側に上下の直線を描き（ステップ１９１９）、残りのデータを処理する（ステップ１９０７）。
データの状態がexecuteである場合は（ステップ１９２０）、右側に上下の直線を描き（ステップ１９２１）、残りのデータを処理する（ステップ１９０７）。
【００５２】
図２０は、図１９におけるステップ１９１７の反復処理の描画を行う処理の詳細を示すフローチャートである。
まず、動作過程情報描画部１１９は対象データが保持する部分フロー１００６の数を確認する（ステップ２００１）。
フローの数が２つ以上である場合は、反復区間の右側へ下から伸びる矢印を描画して反復実行された事を表現する（ステップ２００２）。
次に、反復補正値とよばれる水平位置の補正値を０で初期化する（ステップ２００３）。これは内部フローを描画するたびに増加されるものであり、反復区間においては補正値に反復補正値をさらに加算した位置へ線を描画する。
これにより、反復によって描かれた線が重ならないようになる。
【００５３】
次に、動作過程情報描画部は部分フロー１００６で指定された一連のデータを取得し（ステップ２００４）、部分フロー内の個々のデータを順に処理していく（ステップ２００５，２００６）。
この処理は補正値に反復補正値が加わる以外はメインフローの処理と同じであるので説明を省略する。
１つの部分フローを処理すると、その終端に矢印の矢尻を描画し（ステップ２００７）、反復補正値を定数で増加させ（ステップ２００８）、残りの部分フロー１００６を処理する（ステップ２００４）。
全ての部分フローの処理が完了すると、描いた各矢印の各始点同士と、各終点同士を水平方向の直線で連結して終了する（ステップ２００９）。
【００５４】
図２１〜図２４は、図３におけるステップ３０７の動作過程情報をソースコード編集部１０９が表示する画面に描画する処理の具体例を示す。
これらの例では図の左の領域で対象となる動作過程情報の内容と、図の右の領域でソースコード編集部の表示内容を示す。
図２１は、図１９におけるステップ１９０５のメソッド宣言位置に左から右へ矢印を描画する処理と、ステップ１９１９の左側に直線を描く処理と、ステップ１９３０の直線を右側に描く処理の具体例を示す。
まず、動作過程情報描画部１１９は取得した動作過程情報からクラス名１００１とメソッド名１００２を取得し、ソースコード編集部１０９からメソッド宣言の行を取得し、その位置へ左から右方向に矢印を描画する（ステップ１９０５）。
この例では動作過程情報のクラス名がMyClass、メソッド名がshowDetail(String)であり、該当するメソッド宣言は３５行目にあるので位置２１０１に矢印を描画する。
【００５５】
次に、動作過程情報描画部１１９は取得したメインフローのデータから順にデータを取得して描画していく。
この例では、まず３６行目のデータが対象となり、状態がexecであるのでステップ１９２１に従って右側の位置２１０２に垂直方向の直線を描画する。同様に、次の３７行目のデータも状態がexecであるので右側の位置２１０２に垂直方向の直線を描画する。
次に、３８行目のデータを処理するが、状態がnoneであるので左側の位置２１０３に垂直方向の直線を描画する。また、直前に描いたのが右側であり水平方向の位置が異なるので水平方向の矢印で３７行目の直線の終点と、３８行目の直線の始点が連結される。同様に３９行目から４５行目までは状態がnoneであるので左側の位置２１０３に直線を描画し、４７行目は右側に描画する。４８行目は状態がreturnであるので、右側に上下の直線を描画し、その終端から２１０４に示すように右から左方向へ矢印を描画して、この動作過程情報の処理を終了する。
開発者は描画された一連の矢印によって、３６、３７、４７行目が実行され４８行目で処理が中断したということを直感的に認識することができる。
【００５６】
図２２は、図１９におけるステップ１９１７の反復処理を描画する処理の具体例を示す図である。
動作過程情報描画部１１９は、クラス名１００１とメソッド名１００２が一致する新たな動作過程情報を取得して矢印を描画する。なお、複数の本数の矢印を描画する際は、ステップ１９１２で補正値が加算されるので、２２０１に示すように各矢印が重ならないように表示される。また、４１行目の処理で部分フローが含まれるので図２０で示した反復処理を描画するフローを実行する。
まず、４１行目は２つの部分フローを保持するので、ステップ２００１、２００２に従って、反復区間の右側に下から上への矢印２２０２を描画する。
次に、ステップ２００３により反復補正値を定数で初期化する。図中の２２０３で示す距離がこの定数の大きさとなる。
【００５７】
次に、部分フローを１つずつ取得して処理していく。具体的には、まず部分フローにＩＤ２が格納されているので、フローＩＤが“２”である４２、４３行目のデータを処理し、それぞれ状態がexecであるので反復補正値２２０３を加算した位置へ水平方向の直線を描画する。４３行目の次はデータが存在しないので、ステップ２００７に従って描いた直線の終端に矢尻を描画する。
次に、ステップ２００８に従って反復補正値を増加し、部分フローの描画結果が重ならないようにする。増加する値は図中の２２０４の距離となる。
フローＩＤが３である部分フローも同様に処理し、最終的に２２０５のように描画され、開発者は描画された線によって４２，４３行目が反復処理によって２回実行されたことを直感的に認識することができる。
【００５８】
図２３は、図１９におけるステップ１９０９の、状態１００５がerrorの場合の具体例を示す図である。
この例の動作過程情報は４０行目の状態がerrorとなっているので、ステップ１９１３に従って、右側の位置に「×」マークを描き、さらにステップ１９１１に従って垂直方向の直線と、その終端から左方向へ伸びる矢印を描画する。描かれた結果が２３０１となる。
開発者は描かれた矢印から、４０行目で障害が発生し、メソッド処理が中断されたことを直感的に認識することができる。
【００５９】
また、showDetailメソッドに対する動作過程情報が図２１から図２３で述べた３つのみとすると、開発者は描かれた３本の矢印から、該当メソッドは計３回実行され、そのうち１回で障害が発生してメソッド処理が中断し、１回は反復処理を２回実行した事を認識することができる。
【００６０】
図２４は、図１９におけるステップ１９１３の、ジャンプ行１００７が存在する場合の具体例を示す図である。
処理対象となっている動作過程情報の８２行目はジャンプ行に値が存在するので、動作過程情報描画部はステップ１９１４に従って右側に直線を描き、その終端からジャンプ行である８４行目の右側までを曲線で結ぶ。描かれた結果が２４０１となる。
開発者は描画された結果を見ることで、８２行目で例外が発生し、８４行目が実行された事を直感的に認識することができる。
【００６１】
なお、上記実施形態においては、プログラム開発者が、対象のソースコードの実行過程を確認する場合について説明したが、開発担当者以外の者が、既存のソースコードの実行過程を確認する場合についても同様に利用可能であることは言うまでもない。
また、対象となるソースコードをコンパイラによってコンパイルした実行クラスと、構文解析した抽象構文木とが既に存在する場合には、コンパイルと構文解析処理は省略することができる。
【図面の簡単な説明】
【００６２】
【図１】本発明の実施の形態を示すシステム構成図である。
【図２】プログラム開発環境の実行画面の例を示す図である。
【図３】実施形態のプログラム開発システムにおける開発工程の全体の流れを示すフローチャートである。
【図４】構文解析部によって生成される抽象構文木の一例を示す図である。
【図５】実行情報の出力処理命令を埋め込む処理の詳細を示すフローチャートである。
【図６】出力される実行情報の例を示す図である。
【図７】実行情報分類部によって分類した結果の例を示す図である。
【図８】簡略化した抽象構文木の一例を示す図である。
【図９】簡略化した抽象構文木のデータ構造を示す図である。
【図１０】動作過程情報のデータ構造を示す図である。
【図１１】構文解析木と実行情報から動作過程情報を生成する処理の詳細を示すフローチャートである。
【図１２】コンテキストと抽象構文木の比較結果を格納する詳細詳細を示すフローチャートフローである。
【図１３】動作過程情報に部分フローの領域を生成する詳細詳細を示すフローチャートである。
【図１４】状態にexecが格納される場合と、errorが格納される場合の具体例を示す図である
【図１５】次行が複数存在する場合と、正常終了する場合の具体例を示す図である。
【図１６】部分フローが生成される場合の具体例を示す図である。
【図１７】スタックに複数のデータが積まれる場合の具体例を示す図である。
【図１８】ジャンプ行が格納される場合の具体例を示す図である。
【図１９】動作過程情報を描画する処理の詳細を示すフローチャートである。
【図２０】反復処理の描画を行う処理の詳細を示すフローチャートである。
【図２１】左から右へ矢印を描画する処理と、直線を描く処理の具体例を示す図である。
【図２２】反復処理を描画する処理の具体例を示す図である。
【図２３】状態がerrorの場合に描画する具体例を示す図ある。
【図２４】ジャンプ行が存在する場合に描画する具体例を示す図である。
【図２５】従来のプログラム開発環境の実行画面を示す図である。
【符号の説明】
【００６３】
１０１    プログラム開発環境
１０２    計算機
１０３    プログラム実行環境
１０４    計算機
１０７    画面表示装置
１０８    ソースコード保持部
１０９    ソースコード編集部
１１０    コンパイラ
１１１    実行クラス保持部
１１２    構文解析部
１１３    抽象構文木保持部
１１４    実行情報出力命令埋め込み部
１１６    実行情報分類部
１１７    動作過程追跡部
１１８    動作過程情報保持部
１１９    動作過程情報描画部
１２０    実行クラス保持部
１２１    プログラム実行部
【図１】
2008059515.tif 000003
【図２】
2008059515.tif 000004
【図３】
2008059515.tif 000005
【図４】
2008059515.tif 000006
【図５】
2008059515.tif 000007
【図６】
2008059515.tif 000008
【図７】
2008059515.tif 000009
【図８】
2008059515.tif 000010
【図９】
2008059515.tif 000011
【図１０】
2008059515.tif 000012
【図１１】
2008059515.tif 000013
【図１２】
2008059515.tif 000014
【図１３】
2008059515.tif 000015
【図１４】
2008059515.tif 000016
【図１５】
2008059515.tif 000017
【図１６】
2008059515.tif 000018
【図１７】
2008059515.tif 000019
【図１８】
2008059515.tif 000020
【図１９】
2008059515.tif 000021
【図２０】
2008059515.tif 000022
【図２１】
2008059515.tif 000023
【図２２】
2008059515.tif 000024
【図２３】
2008059515.tif 000025
【図２４】
2008059515.tif 000026
【図２５】
2008059515.tif 000027