(57)【要約】【課題】プログラムにおいて、適切に使用されていないグローバル変数を提示するリファクタリング支援装置を提供すること。【解決手段】リファクタリング支援装置１に、プログラム内部で使用している関数とグローバル変数、およびグローバル変数に格納される全データを抽出する関数・変数情報抽出部４と、ソフトウェア部品内部のグローバル変数の使用データ比率を算出する変数データ解析部９と、前記変数データ解析部９で算出された使用データ比率が予め設定された判定比率以上かどうかを判定し、ソフトウェア部品内部のグローバル変数の用途を判定する変数用途判定部９とを備え、ソフトウェア部品間で依存関係にあるグローバル変数が適切に使用されているかどうかを判定する【選択図】図１
2010231513.tif 000002
【特許請求の範囲】
【請求項１】
プログラム内部で使用している関数とグローバル変数、およびグローバル変数に格納される全データを抽出する関数・変数情報抽出部と、前記関数・変数情報抽出部で抽出されたグローバル変数の全データ情報を基に、ソフトウェア部品内部のグローバル変数の使用データ比率を算出する変数データ解析部と、前記変数データ解析部で算出された使用データ比率が予め設定された判定比率以上かどうかを判定し、ソフトウェア部品内部のグローバル変数の用途を判定する変数用途判定部とを備え、ソフトウェア部品間で依存関係にあるグローバル変数が適切に使用されているかどうかを判定するリファクタリング支援装置。
【請求項２】
前記変数用途判定部において、ソフトウェア部品内部のグローバル変数の書込み回数と参照回数を解析し、ソフトウェア部品間で依存関係にあるグローバル変数がどのソフトウェア部品に所属するのかを判定する所属部品判定部を備え、グローバル変数が所属するソフトウェア部品と参照先のソフトウェア部品を抽出する請求項１記載のリファクタリング支援装置。
【請求項３】
前記変数用途判定部において、ソフトウェア部品内部のグローバル変数の使用状況を判定し、関連する他のグローバル変数を抽出する関連変数抽出部を備えた請求項１または請求項２に記載のリファクタリング支援装置。
【請求項４】
前記変数用途判定部において、ソフトウェア部品間で依存関係にあるグローバル変数の参照箇所の関数階層を解析し、予め設定された判定階層以内で参照されているかどうかを判定する参照階層判定部を備えた請求項１〜３いずれか１項に記載のリファクタリング支援装置。
【請求項５】
外部設定手段を備え、前記変数用途判定部の判定比率、参照階層判定部の判定階層を任意に設定・変更可能とする請求項１〜４いずれか１項に記載のリファクタリング支援装置。
【請求項６】
コンピュータを請求項１〜５のいずれか１項に記載のリファクタリング支援装置の全てもしくは一部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システムのソフトウェア構造を解析し、リファクタリングを支援する支援装置およびそのプログラムに関するものである。
【背景技術】
【０００２】
近年、システムの複合化や多機能化に伴い、製品に占めるソフトウェアの割合が大きくなり、ソフトウェアの開発量が増加し続けている。ソフトウェアの分野においては、開発効率を向上させるためにソフトウェアの再利用性や保守性が求められ、ソフトウェアの部品化や、品質を向上させる取り組みが進められている。
しかしながら、ソフトウェアの大規模化や開発期間の短縮につれて、複数人での開発が必要となり、ソフトウェア構造全体を把握しないまま開発に参加せざるを得ないといった状況も多くなり、そうした中で行われた機能拡張・変更等のソフトウェアの修正は、必ずしも適切に行なわれているとは限らず、長年、修正を繰り返すことによってソフトウェア構造や部品化が崩れてきたり、保守性が悪化してきたりする、といった状況が発生するようになった。
【０００３】
そこで、ソフトウェア構造を見直し改善すること、つまりリファクタリングの必要性が高くなり、効率よくリファクタリングを行なう手段としてソフトウェア構造を解析し、対象とするソフトウェア部品のインターフェース情報を出力する手段（例えば、特許文献１参照）や、ソフトウェア構造の解析結果を基に、最適なソフトウェアの分割箇所を提示する手段（例えば、特許文献２参照）を備えたリファクタリング支援装置があった。
【０００４】
ここで、特許文献１、および特許文献２に記載されたリファクタリング支援装置の原理モデルを図６に示す。図６において、リファクタリング支援装置１はプログラムを記憶するプログラム記憶部２と、前記プログラム記憶部２に記憶されたプログラムを解析する構文解析部３と、プログラム内部の関数・変数情報を抽出する関数・変数情報抽出部４と、ステートメント間の依存関係とステートメント・変数間の依存関係を解析する依存関係解析部５と、ユーザーが必要なステートメントを選択する情報入力部６と、解析結果を出力する解析結果出力部７から構成される。
【０００５】
以上のように構成されたリファクタリング支援装置は、プログラムを解析し、任意ステートメントにおけるインターフェース情報をユーザーに提示したり、解析された依存関係を基に最適なソフトウェアの分割箇所を提示したりすることができる。
【特許文献１】特開２００５−１８１１４号公報
【特許文献２】特開２００８−１７６３６４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、前記従来の手段では、プログラム内部で使用している変数が最適化されており、適切に使用されている場合は問題ないが、必要以上に変数が存在したり、参照したりしている場合においては、インターフェース情報が肥大化し、ソフトウェアの最適な分割箇所を決定することが困難になる、といった課題を有していた。
【０００７】
そこで本発明は、前記従来の課題を解決するために、ソフトウェア部品間で依存関係にある変数を解析し、適切に使用されていない変数をユーザーに提示することにより、効率よくソフトウェアの部品化やリファクタリングが行なえるリファクタリング支援装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、前記従来の課題を解決するために、プログラム内部で使用している関数とグローバル変数、およびグローバル変数に格納される全データを抽出する関数・変数情報抽出部と、前記関数・変数情報抽出部で抽出されたグローバル変数の全データ情報を基にソフトウェア部品内部のグローバル変数の使用データ比率を算出する変数データ解析部と、前記変数データ解析部で解析された使用データ比率が予め設定された判定比率以上かどうかを判定し、ソフトウェア部品内部でグローバル変数の用途を判定する変数用途判定部を備えたリファクタリング支援装置としたものである。
【発明の効果】
【０００９】
本発明は、ソフトウェア部品間で依存関係にあるグローバル変数の使用状況を解析し、必要以上にグローバル変数が存在したり、参照したりしている、といった適切に使用されていないグローバル変数を抽出することが可能となるため、リファクタリング時の問題点を容易に把握することを可能とし、効率よくリファクタリングを行なうことが可能となる。
【発明を実施するための最良の形態】
【００１０】
第１の発明は、プログラム内部で使用している関数とグローバル変数、およびグローバル変数に格納される全データを抽出する関数・変数情報抽出部と、前記関数・変数情報抽出部で抽出されたグローバル変数の全データ情報を基に、ソフトウェア部品内部のグローバル変数の使用データ比率を算出する変数データ解析部と、前記変数データ解析部で算出された使用データ比率が予め設定された判定比率以上かどうかを判定し、ソフトウェア部品内部のグローバル変数の用途を判定する変数用途判定部とを備え、前記変数用途判定部において、ソフトウェア部品間で依存関係にある変数が適切に使用されているかどうかを判定し、不適切に使用されている変数を抽出することが可能となるため、ソフトウェア部品間のインターフェース情報の整理を支援することができる。
【００１１】
第２の発明は、特に、第１の発明の変数用途判定部において、ソフトウェア部品内部のグローバル変数の書込み回数と参照回数を解析し、ソフトウェア部品間で依存関係にあるグローバル変数がどのソフトウェア部品に所属するのかを判定する所属部品判定部を備え、グローバル変数が所属するソフトウェア部品と参照先のソフトウェア部品を提示することが可能となるため、ソフトウェア部品間のインターフェース情報の整理を支援することができる。
【００１２】
第３の発明は、特に、第１または第２の発明の変数用途判定部において、ソフトウェア部品内部のグローバル変数の使用状況を判定し、関連する他の変数を抽出する関連変数抽出部を備え、ソフトウェア部品間で依存関係にあるグローバル変数と関連する変数を抽出することが可能となるため、ソフトウェア部品間で依存関係にあるグローバル変数の役割を容易に把握することができる。
【００１３】
第４の発明は、特に、第１から第３のいずれか１つの発明の変数用途判定部において、ソフトウェア部品間で依存関係にあるグローバル変数の参照箇所の関数階層を解析し、予め設定された判定階層以内で参照されているかどうかを判定する参照階層判定部を備え、特別に深い関数階層で使用されている変数を抽出することが可能となるため、不適切に使用されている可能性がある変数を容易に把握することができる。
【００１４】
第５の発明は、特に、第１から第４の発明の変数用途判定部において、外部設定手段を備え、前記変数用途判定部の判定比率、参照階層判定部の判定階層を任意に設定・変更することができる。
【００１５】
第６の発明は、特に、第１から第５の全てもしくはいずれか１つの発明を機能させるための構成として、コンピュータを全てもしくは一部として機能させるものであり、汎用コンピュータやサーバーを用いて本発明の全てもしくは一部を容易に実現することができる。
【００１６】
以下、本発明の実施の形態について、図面を参照しながら説明する。なお、この実施の形態によって本発明が限定されるものではない。
【００１７】
（実施の形態１）
図１は、本発明における第１の実施の形態におけるリファクタリング支援装置の構成図を示したものである。
【００１８】
図１において、リファクタリング支援装置１は、プログラムを記憶するプログラム記憶部２と、前記プログラム記憶部２に記憶されたプログラムを解析する構文解析部３と、プログラム内部で使用している関数とグローバル変数、およびグローバル変数に格納される全データを抽出する関数・変数情報抽出部４と、情報入力部６を介して解析対象とするソフトウェア部品を指定するソフトウェア部品指定部８と、前記関数・変数情報抽出部４で抽出された関数・変数情報と前記ソフトウェア部品指定部８で指定されたソフトウェア部品間の依存関係を解析し、依存関係にあるグローバル変数とソフトウェア部品内部の使用箇所を抽出する依存関係解析部５と、前記関数・変数情報抽出部４で抽出されたグローバル変数の全データ情報を基に、前記依存関係解析部５で抽出されたグローバル変数の使用データ比率を算出する変数データ解析部９と、前記変数データ解析部９で算出された使用データ比率が予め設定された判定比率以上かどうかを判定し、前記依存関係解析部５で解析された使用箇所情報とからソフトウェア部品のグローバル変数の用途を判定する変数用途判定部１０と、解析結果を出力する解析結果出力部７から構成される。ここで、変数用途判定部１０には前記変数データ解析部９で算出された使用データ比率に応じてグローバル変数の用途を判定する判定比率が予め設定されているものとする。
【００１９】
以上のように構成されたリファクタリング支援装置について、以下その動作・作用を図３および図４のフローチャートを使用して説明する。
【００２０】
まず、リファクタリング支援装置１の構文解析部３において、プログラム記憶部２に記憶されたプログラムを取得し、前記構文解析部３の関数・変数情報抽出部４は取得したプログラムを解析し、使用している関数とグローバル変数、および前記グローバル変数に格納される全データを抽出する（ステップ１）。ソフトウェア部品指定部８は情報入力部６を介して解析対象とするソフトウェア部品を取得する（ステップ２）。依存関係解析部５は、前記関数・変数情報抽出部４で抽出されたグローバル変数と前記ソフトウェア部品指定部８で指定されたソフトウェア部品情報を基にソフトウェア部品間で使用されるグローバル変数とその使用データを抽出し、変数データ解析部９へ受け渡すと同時に、前記グローバル変数の使用箇所を抽出し、変数用途判定部１０へ受け渡す（ステップ３）。前記変数データ解析部９は前記依存関係解析部５から取得したグローバル変数の使用データと前記関数・変数情報抽出部４で抽出されたグローバル変数の全データ情報を比較し、使用データ比率を算出し、変数用途判定部１０へ受け渡す（ステップ４）。前記変数用途判定部１０は、前記変数データ解析部９から取得したグローバル変数の使用データ比率と、依存関係解析部５から取得した前記グローバル変数の使用箇所情報を基に、前記グローバル変数のソフトウェア部品における用途を判定する（ステップ５）。ここで、前記変数データ解析部９から取得した使用データ比率が予め設定された判定比率以上（ステップ５１）で、依存関係解析部５から取得した使用箇所において書込みを行なっていた場合、判定結果を「書込み」とし（ステップ５２）、書込みを行なっていない場合、判定結果を「参照」
とする（ステップ５３）。また、前記変数データ解析部９から取得した使用データ比率が予め設定された判定比率以下で、依存関係解析部５から取得した使用箇所において書込みを行なっていた場合、判定結果を「部分書込み」とし（ステップ５４）、書込みを行なっていない場合、判定結果を「部分参照」とする（ステップ５５）。例えば、前記依存関係解析部５から取得したグローバル変数の使用データが前記関数・変数情報抽出部４で抽出されたグローバル変数の全データ情報を満たしている場合、使用データ比率は１００となり、依存関係解析部５から取得した使用箇所において書込みを行なっていた場合、全てのデータの変更を対象のソフトウェア部品で行なっていることになる。上記のように判定された判定結果を、解析結果出力部７を介して外部出力する（ステップ６）。
【００２１】
以上のように、本実施の形態においては、ソフトウェア部品間で依存関係にあるグローバル変数の用途を判定し、判定結果を基にグローバル変数が適切に使用されているかどうかを判定することが可能となるため、ソフトウェア部品間のインターフェース情報の整理を支援することができる。
【００２２】
例えば、ソフトウェア全体でグローバル変数が多く使用されている場合、各ソフトウェア部品でグローバル変数がどのように使用されているかどうかを把握することは困難であり、かなりの工数を費やしてソース自体を解析する必要があるが、本実施の形態においては、各プログラム部品で前記グローバル変数が変更されているのか、単に参照するために使用されているのか容易に把握することが可能となるので、プログラム部品で予期しない変更をされていても早期に発見することが可能となる。
【００２３】
また、本実施の形態においては、前記判定比率は情報入力部６を介して任意に設定・変更してもよいものとする。
【００２４】
（実施の形態２）
次に、本発明における第２の実施の形態について図２を使用して説明する。図２は実施の形態１を示す図１に対して、前記変数用途判定部１０において、ソフトウェア部品間で依存関係にある変数の書込み回数と参照回数から変数が所属するソフトウェア部品と参照先のソフトウェア部品を判定する所属部品判定部１１と、ソフトウェア部品内の変数の使用状況を判定し、関連する他の変数を抽出する関連変数抽出部１２と、ソフトウェア部品間で依存関係にある変数の参照先ソフトウェア部品内において、参照箇所の関数階層を解析し、予め設定された関数階層以上で参照されている変数を抽出する参照階層判定部１３を備えた構成とする。実施の形態２においては、実施の形態１に対して、所属部品判定部１１を備えた構成とする。
【００２５】
以上のように構成されたリファクタリング支援装置について、以下その動作・作用を図５のフローチャートを使用して説明する。
【００２６】
まず、リファクタリング支援装置１の構文解析部３において、プログラム記憶部２に記憶されたプログラムを取得し、前記構文解析部３の関数・変数情報抽出部４は取得したプログラムを解析し、使用している関数とグローバル変数、および前記グローバル変数に格納される全データを抽出する（ステップ１）。ソフトウェア部品指定部８は情報入力部６を介して解析対象とするソフトウェア部品を取得する（ステップ２）。依存関係解析部５は、前記関数・変数情報抽出部４で抽出されたグローバル変数と前記ソフトウェア部品指定部８で指定されたソフトウェア部品情報を基にグローバル変数の使用箇所を抽出し、変数用途判定部１０へ受け渡す（ステップ３）。所属部品判定部１１は、前記依存関係解析部５から取得した前記グローバル変数の使用箇所情報を基に、各ソフトウェア部品内部の前記グローバル変数の書込み回数と参照回数を解析する（ステップ４）。全ソフトウェア部品内部の前記グローバル変数の書込み回数と参照回数を解析終了後、最も書込み回数が
大きいソフトウェア部品を所属するソフトウェア部品と判定（ステップ５）し、最も参照回数が大きいソフトウェア部品を参照先のソフトウェア部品と判定（ステップ６）し、解析結果を解析結果出力部７を介して外部出力する。
【００２７】
以上のように、本実施の形態においては、ソフトウェア部品内部の変数の書込み回数と参照回数を解析し、グローバル変数が所属するソフトウェア部品と参照先のソフトウェア部品を抽出することが可能となるため、ソフトウェア部品間のインターフェース情報の整理を支援することができる。
【００２８】
（実施の形態３）
次に、本発明における第３の実施の形態について図２を使用して説明する。実施の形態３においては、実施の形態２に対して、ソフトウェア部品内部の変数の使用状況を判定し、関連する他の変数を抽出する関連変数抽出部１２を備えた構成とする。
【００２９】
これによってリファクタリング支援装置１は、依存関係解析部５で抽出されたグローバル変数情報とソフトウェア部品内部の使用箇所情報を基に、前記グローバル変数と関連するソフトウェア内部の変数を抽出することが可能になるため、ソフトウェア部品間で依存関係にあるグローバル変数の役割を容易に把握することができる。
【００３０】
例えば、ソフトウェア部品間でグローバル変数が多く使用されており、インターフェース情報が煩雑になっている場合、本実施の形態においては、関連する変数を抽出することが可能となるため、各グローバル変数の役割を容易に把握することを可能とし、容易にインターフェースを集約することが可能となる。
【００３１】
（実施の形態４）
次に、本発明における第４の実施の形態について図２を使用して説明する。実施の形態４においては、実施の形態３に対して、ソフトウェア部品間で依存関係にあるグローバル変数の参照箇所の関数階層を解析し、予め設定された関数階層以内で参照されているかどうかを判定する参照階層判定部１３を備えた構成とする。ここで、前記参照階層判定部１３にはグローバル変数が適切な階層で使用されているかどうかを判定する判定階層が予め設定されているものとする。
【００３２】
これによってリファクタリング支援装置１は、依存関係解析部５で抽出されたグローバル変数情報とソフトウェア部品内部の使用箇所情報を基に、前記グローバル変数が参照されている関数階層を判定し、予め設定された判定階層以上の関数階層で参照されている場合、前記グローバル変数を抽出することが可能となるため、特別に深い関数階層で使用されているグローバル変数を不適切に使用されている可能性がある変数として抽出することができる。
【００３３】
また、本実施の形態においては、前記判定階層は情報入力部６を介して任意に設定・変更してもよいものとする。
【００３４】
（実施の形態５）
次に本発明の実施の形態５について図２を用いて説明する。本実施例は、コンピュータを、プログラム記憶部２と、構文解析部３と、関数・変数情報抽出部４と、依存関係解析部５と、情報入力部６と、解析結果出力部７と、ソフトウェア部品指定部８と、変数データ解析部９と、変数用途判定部１０と、所属部品判定部１１と、関連変数抽出部１２と、参照階層判定部１３の全てもしくは一部として機能させるためのプログラムとする構成として、コンピュータを全てもしくは一部として機能させるものである。
【００３５】
以上のように本実施例によれば、汎用コンピュータやサーバーを用いて本発明の全てもしくは一部を容易に実現することができる。
【産業上の利用可能性】
【００３６】
以上のように本発明にかかるソフトウェア部品間で依存関係にあるグローバル変数を解析し、不適切に使用されているグローバル変数を抽出する方法は、ソフトウェア部品の独立化を促進し、リファクタリングの効率を上げることが可能となるため、ソフトウェアの品質や再利用性を向上させることができる。
【図面の簡単な説明】
【００３７】
【図１】本発明の実施の形態１におけるリファクタリング支援装置構成図
【図２】本発明の実施の形態２から携帯６におけるリファクタリング支援装置構成図
【図３】本発明の実施の形態１におけるフローチャート
【図４】本発明の実施の形態１における判定方法のフローチャート
【図５】本発明の実施の形態２におけるフローチャート
【図６】従来のリファクタリング支援装置の構成図
【符号の説明】
【００３８】
１  リファクタリング支援装置
２  プログラム記憶部
３  構文解析部
４  関数・変数情報抽出部
５  依存関係解析部
６  情報入力部
７  解析結果出力部
８  ソフトウェア部品指定部
９  変数データ解析部
１０  変数用途判定部
１１  所属部品判定部
１２  関連変数抽出部
１３  参照階層判定部
【図１】
2010231513.tif 000003
【図２】
2010231513.tif 000004
【図３】
2010231513.tif 000005
【図４】
2010231513.tif 000006
【図５】
2010231513.tif 000007
【図６】
2010231513.tif 000008