(57)【要約】  ユーザや開発者の手作業による設定を必要とすることなく、複雑なプログラムの概要理解を容易化するための簡略化されたプログラム図を作成するプログラム抽象図作成装置を提供する。  本装置では、モジュールが参照する外部データ（グローバル変数やファイルデータ等）と同じ外部データを参照する他のモジュール群を一つのモジュールとして抽象化する。モジュールが参照する外部データが存在しない場合、モジュールの中から呼ばれる他のモジュール群を一つのモジュールとして抽象化する。抽象化したモジュールの凝集性欠如の度合いを算出し、この値が閾値を超えるまで抽象化処理を繰り返すことでモジュールを抽象化して、評価対象プログラムの抽象図を出力する。
2015145539.tif 000002
【特許請求の範囲】
【請求項１】
評価対象プログラムの抽象図を抽象度の指定入力に応じて表示するプログラム抽象図作成装置であって、
前記評価対象プログラムのソースコードより、少なくともモジュール構成、参照データ、呼出モジュールのデータを有するソースコード解析データと、及び少なくとも評価観点別のモジュール毎の重要度データを有するモジュール別重要度データとを作成し、または既作成の前記データを読み込む抽象図作成処理部と、
ユーザ指定の抽象度を受付けて、抽象度に対応した可視化するモジュールの重要度の閾値と、LCOMの閾値を設定する抽象度判定部と、
未だ抽象化されていないモジュールの中から、モジュールの重要度が前記閾値以上となるモジュールを抽象化対象モジュールとして選択する抽象化対象モジュール判定部と、
前記抽象化対象モジュールが外部データを参照しているかどうかを判定する外部データアクセス判定部と、
前記抽象化対象モジュールが外部データを参照している場合、前記抽象化対象モジュールと、前記外部データを参照している他の前記未抽象化モジュールとを一つの新しい抽象化モジュールとして纏めて抽象化する第１の抽象化処理部と、
前記抽象化対象モジュールが外部データを参照していない場合、前記抽象化対象モジュールと、前記抽象化対象モジュールが呼び出す他の未抽象化モジュールとを一つの新しい抽象化モジュールとして纏めて抽象化する第２の抽象化処理部と、を備え、
前記抽象図作成処理部が、前記新しい抽象化モジュールの凝集性欠如の度合い(LCOM)を算出し、前記凝集性欠如の度合いが前記閾値を超えるか否かを判定し、前記閾値を超えない場合、前記抽象化モジュールを登録して、該登録した新たな抽象化モジュールに纏められた前記未抽象化モジュールを抽象化済モジュールとしてフラグを設定し、前記登録した新たな抽象化モジュールを次の抽象化対象モジュールに設定して、前記外部データアクセス判定部へ移行し、前記凝集性欠如の度合いが前記閾値を超える場合は、前記抽象化モジュールを登録せずに前記抽象化対象モジュール判定部へ移行し、
前記抽象化対象モジュール判定部が、抽象化対象モジュールとして選択すべき未抽象化モジュールが無くなったと判定した場合には、モジュール抽象化処理を終了し、
前記抽象図作成処理部が、抽象化済のフラグを参照して、未抽象化のモジュールのみをノードとするコールグラフ形式の抽象図を出力することを特徴とするプログラム抽象図作成装置。
【請求項２】
請求項１記載のプログラム抽象図作成装置において、
前記抽象化対象モジュール判定部が、前記未抽象化モジュールの中から抽象化対象モジュールを選択する場合に、前記未抽象化モジュールの重要度を判定し、前記重要度の最も高い前記未抽象化モジュールを前記抽象化対象モジュールとして選択することを特徴とするプログラム抽象図作成装置。
【請求項３】
請求項１記載のプログラム抽象図作成装置において、
前記抽象図作成処理部が、前記抽象化モジュールを登録する場合に、少なくとも抽象化モジュールの識別子、内包モジュールの識別子、内包データの識別子、参照データの識別子、呼出モジュールの識別子の各データ項目を有するデータテーブルに登録し、新たに登録した該抽象化モジュールの抽象化済フラグを未抽象化の初期値で追加設置することを特徴とするプログラム抽象図作成装置。
【請求項４】
請求項１乃至３のいずれかの請求項に記載のプログラム抽象図作成装置において、
前記外部データは、グローバル変数、ファイルデータ、データベースに格納されるデータ、通信ソケットからの入力データ、関数からの返り値、であることを特徴とするプログラム抽象図作成装置。
【請求項５】
請求項１乃至３のいずれかの請求項に記載のプログラム抽象図作成装置において、
前記第１の抽象化処理部が、前記抽象化対象モジュールと、前記抽象化対象モジュールが参照している前記外部データを参照している他の複数の前記未抽象化モジュールとを一つのモジュールとして抽象化する場合に、前記他の複数の未抽象化モジュールの重要度を判定し、前記抽象化対象モジュールと、前記重要度の最も高い前記未抽象化モジュールとを一つのモジュールとして抽象化することを特徴とするプログラム抽象図作成装置。
【請求項６】
請求項１乃至３のいずれかの請求項に記載のプログラム抽象図作成装置において、
前記第２の抽象化処理部が、前記抽象化対象モジュールと、前記抽象化対象モジュールが呼び出す他の複数の前記未抽象化モジュールとを一つのモジュールとして抽象化する場合に、前記他の複数の未抽象化モジュールの重要度を判定し、前記抽象化対象モジュールと、前記重要度の最も高い前記未抽象化モジュールとを一つのモジュールとして抽象化することを特徴とするプログラム抽象図作成装置。
【請求項７】
評価対象プログラムの抽象図を、コンピュータを用いて抽象度の指定入力に応じて表示するプログラム抽象図作成プログラムであって、
前記コンピュータによる処理ステップとして、
前記評価対象プログラムのソースコードより、少なくともモジュール構成、参照データ、呼出モジュールのデータを有するソースコード解析データと、及び少なくとも評価観点別のモジュール毎の重要度データを有するモジュール別重要度データとを作成し、または既作成のデータを読み込む処理ステップと、
ユーザ指定の抽象度を受付けて、抽象度に対応した可視化するモジュールの重要度の閾値と、LCOMの閾値を設定する抽象度判定ステップと、
未だ抽象化されていないモジュールの中から、モジュールの重要度が前記閾値以上となるモジュールを抽象化対象モジュールとして選択する抽象化対象モジュール判定ステップと、
前記抽象化対象モジュールが外部データを参照しているかどうかを判定する外部データアクセス判定ステップと、
前記抽象化対象モジュールが外部データを参照している場合、前記抽象化対象モジュールと、前記外部データを参照している他の前記未抽象化モジュールとを一つの新しい抽象化モジュールとして纏めて抽象化する第１の抽象化処理ステップと、
前記抽象化対象モジュールが外部データを参照していない場合、前記抽象化対象モジュールと、前記抽象化対象モジュールが呼び出す他の未抽象化モジュールとを一つの新しい抽象化モジュールとして纏めて抽象化する第２の抽象化処理ステップと、
前記新しい抽象化モジュールの凝集性欠如の度合い(LCOM)を算出し、前記凝集性欠如の度合いが前記閾値を超えるか否かを判定し、前記閾値を超えない場合、前記抽象化モジュールを登録して、該登録した新たな抽象化モジュールに纏められた前記未抽象化モジュールを抽象化済モジュールとしてフラグを設定し、前記登録した新たな抽象化モジュールを次の抽象化対象モジュールに設定して、前記外部データアクセス判定部へ移行し、前記凝集性欠如の度合いが前記閾値を超える場合は、前記抽象化モジュールを登録せずに前記抽象化対象モジュール判定部へ移行する処理ステップと、
前記抽象化対象モジュール判定ステップにおいて、抽象化対象モジュールとして選択すべき未抽象化モジュールが無くなったと判定した場合には、モジュール抽象化処理を終了し、前記抽象化済のフラグを参照して、未抽象化のモジュールのみをノードとするコールグラフ形式の抽象図を出力するステップと、を有することを特徴とするプログラム抽象図作成プログラム。
【請求項８】
前記抽象化対象モジュール判定ステップにおいて、前記未抽象化モジュールの中から抽象化対象モジュールを選択する場合に、前記未抽象化モジュールの重要度を判定し、前記重要度の最も高い前記未抽象化モジュールを前記抽象化対象モジュールとして選択することを特徴とする請求項７記載のプログラム抽象図作成プログラム。
【請求項９】
請求項７記載のプログラム抽象図作成プログラムにおいて、
前記抽象化モジュールを登録する場合に、少なくとも抽象化モジュールの識別子、内包モジュールの識別子、内包データの識別子、参照データの識別子、呼出モジュールの識別子の各データ項目を有するデータテーブルに登録し、新たに登録した該抽象化モジュールの抽象化済フラグを未抽象化の初期値で追加設置することを特徴とするプログラム抽象図作成プログラム。
【請求項１０】
請求項７乃至９のいずれかの請求項に記載のプログラム抽象図作成プログラムにおいて、
前記外部データは、グローバル変数、ファイルデータ、データベースに格納されるデータ、通信ソケットからの入力データ、関数からの返り値、であることを特徴とするプログラム抽象図作成プログラム。
【請求項１１】
請求項７乃至９のいずれかの請求項に記載のプログラム抽象図作成プログラムにおいて、
前記第１の抽象化処理ステップにおいて、前記抽象化対象モジュールと、前記抽象化対象モジュールが参照している前記外部データを参照している他の複数の前記未抽象化モジュールとを一つのモジュールとして抽象化する場合に、前記他の複数の未抽象化モジュールの重要度を判定し、前記抽象化対象モジュールと、前記重要度の最も高い前記未抽象化モジュールとを一つのモジュールとして抽象化することを特徴とするプログラム抽象図作成プログラム。
【請求項１２】
請求項７乃至９のいずれかの請求項に記載のプログラム抽象図作成プログラムにおいて、
前記第２の抽象化処理ステップにおいて、前記抽象化対象モジュールと、前記抽象化対象モジュールが呼び出す他の複数の前記未抽象化モジュールとを一つのモジュールとして抽象化する場合に、前記他の複数の未抽象化モジュールの重要度を判定し、前記抽象化対象モジュールと、前記重要度の最も高い前記未抽象化モジュールとを一つのモジュールとして抽象化することを特徴とするプログラム抽象図作成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの構造や挙動を可視化する技術に関する。
【背景技術】
【０００２】
プログラムの構造や挙動を理解する方法として、フローチャートやシーケンス図といったプログラム図を利用する方法がある。プログラム図は市販の可視化ツールを用いてプログラムのソースコードから生成することが可能である。しかし、複雑なプログラムを対象としてプログラム図を生成した場合、当該プログラム図も複雑なものとなり、プログラム全体の概要を理解する目的には適さなかった。【０００３】
この問題を解決するため、例えば特許文献１では、可視化するモジュールを開発者が予め手動で設定することで、特定のモジュールのみを可視化する方法が提案されている。このように、必要なモジュールのみをプログラム図に図示することで、プログラム全体の概要理解を容易化することが可能となる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−２５７６６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１記載の方法では、可視化するモジュールを開発者が予め手動で設定する必要があるため、複雑なプログラムへの適用は困難であった。
例えば複雑なプログラムの簡略化されたフローチャートを作成する場合、複雑に関連するモジュール群の中から一部の重要なモジュール群を手作業で抽出しなければならない。さらに、フローチャートを作成するにはモジュール間の関連を図示できなければならないが、この関連を手作業で抽出するには多くの時間を要する。【０００６】
そこで、本発明の課題は、ユーザや開発者の手作業による設定を必要とすることなく簡略化されたプログラム図を容易に作成可能で、かつモジュール間の関連を図示可能なプログラム抽象図作成装置、及びプログラム抽象図作成プログラムを提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決する為に本発明では、評価対象プログラムの抽象図を抽象度の指定入力に応じて表示するプログラム抽象図作成装置を、前記評価対象プログラムのソースコードより、少なくともモジュール構成、参照データ、呼出モジュールのデータを有するソースコード解析データと、及び少なくとも評価観点別のモジュール毎の重要度データを有するモジュール別重要度データとを作成し、または既作成のデータを読み込む抽象図作成処理部と、ユーザ指定の抽象度を受付けて、抽象度に対応した可視化するモジュールの重要度の閾値と、LCOMの閾値を設定する抽象度判定部と、未だ抽象化されていないモジュールの中から、モジュールの重要度が前記閾値以上となるモジュールを抽象化対象モジュールとして選択する抽象化対象モジュール判定部と、前記抽象化対象モジュールが外部データを参照しているかどうかを判定する外部データアクセス判定部と、前記抽象化対象モジュールが外部データを参照している場合、前記抽象化対象モジュールと、前記外部データを参照している他の前記未抽象化モジュールとを一つの新しい抽象化モジュールとして纏めて抽象化する第１の抽象化処理部と、前記抽象化対象モジュールが外部データを参照していない場合、前記抽象化対象モジュールと、前記抽象化対象モジュールが呼び出す他の未抽象化モジュールとを一つの新しい抽象化モジュールとして纏めて抽象化する第２の抽象化処理部と、を備え、前記抽象図作成処理部が、前記新しい抽象化モジュールの凝集性欠如の度合い(LCOM)を算出し、前記凝集性欠如の度合いが前記閾値を超えるか否かを判定し、前記閾値を超えない場合、前記抽象化モジュールを登録して、該登録した新たな抽象化モジュールに纏められた前記未抽象化モジュールを抽象化済モジュールとしてフラグを設定し、前記登録した新たな抽象化モジュールを次の抽象化対象モジュールに設定して、前記外部データアクセス判定部へ移行し、前記凝集性欠如の度合いが前記閾値を超える場合は、前記抽象化モジュールを登録せずに前記抽象化対象モジュール判定部へ移行し、前記抽象化対象モジュール判定部が、抽象化対象モジュールとして選択すべき未抽象化モジュールが無くなったと判定した場合には、モジュール抽象化処理を終了し、前記抽象図作成処理部が、抽象化済のフラグを参照して、未抽象化のモジュールのみをノードとするコールグラフ形式の抽象図を出力するように構成した。
【発明の効果】
【０００８】
本発明によれば、評価対象プログラムのソースコード内のモジュール群を予め開発者やユーザが手作業で設定することなく、簡略化されたプログラム図を構築・表示する事が可能となる。上記した以外の効果については実施例の説明により明らかにする。
【図面の簡単な説明】
【０００９】
【図１】本発明のプログラム抽象図作成装置が実装される情報処理装置のハードウェア構成図の例である。
【図２】本発明のプログラム抽象図作成プログラム、データベースプログラムのソフトウェア構成、データテーブル構成の例を示す図である。
【図３】ソースコード解析データ２１０を記憶するデータベーステーブルの例を示す図である。
【図４】モジュール別重要度データ２１１を記憶するデータベーステーブルの例を示す図である。
【図５】プログラム抽象図作成処理を示したフローチャートである。
【図６】抽象化モジュール登録処理を示したフローチャートである。
【図７】抽象化モジュール登録データ２１２を記憶するデータベーステーブルの例を示す図である。
【図８】凝集性が欠如した度合いを表すソフトウェアメトリクスLCOMの計算式と、LCOMの値が示す特徴について説明した図である。
【図９】抽象化モジュール登録処理のステップＳ６０４からステップＳ６１１までの抽象化プロセスを分かり易く例示した概略図である。
【図１０】本発明を適用したプログラム抽象図作成装置の画面例である。
【発明を実施するための形態】
【００１０】
以下、本発明によるプログラム抽象図作成装置、プログラム抽象図作成方法、及びプログラム抽象図作成プログラムに関する一実施形態を、図面を用いて詳細に説明する。
【実施例１】
【００１１】
本実施例では、C言語で書かれたソースコードを対象としたモジュール抽象図作成方法の例を説明する。【００１２】
図１は、本発明のハードウェア構成の例である。プログラム抽象図作成装置(情報処理装置)１００のハードウェアとして、中央演算装置１０１、キーボードやマウス等の入力装置１０２、ハードディスク等の二次記憶装置１０３、DRAM等の主記憶装置１０４、ディスプレイ等の表示装置１０５、及び通信装置１０７を有する。尚、各構成装置は、バス１０６によって接続され、各構成装置間で相互にデータの送受信が可能である。また、プログラム抽象図作成装置(情報処理装置)１００は、同様のハードウェア構成を持つ別の情報処理装置１１０と、インターネット等の通信ネットワーク１２０を介して接続できる。上記はハードウェア構成の一例であり、これに限定するものではない。【００１３】
図２は、本発明のソフトウェア構成の例である。プログラム抽象図作成プログラム２００は、本発明に係るプログラム抽象図を作成するプログラムであり、プログラム抽象図作成装置１００の二次記憶装置１０３に記憶されており、主記憶装置１０４にロードされて中央演算装置１０１により実行されて、抽象図作成処理部２０１、抽象度判定部２０２、抽象化対象モジュール判定部２０３、外部データアクセス判定部２０４、データアクセス抽象化処理部２０５、制御フロー抽象化処理部２０６、抽象化済データ処理部２０７、LCOM閾値判定部２０８といった各機能部を構成する。プログラム抽象図作成プログラム２００の処理内容については図５で詳細を述べる。【００１４】
データベースプログラム２０９は、任意のデータを格納可能な一般的なデータベースプログラムであり、本実施例ではソースコード解析データ２１０、モジュール別重要度データ２１１、および抽象化モジュール登録データ２１２を格納する。ソースコード解析データ２１０は図３で詳細を述べる。モジュール別重要度データ２１１は図４で詳細を述べる。データベースプログラム２０９の利用は必須ではなく、代わりに二次記憶装置１０３にソースコード解析データ２１０、モジュール別重要度データ２１１、および抽象化モジュール登録データ２１２をファイルデータとして格納してもよい。【００１５】
プログラム抽象図作成プログラム２００およびデータベースプログラム２０９は、情報処理装置の二次記憶装置１０３に保管されるプログラムであり、中央演算装置１０１によって主記憶装置１０４に読み込まれ、実行されるプログラムである。これらのプログラムの実行にはOS(Operating System)等が関与するが、これは公知の技術であるため、説明及び記載は省略する。また、これらのプログラムは同じ情報処理装置１００または１１０上で実行されてもよく、ネットワーク１２０を介した別の情報処理装置１００および１１０上でそれぞれ別に実行されてもよい。【００１６】
図３は、ソースコード解析データ２１０を表すデータベーステーブルの例である。ここには、市販のソースコード解析ツール等を用いてソースコードを解析した結果を格納する。利用する市販の解析ツール、および解析結果のデータベースへの格納手段は様々であるため、ここでは説明を省略する。【００１７】
図３のソースコード解析データテーブル２１０のモジュールのカラム３０１は、モジュールの識別子を格納するカラムである。本実施例では、モジュールの識別子は関数名とファイル名の組み合わせなどを想定するが、これに限定するものではなく、開発者が任意に決定できる。例えば関数単位ではなく、一つのライブラリをモジュールと定義することも可能である。モジュールの識別子は、モジュールを一意に識別可能なデータであればよい。【００１８】
参照データのカラム３０２は、モジュールが参照する外部データの識別子を格納するカラムである。外部データとは、例えばC言語のグローバル変数、ファイル、通信ソケット、およびデータベース等を指す。但し、外部データの定義はこれに限定するものではなく、モジュールが処理に利用するデータであればよい。例えば、ある文字列データを返すWebサービスを外部データと定義することも可能である。外部データの識別子は、グローバル変数名など、データを一意に識別可能であればよい。一つのモジュールが複数の外部データを参照している場合、別のテーブルに外部データ群の識別子を格納し、カラム３０２にそのテーブルの参照を格納する方式が一般に用いられる。【００１９】
呼出モジュールのカラム３０３は、モジュールが呼び出す別のモジュールの識別子を格納するカラムである。本実施例では、この呼び出し関係は関数コールを指す。つまり、モジュールが呼び出している先のモジュールの識別子がカラム３０３に格納される。但し、呼び出し関係の定義はこれに限定するものではなく、参照関係などを含んでもよい。一つのモジュールが複数のモジュールを呼び出している場合、別のテーブルに呼び出し先モジュール群の識別子を格納し、カラム３０３にそのテーブルの参照を格納する方式が一般に用いられる。【００２０】
図４は、モジュール別重要度データ２１１を表すデータベーステーブルの例である。モジュール別の重要度とは、ある観点におけるモジュールの価値、重要性を数値で表したものである。この算出方法は観点により異なるが、従来よりモジュールの複雑度や凝集度、コード行数等のソフトウェアメトリクス(以下、メトリクス)に基づいてモジュールを可視化する技術が提案されている。【００２１】
それらの一般的な公知のメトリクスを用いて、例えばソースコードの構造理解という観点では、更にテストの実施実績を考慮して重要度を算出する以下の方式が考えられる。
まず、表１に示すメトリクスを基に、数１に示す数式によりモジュールの重要度Ｍを算出する。重要度Ｍはソースコードの一般的なメトリクスを用いて算出する。【００２２】
【数１】
2015145539.tif 000003
【００２３】
次に、数２によりモジュールの重要度Ｔを算出する。重要度Ｔは重要度Ｍの値と単体テストコードのメトリクスを用いて算出する重要度である。【００２４】
【数２】
2015145539.tif 000004
【００２５】
【表１】
2015145539.tif 000005
【００２６】
また、ソースコードの複雑さという観点では、一般的なソフトウェアメトリクスである循環的複雑度の値を重要度として用いることができる。また、開発者の主観により任意にモジュールの重要度を決定することも可能である。本発明では、このように算出された重要度の値を用いて抽象化するモジュールを決定するが、これは抽象化するモジュールを決定するプロセスを分かり易く表現したものであり、この方式に限定するものではない。例えば、重要度の指標を用いずにランダムに抽出されたモジュールを抽象化することも考えられる。【００２７】
図４のモジュール別重要度データテーブル２１１の評価観点のカラム４０１は、モジュールの重要度の算出観点を格納するカラムである。例えば、ソースコードの構造を理解するために重要なモジュールを抽象化したい場合、カラム４０１の値が“構造理解”である重要度の高いモジュールを抽象化対象として決定する方式が考えられる。このように観点の種類毎に重要度を算出して格納しておくことで、抽象化するモジュールを様々な観点から決定することができる。
モジュールのカラム４０２は、モジュールの識別子を格納するカラムである。モジュールの識別子についてはカラム３０１の説明で述べた通りである。
重要度のカラム４０３は、前述したモジュールの重要度を格納するカラムである。重要度の高いモジュール、または低いモジュールが抽象化対象として決定されることを想定しているが、この方式に限定するものではない。【００２８】
図５は、本実施例のプログラム抽象図作成装置において、ユーザが評価対象プログラムの抽象図を作成して解析を行う場合に、評価対象プログラム抽象図作成処理のフローチャートを表している。
ステップＳ５０１において、抽象図作成処理部２０１はユーザのGUI操作や他のモジュールからのAPIコールといった一般的なプログラム呼び出し操作を受け、処理を開始する。指定された評価対象プログラムのソースコード、および必要な場合はテストコードを入力する。【００２９】
ステップＳ５０２において、抽象図作成処理部２０１は、公知技術のソースコード解析ツール等を用いて前記評価対象プログラムのソースコードを解析して、ソースコード解析データテーブル２１０を作成してデータベース、および主記憶装置１０４に記憶する。既に、データベースにソースコード解析データテーブル２１０が登録されている場合には、主記憶装置１０４に読み出す。【００３０】
ステップＳ５０３において、抽象図作成処理部２０１は、前記した評価観点別のモジュール別重要度データ２１１を算出して、データベースに格納する。評価観点はユーザによって指定された観点を使用し、前記ソースコード解析データテーブル２１０に記憶される全てのモジュールに対して重要度を算出して、データベース、および主記憶装置１０４に記憶する。既に、データベースにモジュール別重要度データ２１１が登録されている場合には、主記憶装置１０４に読み出す。【００３１】
抽象図作成処理部２０１が、ソースコード解析データ２１０およびモジュール別重要度データ２１１を作成して、またはデータベースプログラム２０９から取得して、主記憶装置１０４に記憶する前記ステップＳ５０２，Ｓ５０３の処理は、既にデータが主記憶装置１０４に記憶されている場合は不要である。また、処理の開始時にこれらのデータを一度に主記憶装置１０４に記憶する方式もあれば、必要に応じてデータベースプログラム２０９から読み込む方式もある。以下、単にソースコード解析データ２１０またはモジュール別重要度データ２１１と記載した場合は、主記憶装置１０４に記憶したデータのことを指す。【００３２】
ステップＳ５０４において、抽象度判定部２０２はユーザのGUI操作などにより、抽象度の指定、またはプログラム抽象図作成処理の終了の指示を受付ける。抽象度とは、数値で表されたプログラム抽象図の抽象化の度合いであり、抽象度が高いほど可視化されるモジュールの抽象化の度合いを高め、そのために、抽象度が高いほど可視化されるモジュールの重要度の閾値と、後述するLCOMの閾値を高く設定する。【００３３】
抽象度の値は、例えば図１０で説明するスライドバー等を用いてユーザのGUI操作などにより決定されるが、決定方法は限定しない。抽象度の値と、モジュールの重要度の閾値やLCOMの閾値との対応は開発者が自由に決定できる。これらの対応関係は、本実施例では抽象度判定部２０２のプログラムロジックにあらかじめハードコーディングされていることを想定するが、例えば設定ファイル等を用いて対応関係を後から変更可能にすることも想定できる。【００３４】
ステップＳ５０５において、抽象図作成処理部２０１は、ユーザが新たな抽象度を指定した場合にはステップＳ５０６へ移行し、ユーザがプログラム抽象図作成処理の終了を指定した場合には処理を終了する。【００３５】
ステップＳ５０６において、抽象度に従って前記評価対象プログラムのモジュールを抽象化する抽象化モジュール登録処理を実行する。図６に抽象化モジュール登録処理のフローチャートを示す。
ステップＳ６０１において、評価対象プログラムのソースコード解析データ２１０に登録されている全てのモジュールに対応する抽象化済フラグを初期化する。【００３６】
ステップＳ６０２において、未だ抽象化されていないモジュールが存在するかどうかを抽象化対象モジュール判定部２０３が判定する。ステップＳ６０１からこの処理に移行した場合、全てのモジュールが抽象化されていない状態にある。後述するステップＳ６０８からこの処理に移行した場合、まだ抽象化されていないモジュールが存在するかどうかを判定する。モジュールが既に抽象化されているか否かは、モジュール毎の抽象化済フラグに設定されている真偽値により決定する。この真偽値は後述するステップＳ６１０で抽象化済データ処理部２０７が主記憶装置１０４上の抽象化済フラグに記憶する。
抽象化対象モジュール判定部２０３は、主記憶装置１０４に記憶された抽象化済フラグの真偽値を読み込むことで抽象化されていないモジュールの存在を判定する。未だ抽象化されていないモジュールが存在する場合はステップＳ６０３に、存在しない場合はＥＮＤに移行する。【００３７】
ステップＳ６０３において、ステップＳ６０２で未だ抽象化されていないと判定されたモジュール群の中から抽象化の対象となるモジュールを抽象化対象モジュール判定部２０３が選択する。選択方法は様々だが、本実施例ではモジュールの重要度を用いて判定する。モジュール別重要度データテーブル２１１のカラム４０３に格納されている重要度の値と、ステップＳ５０４で決定した重要度の閾値を基に、ユーザが指定した評価観点における重要度が閾値以上のモジュールのみを抽象化対象のモジュールとして選択する。
抽象化対象のモジュールが存在しない場合、つまり全ての未抽象化モジュールの重要度が閾値未満の場合、抽象化すべきモジュールは残っていないと判定してＥＮＤに移行する。但し、この処理は一例であり、例えば残された未抽象化モジュールの中から最も重要度の高いモジュールを抽象化対象モジュールとして選択することも考えられる。抽象化対象モジュールが存在する場合、ステップＳ６０４に移行する。【００３８】
ステップＳ６０４において、ステップＳ６０３で抽象化対象として選択されたモジュールか、または後述するステップＳ６０５、およびステップＳ６０６で抽象化されたモジュール群が外部データを参照しているかどうかを外部データアクセス判定部２０４が判定する。モジュールが外部データを参照しているかどうかの判定は、ソースコード解析データテーブル２１０のカラム３０２に格納される外部データ識別子の値を読み込むことで判定できる。モジュールが外部データを参照している場合はステップＳ６０５に進み、参照していない場合はステップＳ６０６に進む。【００３９】
ステップＳ６０５において、データアクセス抽象化処理部２０５がデータアクセス観点での抽象化を行うステップである。
データアクセス観点での抽象化とは、ステップＳ６０４で外部データを参照していると判定された抽象化対象モジュールと、同じ外部データを参照している他のモジュール群を一つに纏めて抽象化する処理を表す。この処理は、ソースコード解析データ２１０のカラム３０２に格納される外部データ識別子の値を読み込み、その識別子と同じ識別子をカラム３０２に格納する別のモジュールをカラム３０１のモジュール識別子の値で判定することにより実行できる。この抽象化処理の具体例は図９で説明する。
抽象化対象モジュールと同じ外部データを参照している他のモジュールが複数存在する場合、これらを全て纏めて抽象化することを想定しているが、例えば重要度の値が最も高いモジュールのみを抽象化することも考えられる。この方式では、より細かい粒度でモジュールの抽象化を行うことができる一方、処理速度は低下する。【００４０】
ステップＳ６０６において、制御フロー抽象化処理部２０６が制御フロー観点での抽象化を行う。
制御フロー観点での抽象化とは、抽象化対象モジュールの中から呼ばれる他のモジュール群を、抽象化対象モジュールに取り込む形で抽象化する処理を表す。モジュール間の呼び出し関係はソースコード解析データテーブル２１０のカラム３０３に格納される呼出モジュール識別子の値を読み込むことで判定できる。この抽象化処理の具体例は図９で説明する。
抽象化対象モジュールの中から呼ばれる他のモジュールが複数存在する場合、これらを全て纏めて抽象化することを想定しているが、例えば重要度の値が最も高いモジュールのみを抽象化することも考えられる。この方式では、より細かい粒度でモジュールの抽象化を行うことができる一方、処理速度は低下する。【００４１】
ステップＳ６０７において、LCOM閾値判定部２０８は、ステップＳ６０５またはステップＳ６０６で抽象化されて纏められた新たな抽象化モジュールのLCOM値を算出する。
LCOMとは、“Lack of Cohesion in Methods”の略であり、凝集性が欠如した度合いを表す数値である。凝集度とは、モジュール内の機能要素と情報要素間の関連性の強さを表す指標であり、LCOMは従来より知られているソフトウェアメトリクスの１つである。LCOMの詳細については図８で説明する。【００４２】
ステップＳ６０８において、LCOM閾値判定部２０８は、新たな抽象化モジュールのLCOM値が閾値を超えた場合は、抽象化が適切ではないと判定して、抽象化モジュールは登録せずにステップＳ６０２に戻り、その他の未抽象化モジュールを判定して、次の抽象化対象モジュールを選択する。超えなかった場合は、抽象化が適切であると判定してステップＳ６０９へ移行する。【００４３】
ステップＳ６０９において、抽象図作成処理部２０１は、前記抽象化されて纏められた新たな抽象化モジュールを、図７に示す抽象化モジュール登録データテーブル２１２に登録する。抽象化モジュールのカラム７０１には、システムが新たな名前を付けた「モジュール８０１」が登録され、内包モジュール(抽象化モジュールに含まれるモジュール)のカラム７０２には、抽象化して取り込まれたモジュールの識別子「Module A, Module B」が格納され、内包データ(抽象化モジュールに含まれるデータ)のカラム７０３には、抽象化して取り込まれたデータの識別子「Data A」が格納され、参照データのカラム７０４には、Module A, Module Bがモジュール８０１の外部に参照しているデータがあれば格納し、呼出モジュールのカラム７０５は、Module A, Module Bがモジュール８０１の外部にあるモジュールを呼び出していればそのモジュールの識別子を格納する。【００４４】
ステップＳ６１０において、抽象化済データ処理部２０７は、例えば「Module A, Module B」の抽象化済フラグを抽象化済にマーク(既に抽象化されたことを示す真偽値)して、新たに「モジュール８０１」の抽象化済フラグを追加設置して、その値(真偽値)は初期値(未済)とする。抽象化済フラグはデータベースやファイルに保管することもできるが、本実施例では主記憶装置１０４に記憶することを想定する。
ステップＳ６１１において、前記抽象化されて纏められた新たな抽象化モジュールを次の抽象化対象モジュールに設定して、ステップＳ６０４へ移行する。【００４５】
図５のステップＳ５０７において、抽象図作成処理部２０１は、評価対象プログラムの抽象図を図１０に示すように例えばコールグラフ形式に、表示装置１０５に表示する。
コールグラフは、プログラムのモジュール(サブルーチン)同士の呼び出し関係を表現した有向グラフである。本実施例では、ソースコード解析データ２１０、および抽象化モジュール登録データ２１２の中より、抽象化済フラグの値(真偽値)が初期値(未済)のモジュールのみを選択してコールグラフのノードを表示し、呼出モジュールのカラムのデータよりコールグラフのエッジを表示して、評価対象プログラムの抽象図を表示する。
抽象図を表示した後、ステップＳ５０４へ移行して、抽象度判定部２０２はユーザのGUI操作などにより、抽象度の指定、またはプログラム抽象図作成処理の終了の指示を受付け待ち状態となる。【００４６】
図８はLCOMの計算式と、LCOMの値が示す特徴について説明した図である。
図８の数３はLCOMの計算式である。LCOMの計算式は広く一般に知られており、いくつかバリエーションが存在する。本実施例では数３の計算式を例示するが、これに限らない。LCOMはオブジェクト指向言語向けのソフトウェアメトリクスであるため、図８ではJava言語のプログラムを例示する。LCOMの値は0から1の範囲をとり、値が0に近づくほど良い設計とされ、値が1に近づくほど悪い設計とされる。【００４７】
図８(a)は良い設計とされるJavaクラスを示す。クラス８１１では一つの変数fieldAが定義されており、二つのメソッドがそれぞれfieldAにアクセスしている。そのためクラス８１１は複数に分割できず、良い設計とされる。
図８(b)は悪い設計とされるJavaクラスを示す。クラス８１２では二つの変数fieldAおよびfieldBが定義されており、fieldAに対してはメソッドmethodAのみが、fieldBに対してはメソッドmethodBのみがアクセスしている。このクラス８１２は二つに分割できると考えられるため、悪い設計とされる。【００４８】
このように、変数とメソッドの関係により計算値の大小が変化し、設計の良し悪しを判定できるメトリクスがLCOMである。図６で述べたように、データアクセス観点での抽象化と制御フロー観点での抽象化を行い、LCOMの値を判定しながら段階的に抽象化を進めることで、抽象化されたモジュールの品質を可能な限り高い状態に維持しながら抽象化を進めることが可能となる。抽象化され、一つに纏められるモジュール群を一つのオブジェクト(抽象化モジュール)と仮定することで、オブジェクト指向言語向けのメトリクスであるLCOMの値を計算している。【００４９】
図９は図６のステップＳ６０４からステップＳ６１１までの抽象化プロセスを分かり易く例示した概略図である。図のDataA９０１およびDataB９０６は、プログラムのグローバル変数やファイル、データベースといった一般的な外部データを表す。これらはソースコード解析データ２１０のカラム３０２に格納される識別子が指し示す外部データに相当する。ModuleA９０２、ModuleB９０３、ModuleC９０４、ModuleD９０５はモジュールを表す。これらはソースコード解析データ２１０のカラム３０１、カラム３０３、およびモジュール別重要度データ２１１のカラム４０２に格納される識別子が指し示すモジュールに相当する。９０７の二重線はモジュールから外部データへの参照関係を表す。９０８の矢印はモジュールからモジュールへの呼び出し関係を表す。８０１、８０２、８０３は、それぞれの点線が包含するモジュール群を纏めて抽象化した新たなモジュール(抽象化モジュール)であることを表す。【００５０】
ここで図９を用いてステップＳ６０４からステップＳ６１１までの抽象化プロセスを簡潔に記す。まず、ステップＳ５０４でLCOMの閾値は0.4に、ステップＳ６０３で抽象化対象モジュールはModuleA９０２に決定していると仮定する。次に、ステップＳ６０４でModuleA９０２が外部データにアクセスしているかどうかを判定する。ModuleA９０２はDataA９０１を参照していることから、ステップＳ６０５に移行する。
次に、ステップＳ６０５でデータアクセスによる抽象化を実施する。ここで、DataA９０１を参照しているModuleA９０２およびModuleB９０３を一つのモジュール８０１として抽象化する。
次に、ステップＳ６０７において、抽象化した新たなモジュール８０１のLCOM値を算出する。ここでモジュール８０１を構成するModuleA９０２およびModuleB９０３は、同じ外部データDataA９０１を参照していることから、LCOMの値は0となる。【００５１】
次に、ステップＳ６０８において、モジュール８０１のLCOM値が閾値より小さいので、ステップＳ６０９へ移行して、図７に示す抽象化モジュール登録データテーブル２１２へモジュール８０１のデータを登録する。
次に、ステップＳ６１０において、MoudleA９０２およびModuleB９０３を抽象化済として設定する。および、モジュール８０１の抽象化済フラグを初期値で追加設置する。
次に、ステップＳ６１１において、モジュール８０１を次の抽象化対象モジュールに設定して、ステップＳ６０４に戻る。【００５２】
次に、ステップＳ６０４において、モジュール８０１が外部データにアクセスしているかどうかを判定する。モジュール８０１は外部データへアクセスしていないことから、ステップＳ６０６に移行する。
次に、ステップＳ６０６で制御フローによる抽象化を実施する。ここで、モジュール８０１はModuleC９０４を呼び出していることから、モジュール８０１とModuleC９０４を一つのモジュール８０２として抽象化する。
次に、ステップＳ６０７において、抽象化した新たなモジュール８０２のLCOM値を算出する。ここで、モジュール８０２を構成するModuleA９０２およびModuleB９０３は、同じ外部データDataA９０１を参照するが、ModuleC９０４はDataA９０１を参照していないことから、モジュール８０２のLCOM値は上昇し、0.3（この値は正確に算出したものではなく、説明を分かり易くするための一例である）となる。【００５３】
次に、ステップＳ６０８において、モジュール８０２のLCOM値が閾値より小さいので、ステップＳ６０９へ移行して、図７に示す抽象化モジュール登録データテーブル２１２へモジュール８０２のデータを登録する。
次に、ステップＳ６１０において、新たにModuleC９０４を抽象化済として設定する。および、モジュール８０２の抽象化済フラグを初期値で追加設置する。
次に、ステップＳ６１１において、モジュール８０２を次の抽象化対象モジュールに設定して、ステップＳ６０４に戻る。【００５４】
同様に、ステップＳ６０４からステップＳ６０８を繰り返すことにより、モジュール８０２、DataB９０６およびModuleD９０５を一つに纏めて新たな抽象化モジュール８０３が抽象化される。ここでは、モジュール８０３のLCOM値は0.5となり、閾値を超える。そのため、ステップＳ６０８において、モジュール８０３を登録することはせずにステップＳ６０２へ移行する。
よって、本実施例ではモジュールModuleA９０２を抽象化することで抽象化モジュール８０２までが生成される。上記処理を抽象化対象モジュールが無くなるまで繰り返すことで抽象図の作成を自動化できる。【００５５】
図１０は本発明を適用したプログラム抽象図作成装置の画面例である。図に示すように、ユーザは、モジュール抽象度を設定するためのスライダーをマウスドラッグ等で左右に動かすことで、モジュールの抽象度を決定できる（ステップＳ５０４）。これにより抽象化するモジュールの重要度の閾値と、LCOMの閾値が決定され、本発明方式に従って処理を行うことで、図１０に示すようなプログラムの抽象図を生成できる。
評価対象プログラムの抽象図は、抽象図作成処理部２０１が、前記ソースコード解析データ２１０、および抽象化モジュール登録データ２１２の中より、抽象化済フラグの値(真偽値)が初期値(未済)のモジュールのみを選択してコールグラフのノードを表示し、呼出モジュールのカラムのデータよりコールグラフのエッジを表示して行う。
本発明によれば、ユーザや開発者の手作業による設定を必要とすることなくプログラムの抽象図を生成できる。【００５６】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は、本発明を分かり易く説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、SSD（Solid State Drive）等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、図中の線や点線は説明上必要と考えられるものを示しており、必ずしも全ての線や点線を図示しているとは限らない。
【符号の説明】
【００５７】
１００  プログラム抽象図作成装置(情報処理装置)
１０１  中央演算装置
１０２  入力装置
１０３  二次記憶装置
１０４  主記憶装置
１０５  表示装置
１０６  バス
１０７  通信装置
１１０  別の情報処理装置
１２０  通信ネットワーク
２００  プログラム抽象図作成プログラム
２０１  抽象図作成処理部
２０２  抽象度判定部
２０３  抽象化対象モジュール判定部
２０４  外部データアクセス判定部
２０５  データアクセス抽象化処理部
２０６  制御フロー抽象化処理部
２０７  抽象化済データ処理部
２０８  LCOM閾値判定部
２０９  データベースプログラム
２１０  ソースコード解析データ
２１１  モジュール別重要度データ
２１２  抽象化モジュール登録データ
８０１，８０２，８０３  モジュール群を纏めて抽象化した新たなモジュール(抽象化モジュール)
９０１  DataA
９０２  ModuleA
９０３  ModuleB
９０４  ModuleC
９０５  ModuleD
９０６  DataB
９０７  モジュールから外部データへの参照関係を表す二重線
９０８  モジュールからモジュールへの呼び出し関係を表す矢印
【図１】
2015145539.tif 000006
【図２】
2015145539.tif 000007
【図３】
2015145539.tif 000008
【図４】
2015145539.tif 000009
【図５】
2015145539.tif 000010
【図６】
2015145539.tif 000011
【図７】
2015145539.tif 000012
【図８】
2015145539.tif 000013
【図９】
2015145539.tif 000014
【図１０】
2015145539.tif 000015
【手続補正書】
【提出日】平成28年4月19日(2016.4.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
評価対象プログラムの抽象図を抽象度の指定入力に応じて表示するプログラム抽象図作成装置であって、
前記評価対象プログラムのソースコードより、少なくともモジュール構成、参照データ、呼出モジュールのデータを有するソースコード解析データと、及び少なくとも評価観点別のモジュール毎の重要度データを有するモジュール別重要度データとを作成し、または既作成の前記データを読み込む抽象図作成処理部と、
ユーザ指定の抽象度を受付けて、抽象度に対応した可視化するモジュールの重要度の閾値と、ＬＣＯＭの閾値を設定する抽象度判定部と、
未だ抽象化されていない未抽象化モジュールの中から、モジュールの重要度が前記閾値以上となるモジュールを抽象化対象モジュールとして選択する抽象化対象モジュール判定部と、
前記抽象化対象モジュールが外部データを参照しているかどうかを判定する外部データアクセス判定部と、
前記抽象化対象モジュールが外部データを参照している場合、前記抽象化対象モジュールと、前記外部データを参照している他の前記未抽象化モジュールとを一つの新しい抽象化モジュールとして纏めて抽象化する第１の抽象化処理部と、
前記抽象化対象モジュールが外部データを参照していない場合、前記抽象化対象モジュールと、前記抽象化対象モジュールが呼び出す他の未抽象化モジュールとを一つの新しい抽象化モジュールとして纏めて抽象化する第２の抽象化処理部と、を備え、
前記抽象図作成処理部が、前記新しい抽象化モジュールの凝集性欠如の度合い（ＬＣＯＭ）を算出し、前記凝集性欠如の度合いが前記閾値を超えるか否かを判定し、前記閾値を超えない場合、前記抽象化モジュールを登録して、該登録した新たな抽象化モジュールに纏められた前記未抽象化モジュールを抽象化済モジュールとしてフラグを設定し、前記登録した新たな抽象化モジュールを次の抽象化対象モジュールに設定して、前記外部データアクセス判定部へ移行し、前記凝集性欠如の度合いが前記閾値を超える場合は、前記抽象化モジュールを登録せずに前記抽象化対象モジュール判定部へ移行し、
前記抽象化対象モジュール判定部が、抽象化対象モジュールとして選択すべき未抽象化モジュールが無くなったと判定した場合には、モジュール抽象化処理を終了し、
前記抽象図作成処理部が、抽象化済のフラグを参照して、未抽象化のモジュールのみをノードとするコールグラフ形式の抽象図を出力することを特徴とするプログラム抽象図作成装置。
【請求項２】
請求項１記載のプログラム抽象図作成装置において、
前記抽象化対象モジュール判定部が、前記未抽象化モジュールの中から抽象化対象モジュールを選択する場合に、前記未抽象化モジュールの重要度を判定し、前記重要度の最も高い前記未抽象化モジュールを前記抽象化対象モジュールとして選択することを特徴とするプログラム抽象図作成装置。
【請求項３】
請求項１記載のプログラム抽象図作成装置において、
前記抽象図作成処理部が、前記抽象化モジュールを登録する場合に、少なくとも抽象化モジュールの識別子、内包モジュールの識別子、内包データの識別子、参照データの識別子、呼出モジュールの識別子の各データ項目を有するデータテーブルに登録し、新たに登録した該抽象化モジュールの抽象化済フラグを未抽象化の初期値で追加設置することを特徴とするプログラム抽象図作成装置。
【請求項４】
請求項１乃至３のいずれかの請求項に記載のプログラム抽象図作成装置において、
前記外部データは、グローバル変数、ファイルデータ、データベースに格納されるデータ、通信ソケットからの入力データ、関数からの返り値、であることを特徴とするプログラム抽象図作成装置。
【請求項５】
請求項１乃至３のいずれかの請求項に記載のプログラム抽象図作成装置において、
前記第１の抽象化処理部が、前記抽象化対象モジュールと、前記抽象化対象モジュールが参照している前記外部データを参照している他の複数の前記未抽象化モジュールとを一つのモジュールとして抽象化する場合に、前記他の複数の未抽象化モジュールの重要度を判定し、前記抽象化対象モジュールと、前記重要度の最も高い前記未抽象化モジュールとを一つのモジュールとして抽象化することを特徴とするプログラム抽象図作成装置。
【請求項６】
請求項１乃至３のいずれかの請求項に記載のプログラム抽象図作成装置において、
前記第２の抽象化処理部が、前記抽象化対象モジュールと、前記抽象化対象モジュールが呼び出す他の複数の前記未抽象化モジュールとを一つのモジュールとして抽象化する場合に、前記他の複数の未抽象化モジュールの重要度を判定し、前記抽象化対象モジュールと、前記重要度の最も高い前記未抽象化モジュールとを一つのモジュールとして抽象化することを特徴とするプログラム抽象図作成装置。
【請求項７】
評価対象プログラムの抽象図を、コンピュータを用いて抽象度の指定入力に応じて表示するプログラム抽象図作成プログラムであって、
前記コンピュータによる処理ステップとして、
前記評価対象プログラムのソースコードより、少なくともモジュール構成、参照データ、呼出モジュールのデータを有するソースコード解析データと、及び少なくとも評価観点別のモジュール毎の重要度データを有するモジュール別重要度データとを作成し、または既作成のデータを読み込む処理ステップと、
ユーザ指定の抽象度を受付けて、抽象度に対応した可視化するモジュールの重要度の閾値と、ＬＣＯＭの閾値を設定する抽象度判定ステップと、
未だ抽象化されていない未抽象化モジュールの中から、モジュールの重要度が前記閾値以上となるモジュールを抽象化対象モジュールとして選択する抽象化対象モジュール判定ステップと、
前記抽象化対象モジュールが外部データを参照しているかどうかを判定する外部データアクセス判定ステップと、
前記抽象化対象モジュールが外部データを参照している場合、前記抽象化対象モジュールと、前記外部データを参照している他の前記未抽象化モジュールとを一つの新しい抽象化モジュールとして纏めて抽象化する第１の抽象化処理ステップと、
前記抽象化対象モジュールが外部データを参照していない場合、前記抽象化対象モジュールと、前記抽象化対象モジュールが呼び出す他の未抽象化モジュールとを一つの新しい抽象化モジュールとして纏めて抽象化する第２の抽象化処理ステップと、
前記新しい抽象化モジュールの凝集性欠如の度合い（ＬＣＯＭ）を算出し、前記凝集性欠如の度合いが前記閾値を超えるか否かを判定し、前記閾値を超えない場合、前記抽象化モジュールを登録して、該登録した新たな抽象化モジュールに纏められた前記未抽象化モジュールを抽象化済モジュールとしてフラグを設定し、前記登録した新たな抽象化モジュールを次の抽象化対象モジュールに設定して、前記外部データアクセス判定ステップへ移行し、前記凝集性欠如の度合いが前記閾値を超える場合は、前記抽象化モジュールを登録せずに前記抽象化対象モジュール判定ステップへ移行する処理ステップと、
前記抽象化対象モジュール判定ステップにおいて、抽象化対象モジュールとして選択すべき未抽象化モジュールが無くなったと判定した場合には、モジュール抽象化処理を終了し、前記抽象化済のフラグを参照して、未抽象化のモジュールのみをノードとするコールグラフ形式の抽象図を出力するステップと、を有することを特徴とするプログラム抽象図作成プログラム。
【請求項８】
前記抽象化対象モジュール判定ステップにおいて、前記未抽象化モジュールの中から抽象化対象モジュールを選択する場合に、前記未抽象化モジュールの重要度を判定し、前記重要度の最も高い前記未抽象化モジュールを前記抽象化対象モジュールとして選択することを特徴とする請求項７記載のプログラム抽象図作成プログラム。
【請求項９】
請求項７記載のプログラム抽象図作成プログラムにおいて、
前記抽象化モジュールを登録する場合に、少なくとも抽象化モジュールの識別子、内包モジュールの識別子、内包データの識別子、参照データの識別子、呼出モジュールの識別子の各データ項目を有するデータテーブルに登録し、新たに登録した該抽象化モジュールの抽象化済フラグを未抽象化の初期値で追加設置することを特徴とするプログラム抽象図作成プログラム。
【請求項１０】
請求項７乃至９のいずれかの請求項に記載のプログラム抽象図作成プログラムにおいて、
前記外部データは、グローバル変数、ファイルデータ、データベースに格納されるデータ、通信ソケットからの入力データ、関数からの返り値、であることを特徴とするプログラム抽象図作成プログラム。
【請求項１１】
請求項７乃至９のいずれかの請求項に記載のプログラム抽象図作成プログラムにおいて、
前記第１の抽象化処理ステップにおいて、前記抽象化対象モジュールと、前記抽象化対象モジュールが参照している前記外部データを参照している他の複数の前記未抽象化モジュールとを一つのモジュールとして抽象化する場合に、前記他の複数の未抽象化モジュールの重要度を判定し、前記抽象化対象モジュールと、前記重要度の最も高い前記未抽象化モジュールとを一つのモジュールとして抽象化することを特徴とするプログラム抽象図作成プログラム。
【請求項１２】
請求項７乃至９のいずれかの請求項に記載のプログラム抽象図作成プログラムにおいて、
前記第２の抽象化処理ステップにおいて、前記抽象化対象モジュールと、前記抽象化対象モジュールが呼び出す他の複数の前記未抽象化モジュールとを一つのモジュールとして抽象化する場合に、前記他の複数の未抽象化モジュールの重要度を判定し、前記抽象化対象モジュールと、前記重要度の最も高い前記未抽象化モジュールとを一つのモジュールとして抽象化することを特徴とするプログラム抽象図作成プログラム。
【国際調査報告】
2015145539.tif 000016
2015145539.tif 000017
2015145539.tif 000018