(57)【要約】  【課題】ユーザが作成したプログラムがソフトウェアのアーキテクチャに合っているか否かを判断し、当該プログラムがソフトウェアのアーキテクチャに合っていない場合にどの関数を修正すればよいのかを特定する情報を提供すること。  【解決手段】プログラム蓄積領域１１２に記憶されるプログラムに含まれる参照元の関数が参照する参照先の関数のそれぞれの関数が属するモジュールの関係が、モデル蓄積領域１１１に記憶されているアーキテクチャモデル情報に適合するものであるか否かを参照関係検査部１２２で検査し、当該アーキテクチャモデル情報に適合しない場合には、参照元の関数又は参照先の関数の少なくとも何れか一方に関連する関数を特定する関数情報を関連関数解析部１２３が取得する。【選択図】図１
2008102831.tif 000002
【特許請求の範囲】
【請求項１】
アーキテクチャに関する情報を提供する情報提供装置であって、
前記アーキテクチャにおいて参照が許可されるモジュールの関係を特定するアーキテクチャモデル情報、プログラム、および、当該プログラムが属するモジュールを特定するプログラム情報、を記憶する記憶部と、
制御部と、
出力部と、を備え、
前記制御部は、
プログラムに含まれる第１関数が参照する第２関数が含まれるプログラムを前記記憶部から特定し、特定した前記プログラムが属するモジュールを前記プログラム情報から特定し、前記第１関数、当該第１関数が含まれるモジュールを特定する情報、当該第１関数が参照する第２関数、および、当該第２関数が属するモジュールを特定する情報、を有する参照関係からなる参照関係情報を生成する参照関係解析処理と、
前記第１関数が含まれるモジュールと前記第２関数が属するモジュールとの関係が、前記アーキテクチャモデル情報で特定される関係か否かを検査して、前記アーキテクチャにおいて参照が許可されない参照違反の参照関係を特定する参照関係検査処理と、
前記参照違反の参照関係を解消するために、前記第１関数又は前記第２関数の少なくとも何れか一方に関連する関数を特定する関数情報を前記参照関係情報から取得する関連関数解析処理と、
前記関数情報を予め定めた形式にして前記出力部から出力する出力処理と、
を行うこと、
を特徴とする情報提供装置。
【請求項２】
請求項１に記載の情報提供装置であって、
前記関連関数解析処理は、
第Ｌ関数の属するモジュールに対して前記アーキテクチャモデル情報で特定される関係を満たすモジュールに属し、前記第Ｌ関数を参照する関数を第Ｌ＋１関数として前記参照関係情報から抽出する処理を、Ｌに対して２から順に自然数を代入して新たな第Ｌ＋１関数が抽出されなくなるまで繰り返すことで抽出した第Ｌ＋１関数のうち、当該第Ｌ＋１関数の属するモジュールと前記第１関数の属するモジュールとの間の関係が前記アーキテクチャモデル情報で特定される関係を満たすものを迂回候補関数情報として取得するものであること、
を特徴とする情報提供装置。
【請求項３】
請求項１又は２に記載の情報提供装置であって、
前記間連関数解析処理は、
第Ｍ関数が参照する関数を第Ｍ＋１関数として前記参照関係情報から抽出する処理を、Ｍに対して２から順に自然数を代入して新たな第Ｍ＋１関数が抽出されなくなるまで繰り返し、前記第Ｍ＋１関数を参照する関数の属するモジュールと前記第１関数の属するモジュールとの関係が、前記アーキテクチャモデル情報で特定される関係を満たすものである場合には、前記第Ｍ＋１関数を移譲候補関数情報として取得するものであること、
を特徴とする情報提供装置。
【請求項４】
請求項１又は３に記載の情報提供装置であって、
前記関連関数解析処理は、
第Ｎ関数を参照する関数を第Ｎ＋２関数として前記参照関係情報から抽出する処理を、Ｎに対して１から順に自然数を代入して新たな第Ｎ＋２関数が抽出されなくなるまで繰り返し、前記第Ｎ＋２関数が参照する関数の属するモジュールと前記第２関数の属するモジュールとの関係が、前記アーキテクチャモデル情報で特定される関数を満たすものである場合には、前記第Ｎ＋２関数を移譲候補関数情報として取得するものであること、
を特徴とする情報提供装置。
【請求項５】
請求項１に記載の情報提供装置であって、
前記関連関数解析処理は、
第１関数の属するモジュールに関数を保持するための変数を設けること、
第１関数の属するモジュールに、関数を受け取って、受け取った関数を前記変数に設定する新たな関数を設けること、
第１関数を前記変数を呼び出すように変更すること、
前記第１関数の属するモジュールに対して前記アーキテクチャモデル情報で特定される関係を満たすモジュールに前記第２関数を前記変数に設定する処理を行わせる処理を行わせる新たな関数を設けること、
を特定する修正候補関数情報を生成する処理をさらに行うこと、
を特徴とする情報提供装置。
【請求項６】
コンピュータを、
前記アーキテクチャにおいて参照が許可されるモジュールの関係を特定するアーキテクチャモデル情報、プログラム、および、当該プログラムが属するモジュールを特定するプログラム情報、を記憶する記憶手段、
制御手段、
出力手段、として機能させるプログラムであって、
前記制御手段は、
プログラムに含まれる第１関数が参照する第２関数が含まれるプログラムを前記記憶部から特定し、特定した前記プログラムが属するモジュールを前記プログラム情報から特定し、前記第１関数、当該第１関数が含まれるモジュールを特定する情報、当該第１関数が参照する第２関数、および、当該第２関数が属するモジュールを特定する情報、を有する参照関係からなる参照関係情報を生成する参照関係解析処理と、
前記第１関数が含まれるモジュールと前記第２関数が属するモジュールとの関係が、前記アーキテクチャモデル情報で特定される関係か否かを検査して、前記アーキテクチャにおいて参照が許可されない参照違反の参照関係を特定する参照関係検査処理と、
前記参照違反の参照関係を解消するために、前記第１関数又は前記第２関数の少なくとも何れか一方に関連する関数を特定する関数情報を前記参照関係情報から取得する関連関数解析処理と、
前記関数情報を予め定めた形式にして前記出力部から出力する出力処理と、
を行うこと、
を特徴とするプログラム。
【請求項７】
請求項６に記載のプログラムであって、
前記関連関数解析処理は、
第Ｌ関数の属するモジュールに対して前記アーキテクチャモデル情報で特定される関係を満たすモジュールに属し、前記第Ｌ関数を参照する関数を第Ｌ＋１関数として前記参照関係情報から抽出する処理を、Ｌに対して２から順に自然数を代入して新たな第Ｌ＋１関数が抽出されなくなるまで繰り返すことで抽出した第Ｌ＋１関数のうち、当該第Ｌ＋１関数の属するモジュールと前記第１関数の属するモジュールとの間の関係が前記アーキテクチャモデル情報で特定される関係を満たすものを迂回候補関数情報として取得するものであること、
を特徴とするプログラム。
【請求項８】
請求項６又は７に記載のプログラムであって、
前記間連関数解析処理は、
第Ｍ関数が参照する関数を第Ｍ＋１関数として前記参照関係情報から抽出する処理を、Ｍに対して２から順に自然数を代入して新たな第Ｍ＋１関数が抽出されなくなるまで繰り返し、前記第Ｍ＋１関数を参照する関数の属するモジュールと前記第１関数の属するモジュールとの関係が、前記アーキテクチャモデル情報で特定される関係を満たすものである場合には、前記第Ｍ＋１関数を移譲候補関数情報として取得するものであること、
を特徴とするプログラム。
【請求項９】
請求項６又は８に記載のプログラムであって、
前記関連関数解析処理は、
第Ｎ関数を参照する関数を第Ｎ＋２関数として前記参照関係情報から抽出する処理を、Ｎに対して１から順に自然数を代入して新たな第Ｎ＋２関数が抽出されなくなるまで繰り返し、前記第Ｎ＋２関数が参照する関数の属するモジュールと前記第２関数の属するモジュールとの関係が、前記アーキテクチャモデル情報で特定される関数を満たすものである場合には、前記第Ｎ＋２関数を移譲候補関数情報として取得するものであること、
を特徴とするプログラム。
【請求項１０】
請求項６に記載のプログラムであって、
前記関連関数解析処理は、
第１関数の属するモジュールに関数を保持するための変数を設けること、
第１関数の属するモジュールに、関数を受け取って、受け取った関数を前記変数に設定する新たな関数を設けること、
第１関数を前記変数を呼び出すように変更すること、
前記第１関数の属するモジュールに対して前記アーキテクチャモデル情報で特定される関係を満たすモジュールに前記第２関数を前記変数に設定する処理を行わせる処理を行わせる新たな関数を設けること、
を特定する修正候補関数情報を生成する処理をさらに行うこと、
を特徴とするプログラム。
【請求項１１】
アーキテクチャにおいて参照が許可されるモジュールの関係を特定するアーキテクチャモデル情報、プログラム、および、当該プログラムが属するモジュールを特定するプログラム情報、を記憶する記憶部と、
制御部と、
出力部と、を備える情報提供装置においてアーキテクチャに関する情報を提供する情報提供方法であって、
前記制御部が、プログラムに含まれる第１関数が参照する第２関数が含まれるプログラムを前記記憶部から特定し、特定した前記プログラムが属するモジュールを前記プログラム情報から特定し、前記第１関数、当該第１関数が含まれるモジュールを特定する情報、当該第１関数が参照する第２関数、および、当該第２関数が属するモジュールを特定する情報、を有する参照関係からなる参照関係情報を生成する参照関係解析過程と、
前記制御部が、前記第１関数が含まれるモジュールと前記第２関数が属するモジュールとの関係が、前記アーキテクチャモデル情報で特定される関係か否かを検査して、前記アーキテクチャにおいて参照が許可されない参照違反の参照関係を特定する参照関係検査過程と、
前記制御部が、前記参照違反の参照関係を解消するために、前記第１関数又は前記第２関数の少なくとも何れか一方に関連する関数を特定する関数情報を前記参照関係情報から取得する関連関数解析過程と、
前記制御部が、前記関数情報を予め定めた形式にして前記出力部から出力する出力過程と、
を備えること、
を特徴とする情報提供方法。
【請求項１２】
請求項１１に記載の情報提供方法であって、
前記関連関数解析過程は、
第Ｌ関数の属するモジュールに対して前記アーキテクチャモデル情報で特定される関係を満たすモジュールに属し、前記第Ｌ関数を参照する関数を第Ｌ＋１関数として前記参照関係情報から抽出する処理を、Ｌに対して２から順に自然数を代入して新たな第Ｌ＋１関数が抽出されなくなるまで繰り返すことで抽出した第Ｌ＋１関数のうち、当該第Ｌ＋１関数の属するモジュールと前記第１関数の属するモジュールとの間の関係が前記アーキテクチャモデル情報で特定される関係を満たすものを迂回候補関数情報として取得するものであること、
を特徴とする情報提供方法。
【請求項１３】
請求項１１又は１２に記載の情報提供方法であって、
前記間連関数解析処理は、
第Ｍ関数が参照する関数を第Ｍ＋１関数として前記参照関係情報から抽出する処理を、Ｍに対して２から順に自然数を代入して新たな第Ｍ＋１関数が抽出されなくなるまで繰り返し、前記第Ｍ＋１関数を参照する関数の属するモジュールと前記第１関数の属するモジュールとの関係が、前記アーキテクチャモデル情報で特定される関係を満たすものである場合には、前記第Ｍ＋１関数を移譲候補関数情報として取得するものであること、
を特徴とする情報提供方法。
【請求項１４】
請求項１１又は１３に記載の情報提供方法であって、
前記関連関数解析処理は、
第Ｎ関数を参照する関数を第Ｎ＋２関数として前記参照関係情報から抽出する処理を、Ｎに対して１から順に自然数を代入して新たな第Ｎ＋２関数が抽出されなくなるまで繰り返し、前記第Ｎ＋２関数が参照する関数の属するモジュールと前記第２関数の属するモジュールとの関係が、前記アーキテクチャモデル情報で特定される関数を満たすものである場合には、前記第Ｎ＋２関数を移譲候補関数情報として取得するものであること、
を特徴とする情報提供方法。
【請求項１５】
請求項１１に記載の情報提供方法であって、
前記関連関数解析処理は、
第１関数の属するモジュールに関数を保持するための変数を設けること、
第１関数の属するモジュールに、関数を受け取って、受け取った関数を前記変数に設定する新たな関数を設けること、
第１関数を前記変数を呼び出すように変更すること、
前記第１関数の属するモジュールに対して前記アーキテクチャモデル情報で特定される関係を満たすモジュールに前記第２関数を前記変数に設定する処理を行わせる処理を行わせる新たな関数を設けること、
を特定する修正候補関数情報を生成する処理をさらに行うこと、
を特徴とする情報提供方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アーキテクチャに関する情報を提供する技術に関する。
【背景技術】
【０００２】
ソフトウェアのアーキテクチャに関する技術として、特許文献１に記載の技術がある。
【０００３】
特許文献１に記載の技術は、入力された評価対象のプログラムからモジュール間の呼び出し関係を構造化チャートとして作成し、モジュール間で共通に使用されるグローバル変数の構造化チャート上での分布をもとに、プログラムの保守性の評価値を求めることができるようにしている。
【０００４】
【特許文献１】特開平６−２６６５５０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載の技術では、プログラムの保守性の評価値を求めるにとどまり、ユーザが作成したプログラムがソフトウェアのアーキテクチャに合っているか否かの判断や、当該プログラムがソフトウェアのアーキテクチャに合っていない場合にどのように修正すればよいのかの判断については、ユーザに委ねられている。
【０００６】
そこで、本発明は、ユーザが作成したプログラムがソフトウェアのアーキテクチャに合っているか否かを判断し、当該プログラムがソフトウェアのアーキテクチャに合っていない場合にどの関数を修正すればよいのかを特定する情報を提供することを目的とする。
【課題を解決するための手段】
【０００７】
以上の課題を解決するため、本発明は、ユーザが作成したプログラムにおいて、第１関数から第２関数への参照がソフトウェアのアーキテクチャに合っていない場合に、第１関数又は第２関数に直接的又は間接的に関連する関数を特定する。
【０００８】
例えば、本発明は、アーキテクチャに関する情報を提供する情報提供装置であって、前記アーキテクチャにおいて参照が許可されるモジュールの関係を特定するアーキテクチャモデル情報、プログラム、および、当該プログラムが属するモジュールを特定するプログラム情報、を記憶する記憶部と、制御部と、出力部と、を備え、前記制御部は、プログラムに含まれる第１関数が参照する第２関数が含まれるプログラムを前記記憶部から特定し、特定した前記プログラムが属するモジュールを前記プログラム情報から特定し、前記第１関数、当該第１関数が含まれるモジュールを特定する情報、当該第１関数が参照する第２関数、および、当該第２関数が属するモジュールを特定する情報、を有する参照関係からなる参照関係情報を生成する参照関係解析処理と、前記第１関数が含まれるモジュールと前記第２関数が属するモジュールとの関係が、前記アーキテクチャモデル情報で特定される関係か否かを検査して、前記アーキテクチャにおいて参照が許可されない参照違反の参照関係を特定する参照関係検査処理と、前記参照違反の参照関係を解消するために、前記第１関数又は前記第２関数の少なくとも何れか一方に関連する関数を特定する関数情報を前記参照関係情報から取得する関連関数解析処理と、前記関数情報を予め定めた形式にして前記出力部から出力する出力処理と、を行うこと、を特徴とする。
【発明の効果】
【０００９】
以上のように、本発明によれば、ユーザが作成したプログラムがソフトウェアのアーキテクチャに合っていない場合に、適合しない関数に関連する関数を特定することができるため、特定された関数を修正することにより、アーキテクチャに適合させる修正を容易に行うことができるようになる。
【発明を実施するための最良の形態】
【００１０】
図１は、本発明の第一の実施形態である情報提供装置１００の概略図である。
【００１１】
図示するように情報提供装置１００は、記憶部１１０と、制御部１２０と、入力部１３０と、出力部１４０と、を備えている。
【００１２】
記憶部１１０は、モデル蓄積領域１１１と、プログラム蓄積領域１１２と、を有している。
【００１３】
モデル蓄積領域１１１には、ソフトウェアアーキテクチャにおいて参照が許されるモジュール間の関係を特定する情報が記憶される。
【００１４】
例えば、本実施形態においては、図２（モデルテーブル１１１ａの概略図）に示されているようなモデルテーブル１１１ａが記憶されている。
【００１５】
モデルテーブル１１１ａには、ソフトウェアアーキテクチャにおいて参照が許されるモジュール間の関係として、参照が許される参照元のモジュールと参照先のモジュールとを特定する情報が記憶されている。
【００１６】
具体的には、モデルテーブル１１１ａは、参照元モジュール名欄１１１ｂと、参照先モジュール名欄１１１ｃと、が設けられており、同じ行の参照元モジュール名欄１１１ｂ及び参照先モジュール名欄１１１ｃに、ソフトウェアアーキテクチャにおいて参照が許される参照元と参照先のモジュールのモジュール名を各々格納するようにしている。
【００１７】
参照元モジュール名欄１１１ｂには、ソフトウェアアーキテクチャにおいて参照が許される参照元のモジュールを一意に特定する情報が格納される。ここで本実施形態では、ソフトウェアアーキテクチャにおいて参照が許される参照元のモジュールを一意に特定する情報としてモジュール名を使用しているが、このような態様に限定されず、例えば、モジュール毎に一意に割り当てられたＩＤ等を使用することも可能である。
【００１８】
参照先モジュール名欄１１１ｃには、同じ行の参照元モジュール名欄１１１ｂに格納されたモジュール名で特定されるモジュールが、ソフトウェアアーキテクチャにおいて参照が許されている参照先のモジュールを一意に特定する情報が格納される。ここで本実施形態では、ソフトウェアアーキテクチャにおいて参照が許される参照先のモジュールを一意に特定する情報としてモジュール名を使用しているが、このような態様に限定されず、例えば、モジュール毎に一意に割り当てられたＩＤ等を使用することも可能である。
【００１９】
ここで、本実施形態においては、図２に示されているように、モジュールＡからモジュールＢへの参照と、モジュールＢからモジュールＣへの参照が、ソフトウェアアーキテクチャにおいて許されているものとする。即ち、これら以外のモジュール間の参照関係、例えば、モジュールＡからモジュールＣへの参照、モジュールＢからモジュールＡへの参照、モジュールＣからモジュールＢへの参照、および、モジュールＣからモジュールＡへの参照がソフトウェアアーキテクチャの参照違反となる。
【００２０】
プログラム蓄積領域１１２には、モジュールを特定する情報と、当該モジュールに属するプログラムを特定する情報と、が記憶される。
【００２１】
例えば、本実施形態においては、図３（プログラムテーブル１１３及びファイル１１４の概略図）に示されているように、プログラムテーブル１１３と、ファイル１１４と、が記憶される。
【００２２】
プログラムテーブル１１３には、各モジュールに属するプログラムを特定する情報がモジュール毎に記憶される。
【００２３】
例えば、本実施形態におけるプログラムテーブル１１３は、モジュール名欄１１３ａと、ファイル名欄１１３ｂと、を備えている。
【００２４】
モジュール名欄１１３ａには、各プログラムテーブル１１３のモジュールを一意に特定する情報が格納される。
【００２５】
例えば、本実施形態では、モジュールを一意に特定する情報として、モジュール名が格納される。
【００２６】
ファイル名欄１１３ｂには、モジュール名欄１１３ａに格納されたモジュール名で特定されるモジュールに属するプログラムを一意に特定する情報が格納される。
【００２７】
例えば、本実施形態では、プログラムを一意に特定する情報として、プログラムファイルのファイル名が格納される。
【００２８】
また、プログラム蓄積領域１１２には、ファイル名欄１１３ｂに対応させて、プログラムが格納されたファイル１１４が記憶される。
【００２９】
制御部１２０は、参照関係解析部１２１と、参照関係検査部１２２と、関連関数解析部１２３と、を備えている。
【００３０】
参照関係解析部１２１は、プログラム蓄積領域１１２に記憶される特定のモジュールに属するプログラムにおける関数の呼び出し先のモジュール及び関数を特定することで、参照関係を特定する。
【００３１】
例えば、本実施形態においては、参照関係解析部１２１は、モジュール毎のプログラムテーブル１１３から、モジュール名と当該モジュールに属するプログラムのファイル名を取得して、取得したファイル名に対応するファイル１１４のプログラムを解析することにより、当該プログラムに含まれる関数を特定する。
【００３２】
そして、特定した関数が呼び出す関数を抽出して、抽出した関数を有するプログラムのファイル１１４を特定し、そのファイル名を特定する。
【００３３】
さらに、特定したファイル名が格納されているプログラムテーブル１１３のモジュール名欄１１３ａから抽出した関数の属するモジュール名を特定する。
【００３４】
そして、参照関係解析部１２１は、参照元のモジュール名と関数、および、参照先のモジュール名と関数、を対応させることで、参照関係を特定する。このようにしてプログラム蓄積領域１１２に記憶されている全てのプログラムに含まれる関数について参照関係を特定し、特定した参照関係を参照関係情報として記憶部１１０に記憶しておく。
【００３５】
参照関係検査部１２２は、参照関係解析部１２１において特定した参照関係情報に含まれる各参照関係を検査して、ソフトウェアアーキテクチャにおいて参照が許されるものか否かを判断する。
【００３６】
例えば、本実施形態においては、参照関係検査部１２２は、参照関係解析部１２１において特定した各参照関係から参照元となっているモジュール名と参照先となっているモジュール名とを特定し、特定したモジュール名が、モデル蓄積領域１１１に記憶されているモデルテーブル１１１ａの参照元モジュール名欄１１１ｂ及び参照先モジュール名欄１１１ｃのそれぞれに対応する欄に格納されている行があるか否かを確認する。
【００３７】
そして、参照関係検査部１２２は、そのような行がある場合には、ソフトウェアアーキテクチャにおいて参照が許されるものであり、そのような行がない場合には、ソフトウェアアーキテクチャにおいて参照が許されるものではない（参照違反である）と判断する。
【００３８】
関連関数解析部１２３は、参照関係検査部１２２において参照違反と判断された参照関係を解消するための方法を解析する。ここで、本実施形態においては、関連関数解析部１２３は、参照違反と判断された参照関係を解消するために関数の呼び出しを迂回する迂回候補関数情報を生成する。
【００３９】
具体的には、本実施形態においては、関連関数解析部１２３は、参照関係検査部１２２において参照違反と判断された参照関係における参照先の関数を呼び出している他のモジュールの関数を、参照関係解析部１２１が特定した参照関係情報から抽出する。
【００４０】
次に、関連関数解析部１２３は、抽出した関数の属するモジュールのモジュール名を参照元モジュール名とし、参照違反と判断された参照関係における参照先のモジュールのモジュール名を参照先モジュール名とする行がモデル蓄積領域１１１のモデルテーブル１１１ａにあるか否かを判断する。
【００４１】
そして、そのような行がある場合には、参照違反と判断された参照関係における参照元のモジュールのモジュール名を参照元モジュール名とし、抽出した関数の属するモジュールのモジュール名を参照先モジュール名とする行がモデル蓄積領域１１１のモデルテーブル１１１ａにあるか否かを判断し、そのような行があるときには抽出した関数と当該関数が属するモジュール名とを対応させた情報を迂回候補関数情報として取得する。
【００４２】
次に、関連関数解析部１２３は、迂回候補関数情報として取得された関数を呼び出している他の関数を、参照関係解析部１２１が特定した参照関係情報から抽出する。
【００４３】
そして、関連関数解析部１２３は、抽出した関数の属するモジュールのモジュール名を参照元モジュール名とし、迂回候補関数情報として取得された関数の属するモジュールのモジュール名を参照先モジュール名とする行がモデル蓄積領域１１１のモデルテーブル１１１ａにあるか否かを判断する。そのような行がある場合には、参照違反と判断された参照関係における参照元のモジュールのモジュール名を参照元モジュール名とし、抽出した関数の属するモジュールのモジュール名を参照先モジュール名とする行がモデル蓄積領域１１１のモデルテーブル１１１ａにあるか否かを判断し、そのような行があるときには抽出した関数と当該関数が属するモジュール名とを対応させた情報を迂回候補関数情報として取得する。
【００４４】
以上の処理を、新たな迂回候補関数情報が取得されなくなるまで繰り返し行うことで、関連関数解析部１２３は、参照関係検査部１２２において参照違反と判断された参照関係における参照先の関数を直接又は間接に呼び出している他のモジュールの関数（及び当該館数の属するモジュール名）を迂回候補関数情報として取得する。
【００４５】
図４は、関連関数解析部１２３で行う迂回候補関数情報の生成処理を説明するための模式図である。
【００４６】
図４においては、長方形で囲まれたノードでモジュールを示し、角丸長方形で囲まれたノードで各モジュールに属する関数を示している。そして、モジュールを示すノード間を結ぶ実線で示された有向エッジは、ソフトウェアアーキテクチャにおいて参照が許されているモジュール間の関係を示すものである。即ち、有向エッジの方向へのモジュール間の参照がソフトウェアアーキテクチャにおいて許されている（なお、一つのモジュール内での参照関係は認められているものとする）。また、関数を示すノード間を結ぶ破線で示された有向エッジは、各関数の呼び出し関係を示すものである。即ち、有向エッジで示す方向の関数を呼び出している。また、関数を示すノード内の文字は、（モジュール名，関数）を示している。
【００４７】
ここで、モジュールＡに属する関数ｆ１のノード１６１は、モジュールＣに属する関数ｈ２のノード１６２に有向エッジが延びており、この参照関係が参照違反となる。
【００４８】
そこで、関連関数解析部１２３は、モジュールＣに属する関数ｈ２のノード１６２に有向エッジが延びている他のモジュールの関数を示すノード１６３と、このノード１６３に対して有向エッジが延びているノード１６４を検索し、これらのノード１６３、１６４にノード１６１から有向エッジを延ばしても参照違反にならないことを確認して、これらのノード１６３、１６４で特定されるモジュール名及び関数を迂回候補関数情報として特定する。
【００４９】
さらに、関連関数解析部１２３は、以上のようにして取得した迂回候補関数情報を予め定められた表示形式に加工して、後述する出力部１４０において表示する。
【００５０】
所定の表示形式としては、例えば、図５（迂回候補関数情報の表示例を示す概略図）に示されているように、参照違反となった参照関係を示すため、参照元のモジュール名と関数（図５では、「モジュールＡ、ｆ１」）から参照先のモジュール名と関数（図５では、「モジュールＣ、ｈ２」）に矢印（→）を配置し、参照違反となった参照関係の下方に迂回候補関数（図５では、「モジュールＢ、ｇ３」「モジュールＢ、ｇ２」）を列挙するようにしている。
【００５１】
また、所定の表示形式としては、このような態様に限られず、例えば、図６（迂回候補関数情報の表示例を示す概略図）に示されているように、参照違反となった参照関係の参照先関数に至るまでのノードの数が少ない順に候補関数を表示することも可能である。なお、図６では、候補関数の左方に位置する数字が参照違反となった参照関係の参照先関数に至るまでのノードの数を示している。
【００５２】
さらに、所定の表示形式としては、例えば、図７（迂回候補関数情報の表示例を示す概略図）に示されているように、参照違反となった参照関係の参照先関数に至るまでのノードの経路を表示することも可能である。
【００５３】
以上のように構成される情報提供装置１００は、図８（コンピュータ１７０の概略図）に示すようないわゆるコンピュータ１７０により実現可能である。
【００５４】
例えば、記憶部１１０は、ハードディスク等の外部記憶装置１７１により実現可能であり、制御部１２０は、外部記憶装置１７１に記憶されている所定のプログラムをメモリ１７２に読み込みＣＰＵ（Central Processing Unit）１７３で実行することにより実現可能であり、入力部１３０は、キーボードやマウスといった入力装置１７４により実現可能であり、出力部１４０は、ディスプレイなどの出力装置１７５により実現可能である。
【００５５】
以下では、情報提供装置１００での処理の流れをＰＡＤ（Problem Analysis Diagram）を用いて説明する。
【００５６】
なお、ＰＡＤについては、［二村良彦、「プログラム技法−ＰＡＤによる構造化プログラミング（情報工学基礎講座４）」、オーム社、１９８４年］に詳細に記載されている。
【００５７】
図９は、情報提供装置１００にプログラムを入力する処理を示すＰＡＤである。
【００５８】
まず、情報提供装置１００にプログラムを入力する際には、入力部１３０を介して、情報提供装置１００のオペレータからプログラム、当該プログラムを格納するファイル名、および、当該プログラムの属するモジュール名の入力を受け付ける（Ｓ１０）。
【００５９】
次に、情報提供装置１００の制御部１２０は、入力されたモジュール名をプログラム蓄積領域１１２から検索し、入力されたモジュール名のエントリにそのプログラムを対応付けて記憶する（Ｓ１２）。
【００６０】
具体的には、入力されたモジュール名を有するモジュール名欄１１３ａに有するプログラムテーブル１１２ａのファイル名欄１１３ｂに新たなエントリを作成し、作成したエントリに入力されたファイル名を格納するとともに、入力されたプログラムを入力されたファイル名のファイルとしてプログラム蓄積領域１１２に記憶する。
【００６１】
図１０は、制御部１２０の参照関係解析部１２１による処理を示すＰＡＤである。
【００６２】
まず、ステップＳ２０では、参照関係解析部１２１は、プログラム蓄積領域１１２に記憶されている全てのプログラムを各々変数Ｐに格納して、ステップＳ２１〜ステップＳ２５の処理を繰り返す。
【００６３】
次に、ステップＳ２１では、参照関係解析部１２１は、プログラムＰの属するモジュール名を変数Ｍ１に格納する。
【００６４】
なお、プログラムＰのモジュール名は、プログラムのファイル名をプログラムテーブル１１２ａのファイル名欄１１２ｃから検索して、ヒットしたプログラムテーブル１１２ａのモジュール名欄１１２ｂから取得すればよい。
【００６５】
そして、ステップＳ２２では、参照関係解析部１２１は、プログラムＰ内の全ての関数を各々変数Ｆに格納して、ステップＳ２３〜ステップＳ２５の処理を各々の関数につき繰り返す。
【００６６】
次に、ステップＳ２３では、参照関係解析部１２１は、関数Ｆが呼び出す全ての関数を変数Ｇに格納して、ステップＳ２４及びステップＳ２５の処理を各々の関数につき繰り返す。
【００６７】
そして、ステップＳ２４では、参照関係解析部１２１は、関数Ｇを有するプログラムの属するモジュール名を変数Ｍ２に格納する。
【００６８】
なお、関数Ｇを有するプログラムの属するモジュール名は、関数Ｇを備えるプログラムをプログラム蓄積領域１１２に記憶されているファイル１１４から特定し、特定したファイル１１４のファイル名をプログラムテーブル１１２ａのファイル名欄１１２ｃから検索し、ヒットしたプログラムテーブル１１２ａのモジュール名欄１１２ｂから取得すればよい。
【００６９】
そして、ステップＳ２５では、モジュールＭ１と関数Ｆとを関連付けた要素（Ｍ１、Ｆ）を参照元要素とし、モジュールＭ２と関数Ｇとを関連付けた要素（Ｍ２、Ｇ）を参照先要素とする参照関係を特定する情報を参照関係情報として取得する。
【００７０】
図１１は、制御部１２０の参照関係検査部１２２による処理を示すＰＡＤである。
【００７１】
まず、ステップＳ３０において、参照関係検査部１２２は、参照関係解析部１２１が取得した要素（Ｍ１、Ｆ）を参照元要素とし、要素（Ｍ２、Ｇ）を参照先要素とする全ての参照関係を各々変数Ｋに格納して、ステップＳ３１〜ステップＳ３３の処理を各々の参照関係につき繰り返す。
【００７２】
次に、ステップＳ３１において、参照関係検査部１２２は、参照元要素のモジュールＭ１が参照元モジュール名欄１１１ｂに格納されており、参照先要素のモジュールＭ２が参照先モジュール名欄１１１ｃに格納されている行がモデル蓄積領域１１１に記憶されているモデルテーブル１１１ａにあるか否かを確認する。
【００７３】
そして、そのような行がある場合には、ステップＳ３２に進み、何も処理を行わず、そのような行がない場合には、ステップＳ３３に進み、要素（Ｍ１、Ｆ）を参照元要素とし、要素（Ｍ２、Ｇ）を参照先要素とする参照関係Ｋを参照違反であると特定する。
【００７４】
図１２は、制御部１２０の関連関数解析部１２３による迂回候補関数情報の生成処理を示すＰＡＤである。
【００７５】
まず、ステップＳ４０において、関連関数解析部１２３は、参照関係検査部１２２において参照違反であると特定された参照関係のうち、任意の参照関係を抽出し、変数Ｊに格納する。
【００７６】
ここで、参照関係Ｊの抽出は任意の方法でよいが、例えば、参照関係検査部１２２において参照違反であると特定された参照関係を出力部１４０において一覧表示し、そのなかから、入力部１３０を介して、情報提供装置１００のオペレータが選択すればよい。
【００７７】
そして、ステップＳ４１において、関連関数解析部１２３は、変数ＣＡＮＤの初期値として、参照関係Ｊの参照先要素である要素（Ｍ２、Ｇ）を変数ＣＡＮＤに格納する。
【００７８】
次に、ステップＳ４２において、関連関数解析部１２３は、変数ＣＡＮＤの要素が増えなくなるまで、ステップＳ４３〜ステップＳ４６の処理を繰り返す。
【００７９】
そして、ステップＳ４３では、関連関数解析部１２３は、変数ＣＡＮＤの全ての要素につき、モジュール名と関数を各々変数Ｍ３と変数Ｇ３に格納してステップＳ４４〜ステップＳ４６の処理を各々の要素につき繰り返す。
【００８０】
ステップＳ４４では、関連関数解析部１２３は、モデル蓄積領域１１１に記憶されているモデルテーブル１１１ａにおいて、モジュールＭ３が参照先モジュール名欄１１１ｃに格納されている行における参照元モジュール名欄１１１ｂに格納されているモジュール名を変数Ｍ４に格納する。
【００８１】
ステップＳ４５では、関連関数解析部１２３は、プログラム蓄積領域１１２においてモジュールＭ４に対応して記憶されているファイル１１４に格納されているプログラムの中で関数Ｇ３を呼び出す関数を全て特定し、特定した関数からなる集合（Ｈ１、・・・、）Ｈｊ）を生成する。
【００８２】
ステップＳ４６では、関連関数解析部１２３は、ステップＳ４５で特定した関数にモジュール名を対応させた要素｛（Ｍ４、Ｈ１）、・・・、（Ｍ４、Ｈｊ）｝を変数ＣＡＮＤに追加する。
【００８３】
そして、ステップＳ４７では、関連関数解析部１２３は、変数ＣＡＮＤに含まれる全ての要素につき、モジュール名と関数を各々変数Ｍ５と変数Ｇ５に格納して、参照元要素のモジュールＭ１が参照元モジュール名欄１１１ｂに格納されており、参照先要素のモジュールＭ５が参照先モジュール名欄１１１ｃに格納されている行がモデル蓄積領域１１１に記憶されているモデルテーブル１１１ａに存在する要素を抽出して、抽出した要素の集合を変数ＣＡＮＤ２に格納する。
【００８４】
そして、ステップＳ４８において、関連関数解析部１２３は、変数ＣＡＮＤ２に含まれる要素を特定する情報を迂回候補関数情報として取得する。
【００８５】
なお、このようにして取得された迂回候補関数情報は、出力部１４０を介して所定の表示形式で表示される。
【００８６】
図１３は、本発明の第二の実施形態である情報提供装置２００の概略図である。
【００８７】
本実施形態は、第一の実施形態と比較して、関連関数解析部２２３での処理が異なるので、以下、この異なる点に関連する事項について説明する。
【００８８】
本実施形態における関連関数解析部２２３は、第一の実施形態における関連関数解析部１２３での処理に加えて、移譲候補関数情報を生成する処理を行う。
【００８９】
図１４は、関連関数解析部２２３で行う移譲候補関数情報の生成処理を説明するための模式図である。
【００９０】
図１４においては、図４と同様に、長方形で囲まれたノードでモジュールを示し、角丸長方形で囲まれたノードで各モジュールに属する関数を示している。そして、モジュールを示すノード間を結ぶ実線で示された有向エッジは、ソフトウェアアーキテクチャにおいて参照が許されているモジュール間の関係を示すものである。即ち、有向エッジの方向へのモジュール間の参照がソフトウェアアーキテクチャにおいて許されている（なお、一つのモジュール内での参照関係は認められているものとする）。また、関数を示すノード間を結ぶ破線で示された有向エッジは、各関数の呼び出し関係を示すものである。即ち、有向エッジで示す方向の関数を呼び出している。また、関数を示すノード内の文字は、（モジュール名，関数）を示している。
【００９１】
ここで、図１４においては、モジュールＣに属する関数ｈ２のノード２６１は、モジュールＢに属する関数ｇ２のノード２６２に有向エッジが延びており、この参照関係が参照違反になっている。
【００９２】
この点、関連関数解析部２２３で第一の実施形態における処理と同様の処理を行っても、ノード２６２を直接又は間接に呼び出しているノード２６３及びノード２６４をノード２６１から呼び出すことができないため（参照違反となってしまうため）、最終的に迂回できるノードを提示することができない。
【００９３】
このような場合に、入力部１３０を介して情報提供装置２００のオペレータからの指示に応じて、関連関数解析部２２３は、参照違反となっている関数を参照元又は参照先のいずれかのモジュールに入れることにより、参照違反が解消されるか否かを判断する。
【００９４】
例えば、関連関数解析部２２３は、参照関係検査部１２２において参照違反と判断された参照関係における参照先の関数が呼び出している他の関数を参照関係解析部１２１が特定した参照関係情報から抽出し、さらに、抽出した関数が呼び出している他の関数を抽出する処理を繰り返すことにより、参照違反と判断された参照関係における参照先の関数及び当該参照先の関数が直接又は間接に呼び出している他の関数を特定する。
【００９５】
そして、関連関数解析部２２３は、参照違反と判断された参照関係における参照先の関数及び当該参照先の関数が直接又は間接に呼び出している他の関数を、参照違反と判断された参照関係における参照元の関数の属するモジュールに移すことにより、参照違反が解消するか否かを判断する。
【００９６】
この判断は、参照違反と判断された参照関係における参照先の関数、または、当該参照先の関数が直接又は間接に呼び出している他の関数、を呼び出している関数が属するモジュールのモジュール名を参照元モジュール名とし、参照違反と判断された参照関係における参照元のモジュール名を参照先モジュール名とする行がモデル蓄積領域１１１のモデルテーブル１１１ａにあるか否かで判断する。そして、モデルテーブル１１１ａにそのような行がある場合には、参照違反と判断された参照関係における参照先の関数及び当該参照先の関数が直接又は間接に呼び出している他の関数と、これらの関数が属するモジュール名と、を特定した情報を移譲候補関数情報として取得する。
【００９７】
また、関連関数解析部２２３は、参照関係検査部１２２において参照違反と判断された参照関係における参照元の関数を呼び出している他の関数を参照関係解析部１２１が特定した参照関係情報から抽出し、さらに、抽出した関数を呼び出している他の関数を抽出する処理を繰り返すことにより、参照違反と判断された参照関係における参照元の関数及び当該参照元の関数を直接又は間接に呼び出している他の関数を特定する。
【００９８】
そして、関連関数解析部２２３は、参照違反と判断された参照関係における参照元の関数及び当該参照元の関数を直接又は間接に呼び出している他の関数を、参照違反と判断された参照関係における参照先の関数の属するモジュールに移すことにより、参照違反が解消するか否かを判断する。
【００９９】
この判断は、参照違反と判断された参照関係における参照元の関数、および、当該参照元の関数を直接又は間接に呼び出している他の関数、を呼び出している関数が属するモジュールのモジュール名を参照元モジュール名とし、参照違反と判断された参照関係における参照元のモジュール名を参照先モジュール名とする行がモデル蓄積領域１１１のモデルテーブル１１１ａにあるか否かで判断する。そして、モデルテーブル１１１ａにそのような行がある場合には、参照違反と判断された参照関係における参照元の関数及び当該参照元の関数を直接又は間接に呼び出している他の関数と、これらの関数が属するモジュール名と、を特定した情報を移譲候補関数情報として取得する。
【０１００】
そして、関連関数解析部２２３は、以上のようにして取得した移譲候補関数情報を予め定められた表示形式に加工して、後述する出力部１４０において表示する。
【０１０１】
図１５は、制御部１２０の関連関数解析部２２３による移譲候補関数情報の生成処理を示すＰＡＤである。
【０１０２】
まず、ステップＳ５０において、関連関数解析部２２３は、参照関係検査部１２２において参照違反であると特定された参照関係のうち、任意の参照関係を抽出し、変数Ｉに格納する。
【０１０３】
ここで、参照関係Ｉの抽出は任意の方法でよいが、例えば、参照関係検査部１２２において参照違反であると特定された参照関係を出力部１４０において一覧表示し、そのなかから、入力部１３０を介して、情報提供装置１００のオペレータが選択すればよい。
【０１０４】
次に、ステップＳ５１において、関連関数解析部２２３は、参照関係Ｉの参照先要素である要素（Ｂ、ｇ２）における関数ｇ２と、モジュールＢの中で関数ｇ２が直接又は間接に呼び出す全ての関数と、をモジュールＣに移すことによって、参照違反が解消するか否かを判断し、参照違反が解消する場合には、関数ｇ２と、モジュールＢの中で関数ｇ２が直接又は間接に呼び出す全ての関数と、を特定する情報を移譲候補関数情報として取得する。
【０１０５】
なお、参照違反が解消するか否かの判断は、関数ｇ２、および、モジュールＢの中で関数ｇ２が直接又は間接に呼び出す全ての関数、を呼び出す関数のモジュール名を参照元モジュール名とし、モジュールＢを参照先モジュール名とする行がモデル蓄積領域１１１のモデルテーブル１１１ａにあるか否かで判断すればよい。
【０１０６】
また、移譲候補関数情報には、移譲先であるモジュールＣを特定する情報も含めることができる。
【０１０７】
次に、関連関数解析部２２３は、参照関係Ｉの参照元要素である要素（Ｃ、ｈ２）における関数ｈ２と、モジュールＣの中で関数ｈ２を直接又は間接に呼び出す全ての関数と、をモジュールＢに移すことによって、参照違反が解消するか否かを判断し、参照違反が解消する場合には、関数ｈ２と、モジュールＣの中で関数ｈ２を直接又は間接に呼び出す全ての関数と、を特定する情報を移譲候補関数情報として取得する。
【０１０８】
なお、参照違反が解消するか否かの判断は、関数ｈ２、および、モジュールＣの中で関数ｈ２を直接又は間接に呼び出す全ての関数、を呼び出す関数のモジュール名を参照元モジュール名とし、モジュールＣを参照先モジュール名とする行がモデル蓄積領域１１１のモデルテーブル１１１ａにあるか否かで判断すればよい。
【０１０９】
また、移譲候補関数情報には、移譲先であるモジュールＢを特定する情報も含めることができる。
【０１１０】
なお、このようにして取得された移譲候補関数情報は、出力部１４０を介して所定の表示形式で表示される。
【０１１１】
図１６は、本発明の第三の実施形態である情報提供装置３００の概略図である。
【０１１２】
本実施形態は、第二の実施形態と比較して、関連関数解析部３２３での処理が異なるので、以下、この異なる点に関連する事項について説明する。
【０１１３】
本実施形態における関連関数解析部３２３は、第二の実施形態における関連関数解析部２２３での処理に加えて、修正候補関数情報を生成する処理を行う。
【０１１４】
図１７は、関連関数解析部３２３で行う修正候補関数情報の生成処理を説明するための模式図である。
【０１１５】
図１７においては、図４と同様に、長方形で囲まれたノードでモジュールを示し、角丸長方形で囲まれたノードで各モジュールに属する関数を示している。そして、モジュールを示すノード間を結ぶ実線で示された有向エッジは、ソフトウェアアーキテクチャにおいて参照が許されているモジュール間の関係を示すものである。即ち、有向エッジの方向へのモジュール間の参照がソフトウェアアーキテクチャにおいて許されている（なお、一つのモジュール内での参照関係は認められているものとする）。また、関数を示すノード間を結ぶ破線で示された有向エッジは、各関数の呼び出し関係を示すものである。即ち、有向エッジで示す方向の関数を呼び出している。また、関数を示すノード内の文字は、（モジュール名，関数）を示している。
【０１１６】
ここで、図１７においては、モジュールＣに属する関数ｈ２のノード３６１が、モジュールＢに属する関数ｇ２のノード３６２に有向エッジが延びており、この参照関係が参照違反になっている。
【０１１７】
この点、関連関数解析部３２３で第二の実施形態における処理と同様の処理により、ノード３６２をモジュールＣに移譲しても、ノード３６２からノード３６３への呼び出しがあるため、参照違反となってしまう。
【０１１８】
このような場合に、入力部１３０を介して情報提供装置３００のオペレータからの指示に応じて、関連関数解析部３２３は、参照違反となっている関数を修正するための修正候補関数情報を提示する。
【０１１９】
例えば、関連関数解析部３２３は、提示する修正候補関数情報は、プログラムの構成を下記の（１）〜（４）のように修正する修正案である。
（１）参照関係検査部１２２において参照違反と判断された参照関係における参照元のモジュールに関数を保持するための変数を設ける。
（２）参照関係検査部１２２において参照違反と判断された参照関係における参照元のモジュールに、関数を受け取って、受け取った関数を（１）で設けた変数に設定する新たな関数を設ける。
（３）参照関係検査部１２２において参照違反と判断された参照関係における参照元の関数を（１）で設けた変数を呼び出すように変更する。
（４）参照関係検査部１２２において参照違反と判断された参照関係における参照元のモジュールに対して参照が許可されているモジュールに、（２）で設けた新たな関数に対して参照違反と判断された参照関係における参照先の関数を（１）で設けた変数に設定する処理を行わせる新たな関数を設ける。
【０１２０】
なお、参照違反と判断された参照関係における参照元のモジュールに対して参照が許可されているモジュールについては、モデル蓄積領域１１１に記憶されているモデルテーブル１１１ａにおいて参照先モジュール名が、参照違反と判断された参照関係における参照元のモジュールのモジュール名となっているものから、所定の法則に従って任意のものを選択すればよい。
【０１２１】
このような修正候補関数情報については、例えば、図１７で示したような参照違反がある場合に、図１８（関連関数解析部３２３で行う修正候補関数情報の生成処理を説明するための模式図）で示されているように、モジュールＣに関数を保持するための変数３６４と、関数を受け取って、受け取った関数を変数３６４に設定する新たな関数ｈ３を設ける（ノード３６５）。そして、モジュールＣにおいて、参照違反と判断された参照関係における参照元の関数ｈ２（ノード３６１）を変数３６４から呼び出しを行うように変更し、モジュールＢには、モジュールＣに設けた新たな関数ｈ３（ノード３６５）に対して、参照違反と判断された参照関係における参照先の関数ｇ２（ノード３６２）を、変数３６４に設定する処理を行わせる新たな関数ｇ３（ノード３６６）を設けるようにする。
【０１２２】
図１９は、制御部１２０の関連関数解析部３２３による修正候補関数情報の生成処理を示すＰＡＤである。
【０１２３】
まず、ステップＳ５０において、関連関数解析部３２３は、参照関係検査部１２２において参照違反であると特定された参照関係のうち、任意の参照関係を抽出し、変数Ｌに格納する。
【０１２４】
ここで、参照関係Ｌの抽出は任意の方法でよいが、例えば、参照関係検査部１２２において参照違反であると特定された参照関係を出力部１４０において一覧表示し、そのなかから、入力部１３０を介して、情報提供装置１００のオペレータが選択すればよい。
【０１２５】
次に、ステップＳ６１において、関連関数解析部３２３は、次の（１）〜（４）からなる修正候補関数情報を生成する。
（１）参照関係Ｌの参照元要素である要素（Ｃ、ｈ２）におけるモジュールＣに関数を保持するための変数ｈｈｈを設ける。
（２）参照関係Ｌの参照元要素である要素（Ｃ、ｈ２）におけるモジュールＣに関数を受け取り、受け取った関数を変数ｈｈｈに設定する関数ｈ３を設ける。
（３）参照関係Ｌの参照元要素である要素（Ｃ、ｈ２）における関数ｈ２を、参照関係Ｌの参照先要素である要素（Ｂ、ｇ２）におけるモジュールＢの関数ｇ２の代わりにモジュールＣに設けられた変数ｈｈｈを呼び出すように書き換える。
（４）参照関係Ｌの参照先要素である要素（Ｂ、ｇ２）におけるモジュールＢに、モジュールＣの関数ｈ３を使って、モジュールＢの関数ｇ２を変数ｈｈｈに設定する関数ｇ３を設ける。
【０１２６】
なお、以上の処理においては、モジュールＢからモジュールＣへの参照が許可されているものとしているが、このような参照が許可されていない場合には、（４）で設ける関数ｇ３をモジュールＣへの参照が許可されている他のモジュールに設けることも可能である。
【０１２７】
また、（４）で設ける関数は、少なくとも（３）で書き換える関数を実行する前に実行されるようにする。
【０１２８】
なお、このようにして生成された修正候補関数情報は、出力部１４０を介して所定の表示形式で表示する。
【０１２９】
また、図２０は、プログラムがＣ言語である場合に、図１９のステップＳ６１において提示された修正候補関数情報に沿って修正したプログラムの一例を示す概略図である。
【０１３０】
例えば、図１９のステップＳ６１における（１）で設ける変数は、符号３８１に記載されており、（２）で設ける関数は、符号３８２に記載されており、（３）で書き換える関数は、符号３８３に記載されており、（４）で設ける関数は、符号３８４に記載されている。
【０１３１】
以上に記載した実施形態においては、モデル蓄積領域１１１に、ソフトウェアアーキテクチャにおいて参照が許されるモジュール間の関係を特定する情報が記憶されているが、このような態様に限定されず、例えば、ソフトウェアアーキテクチャにおいて参照が許されないモジュール間の関係を特定する情報を記憶するようにしてもよい。
【図面の簡単な説明】
【０１３２】
【図１】第一の実施形態である情報提供装置の概略図。
【図２】モデルテーブルの概略図。
【図３】プログラムテーブル及びファイルの概略図。
【図４】迂回候補関数情報の生成処理を説明するための模式図。
【図５】迂回候補関数情報の表示例を示す概略図。
【図６】迂回候補関数情報の表示例を示す概略図。
【図７】迂回候補関数情報の表示例を示す概略図。
【図８】コンピュータの概略図。
【図９】情報提供装置にプログラムを入力する処理を示すＰＡＤ。
【図１０】参照関係解析部による処理を示すＰＡＤ。
【図１１】参照関係検査部による処理を示すＰＡＤ。
【図１２】関連関数解析部による迂回候補関数情報の生成処理を示すＰＡＤ。
【図１３】第二の実施形態である情報提供装置の概略図。
【図１４】移譲候補関数情報の生成処理を説明するための模式図。
【図１５】関連関数解析部による移譲候補関数情報の生成処理を示すＰＡＤ。
【図１６】第三の実施形態である情報提供装置の概略図。
【図１７】修正候補関数情報の生成処理を説明するための模式図。
【図１８】修正候補関数情報の生成処理を説明するための模式図。
【図１９】関連関数解析部による修正候補関数情報の生成処理を示すＰＡＤ。
【図２０】修正したプログラムの一例を示す概略図。
【符号の説明】
【０１３３】
１００、２００、３００  情報提供装置
１１０  記憶部
１１１  モデル蓄積領域
１１２  プログラム蓄積領域
１２０  制御部
１２１  参照関係解析部
１２２  参照関係検査部
１２３、２２３、３２３  関連関数解析部
１３０  入力部
１４０  出力部
【図１】
2008102831.tif 000003
【図２】
2008102831.tif 000004
【図３】
2008102831.tif 000005
【図４】
2008102831.tif 000006
【図５】
2008102831.tif 000007
【図６】
2008102831.tif 000008
【図７】
2008102831.tif 000009
【図８】
2008102831.tif 000010
【図９】
2008102831.tif 000011
【図１０】
2008102831.tif 000012
【図１１】
2008102831.tif 000013
【図１２】
2008102831.tif 000014
【図１３】
2008102831.tif 000015
【図１４】
2008102831.tif 000016
【図１５】
2008102831.tif 000017
【図１６】
2008102831.tif 000018
【図１７】
2008102831.tif 000019
【図１８】
2008102831.tif 000020
【図１９】
2008102831.tif 000021
【図２０】
2008102831.tif 000022