(57)【要約】      （修正有）【課題】既存システム資産に対する外部プログラムの追加を行う作業を支援するシステムの提供。【解決手段】データフロー解析により外部プログラム挿入ポイント候補を絞り込む。プログラムに対し外的要因となるデータに対して一時的、または恒常的に変更を加えることができる、トランザクションデータに注目する。・外部プログラム挿入ポイント候補の絞込みの観点１．ＧＵＩを呼び出す記述２．サブプログラムを呼び出している記述２．１  ＧＵＩを呼び出す記述がある２．２  ファイル形式のデータを参照している２．３  ＤＢに格納されたデータを参照している３．ミドルウェアプログラムを呼び出している記述３．１  ＧＵＩを呼び出す記述がある３．２  ファイル形式のデータを参照している３．３  ＤＢに格納されたデータを参照している【選択図】図１
2009042951.tif 000002
【特許請求の範囲】
【請求項１】
所定の機能を実行するプログラムに追加的機能を実行する外部プログラムを挿入する箇所の選定を支援する外部プログラム挿入ポイント選定支援装置において、
前記プログラムおよび当該プログラム中に記述されたステートメントから当該プログラム中の当該ステートメントが記述された部分を判別する情報を含むプログラム解析情報を作成するプログラム解析情報作成部と、
前記作成されたプログラム解析情報と、予め設定された外部要因の影響を受けるステートメント情報とから、当該プログラム中の前記判別されたステートメントが記述された部分の中から、外部要因の影響を受けるステートメントの記述部分を外部プログラム挿入ポイントとして抽出し、抽出された前記外部プログラム挿入ポイントを含む外部プログラム挿入ポイント情報を生成する外部プログラム挿入ポイント情報生成部と、
を有することを特徴とする外部プログラム挿入ポイント選定支援装置。
【請求項２】
請求項１に記載の外部プログラム挿入ポイント選定支援装置において、
前記生成した外部プログラム挿入ポイント情報を基に、挿入ポイントの前後の関連記述情報を抽出する関連記述情報抽出部と、
前記抽出した関連記述情報を表示する表示部と、
を有することを特徴とした外部プログラム挿入ポイント選定支援装置。
【請求項３】
請求項１または２に記載の外部プログラム挿入ポイント選定支援装置において、
前記生成した外部プログラム挿入ポイント情報を基に、当該外部プログラム挿入ポイント情報の示すポイントへ前記外部プログラムを挿入する、外部プログラム挿入処理部を有することを特徴とした外部プログラム挿入ポイント選定支援装置。
【請求項４】
請求項１乃至３のいずれか１項に記載の外部プログラム挿入ポイント選定支援装置において、
前記予め設定された外部要因の影響を受けるステートメント情報は、プログラムに対し、データのインプットを示すステートメントであり、
外部プログラム挿入ポイント情報生成部は、当該ステートメント情報を基に外部プログラム挿入ポイント情報を生成することを特徴とした外部プログラム挿入ポイント選定支援装置。
【請求項５】
請求項１乃至４のいずれか１項に記載の外部プログラム挿入ポイント選定支援装置において、
前記予め設定された外部要因の影響を受けるステートメント情報は、
プログラム中からＧＵＩを呼び出し、人がデータを入力する機構を示すステートメントであり、
外部プログラム挿入ポイント情報生成部は、当該ステートメント情報を基に外部プログラム挿入ポイント情報を生成することを特徴とした外部プログラム挿入ポイント選定支援装置。
【請求項６】
請求項１乃至５のいずれか１項に記載の外部プログラム挿入ポイント選定支援装置において、
前記予め設定された外部要因の影響を受けるステートメント情報は、
プログラム中から、ミドルウェアプログラムを呼び出す機構と、ミドルウェアプログラム中から、人がデータを入力する機構を示すステートメントであり、
外部プログラム挿入ポイント情報生成部は、当該ステートメント情報を基に外部プログラム挿入ポイント情報を生成することを特徴とした外部プログラム挿入ポイント選定支援装置。
【請求項７】
請求項１乃至６のいずれか１項に記載の外部プログラム挿入ポイント選定支援装置において、
前記予め設定された外部要因の影響を受けるステートメント情報は、
プログラム中から、サブプログラムを呼び出す機構と、サブプログラム中から、人がデータを入力する機構を示すステートメントであり、
外部プログラム挿入ポイント情報生成部は、当該ステートメント情報を基に外部プログラム挿入ポイント情報を生成することを特徴とした外部プログラム挿入ポイント選定支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、該当プログラムの解析方法と、該当プログラムに対し、外部プログラムを挿入する作業を支援するシステムに関する。
【背景技術】
【０００２】
従来より、情報システムで使用されているプログラムの解析を行うことにより、情報システムの理解を支援するリバースエンジニアリング支援システムは、広く使用されている。但し、リバースエンジニアリング支援システムは、対象プログラムの解析を行うことを目的としており、対象プログラムの内容に処理の追加を行いたい場合、人が対象プログラムにハードコーディングする必要があった。また、対象プログラム中で利用するデータの異常を検出する場合、ＢＡＭ（business activity monitoring）が広く知られている。しかし、ＢＡＭが検知するトランザクションデータと、プログラムの仕様との付け合せは人手に頼らなければならないのが現状である。
【０００３】
例えば、既存システムに対しデータに変更を加え得るポイントとして、個々のプログラムに対するトランザクションが考えられる。この際、必要に応じて目的のデータを特定し、どのようなデータがプログラムに取り込まれているかチェックする必要がある。このため、プログラム中から、任意のデータに対して関連のある記述を抽出し、該当データに外的要因となる部分を抽出する必要がある。
【０００４】
任意データに関連のある記述をプログラム中から抽出する方法として、特許文献１に記載されている。これは、プログラム中の起点（データ）情報を元にして、その起点（データ）に影響を与えている若しくは与えられているプログラムの一部分を特定する方法として、プログラム解析技術を説明している。この技法は、プログラム中の記述間の関連を依存グラフと呼ばれるグラフに纏め、この依存グラフから起点（データ）として指定した記述に影響を与えている記述、若しくは影響を与えられている記述を抽出する技法である。プログラム解析では記述間の関連をデータ依存関連によって抽出しており、データ依存とは、ある記述で更新したデータを他の記述で参照している関係を示している。
【０００５】
該当プログラムに対し、外部プログラムを挿入する方法のひとつとして、アスペクト指向プログラミングが考えられる。アスペクト指向プログラミングでは、既存プログラムに対して手を加えることなく、外部プログラムの追加・変更を可能とする。アスペクト指向プログラミングとは、アスペクトというモジュール機構を持ち、ロギングやセキュリティ機能などのモジュール間を横断する関心事（これまで外部プログラムと説明した）をアスペクトとして記述できる。つまり、ここで利用するアスペクトの持つポイントカット＋アドバイス機構（この機構は、アスペクトが対象プログラムとは別の部分で挙動を変更・追加することを可能にするものであり、具体的には、言語に定義されているジョインポイントというプログラム実行中の「動作の時点」に対し、ポイントカットとはジョインポイントが満たすべき条件を記述し、アドバイスとは変更・追加すべき挙動を記述することで上記を実現するものである。）を利用して、実行中の既存プログラム中に散在している、プログラム解析で明らかとなった外部プログラム挿入ポイントに対し、アスペクトとして記述した関心事（外部プログラム）を織り込むことが可能である。
【０００６】
【特許文献１】特開2006-285707
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来の方法では、該当プログラムに対し外部プログラムを挿入するには、人がプログラムを読んで人が外部プログラム挿入ポイントを見つけ出し、人が外部プログラムを挿入する。といった、人手に頼る方法しかなかった。また、法改正、コンプライアンスに関する規制、ITを利用した犯罪の増加等の情勢を受け、企業の持つシステム（プログラム）に対しチェック機能等を組み込むため、外部プログラムを挿入したいという課題がある。
【０００８】
また、外部プログラムの購入ポイントを決定する際にも、外部プログラムの挿入ポイント部分にあたる該当プログラムのソースコードを羅列するのみでは、ユーザは適切に挿入ポイントの判断ができない。例えば、複雑な条件が絡んだ処理がある場合などユーザが判断を下すことが難しいためである。
【課題を解決するための手段】
【０００９】
本発明では、既存システムに対し、前述のデータフロー解析を実施することによって、外部プログラムの挿入ポイントを更に絞り込んだ後、後述の観点に沿って更に外部プログラムの挿入ポイントを絞り込むことで、外部プログラム挿入の要・不要判定支援を可能とする。また、アスペクト指向プログラミングを用いることで人手に頼らず、対象プログラムにも一切手を加えることなく、外部プログラムを織り込むことを可能とする。
【００１０】
データフロー解析により外部プログラム挿入ポイント候補を絞り込んだ後に、予め外部記憶装置に格納された下記の観点からポイントの絞込みを実施することで、外部プログラムの挿入ポイントを絞り込むことを可能とする。下記の観点の前提としては、プログラムに対し外的要因となるデータに対して一時的、または恒常的に変更を加えることができるポイントを、外部プログラムの挿入ポイントとして注目している。
・外部プログラム挿入ポイント候補の絞込みの観点
１．ＧＵＩを呼び出す記述
２．サブプログラムを呼び出している記述
２．１サブプログラムは、ＧＵＩを呼び出す記述がある
２．２サブプログラムは、ファイル形式のデータを参照している
２．３サブプログラムは、ＤＢに格納されたデータを参照している
３．ミドルウェアプログラムを呼び出している記述
３．１ミドルウェアプログラムは、ＧＵＩを呼び出す記述がある
３．２ミドルウェアプログラムは、ファイル形式のデータを参照している
３．３ミドルウェアプログラムは、ＤＢに格納されたデータを参照している
次に、前述のユーザインタフェースの課題では、ユーザが外部プログラムの挿入ポイントを設定するために、絞り込んだ挿入ポイントと、そのポイントの記述が影響する、また影響を受ける範囲の記述を画面表示するユーザインタフェースを提供する。このユーザインタフェースによって、複雑な条件が絡む処理においても、外部プログラムの挿入ポイントにある記述がどのような処理を行っているか、ユーザの理解を支援するとともに、外部プログラム挿入の判断を支援することを可能とする。
【発明の効果】
【００１１】
本発明を用いて、外部プログラムの挿入ポイントの選定において、外部プログラム挿入ポイントの候補を絞り込むことが可能である。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の実施例について、図面を用いて詳細に説明する。
【実施例１】
【００１３】
図１は、外部プログラム挿入ポイント選定支援システム全体構成図を示している。システムはバス等の接続手段で接続されたCPU１０１と、ディスプレイ装置１０２と、キーボード１０３と、マウス等の指示装置１０４と、外部記憶装置１１３、メモリ１１２、ハードディスク１０５と、ハードディスク上に置かれたプログラム１０６〜１１１からなる。また、外部記憶装１１３上に示した１１４〜１２０とは外部記憶装置上に置かれたデータである。なお、対象プログラム１１４は、解析対象とするプログラムである。メモリ１１２では、必要に応じてプログラムやデータを呼び出し利用する。
【００１４】
図２に記載されているフローチャートを用いて、外部プログラム挿入ポイント選定支援システムの機能について説明する。外部プログラム挿入ポイント選定支援システムの機能は、プログラム解析部１０６と、外部プログラム挿入ポイント候補の抽出部１０７と、外部プログラム挿入ポイント候補の関連ロジック抽出部１０８と、外部プログラム挿入ポイント候補・関連ロジックの表示部１０９と、アスペクトの生成部１１０と、アスペクト織り込み部１１１の機能からユーザに機能を指定させ、その機能を実行する。
【００１５】
プログラム解析部１０６は、キーボード１０３や指示部１０４からユーザによって指定されたプログラム名とをキーとして、解析対象のプログラム１１４を検索し、解析するプログラムを取得する。そして、データフロー解析技術を用いて、任意データに関連する記述をプログラム中から抽出し、抽出結果をプログラム解析情報１１５に与える（ステップ２０１）。
【００１６】
外部プログラム挿入ポイント候補の抽出部１０７は、外部プログラムの挿入ポイント候補の抽出機能２０２を実行することで、プログラム解析部でデータフロー解析技術を用いて抽出した、任意データに関連する記述の中から、外部要因の影響を受ける記述を抽出することで、外部プログラムの挿入ポイントを絞り込む。ここで抽出した記述は、挿入ポイント候補情報１１６に与える。なお、外部プログラムの挿入ポイント候補の抽出機能２０２については、以下で詳細に説明する（ステップ２０２）。
【００１７】
外部プログラム挿入ポイント候補の関連記述抽出部１０８は、外部プログラムの挿入ポイント候補の抽出機能２０２にて抽出し、挿入ポイント候補情報１１６に与えた記述部位に対して、それぞれ前後のコンテクストを抽出し、外部プログラム挿入ポイント候補と共に、挿入ポイントに関する表示情報１１７に与える（ステップ２０３）。
【００１８】
外部プログラムの挿入ポイント候補・関連記述の表示部１０９は、外部プログラムの挿入ポイント候補の抽出機能２０２を実行した結果である挿入ポイント候補情報１１６と、挿入ポイント候補情報１１６を元に、外部プログラム挿入ポイント候補の関連記述抽出部１０８を実行することで得た、挿入ポイントに関する表示情報１１７を対応付けてディスプレイ装置１０２に表示する。この際、挿入ポイント候補情報１１６に対し、挿入ポイントに関する表示情報１１７について、メイン−サブプログラム間の階層関係を残して、メインプログラムのソースコードに関連するサブプログラムのソースコードを格納した形で表示する。サブプログラムのソースコードは、ユーザの必要に応じて表示する。以下で詳細に説明する（ステップ２０４）。
【００１９】
ディスプレイ装置１０２に表示した外部プログラム挿入ポイント候補を元に、ユーザが外部プログラムの挿入ポイントを決定し、これを挿入ポイント決定情報１１８に与える。また、ディスプレイ装置１０２に表示した結果に対して、ユーザに再度、プログラム解析機能を実行させるかを選択させる（ステップ２０５）。
【００２０】
挿入ポイントの決定情報１１８を元に、アスペクトを生成する。つまり、アスペクト指向プログラミングにおいて、決定した挿入ポイントをポイントカット対象とし、ユーザによるアドバイスの実装を行う。つまりアドバイスは、外部プログラムのプログラムソースを記述することである（ステップ２０６）。
【００２１】
アスペクト指向によるウィーバ技術を用いて、アスペクト１１９を対象プログラム１０６に織り込む。アスペクトを織り込んだソースを外部プログラム織り込み後プログラム１２０に与える（ステップ２０７）。
【００２２】
上記ステップ２０１〜２０７をユーザが再度、プログラム解析機能の実行を選択している間、繰り返し行い、プログラム解析機能の終了を選択したときに、アスペクトの生成機能と、アスペクトの織り込み機能を実行して装置を終了する。
【００２３】
次に、図３に記載されているフローチャートに沿って、外部プログラム挿入ポイント選定支援システムのプログラム解析部１０６の機能について説明する  
まず前提として、ユーザの指定を受けて本発明装置が対象のプログラムを選定する。ここで、「プログラム」とは、ジョブ制御言語の記述、汎用プログラム言語で書かれたソースプログラムの全体、または、関数、手続きなどその一部分等、手続きを定義する任意のもので良い。特に、実行時の環境や、入力データの値によって決まるプログラム中の特定の実行文の系列を、「プログラム」としても良い。対象プログラムはプログラム解析部に読み込み、構文解析を実施する（ステップ３０１〜３０２）。
【００２４】
構文解析結果を基に、制御依存・データ依存によるプログラム依存グラフを生成する。このプログラム依存グラフを基に、任意データに対するデータフロー解析を実施するものである。本発明では、この段階でサブプログラム毎のデータフローサマリ情報と、外部プログラム挿入可否判断情報を加えることで、後工程である任意データを指定してデータ依存をたどってノード（記述文）をマーキングする作業（ステップ３０４〜ステップ３０５）を簡略化することが可能である（ステップ３０３）。
【００２５】
ステップ３０３の詳細を以下の図１３〜図１６を用いて説明する。先ず、図１３において、対象プログラム１１４より、該当するプログラムを呼び出す（ステップ１３０１）。次に該当プログラムについて、サブプログラムの呼び出し関係を分析する（ステップ１３０２）。ここまでの作業は通常のデータフロー解析の前処理と相違は無い。これに加え、データフローサマリ情報と外部プログラム挿入可否判断情報をサブプログラムごとに加える。
【００２６】
先ず、サブプログラムの呼び出し関係の中で、呼び出し関係の子供側の端となるプログラムから順番に呼び出す（ステップ１３０３）。
【００２７】
次に、サブプログラム毎にＵＳＥ／ＤＥＦＩＮＥチェーンとデータフローサマリ情報を作成する。（ステップ１３０４）データフローサマリ情報は、プログラム解析情報１１４に格納する。
【００２８】
ＵＳＥ／ＤＥＦＩＮＥチェーンについては、図１５を用いて解説する。図１５において、仮に親プログラムＡ（１５０１）中の、“Ｃ＝Ｕ”（１５０２）という記述文の“Ｃ”に関連して、“Ｂ＝Ｃ＋Ｚ”という記述文がある。この関係において、“Ｃ＝Ｕ”（１５０２）という記述文の“Ｃ”を“ＤＥＦＩＮＥ”、“Ｂ＝Ｃ＋Ｚ”という記述文の中の“Ｃ”を“ＵＳＥ”と定義する。ＵＳＥ／ＤＥＦＩＮＥチェーンとは、図１５中の矢印の連携を意味している。ＵＳＥ／ＤＥＦＩＮＥチェーンを作成することで、サブプログラム中のデータフローサマリ情報を定義することができ、図１５において、例えばサブプログラムＢ（１５０５）の入力となる“Ｐ＝ＸＸ”（１５０７）の“ＸＸ”と、ＵＳＥ／ＤＥＦＩＮＥチェーンを辿って出力となる、“ＹＹ＝Ｅ”（１５０８）の“ＹＹ”をデータフローサマリ情報と定義することができる。このデータフローサマリ情報“ＸＸ，ＹＹ”（１５０６）は、親プログラムであるプログラムＡ（１５０１）中の記述、“Ｃａｌｌ  Ｂ  （Ｘ，Ｙ）”（１５０４）の“Ｘ，Ｙ”に代入することができる。以上によって、ステップ１４０２の後工程となる、図３の任意データを指定してデータ依存をたどってノード（記述文）をマーキングする作業（ステップ３０４〜ステップ３０５）の際、必要に応じてサブプログラムのデータ依存の調査作業を省略し、親プログラムにデータフローサマリ情報を代入することで、普段であればサブプログラム全てのデータ依存を辿る作業を簡略化することが可能である。上記について図１５を用いて説明するならば、プログラムＡ（１５０１）の“Ｃ＝Ｕ”（１５０２）という記述文の“Ｃ”についてデータフロー解析を行う場合、“Ｃａｌｌ  Ｂ  （Ｘ，Ｙ）”（１５０４）において、サブプログラムＢ（１５０８）のプログラムソースのデータフロー解析を行わずに、サブプログラムＢ（１５０８）のデータフローサマリ情報を参照することで、データフロー解析をプログラムＡ（１５０１）の“Ｄ＝Ｙ”（１５０９）に続けることができる。
【００２９】
次に、図１３に戻り、外部プログラム挿入可否判断情報を作成する。これは、後工程である図３の任意データを指定してデータ依存をたどってノード（記述文）をマーキングする（ステップ３０４〜ステップ３０５）の作業の際、サブプログラム中に外部プログラム挿入ポイントが存在するか判定を行い、存在しないプログラムの作業を削除するために必要である（ステップ１３０５）。
【００３０】
外部プログラム挿入可否判断情報は、予め外部記憶装置に格納された外部プログラム挿入ポイント候補の絞込みの観点から設定する。図１４に示すように、ここでは該当するサブプログラムについて“ＧＵＩを呼び出す命令文があるか”（ステップ１４０１）、“ＤＢ形式のデータを参照しているか”（ステップ１４０２）、“ファイルに格納されたデータを参照しているか”（ステップ１４０３）の判定を行い、上記のいずれかの条件が当てはまる場合は、該当するサブプログラムに対して“○”のフラグを記録してプログラム解析情報１１４に格納する（ステップ１４０４）。逆に、上記のいずれの条件も当てはまらない場合は、該当するサブプログラムに“×”のフラグを記録してプログラム解析情報１１４に格納する（ステップ１４０５）。
【００３１】
上記の“○，×”フラグの利用方法については、データ依存をたどってノード（記述文）をマーキングするステップ３０５にて説明する。
ステップ３０４では、挿入する外部プログラムの目的に応じて、外部プログラム挿入箇所を絞り込むためにデータフロー解析を実施することを目的に、ユーザが任意データを指定する。任意データとは、対象プログラム中に記述されたステートメントの抜粋と、データフロー解析の始点と終点である。任意データの指定は、ユーザの指定に応じて、本発明装置が図６のユーザ設定値入力画面を用いて行う。先ずユーザは予めチェックしておいた対象プログラムの中から、外部プログラム挿入のためのデータフロー解析の基準となるステートメントを、外部プログラム挿入のための任意データ（ステートメント変数）の入力６１０１に記述する。次に、同様にしてデータフロー解析始点の入力６１０２、データフロー解析終点の入力６１０３を入力する（ステップ３０４）。
【００３２】
ユーザの指定した任意データとプログラム依存グラフを基に、データ依存をたどってノード（記述文）をマーキングする（ステップ３０５）。
【００３３】
ステップ３０５において、外部プログラム挿入可否判断情報を用いて、作業対象のプログラムを特定する。図１６はデータフロー解析対象の任意データの存在するプログラムＡ（１６０１）と、例えばＣａｌｌ文によって親子関係にあるサブプログラムＢ（１６０３）、サブプログラムＣ（１６０６）、サブプログラムＤ（１６０７）、サブプログラムＥ（１６０９）、サブプログラムＦ（１６１１）がある。先ず、外部プログラム挿入可否判断情報のフラグが“×”となっているサブプログラムＤ（１６０７）、サブプログラムＥ（１６０９）、サブプログラムＦ（１６１１）は作業対象外となります。作業は、外部プログラム挿入可否判断情報のフラグが“○”となっている親プログラムのプログラムＡ（１６０１）からスタートし、サブプログラムＢ（１６０３）、サブプログラムＣ（１６０６）へマーキング作業を進めます。この際、プログラムＢでは、“Ｃａｌｌ  Ｄ（Ｖ，Ｗ）”（１６０５）にて、外部プログラム挿入可否判断情報のフラグが“×”となっている
サブプログラムＤ（１６０７）を呼び出していますが、サブプログラムＤ（１６０７）のデータフローサマリ情報（ＶＶ，ＷＷ）を“Ｃａｌｌ  Ｄ（Ｖ，Ｗ）”（１６０５）に代入して、サブプログラムＢ（１６０３）のマーキング作業を進めます。
【００３４】
マーキングしたソースコードを表示し、ユーザの確認を取得する（ステップ３０６〜３０７）。
【００３５】
最後に、マーキングしたソースコードをプログラム解析情報１１５に格納する。（ステップ３０８）
次に、図７のメニュー画面を用いて、外部プログラム挿入ポイント選定支援システムの機能を具体的に説明する。
【００３６】
図７メニュー画面では、先ず、本発明装置はユーザのプログラム解析機能実行７１０１の選択を受け付け、プログラム解析部１０６を起動してプログラム解析結果を作成し、その結果をプログラム解析情報１１５に登録する。プログラム解析結果を図１２に示す。ここでは、図８に示す対象プログラムの例から、任意データを“I−ＦＩＬＥ”とした場合、“I−ＦＩＬＥ”を入力データとしてプログラム解析を行う。図９に視覚的に示した記述部位がプログラム解析の結果であり、これをプログラム解析情報１１５に格納する。
【００３７】
次に、ユーザには外部プログラム挿入候補の抽出７１０２を選択させ、外部プログラム挿入ポイントの抽出部１０７を起動させ、外部プログラムの挿入ポイントを絞り込む。つまりここでは、プログラム解析情報１１５に蓄積したプログラム解析の結果、抽出した記述部位の中から、ＧＵＩを呼び出す記述、サブプログラムを呼び出している記述、ミドルウェアプログラムを呼び出している記述を抽出することで、外部プログラムの挿入ポイントを絞り込む。外部プログラムの挿入ポイントを絞り込んだ結果を、挿入ポイント候補情報１１６に格納する。
【００３８】
３つ目に、ユーザに、外部プログラムの挿入ポイント候補の関連記述抽出７１０３を選択させ、外部プログラム挿入ポイント候補の関連記述抽出部１０８を起動させ、外部プログラム挿入ポイント候補として抽出した挿入ポイント候補情報１１６の個々に対し、前後１０行（仮）のコンテクストを抽出し、挿入ポイント候補情報１１６の個々と紐付けて、挿入ポイントに関する表示情報１１７に格納する。
【００３９】
４つ目に、ユーザに、外部プログラムの挿入ポイント候補・関連記述の表示７１０４を選択させ、外部プログラムの挿入ポイント候補・関連記述の表示部１０９を起動させ、ユーザに対し、挿入ポイント候補情報１１６から外部プログラムの挿入ポイント候補と、挿入ポイントに関する表示情報１１７から外部プログラム挿入ポイント候補の関連記述を表示する。ユーザには一旦、外部プログラムの挿入ポイント候補をプログラムの記述順に表示した画面、図１０を確認し、必要に応じて、外部プログラムの挿入ポイント候補の関連記述を表示した画面、図１１を確認する。外部プログラムの挿入ポイント候補の関連記述の表示は、図１０の“PERFORM K = 1 VARYING K BY 1 UNTIL K > MAX”１０１０１のように、外部プログラムの挿入ポイント候補の個々を選択することで、ネストされていた図１１外部プログラムの挿入ポイント候補の関連記述を画面表示する。外部プログラムの挿入ポイント候補が対象プログラム外でも発生する場合は、同様に、挿入ポイント候補の関連記述を画面表示する。
【００４０】
５つ目に、ユーザに、アスペクトの生成７１０５を選択させ、アスペクト生成部１１０を起動させ、外部プログラム挿入の目的にあわせアスペクトを生成する。アスペクトに記述する外部プログラム自体はアドバイスとしてユーザが書く。生成したアスペクトは、アスペクト１１９に格納する。
【００４１】
最後に、ユーザに、アスペクトの織り込み７１０５を選択させ、アスペクトの織り込み部を起動する。ここでは、対象プログラム１１４とアスペクト１１９を入力として、対象プログラム１１４にアスペクト１１９を織り込んだプログラムソースを生成する。生成したプログラムソースは、外部プログラム織り込み後プログラム１２０に格納する。
【００４２】
次に、図１〜図１２を参照して、本実施形態における外部プログラム挿入ポイント選定支援システムについて詳細に説明する。
【００４３】
ユーザの入力に応じてプログラム解析機能１０６を起動し、対象となる図８のプログラムを選択して、データフロー解析を実行して、図１２のプログラム解析情報を作成する（ステップ２０１）。
【００４４】
ユーザは、外部プログラム挿入ポイント抽出機能１０７を起動する。ここでは、図４のステップ４０１で、プログラム解析情報１１５より、任意のデータに関する記述部分を取り込む。任意のデータに関する記述部分に対しては、外部プログラムの挿入ポイントの判定を行うため、ここでは、プログラム解析情報１１５より任意のデータに関する記述部分を1行毎に取り込む（ステップ４０１）。
【００４５】
ステップ４０２では、プログラム解析情報１１５より取り込んだデータの中で、ＧＵＩを呼び出す記述を抽出する。この抽出結果は、人の入力によるデータ変更の可能性があるため、外部プログラム挿入ポイントとして挿入ポイント候補情報１１６に格納する（ステップ４０２）。
【００４６】
ステップ４０３では、プログラム解析情報１１５より取り込んだデータの中で、サブプログラムを呼び出している記述を抽出している。この処理以降では、サブプログラムの中でデータに対する変更可能箇所を検索する（ステップ４０３）。  
ステップ４０４では、プログラム解析情報１１５より取り込んだデータの中で、サブプログラムを呼び出し、且つ、サブプログラムの中でＧＵＩを呼び出す記述を抽出する。この抽出結果は、人の入力によるデータ変更の可能性があるため、外部プログラム挿入ポイントとして挿入ポイント候補情報１１６に格納する（ステップ４０４）。
【００４７】
ステップ４０５では、プログラム解析情報１１５より取り込んだデータの中で、サブプログラムを呼び出し、且つ、サブプログラムの中でＤＢにアクセスして、データを取得している記述を抽出する。この抽出結果は、ＤＢを介して人の入力によるデータ変更の可能性があるため、外部プログラム挿入ポイントとして挿入ポイント候補情報１１６に格納する（ステップ４０５）。
【００４８】
ステップ４０６では、プログラム解析情報１１５より取り込んだデータの中で、サブプログラムを呼び出し、且つ、サブプログラムの中でファイルに格納されたデータを参照している記述を抽出する。この抽出結果は、ファイルを介して人の入力によるデータ変更の可能性があるため、外部プログラム挿入ポイントとして挿入ポイント候補情報１１６に格納する（ステップ４０６）。
【００４９】
ステップ４０８では、プログラム解析情報１１５より取り込んだデータの中で、サブプログラムを呼び出しはせず、ミドルウェアを呼び出す記述を抽出する（ステップ４０８）。
【００５０】
ステップ４０９では、プログラム解析情報１１５より取り込んだデータの中で、ミドルウェアプログラムの中でＧＵＩを呼び出す記述を抽出する。この抽出結果は、人の入力によるデータ変更の可能性があるため、外部プログラム挿入ポイントとして挿入ポイント候補情報１１６に格納する（ステップ４０９）。
【００５１】
ステップ４１０では、プログラム解析情報１１５より取り込んだデータの中で、ミドルウェアプログラムの中でＤＢにアクセスして、データを取得している記述を抽出する。この抽出結果は、ＤＢを介して人の入力によるデータ変更の可能性があるため、外部プログラム挿入ポイントとして挿入ポイント候補情報１１６に格納する（ステップ４１０）。
【００５２】
ステップ４１１では、プログラム解析情報１１５より取り込んだデータの中で、ミドルウェアプログラムの中でファイルに格納されたデータを参照している記述を抽出する。この抽出結果は、ファイルを介して人の入力によるデータ変更の可能性があるため、外部プログラム挿入ポイントとして挿入ポイント候補情報１１６に格納する（ステップ４１１）。
【００５３】
ステップ４０７、３１２では、上記４０１〜４０６、４０８〜４１１の処理の結果、プログラム解析情報１１５より絞り込んだ、外部プログラム挿入ポイントして挿入ポイント候補を、外部プログラム挿入ポイントして挿入ポイント候補情報１１６に格納する。（ステップ４０７、３１２）
次に、図２に戻り、外部プログラム挿入ポイント候補の関連記述の抽出機能２０３を起動する。ここでは、前述の通り、外部プログラム挿入ポイントして挿入ポイント候補情報１１６に格納した、記述の個々に対する前後のコンテクストを抽出し、挿入ポイントに関する表示情報１１７に格納する。
【００５４】
ユーザは、外部プログラム挿入ポイント候補・関連記述の表示機能２０４を起動する。図５のステップ５０１では、挿入ポイント候補情報１１７を取り込み（ステップ５０１）、その中で、外部プログラム挿入のポイントとなる記述を表示する（ステップ５０２）。
表示した記述のうち、詳細情報を確認したい物がある場合は（ステップ５０３）、外部プログラムの挿入ポイントの記述に関連のあるロジックを挿入ポイントに関する表示情報１１８から取り込み（ステップ５０４）、対象の記述の表示画面に展開する（ステップ５０５）。
【００５５】
最後に、他に命令文の詳細情報の確認が必要ないかを判定する。詳細情報の確認が必要である間、繰り返してステップ５０２〜ステップ５０５を実施し、必要がなくなれば処理を終了する（ステップ５０６）。
【００５６】
次に、ユーザにアスペクトの生成７１０５を選択させ、アスペクト生成部１１０を起動させ、外部プログラム挿入の目的にあわせアスペクトを生成する。生成したアスペクトは、アスペクト１１９に格納する。
【００５７】
最後に、ユーザに、アスペクトの織り込み７１０５を選択させ、アスペクトの織り込み部を起動する。ここでは、対象プログラム１１４とアスペクト１１９を入力として、対象プログラム１１４にアスペクト１１９を織り込んだプログラムソースを生成する。生成したプログラムソースは、外部プログラム織り込み後プログラム１２０に格納する。
【図面の簡単な説明】
【００５８】
【図１】外部プログラム挿入ポイント選定支援システム構成図である。
【図２】外部プログラム挿入ポイント選定支援システムの機能を説明するためのフローチャートである。
【図３】外部プログラム挿入ポイント選定支援システムのプログラム解析の機能について説明するためのフローチャートである。
【図４】外部プログラム挿入ポイント候補の抽出処理を説明するためのフローチャートである。
【図５】表示装置を説明するためのフローチャートである。
【図６】ユーザ設定値入力画面を説明するための画面である。
【図７】メニュー画面を説明するための画面である。
【図８】対象となるプログラム例を説明するための画面である。
【図９】プログラム解析情報をイメージで説明するための画面である。
【図１０】外部プログラム挿入ポイント候補を説明するための画面である。
【図１１】外部プログラム挿入ポイント候補の関連記述を説明するための画面である。
【図１２】プログラム解析情報を説明するための画面である。
【図１３】制御/データ依存解析によるプログラム依存グラフの生成処理を説明するためのフローチャートである。
【図１４】外部プログラム挿入可否判断情報の生成を説明するためのフローチャートである。
【図１５】ＵＳＥ／ＤＥＦＩＮＥチェーンについて説明するためのフローチャートである。
【図１６】外部プログラム挿入可否判断情報を用いて、作業対象のプログラムを特定する処理を説明するためのフローチャートである。
【図１】
2009042951.tif 000003
【図２】
2009042951.tif 000004
【図３】
2009042951.tif 000005
【図４】
2009042951.tif 000006
【図５】
2009042951.tif 000007
【図６】
2009042951.tif 000008
【図７】
2009042951.tif 000009
【図８】
2009042951.tif 000010
【図９】
2009042951.tif 000011
【図１０】
2009042951.tif 000012
【図１１】
2009042951.tif 000013
【図１２】
2009042951.tif 000014
【図１３】
2009042951.tif 000015
【図１４】
2009042951.tif 000016
【図１５】
2009042951.tif 000017
【図１６】
2009042951.tif 000018