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