(57)【要約】【課題】プログラム部品化を行う際、ユーザが試行錯誤することなく適切な分割箇所を知ることができ、ユーザ所望のプログラム部品規模や部品グループの条件を反映させること。【解決手段】シンボル情報解析部１４は、プログラムからシンボルを抽出しシンボル間の参照関係を解析する。部品グループ指定部１７は、解析したシンボル間の参照関係をユーザに提示し、ユーザから、各シンボルを分類させるための部品グループの設定と各シンボルをどの部品グループに所属させるかの指定を受け付ける。部品グループ間参照関係解析部１９は、部品グループ指定部１７にて受け付けた部品グループの指定に従い、指定された部品グループ間の参照関係を解析する。【選択図】図１
2008176364.tif 000002
【特許請求の範囲】
【請求項１】
指定されたプログラムからシンボルを抽出し、抽出したシンボル間の参照関係を解析するシンボル情報解析部と、
該シンボル情報解析部で解析したシンボル間の参照関係をユーザに提示し、ユーザから、各シンボルを分類させるための部品グループの設定と各シンボルをどの部品グループに所属させるかの指定を受け付ける部品グループ指定部と、
上記シンボル情報解析部の解析結果を参照して、上記部品グループ指定部にて受け付けた部品グループの指定に従い、指定された部品グループ間の参照関係を解析する部品グループ間参照関係解析部と、
該部品グループ間参照関係解析部の解析結果を表示させる表示制御部を備えることを特徴とするプログラム部品化支援装置。
【請求項２】
請求項１記載のプログラム部品化支援装置において、
前記部品グループ指定部は、前記シンボルを分類する際に一部のシンボルについてはその所属先を一旦未定とするグレーグループに収容して受け付け、
前記部品グループ間参照関係解析部は、該グレーグループをどの部品グループに所属させるべきかを判定して部品グループを再構成することを特徴とするプログラム部品化支援装置。
【請求項３】
請求項２記載のプログラム部品化支援装置において、
前記部品グループ間参照関係解析部は、再構成後の部品グループ間の参照量が最小となるように前記グレーグループの所属先を決定することを特徴とするプログラム部品化支援装置。
【請求項４】
請求項２記載のプログラム部品化支援装置において、
ユーザから前記部品グループ間の参照指針の指定を受け付ける部品グループ間参照指針指定部を有し、
前記部品グループ間参照関係解析部は、上記部品グループ間参照指針指定部にて受け付けた参照指針の指定を満足するように前記グレーグループの所属先を決定することを特徴とするプログラム部品化支援装置。
【請求項５】
請求項４記載のプログラム部品化支援装置において、
前記部品グループ間参照関係解析部は、前記グレーグループの所属先を変えた各種配置パターンについて前記指定された参照指針との一致度を求め、該一致度が最大となるもののうち、前記部品グループ間の参照量が最小となる配置パターンを最適構成として決定することを特徴とするプログラム部品化支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを分割し、プログラム部品の集合として再構成するプログラム部品化支援装置に関する。
【背景技術】
【０００２】
Ｃ言語をはじめとするプログラム言語により記述されたプログラムは、関数やメソッド等のプログラム言語の持つ機能により、プログラムをモジュール化し再利用することが可能である。しかし、保守による機能拡張を続けたソフトウェアは、モジュール同士が相互に参照して依存関係が複雑になることが多く、その結果、プログラムの再利用及びメインテナンスが困難になる。既存資産のプログラムの再利用性及びメインテナンス性を高めるには、既存資産であるプログラムを、モジュール間の参照関係が疎であるプログラム部品に分割することがポイントであるが、いかに効率よく分割するかがソフトウェア開発における課題の１つとなっている。
【０００３】
こうした課題に対して、プログラムのソースコードを解析しソースコード中の参照関係をユーザに提示する技術や、自動でソフトウェアの分割指針を提示する技術などが提案されている。
【０００４】
特許文献１では、プログラムを構成する特定の部分（プログラム断片）と外部とのインターフェースに関する情報の理解を容易にすることを目的として、ユーザがソースコード中の任意のプログラム断片を指定すると、そのプログラム断片と外部との変数参照関係の情報を変数ごとに抽出する技術が開示されている。
【０００５】
特許文献２では、ソフトウェアを構成するモジュールの構造化を促進し、独立性、保守性および再利用性の高いモジュールの作成を目的とし、モジュール内のブロックの特性データを測定し、測定した特性データに基づきモジュール分割の指針をユーザに提示する技術が開示されている。
【０００６】
【特許文献１】特開２００５−１８１１４号公報
【特許文献２】特開２００４−２９５４２５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記特許文献１では、プログラム中の指定した箇所と外部とのインターフェース情報を抽出することはできるが、複数箇所での変数、関数、領域の選択と参照関係の抽出に関しては考慮はなされていない。さらに、特許文献１にてプログラム分割箇所における参照関係を解析しても、その箇所は参照関係が疎となる最も適切な分割箇所であるかどうかは分からない。ユーザは分割箇所を変更しながら試行錯誤的に解析を行い、その結果を見ながら適切な分割箇所を探す必要があった。
【０００８】
上記特許文献２では、モジュール構造化支援装置は、解析結果を基に自動的にプログラム分割指針を提示する。このためユーザは、解析対象のプログラムを指定するだけで、プログラムの適切な分割箇所を知ることができる。その半面、プログラム分割箇所及び分割規模は装置に予め設定されている条件に従って自動的に決定されてしまうため、ユーザが所望する部品規模や部品グループの条件を反映させることができなかった。
【０００９】
さらに特許文献１と特許文献２の技術を組み合わせようとした場合、プログラムを部品化し部品グループの要素を指定するために用いる共通の変数をどのように設定するかという課題がある。
【００１０】
本発明の目的は、ユーザが試行錯誤することなく適切なプログラム分割箇所を知ることができ、ユーザにより指定されたプログラム部品規模や部品グループの条件を反映させたプログラム部品化支援装置を提供することである。
【課題を解決するための手段】
【００１１】
本発明のプログラム部品化支援装置は、指定されたプログラムからシンボルを抽出し、抽出したシンボル間の参照関係を解析するシンボル情報解析部と、シンボル情報解析部で解析したシンボル間の参照関係をユーザに提示し、ユーザから、各シンボルを分類させるための部品グループの設定と各シンボルをどの部品グループに所属させるかの指定を受け付ける部品グループ指定部と、シンボル情報解析部の解析結果を参照して、部品グループ指定部にて受け付けた部品グループの指定に従い、指定された部品グループ間の参照関係を解析する部品グループ間参照関係解析部と、部品グループ間参照関係解析部の解析結果を表示させる表示制御部を備える。
【００１２】
また前記部品グループ指定部は、前記シンボルを分類する際に一部のシンボルについてはその所属先を一旦未定とするグレーグループに収容して受け付け、前記部品グループ間参照関係解析部は、該グレーグループをどの部品グループに所属させるべきかを判定して部品グループを再構成する。その際前記部品グループ間参照関係解析部は、再構成後の部品グループ間の参照量が最小となるように前記グレーグループの所属先を決定する。
【００１３】
さらに、ユーザから前記部品グループ間の参照指針の指定を受け付ける部品グループ間参照指針指定部を有し、前記部品グループ間参照関係解析部は、上記部品グループ間参照指針指定部にて受け付けた参照指針の指定を満足するように前記グレーグループの所属先を決定する。その際前記部品グループ間参照関係解析部は、前記グレーグループの所属先を変えた各種配置パターンについて前記指定された参照指針との一致度を求め、該一致度が最大となるもののうち、前記部品グループ間の参照量が最小となる配置パターンを最適構成として決定する。
【発明の効果】
【００１４】
本発明のプログラム部品化支援装置によれば、ユーザ所望のプログラム部品規模や部品グループの条件を反映させて、適切な分割箇所でプログラムを部品化でき、ユーザの利便性が向上する。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態を図面を用いて説明する。
【実施例１】
【００１６】
図１は、本発明によるプログラム部品化支援装置の実施例１を示すブロック構成図である。本装置は、例えばパソコンに解析用ソフトウェアを搭載して以下の機能を実現する。初めに用語の定義をすると、「シンボル」とは関数名、変数名である。また、プログラムの分割単位である「プログラム部品」はシンボルで構成され、「部品グループ」とは、プログラム部品の集合である。以下、構成各部の説明をする。
【００１７】
ユーザ入力部１１は、ユーザからのデータ入力や処理要求を受け付ける。対象プログラム指定部１２は解析対象となるプログラムを指定し、プログラム記憶部１３に指定されたプログラムを記憶する。
【００１８】
シンボル情報解析部１４は、プログラム記憶部１３に記憶されたプログラムを参照し、関数、変数といったシンボル情報を解析し、その後解析したシンボル情報を用いて、シンボル間の参照関係を解析する。シンボル情報記憶部１５には、解析したシンボル情報をシンボルテーブル（図４）として記憶する。参照関係記憶部１６には、解析したシンボル間の参照関係をシンボル間参照関係テーブル（図６）として記憶する。
【００１９】
部品グループ指定部１７は、参照関係記憶部１６に記憶されたシンボル間参照関係を基に、ユーザによりそのシンボルを所属させる部品グループを指定し、部品グループ指定情報記憶部１８には、指定されたシンボルの所属先を部品グループ配置テーブル（図８）として記憶する。部品グループ間参照関係解析部１９は、部品グループ指定情報記憶部１８の情報を基に、部品グループ間の参照関係を解析し、解析結果記憶部２０に解析結果を部品グループ間参照関係テーブル（図９）として記憶する。表示制御部２１は、ユーザ入力部１１からの要求を受けると解析結果を表示させる。
【００２０】
図２は、実施例１に係るプログラム部品化支援装置の全体の処理を示すフローチャートである。以下、処理の順に説明する。
【００２１】
（ステップＳ１０１）ユーザはプログラム指定部１２にて、解析対象とするプログラムの指定を行う。
【００２２】
（ステップＳ１０２）シンボル情報解析部１４にて、シンボルの抽出を行う。シンボルの抽出では、プログラム中で使われている関数名と、すべての関数から参照可能なグローバル変数の変数名を抽出する。具体的には、ソースコードの字句解析を行い単語列に分割し、単語列を基に、言語の構文規則から構文を解釈することにより抽出する。抽出したシンボルには、それぞれにＩＤを割り当てる。抽出した結果は、シンボルテーブル（図４）としてシンボル情報記憶部１５に記憶する。また、プログラムを実行させてメモリアクセスのログを取り、メモリアドレスとシンボルの対応付けを行うという、動的解析手法を用いて求めることができる。
【００２３】
（ステップＳ１０３）シンボル情報解析部１４にてシンボル間の参照関係の解析を行う。プログラム中全ての関数において、関数内で参照しているシンボルを抽出し、シンボル間参照関係テーブル（図６）を作成し、参照関係記憶部１６に記憶する。
【００２４】
（ステップＳ１０４）表示制御部２１は、Ｓ１０３で行ったシンボル間の参照関係の解析結果を参照関係記憶部１６から読み出し表示する。表示例を図７に示す。
【００２５】
（ステップＳ１０５）ユーザは部品グループ指定部１７にて、Ｓ１０１で入力したプログラムを複数の部品グループに分割する。その際、Ｓ１０４で出力したシンボル間の参照関係の解析結果からシンボルをどの部品グループに所属するかを指定し、指定した内容を部品グループ指定情報記憶部１８に格納する。部品グループの設定を行う際、ユーザに対し部品グループ配置テーブル（図８）を表示する。
【００２６】
（ステップＳ１０６）部品グループ間参照関係解析部１９にて、部品グループ間の参照関係を解析する。これの詳細は図３で説明する。
【００２７】
（ステップＳ１０７）表示制御部２１は、Ｓ１０６で解析した部品グループ間参照関係を図１０に示すように表示する。
【００２８】
このように本実施例の処理では、ユーザはステップＳ１０５にて部品グループの分割の指定を行うことができる。その際、シンボルの参照関係の解析結果を見てシンボルをどの部品グループに所属するかを指定できることに特徴がある。
【００２９】
図３は、図２におけるステップＳ１０６（部品グループ間参照関係解析部１９）の処理を、詳細に記述したフローチャートである。
【００３０】
（ステップＳ１０６１）Ｓ１０２で検出した全てのシンボルを調査するためにシンボル調査カウンタを用意する。図６に示すＩＤの順で調査を進めるため、まず用意したシンボル調査カウンタの値を１で初期化し、調査対象となるシンボルのＩＤが１のもの、図６でいえばｆｕｎｃ１を調査対象にする。
【００３１】
（ステップＳ１０６２）調査対象のシンボルが所属する部品グループを取得する。部品グループは、Ｓ１０５で設定した部品グループ配置テーブル（図８）を参照することにより求める。
【００３２】
（ステップＳ１０６３）調査対象シンボルが参照するシンボルを取得する。シンボルの取得には、Ｓ１０３で解析したシンボル間参照関係テーブル（図６）を参照して求める。
【００３３】
（ステップＳ１０６４）Ｓ１０６３で取得したシンボルの所属する部品グループとシンボル種別を、部品グループ配置テーブル（図８）とシンボルテーブル（図４）より取得する。
【００３４】
（ステップＳ１０６５）上記Ｓ１０６２からＳ１０６４により、ＩＤ＝１のシンボルの所属する部品グループと、そのシンボルが参照するシンボルの所属する部品グループが求まる。求めた部品グループ間参照関係から、解析結果記憶部２０に記憶している部品グループ間参照関係テーブル（図９）を更新する。
【００３５】
（ステップＳ１０６６）Ｓ１０６３で取得したすべての参照先シンボルに対して、前記Ｓ１０６４の処理を実行したかを判定する。ＮＯであればＳ１０６４に戻り、ＹＥＳであれば次のＳ１０６７に進む。
【００３６】
（ステップＳ１０６７）次に、調査対象であるすべてのシンボルに対し部品グループの所属と参照関係の調査を行ったかどうかを判定する。シンボルカウンタの値が、図６に示すＩＤの値の最大値（ＩＤ＝８）に達したかどうかを判定する。ＮＯであればＳ１０６８へ進み、ＹＥＳであればステップＳ１０６の処理を終了する。
【００３７】
（ステップＳ１０６８）シンボル調査カウンタをインクリメントして、Ｓ１０６２に戻り次のシンボルを調査する。このようにして、部品グループ間参照関係テーブル（図９）を完成させる。
【００３８】
以下、上記処理の各ステップで扱うデータについて具体例で説明する。
図４は、ステップＳ１０２においてシンボル情報解析部１４により解析したシンボル情報解析結果を示すシンボルテーブルの例である。ＩＤは、対象プログラムから抽出したシンボルごとに一意に割り振られた番号を示す。ＳＹＭＢＯＬ＿ＮＡＭＥは、抽出されたシンボル名を示す。ＫＩＮＤは、抽出されたシンボルの種別が、関数であるか変数であるかを示す。図４では、例えばシンボル名ｆｕｎｃ１のＩＤは１、種類は関数である。
【００３９】
図５は、解析対象プログラムの一例で、ステップＳ１０３にてシンボル間の参照関係の解析を説明する図である。（ａ）は、解析対象のソースコードの抜粋を記載したもので、プログラムはＣ言語で記述された場合である。（ｂ）は、（ａ）のソースコードにおけるシンボル参照関係を示す。図では、１つの関数（例えばｆｕｎｃ３）に着目し、内部で参照しているシンボルの参照関係を示す。関数を四角形、変数を楕円形で表記し、参照元から参照先に向け矢印を引いている。
【００４０】
図６は、ステップＳ１０３にてシンボル間の参照関係を解析して作成したシンボル間参照関係テーブルの例を示す図である。図４と同様に、ＩＤはシンボルごとに割り振られた番号、ＳＹＭＢＯＬ＿ＮＡＭＥは抽出されたシンボル名である。ＲＥＦＥＲＥＮＣＥは、当該シンボルが参照する参照先のシンボルのＩＤを示す。例えばシンボルｆｕｎｃ３は、ＩＤ２，ＩＤ７のシンボルを参照しているから、すなわちｆｕｎｃ２，ｖａｒ１を参照していることを示す。
【００４１】
図７は、ステップＳ１０４にてシンボル間の参照関係を表示した一例を示す図である。図６のテーブルの内容をビジュアルに示す。図７の凡例は図５（ｂ）と同様である。
【００４２】
図８は、ステップＳ１０５にて、プログラムを部品グループに分割するために用いる部品グループ配置テーブルの例を示す図である。部品グループに分割するために、各シンボルがどの部品グループに所属するかを設定する。ＧＲＯＵＰは部品グループを示し、ここでは２つの部品グループＧｒｏｕｐ１，Ｇｒｏｕｐ２に分割する。そして、シンボルｆｕｎｃ１，ｆｕｎｃ２，ｆｕｎｃ４はＧｒｏｕｐ１に所属するように、他のシンボルｆｕｎｃ３，ｆｕｎｃ５，ｆｕｎｃ６，ｖａｒ１，ｖａｒ２はＧｒｏｕｐ２に所属するように設定している（所属を○印で示す）。部品グループは、任意のグループ数であってもよい。
【００４３】
図９は、ステップＳ１０６にて、部品グループ間の参照関係を解析して作成した部品グループ間参照関係テーブルの一例を示す図である。このテーブルは、部品グループ間の参照の強さを数値（参照量）で定量的に表したものである。
【００４４】
図１０は、ステップＳ１０７にて、部品グループ間参照関係テーブル（図９）を基に部品グループ間の参照関係を表示した画面の一例である。表示ウィンドウ３１は解析結果を表示する領域であり、ユーザはカーソル３５を操作し表示切替ボタンを選択することで、表示制御部２１により表示内容を切り替えることができる。
【００４５】
図１０（ａ）は、全体表示ボタン３２を選択し、部品グループ全体を表示した場合である。この表示ではシンボルは表示されず、部品グループ間の参照関係が表示される。参照は矢印にて示され、矢印の太さで参照量を示している。本例では、Ｇｒｏｕｐ１とＧｒｏｕｐ２が相互参照しており、Ｇｒｏｕｐ１からＧｒｏｕｐ２への参照量がより多いことを示している。この表示により、部品グループ間の関係を俯瞰的につかむことができる。
【００４６】
図１０（ｂ）は、Ｓｙｍｂｏｌボタン３３を選択し、各シンボル間の参照関係を表示した場合である。この表示では、部品グループ内のシンボル間の参照関連図が表示され、部品グループ間の詳細な参照関係を知ることができる。
【００４７】
図１０（ｃ）は、Ｍｅｔｒｉｃｓボタン３４を選択し、図９の部品グループ間参照関係テーブルの形式で表示した場合である。この表示では、部品グループ間の参照量を数値で知ることができる。
【００４８】
このように実施例１では、まず対象プログラム中の各シンボルの参照関係を解析して出力する。ユーザはその出力結果を見て、各シンボルを複数の部品グループのいずれに所属させるかを指定する。次に、ユーザによって指定された部品グループ間のシンボル参照関係を解析し出力する。これにより、部品グループ間の依存関係が明らかとなり、ユーザに対し部品化指針を提供することができる。その際、ユーザはシンボルの参照関係を見ながら参照関係が疎となる箇所で分割できるとともに、分割する部品規模、部品グループ単位をユーザの所望する条件を反映させることができるので利便性が向上する。また本実施例では、プログラムを解析し、部品グループの要素を指定するために共通の変数としてシンボルを用いているので、一貫した処理が可能となる。
【実施例２】
【００４９】
次に、本発明によるプログラム部品化支援装置の実施例２について説明する。実施例２の装置構成は前記実施例１（図１）と同様であるが、実施例１に次の機能を追加している。
【００５０】
部品グループ指定部１７は、参照関係記憶部１６に記憶されたシンボル名を基に、ユーザがそのシンボルを所属させる部品グループを指定するが、その際部品グループだけでなく所属先を一旦未定とするグレーグループを設ける。部品グループ指定情報記憶部１８は、部品グループ指定部１７にて指定されたシンボルが所属する部品グループとグレーグループの設定を、グレーグループ設定テーブル（図１２）として記憶する。部品グループ間参照関係解析部１９は、部品グループ指定情報記憶部１８の情報を基に、グレーグループをどの部品グループに所属させるべきかを判定し、判定結果に従い再構成した部品グループ間の参照関係を解析する。このように実施例２では、グレーグループを設定することで、より的確なプログラム部品化を実現させるものである。
【００５１】
図１１は、実施例２に係るプログラム部品化支援装置の全体の処理を示すフローチャートである。ここで、ステップＳ２０１からステップＳ２０５の動作は、実施例１（図２のＳ１０１からＳ１０５）と同様のため説明を省略する。
【００５２】
（ステップＳ２０６）Ｓ２０５において、ユーザは各シンボルをどの部品グループに所属させるかを指定するが、どの部品グループに所属させるかを特定できないシンボルについては、部品グループ指定部１７にてグレーグループ設定テーブルを作成し、所属未定シンボルを一旦このグレーグループに収容する。グレーグループの設定については、図１２で述べる。
【００５３】
（ステップＳ２０７）部品グループ間参照関係解析部１９は、グレーグループをどの部品グループに所属させるべきかの判定処理を行う。まず、グレーグループを各部品グループに配置した際の部品グループ間の参照量を算出し、部品グループ判定テーブル（図１４）を作成する。そして、部品グループ間の参照量が最小となるようにグレーグループの配置を決定する。
【００５４】
（ステップＳ２０８）Ｓ２０７の判定結果に基づき、解析結果記憶部２０の部品グループ配置テーブルを更新する。表示制御部２１は、グレーグループを最適に配置した部品グループの構成または部品グループ間参照関係を表示する。表示形式は実施例１（図１０）の場合と同様である。
【００５５】
図１２は、図１１におけるステップＳ２０６のグレーグループ設定テーブルの一例を示す図である。この例では、部品グループ（Ｇｒｏｕｐ１とＧｒｏｕｐ１）の他に、所属先が未定のシンボルを収容するグレーグループを２個（Ｇｒａｙ１とＧｒａｙ２）作成している。そして、シンボルｆｕｎｃ３，ｆｕｎｃ４，ｖａｒ１を所属先未定のシンボルとし、ｆｕｎｃ３，ｖａｒ１はグレーグループＧｒａｙ１に、ｆｕｎｃ４はグレーグループＧｒａｙ２に収容している。その際ユーザは、シンボル間の参照関係（図６及び図７）を参照することで、参照関係の強いシンボル同士を、同一のグレーグループに設定することができる。図１２では、参照関係にあるｆｕｎｃ３とｖａｒ１とを、同一のグレーグループＧｒａｙ１に設定している。このように、関係のあるシンボル同士を同一のグレーグループに設定することにより、グレーグループ単位での参照関係の判別を容易にすることができる。グレーグループの数は所属未定のシンボル数の状況に応じて、適宜増加すればよい。
【００５６】
図１３は、図１２のようにグレーグループを指定した際の、シンボル間の参照関係を示す図である。
【００５７】
図１４は、ステップＳ２０７にて、部品グループ間参照関係解析部１９により作成した部品グループ判定テーブルの一例を示す図である。指定したグレーグループを各部品グループに配置させた場合の、部品グループ間の参照量を解析したものである。部品グループ間の参照量を求める際は、図３記載のフローチャートと同様の処理を行う。
【００５８】
ＧＲＡＹ＿ＧＲＯＵＰ＿ＮＡＭＥは、グレーグループの名称であり、ここではＧｒａｙ１とＧｒａｙ２が存在する。ＧＲＯＵＰ＿ＰＡＴＴＥＲＮは、上記グレーグループを、どの部品グループに配置するかを示す配置パターンである。本例では部品グループが２グループ、グレーグループが２グループあるため、配置パターンの組み合わせは２×２＝４通り存在する。このため４パターンの試行を行う。
【００５９】
部品グループ間の参照量として、「Ｍｅｔｒｉｃｓ：Ｆｕｎｃ  Ｒｅｆ」は関数参照量を、「Ｍｅｔｒｉｃｓ：Ｖａｒ  Ｒｅｆ」は変数参照量を、「Ｍｅｔｒｉｃｓ：ＳＵＭ」は上記「Ｍｅｔｒｉｃｓ：Ｆｕｎｃ  Ｒｅｆ」と「Ｍｅｔｒｉｃｓ：Ｖａｒ  Ｒｅｆ」の合計を示す。例えば配置パターン（ａ）の場合は、Ｇｒａｙ１、Ｇｒａｙ２ともＧｒｏｕｐ１に配置しており、関数参照が２箇所、変数参照が１箇所、参照量の合計は３箇所であることを示している。
【００６０】
各配置パターンのうち参照量の合計が最小となるもの、すなわち「Ｍｅｔｒｉｃｓ：ＳＵＭ」の値が最小となるは配置パターン（ｄ）の場合で、Ｇｒａｙ１をＧｒｏｕｐ１に、Ｇｒａｙ２をＧｒｏｕｐ２に配置した場合である。
【００６１】
図１５は、図１４の部品グループ判定テーブルの内容を、各配置パターンにおけるシンボル間の参照関係を示す図として表したものである。図１５（ａ）〜（ｄ）は、図１４の配置パターン（ａ）〜（ｄ）に対応している。図１５（ｄ）は、Ｇｒａｙ１をＧｒｏｕｐ１に、Ｇｒａｙ２をＧｒｏｕｐ２に配置した場合で、Ｇｒｏｕｐ１とＧｒｏｕｐ２の参照量は１関数０変数となり参照量が最小となることが分かる。
【００６２】
前記実施例１の場合には、ユーザが指定した部品グループ間のシンボル参照関係は図９に示すように合計５箇所（参照量＝５）であった。これに対し本実施例２では、所属未定のシンボルを収容するグレーグループを設定し、グレーグループの所属先を参照量が最小となるように自動的に判定処理を実施する。その結果、図１４（ｄ）のように部品グループ間参照関係は１箇所となり、参照関係がより少ない部品グループに分割できる。
【００６３】
このように実施例２では、入力されたプログラム中の各シンボルをユーザの所望する部品規模、部品グループ単位で分割するだけでなく、所属先を一旦未定とするグレーグループを設けてその所属先を部品グループ間の参照量が最小になるように自動的に配置するので、参照関係が最小になる箇所でプログラムを分割することができる。
【実施例３】
【００６４】
図１６は、本発明によるプログラム部品化支援装置の実施例３を示すブロック構成図である。ここでは、前記実施例１、実施例２と異なる構成の部分について説明する。
【００６５】
部品グループ間参照指針指定部２２は、ユーザから部品グループ間の参照指針を受け付け部品グループ間参照指針指定テーブル（図１８）を作成する。部品グループ間参照指針記憶部２３は、作成した部品グループ間参照指針指定テーブルを記憶する。部品グループ間参照関係解析部１９は、部品グループ指定情報記憶部１８の情報と部品グループ間参照指針記憶部２３の情報を基に、グレーグループをどの部品グループに所属させるべきかを判定し、判定結果に従い再構成した部品グループ間の参照関係を解析する。このように実施例３では、部品グループ間のシンボル参照指針を指定することで、よりユーザの要望に応える形でプログラムを分割するものである。
【００６６】
図１７は、実施例３に係るプログラム部品化支援装置の全体の処理を示すフローチャートである。ここで、ステップＳ３０１からステップＳ３０６の動作は、実施例２（図１１のＳ２０１からＳ２０６）と同様のため説明を省略する。
【００６７】
（ステップＳ３０７）ステップＳ３０６にて部品グループ指定部１７によりグレーグループを指定した後、ユーザは部品グループ間参照指針指定部２２にて、部品グループ間参照指針を指定する。参照指針の指定には、図１８に示すテーブルを利用する。参照指針とは、部品グループ間の参照関係の許可／不許可をユーザが指定するものである。例えばライブラリのように、他のプログラム部品から参照されるがそのプログラム部品は他のプログラム部品を参照しない、というプログラム部品を作成する場合などにこのような参照指針の指定は有効となる。指定した部品グループ間参照指針指定テーブルは、部品グループ間参照指針記憶部２３に記憶される。
【００６８】
（ステップＳ３０８）部品グループ間参照関係解析部１９にて、グレーグループを所属させる部品グループを変えた各種配置パターンについて、部品グループ関参照指針指定テーブル（図１８）で指定した参照指針条件をどれだけ満足するかを判定する。そして判定結果を「ＰＯＬＩＣＹ＿ＭＡＴＣＨ」という指標で表現した部品グループ判定テーブル（図１９）を作成する。
【００６９】
（ステップＳ３０９）Ｓ３０８の判定結果に基づき、解析結果記憶部２０に記憶された部品グループ配置テーブルを、グレーグループを最適に配置した構成に更新する。そして表示制御部２１は、グレーグループを最適に配置した部品グループの構成または部品グループ間参照関係を表示する。表示形式は実施例１（図１０）の場合と同様である。
【００７０】
図１８は、ステップＳ３０７にて、部品グループ間の参照指針を指定した部品グループ間参照指針指定テーブルの一例を示す図である。ユーザは、部品グループ間参照指針指定部２２にて、部品グループ間参照指針指定テーブルを編集する。図１８では、２個の部品グループ間の参照関係を指定したもので、対象となる部品グループから参照先部品グループへ参照を許す場合は○印を、参照を許さない場合は×印を付している。ここでは、Ｇｒｏｕｐ１からＧｒｏｕｐ２への参照を許し、Ｇｒｏｕｐ２からＧｒｏｕｐ１への参照を許さないように指定している。
【００７１】
図１９は、ステップＳ３０８にて、部品グループ間参照関係解析部１９により判定した部品グループ判定テーブルの一例を示す図である。グレーグループを各部品グループに配置させた各配置パターンにおいて、前記図１４で述べた部品グループ間の参照量（Ｍｅｔｒｉｃｓ）を解析するとともに、部品グループ間参照指針に指定された条件をどれだけ満足しているかを示す指標「ＰＯＬＩＣＹ＿ＭＡＴＣＨ」を設けている。
【００７２】
「ＰＯＬＩＣＹ＿ＭＡＴＣＨ」記載の値は、Ｍｅｔｒｉｃｓ算出の際に求めた部品グループ間の参照ごとに、その参照が部品グループ間参照指針指定テーブル（図１８）に記載の参照指針を満たしているかを判定する。例えば、Ｇｒｏｕｐ１からＧｒｏｕｐ２に参照があった場合には図１８の指針（○印）を満たし、Ｇｒｏｕｐ２からＧｒｏｕｐ１に参照があった場合には図１８の指針（×印）を満たさない。このようにして全ての参照に対して指針を満足する割合（参照指針との一致度）を求め、百分率で表示している。
【００７３】
算出した「ＰＯＬＩＣＹ＿ＭＡＴＣＨ」の値を比較し、その値（一致度）が最大となるもののうち、参照量が最小となる配置パターンを最適構成と判定する。本例では、配置パターン（ａ）と（ｄ）とが共に「ＰＯＬＩＣＹ＿ＭＡＴＣＨ」＝１００％となる。このうち、部品グループ間参照関係が最小「Ｍｅｔｒｉｃｓ：ＳＵＭ」＝１となるパターン（ｄ）を最適構成とする。
【００７４】
前記実施例２の場合には、所属未定のシンボルを収容するグレーグループを設定し、グレーグループの所属先を参照量が最小となるように自動的に判定した。これに対し実施例３では、ユーザはさらに部品グループ間のシンボル参照指針を指定することができ、その参照指針を最も満足するようにグレーグループの所属先を自動的に判定するものである。
【００７５】
このように実施例３では、入力されたプログラム中の各シンボルをユーザの所望する部品規模、部品グループ単位で分割するだけでなく、ユーザの所望する部品グループ間の参照条件を反映させることができるので、よりユーザの要望に応える形でプログラムを分割することができる。
【００７６】
本発明によれば、ソフトウェア開発における保守業務等でプログラムを好適に部品化するプログラム部品化支援装置を提供し、既存資産のプログラムの再利用性及びメインテナンス性の向上に大きく寄与する。
【図面の簡単な説明】
【００７７】
【図１】本発明によるプログラム部品化支援装置の実施例１を示すブロック構成図。
【図２】実施例１に係るプログラム部品化支援装置の全体の処理を示すフローチャート。
【図３】図２におけるステップＳ１０６の処理を、詳細に記述したフローチャート。
【図４】シンボル情報解析結果を示すシンボルテーブルの例。
【図５】シンボル間の参照関係の解析を説明する図。
【図６】シンボル間参照関係テーブルの例を示す図。
【図７】シンボル間の参照関係を表示した一例を示す図。
【図８】部品グループ配置テーブルの例。
【図９】部品グループ間参照関係テーブルの一例を示す図。
【図１０】部品グループ間の参照関係を表示した画面の一例。
【図１１】実施例２に係るプログラム部品化支援装置の全体の処理を示すフローチャート。
【図１２】グレーグループ設定テーブルの一例を示す図。
【図１３】図１２のようにグレーグループを指定した際のシンボル間の参照関係を示す図。
【図１４】部品グループ判定テーブルの一例を示す図。
【図１５】図１４の内容をシンボル間の参照関係を示すように表した図。
【図１６】本発明によるプログラム部品化支援装置の実施例３を示すブロック構成図。
【図１７】実施例３に係るプログラム部品化支援装置の全体の処理を示すフローチャート。
【図１８】部品グループ間参照指針指定テーブルの一例を示す図。
【図１９】部品グループ判定テーブルの一例を示す図。
【符号の説明】
【００７８】
１１…ユーザ入力部、１２…対象プログラム指定部、１３…プログラム記憶部、１４…シンボル情報解析部、１５…シンボル情報記憶部、１６…参照関係記憶部、１７…部品グループ指定部、１８…部品グループ指定情報記憶部、１９…部品グループ間参照関係解析部、２０…解析結果記憶部、２１…表示制御部、２２…部品グループ間参照指針指定部、２３…部品グループ間参照指針記憶部。
【図１】
2008176364.tif 000003
【図２】
2008176364.tif 000004
【図３】
2008176364.tif 000005
【図４】
2008176364.tif 000006
【図５】
2008176364.tif 000007
【図６】
2008176364.tif 000008
【図７】
2008176364.tif 000009
【図８】
2008176364.tif 000010
【図９】
2008176364.tif 000011
【図１０】
2008176364.tif 000012
【図１１】
2008176364.tif 000013
【図１２】
2008176364.tif 000014
【図１３】
2008176364.tif 000015
【図１４】
2008176364.tif 000016
【図１５】
2008176364.tif 000017
【図１６】
2008176364.tif 000018
【図１７】
2008176364.tif 000019
【図１８】
2008176364.tif 000020
【図１９】
2008176364.tif 000021