(57)【要約】      （修正有）【課題】既存のプログラムを参照しながらユーザが指定した入力からユーザが指定した出力を計算するロジックを抽出できるようにする。【解決手段】既存システムを構成しているプログラムに対して、ユーザに抽出したいロジックの入力情報を指定させ、プログラム中の命令文ごとに特定のロジックとして抽出する必要性についての判定を行う。ここで、特定ロジックとして解析対象プログラムから抽出する必要性を以下のように分類する。まず、ユーザの指定した入力のみから影響を受けている命令文は抽出対象となる命令文、つぎにユーザの指定した入力と指定しなかった入力の両方から影響を受けている命令文は修正候補となる命令文、最後にユーザの指定しなかった入力のみから影響を受けている命令文は抽出対象とならない命令文と分類し、それぞれの命令文を区別して表示する。【選択図】図２
2007094753.tif 000002
【特許請求の範囲】
【請求項１】
ユーザの指定したプログラムより、プログラムとして実行できる命令文の集合であるロジックを抽出すること又は抽出した結果を修正することを支援するロジック抽出支援装置であって、
前記命令文又は当該命令文に含まれているデータ項目ごとに、抽出する必要性若しくは修正する必要性を判定する手段と、
判定した結果を出力する手段とを有することを特徴とするロジック抽出支援装置。
【請求項２】
請求項１に記載のロジック抽出支援装置において、
前記ユーザの指定した入力項目の集合から決まる命令文の集合を抽出対象ロジックの候補として出力する手段を有することを特徴とするロジック抽出支援装置。
【請求項３】
請求項１に記載のロジック抽出支援装置において、
前記判定する手段は、前記ユーザから指定した入力項目の集合から決まる変数とそうでない変数の両方からの影響受ける命令文を修正する命令文の候補として抽出する手段を有することを特徴とするロジック抽出支援装置。
【請求項４】
請求項１に記載のロジック抽出支援装置において、
前記ユーザが指定した入力項目の集合から決まる変数とそうでない変数を区別して出力する手段を有することを特徴とするロジック抽出支援装置。
【請求項５】
請求項１のロジック抽出支援装置において、
前記ユーザが指定しなかった入力項目の集合から決まる変数を、抽出又は作成するにロジックに付加するロジックの候補として出力することを特徴とするロジック抽出支援装置。
【請求項６】
請求項１乃至５のいずれかに記載のロジック抽出支援装置において、
前記判定する手段の判定結果に従って、プログラム中の命令文又はデータ項目を分類して表示する手段を有することを特徴とするロジック抽出支援装置。
【請求項７】
請求項６に記載のロジック抽出支援装置において、
前記表示する手段は、ロジック修正候補部分を示して、ソースの修正を促し、ソース修正を受けつけた場合、再度ロジックの修正候補部分を表示することを特徴とするロジック抽出支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報システムで使用されているプログラムの解析を行い、プログラムからユーザの指定したロジックを抽出することを支援する、特にプログラムスライス技術に関する。
【背景技術】
【０００２】
従来から、プログラム中の起点情報を元にして、その起点に影響を与えている若しくは与えられているプログラムの一部分を抽出する技術として、プログラムスライス技術があった。近年、このプログラムスライス技術は現行のシステム（レガシーシステム）を構成しているプログラムから、ユーザの指定するロジックを抽出できる技術として、注目を集めている。
【０００３】
この技術は、プログラム中の命令文間の関連を依存グラフと呼ばれるグラフに纏め、この依存グラフから起点として指定した命令文に影響を与えている命令文、若しくは影響を与えられている命令文を抽出する技法である。プログラムスライスでは命令文間の関連をデータ依存関連と制御依存関連の２つに分類しており、データ依存はある命令文で更新したデータを他の命令文で参照している関係、制御依存は命令文の実行条件を制御するような関連を示している。
【０００４】
また、依存グラフを用いて特定のプログラム部分を取り出す方法には、フォワードスライスとバックワードスライスの２種類がある。フォワードスライスとは、スライス処理を開始する起点となる命令文を選択して、そこから依存グラフをプログラムの実行順に辿り、その起点が影響を及ぼす命令文を抽出する方法がある。
【０００５】
また、バックワードスライスは、スライス処理を開始する起点となる命令文を選択し、依存グラフをプログラムの実行順とは逆方向に溯ることによって、その起点に影響を与える命令文を抽出する方法である。
【０００６】
プログラムスライスを用いてレガシーシステムを構成するプログラムからユーザの指定するロジック（サブルーチン）を抽出するシステムとして、特許文献１のシステムが知られている。このシステムでは、特定のインターフェイス情報を選択してそこからプログラムスライスを実行することによって、その情報に関係している命令文を抽出することも可能であると記載されている。
【０００７】
【特許文献１】特開２００５−１８１１４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ユーザが抽出したい機能が含まれているプログラムが特定できており、さらにこの機能の論理的なインプットとアウトプットがある程度分かっているような場合、ユーザが期待しているロジックの抽出結果とは、ユーザの指定した入力項目のみから、ユーザの指定した出力を計算するようなロジックであると考えられる。これはレガシーシステムの再生等を行う場合に頻繁に発生する状況である。
【０００９】
しかし、特許文献１のシステムでは、ユーザの指定した項目からプログラムスライスを実行することによって、プログラム中からユーザの指定したロジックを抽出することが可能であると主張してはいるものの、その具体的な方法については言及されていない。
その為、フォワードスライスを適用してロジック抽出を行った際に、プログラムの実行させる上で必要なロジックを抽出できない事やバックワードスライスを適用してロジック抽出を行った際にその結果にはユーザの必要としていない命令文が含まれてしまう、というプログラムスライスをロジック抽出に適用した際に発生する本質的な課題を解決できていない。
【００１０】
さらに、ユーザがこの方法を用いてユーザの意図している入力のみから、ユーザの意図している出力を抽出又は作成しようとした場合、抽出したロジックを一度理解して、ユーザの指定しなかった入力からの影響を排除するための修正を行わなければならない。そのため修正個所の特定に時間が掛かってしまう、修正個所を間違えるという課題が発生することも考えられる。
【課題を解決するための手段】
【００１１】
本発明では、既存システムを構成しているプログラムに対して、ユーザに抽出したいロジックの入力情報を指定させ、プログラム中の命令文ごとに特定のロジックとして抽出する必要性についての判定を行う。ここで、特定ロジックとして解析対象プログラムから抽出する必要性を以下のように分類する。まず、ユーザの指定した入力のみから影響を受けている命令文は抽出対象となる命令文、つぎにユーザの指定した入力と指定しなかった入力の両方から影響を受けている命令文は修正候補となる命令文、最後にユーザの指定しなかった入力のみから影響を受けている命令文は抽出対象とならない命令文と分類し、それぞれの命令文を区別して表示する。なお、ユーザには入力起点だけでなく出力起点も指定させ、ロジックの抽出範囲を狭めてもよい。
【００１２】
ユーザに対してはディスプレイ装置等を通じ、抽出対象となる命令文、判定が必要な命令文、抽出対象とならない命令文ごとに分類してその結果を表示する。このような方法で、プログラムからユーザに指定されたロジックを抽出する為の修正個所を示すことによって、ユーザが既存システムから指定したロジックを抽出する過程を支援する。
【発明の効果】
【００１３】
本発明のシステムによって、既存のプログラムを参照しながらユーザが指定した入力からユーザが指定した出力を計算するロジックを抽出または作成することができる。
【発明を実施するための最良の形態】
【００１４】
以下に本発明の実施の形態を説明する。
【実施例１】
【００１５】
（概要）
以下、本発明の実施例を図面を用いて詳細に説明する。
図１は、ロジック抽出支援システム全体構成図を示している。システムはバス等の接続手段で接続されたＣＰＵ１４１、ディスプレイ装置１４２、キーボード装置１４３、マウス等の指示装置１４４と、メモリ１２０、及びメモリ上に置かれたプログラム１３１〜１３４からなる。また１１０は記憶装置を示しており、１１１〜１１２はディスク装置上に置かれたデータである。なお、対象プログラム１１１は、本発明システムが解析対象とするプログラム及び本システムによって修正されたプログラムの集合である。
【００１６】
図２に記載されているフローチャートを用いて、ロジック抽出支援システムの制御部の機能について説明する。制御部の機能は１３１〜１３４の機能からユーザに実行する機能を指定させ、その機能を実行する。
【００１７】
まず、図１のプログラム解析部１３２はキーボード１４３や指示装置１４４からユーザによって指定されたプログラム名をキーとして、解析対象のプログラムの集合１１１を検索して解析するプログラムを取得する（ステップ２０１）。
【００１８】
次に、ロジック抽出の起点となる入力起点や出力起点をユーザに指定させ、起点情報をロジック抽出部１３３に与える（ステップ２０２）。
【００１９】
次に、特定ロジック抽出機能を実行することによって、抽出対象となる命令文、ロジック抽出の際に修正候補となる命令文、抽出対象とならない命令文に分類して、その結果をロジック抽出結果１１２に登録する。なお特定ロジック抽出機能２０３については以下で詳細に説明を行う（ステップ２０３）。
【００２０】
表示部１３４は１１２に格納された依存情報を取得して、抽出する命令文、修正候補の命令文、抽出しない命令文に分類してディスプレイ装置１４２に表示する。さらにディスプレイ装置１４２に表示したロジック抽出の結果に対して、ユーザにキーボード１４３からプログラムを修正させる。そして、その結果を取得したロジック修正/登録部は修正したプログラムを解析対象ソースとして登録する。（ステップ２０４）
上記のステップ（２０１〜２０４）をプログラムの修正が終了するまで繰り返し行い、プログラムの中に修正候補の命令文がなくなったときにシステムを終了する。
【００２１】
次に図１２のメニュー画面を用いて制御部の機能を具体的に説明する。まずユーザに“解析対象プログラムの取得／登録”２７０１を選択させ、解析対象のプログラムを１１１から取得する。
【００２２】
解析対象プログラムの取得後、ユーザに“プログラム解析機能”２７０２の選択させ、プログラム解析部１３２を起動して依存情報を作成し、その結果を依存情報１１２に登録する。依存情報とは、命令文情報テーブル６０１、ワード情報テーブル６０２、制御依存情報テーブル６０３、データ依存情報テーブル６０４のことを指している。これらのテーブルについては以下で詳細な説明を行う。
【００２３】
次に、ユーザに“入出力起点の登録”２７０３を選択させ、入出力登録用の画面を呼び出して、ユーザに抽出対象となる入力データ項目をこの画面から登録させる。そして登録された入力情報をワード情報テーブル６０２に登録する。なお、ロジックの抽出範囲を狭めるために入力起点の取得の際に出力起点情報を取得してもよい。
【００２４】
入出力起点の登録後にユーザに“特定ロジック抽出機能実行”２７０４を選択させ、ロジック抽出部１３３を実行してその結果をもとに、依存情報に格納されている命令文情報テーブル６０１とワード情報テーブル６０２を更新する。
【００２５】
特定ロジックの抽出後にその抽出結果を表示するときは、ユーザに“ロジック抽出結果表示／修正機能実行”２７０５を選択させ、表示部１３４が起動して抽出結果を図２８のソース表示画面に表示する。そしてロジックの修正候補となる命令文があるときは、ユーザに図３０に示すロジック修正画面からプログラムの修正を促し、その結果を解析対象プログラムとして対象プログラム１１１に登録する。
【００２６】
また、図２８のソース表示の結果、ユーザがロジックの修正が無いと判断した時は、終了ボタン２７０７を押下させ最終的なロジックの抽出結果を対象プログラム１１１に格納して処理を終了する。
【００２７】
次に、外部記憶装置について説明を行う。まず、対象プログラム１１１には解析対象となるプログラム及び図３０のロジック修正画面からユーザに修正されたプログラムが格納され、依存情報１１２には図６に示されている各テーブルが格納されている。
【００２８】
これらのテーブルの説明を行うと、６０１の命令文情報テーブルは解析対象のプログラムを命令文単位にレコードに登録しているテーブル、６０２のワード情報テーブルは解析対象のプログラムをデータ項目単位にレコードに登録しているテーブルである。また６０３の制御依存情報には条件文とその条件文に制御をうける命令文の関連を登録し、６０４のデータ依存情報テーブルには、データ項目を更新している命令文とそのデータ項目を参照している命令文の関連を登録する。また図６の各テーブルを結んでいる線はこれらのテーブル間の関連を示している。
【００２９】
次に、図３に示す特定ロジック抽出機能の全体フローチャート及び特定ロジック抽出機能のサブルーチンである図４のロジック抽出処理のフローチャートと図５必要ロジック判定処理のフローチャートの説明を行う。これはステップ２０３の詳細を示したものである。
【００３０】
特定ロジック抽出機能２０３とは、依存情報１１２とユーザに指定された入出力情報から、解析対象のプログラムをユーザによって指定された入力情報のみから影響される命令文及びデータ項目、ユーザに指定されなかった入力から影響を受ける命令文及びデータ項目、指定された入力と指定されなかった入力の両方から影響を受ける命令文及びデータ項目に分類する機能である。なお、ユーザに指定されなかった入力から影響を受ける命令文は、この入力のみから影響を受ける命令文としてもよい。
【００３１】
まず、図３のフローチャートの概要についての説明を行う。ワード情報テーブル６０２のレコードのうち、入力起点に指定された命令文番号とデータ項目名の登録されているレコードの着目区分に“○”を登録し、それ以外の入力項目については着目区分に“×”を登録する。（ステップ３０１）。
【００３２】
次に、図５に示す必要ロジック判定処理を行って命令文情報テーブル６０１のレコードのうち入力起点である命令文の登録されているレコードの抽出区分にその評価結果を登録する（ステップ３０２）。
【００３３】
ユーザに指定された出力命令文と出力データ項目のセットである出力起点情報を取得する（ステップ３０３）。
【００３４】
ロジック抽出処理３０４を実行して、出力起点が影響を受ける命令文、データ項目の抽出区分、着目区分の評価を行う（ステップ３０４）。
【００３５】
以下で図７に示したプログラムからロジック抽出を行う過程を例にあげ、図３のフローチャートの説明を行う。まず、ロジック抽出機能で使用する各テーブル及びそれらを構成しているデータ項目の説明を行う。図８、図１０、図１２、図１３、図１４はプログラム解析機能２０１の実行の結果作成される命令文情報テーブル、ワード情報テーブル、制御依存情報テーブル、データ依存情報テーブル、依存グラフを示している。図１４の依存グラフとは、図１２の制御依存関連と図１３のデータ依存関連を一つに纏めたグラフである。なお、図１４中の破線はデータ依存を示しており、実線は制御依存を示している。
【００３６】
つぎに各テーブルのデータ項目についての説明を行う。まず図８の命令文情報テーブルの命令文番号８０１には命令文ごとに項番を登録し、命令文８０２には解析対象プログラムを命令文単位に登録する。又、抽出区分８０３には、後述する必要ロジック判定処理の評価結果を登録する。評価の結果、抽出対象となる命令文については抽出区分に“１”を、抽出するには修正が必要な命令文については“２”を、制御依存元である条件文が抽出対象となれば抽出対象となる命令文については“３”を、抽出対象とならない命令文については“５”を登録する。さらに、図１０のワード情報テーブルのデータ項目について説明を行う。
【００３７】
まず、命令文番号１００１は、前述の命令文情報テーブルに登録した命令文番号と同一の番号をデータ項目単位に登録し、データ項目名１００２には解析対象プログラムをデータ項目単位に分割して登録する。着目区分１００３には後述する必要ロジック判定処理のデータ項目の評価結果を登録する。評価の結果、抽出対象となるデータ項目には “○”を、抽出対象となるか判定が必要なデータ項目には“△”を、抽出対象にはならないデータ項目には“×”を登録する。また、参照/更新区分１００４には登録したデータ項目が他のデータ項目を参照している場合には“参照”を登録し、命令文中で更新されているデータ項目には“更新”を登録する。図１２の制御依存情報テーブルの依存元命令文番号１２０１には制御依存の依存元となっている命令文番号を登録し、依存先命令文番号１２０２には制御依存の依存先となっている命令文番号を登録する。図１３のデータ依存情報テーブルの依存元命令文番号１３０１にはデータ依存の依存元となっている命令文番号を登録し、依存先命令文番号１３０３にはデータ依存の依存先となっている命令文番号を登録する。またデータ依存元とデータ依存先のデータ項目名称は変わらないと仮定しているため、データ項目１３０２にはデータ依存の対象となっているデータ項目名を登録する。
【００３８】
以下で図７に示したプログラムから特定のロジックを抽出する過程を具体的に説明する。まずユーザの指定した入力起点情報であるワード情報１００６〜１００８については、着目区分に“○”を登録して、それ以外の入力データ項目１００５と１００９の着目区分には“×”を登録する。（ステップ３０１）
つぎに入力文ごとに、図５に示している必要ロジック判定処理を行って、入力となる命令文８０４〜８０８の抽出区分に評価結果を登録する。なお、図１４の依存グラフ中の、１４０２〜１４０４で示した命令文は、ユーザの指定した入力起点を含む命令文を示している（ステップ３０２）。
【００３９】
次に、ユーザに出力起点として指定された命令文情報８０９、８１０を取得する。
なお、図１４の依存グラフ中の１４１２と１４１３で示した命令文は、出力起点の命令文である（ステップ３０３）。
【００４０】
ステップ３０３の実行後、ロジック抽出処理を実行して入力文以外の各命令文、データ項目の評価を行う（ステップ３０４）。以下でロジック抽出処理の詳細をそのステップごとに示す。
【００４１】
まずロジック抽出処理について図４のフローチャートを用いてステップごとに説明を行う。ロジック抽出処理を出力起点となっている命令文から実行して、その依存元命令文の抽出区分が評価されているかの確認を行い、すべての依存元命令文で抽出区分が評価されていた場合はステップ４０５に遷移し、評価されていない依存元命令文があったときは４０２に遷移する（ステップ４０１）。
【００４２】
ステップ４０１で確認した、抽出区分が評価されていない依存元命令文のうちから任意の一つの依存元命令文を選択する（ステップ４０２）。
【００４３】
ステップ４０２で選択した、依存元命令文から再帰的にロジック抽出処理を呼び出す（ステップ４０３）。以上のようにすべての依存元命令文で抽出区分が未評価となっていない命令文に到達するまで、各命令文でロジック抽出処理４０３の再帰呼び出しを繰返し行う。
【００４４】
各依存元の抽出区分が評価されている命令文に到達した場合には、ステップ４０１の判定からステップ４０５の必要ロジック判定処理を実行する。この必要ロジック判定処理については後で図５のフローチャートを用いて説明を行うが、この処理によって着目している命令文の抽出区分を評価する（ステップ４０５）。
【００４５】
そして、ステップ４０５で評価した抽出区分や着目区分の情報を命令文情報テーブル６０１、ワード情報テーブル６０２に登録して、着目している命令文から呼び出したロジック抽出処理を終了させる（ステップ４０６）。
【００４６】
上記のロジック抽出処理が終了すると、システムの着目点は終了したロジック抽出処理の直前に呼び出したロジック抽出処理に遷移する。つまりこのロジック抽出処理終了と同時に、依存先の命令文から呼び出したロジック抽出処理に着目点が遷移する。
【００４７】
着目点が依存先の命令文から呼び出されたロジック抽出処理に遷移すると、ステップ４０３のロジック抽出を呼び出した時点で処理が停止しているため、ステップ４０４からロジック抽出処理を再開する。
【００４８】
ステップ４０４では、着目している命令文の依存元命令文の抽出区分はすべて評価されているかを確認して、すべての依存元命令文で抽出区分が評価されていれば、ステップ４０６に遷移して、評価されていない依存元命令文が存在すればステップ４０２に遷移する。以上の処理を各命令文から呼び出されたロジック抽出処理がすべて終了するまで繰返し行う。
【００４９】
次に、図１４の依存グラフを用いて図７に示したプログラムからロジック抽出処理について具体的な説明を行う。
【００５０】
１４１３がユーザに出力起点として指定された場合、依存元命令文を調査すると１４０７と１４１１の抽出区分が未評価であると判別可能になる（ステップ４０１）。
そこで、１４１１と１４０７から着目する命令文を一つ選択する。（ステップ４０２）
ステップ３０４で命令文１４１１を選択した場合には、１４１１からロジック抽出処理を再帰的に呼び出す。（ステップ４０３）
命令文１４１１から再度ステップ３０３の処理を行い、１４１１の依存元命令文の抽出区分が全て評価されているかを判定する。（ステップ４０４-２）
依存元の命令文は１４０２、１４０３、１４０９が存在するが、そのうち１４０２と１４０３については抽出区分に“１”が既に登録されている為、評価されていない１４０９からロジック抽出処理を呼び出す。（ステップ４０２-２、４０３-２）
上記の処理を依存元の命令文の抽出区分がすべて評価されている命令文に達するまで行う。その結果、溯った依存元命令文ごとにロジック抽出処理を呼び出すことになる。
【００５１】
上記の例では、１４０６まで命令文を溯った時点で、依存元の命令文の抽出区分がすべて評価されることになるので、ここで、後述する必要ロジック判定処理を実行して着目している命令文１４０６の評価を行う。なお同時に命令文１４０６に含まれるデータ項目の評価も行う。
【００５２】
命令文１４０６の抽出区分とそのデータ項目の着目区分の評価結果を図８命令文情報テーブルと図１０のワード情報テーブルに登録して、１４０６から呼び出したロジック抽出処理を終了させる。１４０６で呼び出されたロジック抽出処理が終了すると、着目地点は１４０７となり、この命令文で呼び出ていたロジック抽出処理をステップ４０４から実行する。
【００５３】
まず、着目している命令文である１４０７の依存元命令文である１４０５と１４０６の抽出区分を取得する。その結果、命令文１４０７の依存元命令文の抽出区分は全て評価されたので、図４に示す必要ロジック判定処理をもとに１４０７の抽出区分及び１４０７に含まれているデータ項目の評価の行い、その結果を図８の命令文情報テーブル、図１２のワード情報テーブルに登録する。さらに１４０７から呼び出したロジック抽出処理を終了させると、着目する命令文は１４０７から１４０９に遷移する。以上のように各命令文で呼び出したロジック抽出処理を順次終了させ、出力起点の抽出区分と着目区分がすべて決定したら、ステップ２０３に示す特定ロジック抽出機能の処理は終了となる。
【００５４】
（必要ロジック判定処理）
図５は必要ロジック判定処理のフローチャートを示しており、着目している命令文の抽出区分の評価と、命令文中の更新データ項目の着目区分の評価を行う。以下フローチャートのステップごとに説明を行う。
【００５５】
まず、着目している命令文中の参照項目のデータ依存元を検索して、その着目区分を取得する（ステップ５０１）。
【００５６】
つぎに着目している参照項目のデータ依存元が複数あれば５０４の処理を行い、複数存在しなければ取得した着目区分を着目している参照項目の着目区分に反映させる（ステップ５０２、５０３）。
【００５７】
着目している参照項目に対して複数のデータ依存元が存在しているときは、取得した着目区分のうち最も抽出対象から遠い評価をそのデータ項目の評価としてワード情報テーブルに登録する（ステップ５０４）。なお “○”→“△”→“×”の順に抽出対象から遠い評価とする。
【００５８】
着目している命令文の参照項目の着目区分が全て“○”と判定された場合、ステップ５０６に遷移する（ステップ５０５）。
まず、着目している命令文中の着目区分に全て“○”が登録されていた場合には、更新項目にも“○”を付与する。なお着目している命令文が、条件文で更新項目が無い場合には、仮想的に条件文の返り値に対して着目区分を付与してもよい。（ステップ５０６）
ステップ５０６によって更新項目若しくは返り値に○の付与された命令文については、その命令文番号から制御依存情報テーブルを検索することにより、制御依存元の命令文の抽出区分を取得する（ステップ５０７）。
【００５９】
制御依存元の命令文が全て“１”若しくは制御依存元命令文が無い場合は、着目している命令文の抽出区分に“１”を登録する。（ステップ５０８）
また、制御依存元の命令文の抽出区分に“１”以外のものが登録されている場合、着目している命令文の抽出区分に“３”を登録する。（ステップ５０９）
ステップ５０５で命令文中の参照項目の着目区分に“○”“△”“×”が２種類以上混在していると判定された場合又は“△”のみで構成されていると判定された場合、更新項目に、“△”を付与する。なお着目している命令文が、条件文で更新項目が無い場合には、条件文の返り値に対して仮想的に着目区分“△”を付与してもよい。（ステップ５１０）
ステップ５１０によって更新項目若しくは返り値に“△”の付与された命令文については、その命令文情報テーブルの抽出区分に“２”を登録する（ステップ５１１）。
ステップ５０５で取得した命令文中の参照項目の着目区分に“×”が登録される(例えば全ての着目区分に)と判定された場合には、更新項目にも、“×”を付与する。なお着目している命令文が条件文で、更新項目が無い場合には、条件文の返り値に対して着目区分“×”を付与してもよい（ステップ５１２）。
【００６０】
ステップ５１２によって更新項目若しくは返り値に“×”の付与された命令文については、その命令文情報の抽出区分に５を登録する。（ステップ５１３）
ここで、命令文情報９０３の抽出区分の評価と、それにこの命令文の更新項目であるワード情報１１０４の着目区分の評価を例にとり具体的に必要ロジック判定処理の説明を行う。まず着目している命令文番号をキーとして、参照/更新区分が参照になっているワード情報テーブルを検索すると、レコード１１０５が取得できる。
【００６１】
ワード情報１１０５のデータ依存元である、１１０１、１１０２、１１０３を調査すると、すべてのデータ項目で依存元が単一であり、これらの着目区分に“○”が登録されていることが分かるので、ワード情報１１０５の着目区分にも“○”を登録する。（ステップ５０１〜５０３）
命令文情報９０３の構成要素である参照項目１１０５の着目区分のすべてに“○”が登録されたので、命令文情報９０３の構成要素である更新項目１１０４の着目区分にも“○”を登録する。（ステップ５０５、５０６）
更新項目１１０５の評価が終了したので、１１０５が含まれている命令文である９０３が制御依存元命令文の抽出区分を調査する。９０３の制御依存元命令文を検索して命令文情報９０１を取得すると抽出区分に“２”が登録されているので、命令文情報９０３の抽出区分に“３”を登録する。（ステップ５０９）
（プログラム中にループを含む場合の特定ロジック抽出機能）
上記の実施例では、解析対象プログラムにループ処理の無い場合を例あげて説明を行ったが、これはループのあるプログラムについて解析を行った場合には特別な処理が必要になる為である。なぜなら、解析対象となるプログラムの中にループ処理が含まれる場合の命令文２５０３と命令文２５０５の関連からも分かるように、ループ処理内では命令文間の依存性が循環している為その評価を決定することが出来ないからである。
【００６２】
そこで、下記に示す処理を実行することによってループがない場合と同様に命令文やデータ項目の評価を行うことができるようにしている。
【００６３】
まずこの処理で用いるテーブルについて説明する。この処理で用いるテーブルは、ループのない場合と同様に、命令文情報テーブル６０１、ワード情報テーブル６０２、制御依存情報テーブル６０３、データ依存情報テーブル６０４の４つであるが、命令文情報テーブルについては、１９０１評価状態区分と１９０２調査開始フラグを登録する点で、従来の命令文情報テーブルと異なっている。追加されたデータ項目であるについて説明を行うと、評価状態区分１９０１には着目している命令文の抽出区分の評価状態が入力され、追跡開始フラグには依存性の循環している命令文中の抽出区分を決定する為の起点となる命令文に付加するフラグである。
【００６４】
これらのデータモデルを用いてループを含むプログラムの解析を行った場合の処理について説明を行う。まず、着目する命令文の依存元命令文の抽出区分に“１”〜“５”のいずれかを仮定してロジック抽出処理を行い、ループ内の命令文の評価を行う。そして抽出区分に仮定値を登録した命令文について、その仮定した抽出区分の評価と必要ロジック判定処理の評価結果と一致しているかを確認し、仮定した抽出区分と必要ロジック判定処理の結果が一致していなければ別の抽出区分を仮定する。この処理を仮定した評価と必要ロジック判定処理の評価が一致するまで繰返し行い、一致した際の抽出区分を確定した抽出区分として登録する。そのため、抽出区分の評価の状態が仮定値であるのか、決定値であるのかを区別する必要があり、図１９の命令文情報テーブルに示されている通り、抽出区分の評価の状態を示す評価状態区分という項目を追加する。この評価状態区分には、抽出区分の評価が未決定のうちは“評価中”を登録し、抽出区分が仮定値であるときは“仮決め”を登録して、抽出区分が決定値である場合は“決定”を登録する。また必要ロジック判定処理を実行する場合には評価状態区分についての評価も行い、依存元の命令文の評価状態区分に“仮決め”が含まれていれば着目している命令文の評価状態区分も“仮決め”とし、依存元命令文の評価状態区分の評価が“決定”のみであれば着目している命令文の評価状態区分にも“決定”を登録する。また、依存性の検出された命令文では追跡開始フラグに“１”を登録してループ評価処理の起点とする。
【００６５】
なお、図１５、図１６のフローチャートはループ処理を含むプログラムからロジックを抽出する方法を示したフローチャートである。ループがある場合も、基本的な処理はループの無い場合と同様に、図３のフローチャートの通りに行われる。ただし、ロジック抽出処理については解析対象プログラムにループが含まれている場合の処理とループが含まれていない処理ではその処理内容が異なる。そのため、この部分をループ評価処理としてサブルーチン化して追加したフローチャートを図１５に示し、さらに図１６、図１７で切り出したループ評価処理の説明を行う。なお説明を分かりやすく行うため、図１５〜図１７の説明を行ってから、実施例の説明を行う。
【００６６】
まずは、図１５〜図１７のフローチャートを用いて解析対象のプログラムにループ処理が含まれている場合の説明を行う。なお図１５については解析対象のプログラムにループがない場合のフローチャートと異なる処理についてのみ説明を行う。
【００６７】
解析対象のプログラムにループが含まれている場合と含まれていない場合とで異なる処理はステップ１５０１、ステップ１５０４、ステップ１５０９の３つの処理である。
【００６８】
まず、ステップ１５０１ではロジック抽出処理を呼び出した命令文の調査状態区分に“評価中”を登録する。
【００６９】
そしてステップ１５０４で依存元の命令文の調査状態区分に“評価中”が登録されていた場合、依存性の循環を検出したと判定して、ステップ１５０９に遷移する。
１５０９のループ評価処理では依存性の循環している命令文の集合の抽出区分を決定する。
【００７０】
続いて図１６のループ評価処理について説明を行う。
まず、１５０４で検出された評価状態区分に“評価中”の登録されている命令文を選択する（ステップ１６０１）。
【００７１】
ステップ１６０１で選択した命令文の抽出区分に“１”を、評価状態区分に“仮決め”を、追跡開始フラグに“１”を登録する（ステップ１６０２）。
【００７２】
抽出区分に仮定値“１”を登録した後、図１７にしめすトライアンドエラー処理を実行して依存性の循環している命令文の抽出区分を決定する（ステップ１６０３）。
【００７３】
続いて、図１７のトライアンドエラー処理についての説明を行う。
まず、依存元命令文の追跡開始フラグに“１”が登録されているかを確認して、“１”が登録されていればステップ１７０５に遷移して、“１”が登録されていなければ１７０２に遷移する（ステップ１７０１）。
【００７４】
追跡開始フラグに“１”が登録されていないときは、依存元命令文のうち評価状態区分に“評価中”または“仮決め”が登録されている命令文を選択する（ステップ１７０２）。
【００７５】
次に、ステップ１７０２で選択した依存元命令文から、トライアンドエラー処理を再帰的に呼び出す（ステップ１７０３）。以上の１７０１から１７０３までの処理を追跡開始フラグに“１”が登録されている命令文に到達するまで、依存先の各命令文で行う。このことによって依存性の循環している各命令文でトライアンドエラー処理を呼び出すことになる。
【００７６】
そして、依存元命令文に追跡開始フラグ“１”が登録されている場合には、必要ロジック判定処理１７０５を行い着目している命令文の抽出区分を評価する（ステップ１７０５）。
【００７７】
次に、評価を行った命令文の登録されている命令文情報テーブルに追跡開始フラグ“１”が登録されているか確認して、登録されていれば１７０８に登録されていなければ１７０７に遷移する（ステップ１７０６）。
【００７８】
ステップ１７０６で追跡開始フラグに“１”が登録されていないと判定されたときは、評価した抽出区分、着目区分、評価状態区分を命令文情報テーブル、ワード情報テーブルに登録する（ステップ１７０７）。
【００７９】
ステップ１７０７で追跡開始フラグに“１”が登録されていると判定されたときは、すでに仮決めされている抽出区分の内容と必要ロジック判定処理１７０５の結果が一致するかを確認し、一致していれば１７０９に、一致していなければ１７１０に遷移する（ステップ１７０８）。
【００８０】
ステップ１７０８で、命令文情報テーブルにすでに登録されている抽出区分の情報と必要ロジック判定処理の内容が一致したときは、着目している命令文の評価状態区分に“決定”を登録していま着目している命令文から呼び出したトライアンドエラー処理を終了する（ステップ１７０９）。
【００８１】
ステップ１７０８で、命令文情報テーブルにすでに登録されている抽出区分の情報と必要ロジック判定処理の内容が一致しなかったときは、追跡開始フラグに“１”を登録した命令文に仮定している抽出区分は“１”であるかを判定し、抽出区分に“１”が登録されている場合は、着目している命令文の抽出区分に“３”を登録し、登録されていない場合はステップ１７１２に遷移する（ステップ１７１０、ステップ１７１１）。
ステップ１７１２では追跡開始フラグに“１”を登録した命令文で仮定している抽出区分は“３”であるかを判定し、抽出区分に“３”が登録されている場合はステップ１７１３でその命令文の抽出区分に“５”を登録し、登録されていない場合はステップ１７１４に遷移する（ステップ１７１２、１７１３）。
【００８２】
ステップ１７１４では、追跡開始フラグに“１”を登録した命令文で仮定している抽出区分は“５”であるかを判定し、抽出区分に“５”が登録されている場合はステップ１７１５でその命令文の抽出区分に“２”を登録する（ステップ１７１４、１７１５）。
【００８３】
以上のステップ１７１０〜１７１５の処理を行うことによって追跡開始フラグに“１”の登録されている命令文に仮定してある抽出区分と一致する抽出区分を見つけ、この評価状態区分に“決定”を登録する。このようにして、依存性の循環している各命令文で呼び出したトライアンドエラー処理で着目している命令文の抽出区分の評価を行い、そのトライアンドエラー順次終了させる。
【００８４】
図１８は、本実施例での解析対象プログラムであり、図１９、図２２、図２４、図２５は特定ロジック抽出機能２０３実行前の命令文情報テーブル、ワード情報テーブル、データ依  存情報テーブル、制御依存情報テーブルを示している。また、図２０は特定ロジック抽出処理中のループ評価処理実行直前の命令文情報テーブルを、図２１、図２３は特定ロジック抽出機能２０３実行後の命令文情報テーブル、ワード情報テーブルを示している。実施例ではループ処理を含むプログラムからロジックを抽出する方法について、図１７のプログラムを解析する過程を例にとり具体的な説明を行う。
【００８５】
図２６の依存グラフを例にとって、解析対象のプログラムにループ処理を含む場合のロジック抽出処理について具体的に説明する。なお、図２６に示す依存グラフは、命令文２６０７が影響を受ける命令文を抜粋した依存グラフとなる（抜粋される命令文のみで構わない）。なお、システムとしては依存情報１１２中の制御依存情報６０３やデータ依存情報６０４から着目している命令文の依存元情報を取得して、その命令文の着目区分や抽出区分を評価するが、これらの各テーブルの機能については前述している為、以下の説明では各命令文間のデータ依存関係、制御依存関係を纏めたグラフである依存グラフ図２６を用いて具体的な説明を行う。
【００８６】
まず、命令文２６０７が出力起点として指定された場合、この命令文２６０７の評価状態区分に評価中を登録する（ステップ１５０１）。
【００８７】
さらに依存先命令文の抽出区分を確認すると、命令文２６０４の抽出区分が未評価となっているので、命令文２６０４を選択する（ステップ１５０２、１５０３）。
【００８８】
命令文２６０４の評価状態区分を確認すると“評価中”は登録されていないので、命令文２６０４からロジック抽出処理を再帰的に呼び出す（ステップ１５０４、１５０５）。
【００８９】
以上の再帰呼出を繰り返し行うと、命令文２６０５から呼び出したロジック抽出処理のステップ１５０４で依存元の命令文である命令文２６０３の評価状態区分に“評価中”が登録されていると判定される。これは依存グラフの図２５に示される通り命令文２６０３と命令文２６０５の間で依存性が循環している為である。
【００９０】
ここで、依存元の命令文の評価状態区分に“評価中”が登録されていると判定されるので、図１６で示したループ評価処理を実行して、ステップ１５０４で検出した依存性の循環している命令文の抽出区分やその命令文を構成しているデータ項目の着目区分を評価する（ステップ１５０９）。
【００９１】
引き続き図２６の依存グラフを用いて、図１６で示したループ評価処理を説明する。
まず、命令文２６０５の依存元命令文のうち評価状態区分が“評価中”の命令文を検索すると命令文２６０３であることが分かるので、命令文２６０３を選択する（ステップ１６０１）。
【００９２】
ステップ１６０１で選択した命令文２６０３の抽出区分に“１”を評価状態区分に“仮決め”を追跡開始フラグに“１”を登録する（ステップ１６０２）。
【００９３】
命令文２６０３の抽出区分を仮定したあとで、トライアンドエラー処理を実行して、依存性の循環している命令文の抽出区分の評価を行う。（ステップ１６０３）
さらに図２６の依存グラフを用いて、図１７で示したトライアンドエラー評価処理を説明する。
【００９４】
命令文２６０３の依存元命令文のうち追跡開始フラグに“１”の登録されている命令文があるかの判定を行うと、追跡開始フラグに“１”が登録されている命令文がないのでステップ１７０２に遷移する（ステップ１７０１）。
【００９５】
次に、抽出区分が未評価である２６０５を選択してこの命令文２６０５から再帰的にトライアンドエラー処理を呼び出す（ステップ１７０２  ステップ１７０３）。
【００９６】
命令文２６０５の依存元命令文で追跡開始フラグに“１”の登録されている命令文を確認すると、命令文２６０３の追跡開始フラグに“１”が登録されていることがわかる。そこで必要ロジック判定処理を実行して命令文２６０５の抽出区分を評価する（ステップ１７０５）。
【００９７】
命令文２６０５の追跡開始フラグを確認すると、“１”が登録されていないので、ステップ１７０５の評価結果を抽出区分に登録して、評価状態区分には“仮決め”を登録して、命令文２６０５から呼び出したトライアンドエラー処理を終了する。（ステップ１７０６、１７０９）。
【００９８】
命令文２６０５から呼び出したトライアンドエラー処理が終了したので、着目地点は命令文２６０３で呼び出したトライアンドエラー処理へ遷移する。命令文２６０３ではステップ１７０３で処理が停止しているのでステップ１７０４から処理を再開する。ステップ１７０４の結果、命令文２６０３の依存元命令文の抽出区分は全て評価されていることが分かるので、命令文２６０３で必要ロジック判定処理を実行すると命令文２６０３の抽出区分は“１”と評価される。（ステップ１７０４、１７０５）。
【００９９】
ここで、命令文２６０３を確認すると、追跡開始フラグに“１”、抽出区分に“１”が登録されていることが分かる。ステップ１７０５の必要ロジック判定処理の結果、命令文２５０３の着目区分は“１”と評価されており、既に登録されている内容と一致する為、評価状態区分の内容を“評価中”から“決定”に変更し、命令文２６０３から呼び出したトライアンドエラー処理を終了する（ステップ１７０６、１７０８、１７０９）。
【０１００】
なお今回の実施例では、ステップ１７０８で必要ロジック判定処理の結果と既に登録されている抽出区分が一致した為、ステップ１７１０から１７１５の説明は行わなかったが、ステップ１７１５で抽出区分が一致しなかった場合は、抽出区分を“３”→“５”→“２”の順番で仮定して必要ロジック判定処理の結果と抽出区分に仮定した結果が一致するまで処理を繰り返し行う。
【０１０１】
以上で各命令文から呼び出した全てのトライアンドエラー処理が終了するので、着目地点はロジック抽出処理を呼び出した命令文２６０５に遷移する。命令文２６０５から呼び出したロジック抽出処理はステップ１５０９で停止している為、ステップ１５０９の必要ロジック判定処理を実行してその結果を登録する。必要ロジック判定処理の結果は抽出区分は“１”評価状態区分は“決定”となるのでその結果を登録してロジック２６０５から呼び出したロジック抽出処理を終了させる。
【０１０２】
同様にして各命令文から呼び出したロジック抽出処理を順次終了させ、一連の処理を終了する。終了時点での命令文情報テーブルやワード情報テーブルの内容は図２１、図２３に示されている通りである。
【０１０３】
（ロジック表示／修正機能）
ここでは、図２のフローチャート中の２０４に示される機能であるロジック表示／修正機能を図２８〜図３０を用いて説明する。まず、ソース表示部２８０１に解析対象となったプログラムを表示する。ソースの表示の際にはロジック抽出支援情報として命令文単位に抽出区分を提示する。そして、ユーザに修正する命令文番号を指定させ、詳細表示ボタン２８０４を押下させることによって修正する命令文番号２８０２を取得して、修正する命令文を修正対象命令文表示部２９０１に表示する。表示の際には修正支援情報としてデータ項目単位に着目区分を提示する。なお２８０１の命令文、２９０１のデータ項目の分類方法としては、その抽出区分や着目区分ごとに色分けして表示してもよい。
【０１０４】
なお、データ項目単位のロジック抽出支援情報が必要ないユーザについては修正ボタン２８０３を押下させロジックの修正を行わせてもよい。
【０１０５】
ソース表示画面では、ユーザに修正対象のデータ項目名を２９０２に入力させ、その項目が２９０３で参照項目か更新項目か選択させることによって修正対象となるデータ項目を一意に決定する。さらに、修正対象として選択したデータ項目のバックワードスライスの結果を確認してそのデータ項目が影響を受けている命令文を確認したい場合には２９０４で“表示する”を選択して必要のない場合には“表示しない”を選択する。
【０１０６】
ユーザに以上ことを入力させ、修正ボタン２９０５を押下させることによって図３０ロジック修正画面に遷移する。
【０１０７】
ロジック修正画面では３００１に修正対象の命令文を表示する。なお２９０４でバックワードスライス結果を表示することを選択した場合にはその結果を修正対象命令文として３００１に表示してもよい。
【０１０８】
また、ユーザが表示結果を理解した結果、入力起点の追加が必要であると判断した場合は３００２、３００３の入力欄から起点の追加を行う。
【０１０９】
以上のようにしてユーザにロジック修正をさせて、さらに他の修正がある場合には戻るボタン３００４を押下させ図２８ソース表示画面に遷移する。また、修正を終了するときには登録ボタン３００５を押下させ、その修正結果を対象プログラム１１１に登録する。
【産業上の利用可能性】
【０１１０】
以上述べたように、本発明のロジック抽出支援システムでは、既存のプログラムを参照しながら、ユーザの指定した入力からユーザの指定した出力を計算するロジックを作成する過程を支援することに利用することが出来る。
【図面の簡単な説明】
【０１１１】
【図１】本発明の実施例のシステム全体構造を示すブロック図である。
【図２】制御部１３０の機能を説明するためのフローチャートである。
【図３】ステップ２０３の特定ロジック抽出機能を説明する為のフローチャートである。
【図４】ロジック抽出処理の詳細を示したフローチャートである。
【図５】必要ロジック判定処理の詳細を示したフローチャートである。
【図６】各テーブルの関連を示したER図である。
【図７】実施例で用いる解析対象のプログラムである。
【図８】解析対象のプログラムを命令文単位に登録している命令文情報テーブルである。
【図９】特定ロジック抽出機能実行後の命令文情報テーブルである。
【図１０】解析対象のプログラムを命令語単位に登録しているワード情報テーブルである。
【図１１】特定ロジック抽出機能実行後のワード情報テーブルである。
【図１２】制御依存の依存元、依存先となっている命令文に付加された命令文番号を管理する制御依存情報テーブルである。
【図１３】データ依存の依存元、依存先となっている命令文とそのデータ項目を管理している、データ依存情報テーブルである。
【図１４】図７の解析結果を依存グラフに纏めたものである。
【図１５】解析対象プログラムにループを含む場合のロジック抽出処理のフローチャートである。
【図１６】ループ評価機能の説明を行う為のフローチャートである。
【図１７】トライアンドエラー処理を説明する為のフローチャートである。
【図１８】ループを含むプログラムであり、本プログラムを用いて実施例の説明を行う。
【図１９】ループ評価を行う直前の命令文情報テーブルである。
【図２０】トライアンドエラー処理実行直前の命令文情報テーブルである。
【図２１】ループを含む場合の特定ロジック抽出処理実行後の命令文情報テーブルである。
【図２２】特定ロジック抽出前のワード情報テーブルである。
【図２３】特定ロジック抽出後のワード情報テーブルである。
【図２４】図７のプログラム情報の登録された制御依存情報テーブルである。
【図２５】図７のプログラム情報の登録されたデータ依存情報テーブルである。
【図２６】図７のプログラム情報を纏めた依存グラフである。
【図２７】制御部１３０の機能を説明するに用いる、メニュー画面である。
【図２８】命令文単位に修正支援情報を表示する画面である。
【図２９】データ項目単位に抽出支援情報を表示する画面である。
【図３０】ユーザからのプログラムの修正を受け付ける画面である。
【符号の説明】
【０１１２】
１１０…外部記憶装置、１１１…対象PGM、１１２…依存情報、１２０…メモリ、１３０…制御部、１３１…ロジック修正／登録部、１３２…プログラム解析部、１３３…ロジック抽出部、１３４…表示部、１４１…ＣＰＵ、１４２…ディスプレイ装置、１４３…キーボード、１４４…指示装置
【図１】
2007094753.tif 000003
【図２】
2007094753.tif 000004
【図３】
2007094753.tif 000005
【図４】
2007094753.tif 000006
【図５】
2007094753.tif 000007
【図６】
2007094753.tif 000008
【図７】
2007094753.tif 000009
【図８】
2007094753.tif 000010
【図９】
2007094753.tif 000011
【図１０】
2007094753.tif 000012
【図１１】
2007094753.tif 000013
【図１２】
2007094753.tif 000014
【図１３】
2007094753.tif 000015
【図１４】
2007094753.tif 000016
【図１５】
2007094753.tif 000017
【図１６】
2007094753.tif 000018
【図１７】
2007094753.tif 000019
【図１８】
2007094753.tif 000020
【図１９】
2007094753.tif 000021
【図２０】
2007094753.tif 000022
【図２１】
2007094753.tif 000023
【図２２】
2007094753.tif 000024
【図２３】
2007094753.tif 000025
【図２４】
2007094753.tif 000026
【図２５】
2007094753.tif 000027
【図２６】
2007094753.tif 000028
【図２７】
2007094753.tif 000029
【図２８】
2007094753.tif 000030
【図２９】
2007094753.tif 000031
【図３０】
2007094753.tif 000032