説明

プログラムの影響範囲設定装置、並びにこれを用いた影響範囲特定方法及び影響波及のあるプログラムの抽出方法

【課題】影響波及のないクラス及びメソッドは抽出することがなく、影響波及の範囲を機械的に設定することができ、大規模システムの改修の時に、影響波及調査の精度向上を図り、作業効率向上を図る。
【解決手段】プログラムのソースコードが構文解析されて抽象構文木に分析され、該抽象構文木を形成する命令文が命令用語から検索され、検索された命令文から命令文の依存関係に従って命令文の繋がりが形成され、ソースコードについての命令文と命令文の繋がりによる依存関係グラフが形成されて、依存関係にある影響波及範囲が設定される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムの影響範囲設定装置、並びにこれを用いた影響範囲特定方法及び影響波及のあるプログラム抽出方法に関する。
【背景技術】
【0002】
大規模システムの改修の時にプログラムの改修に伴なって他のプログラムへの影響波及調査の精度向上と作業効率向上が求められる。
【0003】
従来、影響波及調査のために「メソッドの呼出関係」を中心とした影響波及洗い出し方法が用いられて来た。
【0004】
特許文献1には、設計上の論理構造であるモジュール、ファイル、関数、ソースコードの階層構造ごとに比較すべき項目を定義し、比較を行うことが記載されている。
【0005】
特許文献2には、従来、分析ルールを規定し、これに基づいて変更の影響度分析を行うこと、この方法ではルールの作成に時間がかかるので、ソースコードの変更対象項目毎にその変更で想定されるすべての検証方法が記載された影響度分析図を記憶することが記載されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2006−277127号
【特許文献2】特開2009−157505号
【発明の概要】
【発明が解決しようとする課題】
【0007】
従来のメソッドの呼出関係による影響波及の洗い出しでは、影響のないクラス/メソッド大量に抽出される、呼出関係を辿る階層を指定する必要があるなどの問題がある。
【0008】
また、影響度分析図を記憶する方法では、この影響度分析図の構成に多大な時間を要するなどの問題がある。
【0009】
本発明は、かかる点に鑑みて影響波及のないクラス及びメソッドは抽出することがなく、影響波及の範囲を機械的に設定することができ、大規模システムの改修の時に、影響波及調査の精度向上を図り、作業効率向上を図ることができるようにすることを目的とする。
【課題を解決するための手段】
【0010】
本発明は、プログラムのソースコードが構文解析されて抽象構文木に分析され、該抽象構文木を形成する命令文が検索され、
検索された命令文から命令文の依存関係に従って命令文の繋がりが形成され、
ソースコードについての命令文と命令文の繋がりとによる依存関係グラフが形成されて、依存関係にある影響波及範囲が設定されること
を特徴とするプログラムの影響波及範囲設定装置を提供する。
【0011】
本発明は、プログラムのソースコードが構文解析されて抽象構文木に分析され、
該抽象構文木を形成する命令文が検索され、
検索された命令文から命令文の依存関係に従って命令文の繋がりが形成され、
複数のソースコードについて、それぞれ検索された命令文の繋がりが形成され、
複数のソースコードの有する検索された命令文が、同一であるときに当該命令文はそれぞれのソースコードに共有された命令文とされ、
該共有された命令文と命令文の繋がりとの組み合わせを含んで複数のソースコードについての命令文と命令文の繋がりとによる依存関係グラフが形成されて共有して、依存関係にある影響波及範囲が設定されること
を特徴とするプログラムの影響波及範囲設定装置を提供する。
【0012】
本発明は、また、前記プログラムの影響波及範囲設定装置による影響範囲の特定方法において、
前記依存関係グラフ上で、基点となる命令文が指定されると、基点となる命令文からの依存関係を辿ることで影響波及範囲が特定されることを特徴とするプログラムの影響範囲波及範囲の特定方法を提供する。
【0013】
本発明は、また、前記プログラムの影響波及範囲設定装置による影響波及のあるプログラムの抽出方法において、
前記依存関係グラフ上で、基点となる命令文が特定されたときに、基点となる命令文からの依存関係を辿ることで命令文及び命令文の繋がりを備えたプログラムを影響波及のあるプログラムとして抽出することを特徴とする影響波及のあるプログラム抽出方法を提供する。
【0014】
なお、本発明では、ソースコードをインプットすることとしているが、ここではバイトコードを含む概念で使用する。バイトコードとは、特定のOSやハードウェアに依存しないように定義された命令によって記述された実行形式のプログラムを意味し、人間の書いた設計図であるソースコードと実際にコンピュータで実行可能なネイティブコードの中間に当たる形式のものであり、ここではソースコードとして取り扱って差しつかえない。
【発明の効果】
【0015】
本発明によれば、上述したようにソースコードの構文解析によって命令文同士の依存関係を付与し、影響波及範囲の設定及び特定を行うようにしているので、影響のないクラス/メソッドを抽出することがなく、影響波及の範囲を命令文から機械的に設定でき、大規模システムの改修の時に、影響調査の精度向上を図り、作業効率の向上を図ることができる。
【図面の簡単な説明】
【0016】
【図1】本発明の実施例の構成をブロックで示す図。
【図2】本実施例で採用されるエンジンの構成を示す図。
【図3】本実施例の処理の流れを示す図。
【図4】構文の解析例を示す図。
【図5】命令文同士の依存関係の付与の例を示す図。
【図6】影響波及範囲の設定による依存関係グラフを示す図。
【図7】図6にクラス及びメソッド関係を加えた図。
【図8】図6に示す命令文と命令文の繋がりの具体例を示す図。
【図9】依存関係を辿った影響波及調査の例を示す図。
【図10】影響波及範囲の結果を示す図。
【図11】従来例による影響波及の結果を示す図。
【図12】従来例による影響波及の結果を示す図。
【図13】従来例による影響波及の結果を示す図。
【図14】本実施例による影響波及の結果を示す図。
【発明を実施するための形態】
【0017】
以下、本発明の実施例を図面に基づいて説明する。
【実施例】
【0018】
図1は、本発明の実施例のプログラムの影響範囲設定装置の構成をブロックで示す図である。
図1において、プログラムの影響範囲設定装置100は、入力手段1、演算処理手段2、出力手段3及びデータベース4から構成される。
【0019】
入力手段1には、外部から大規模システムの時に改修対象となるプログラム5及び基点となる命令文6が入力される。
【0020】
演算処理手段2は次のような処理手段(機能)を備える。
【0021】
・ソースコードの構文解析(すなわち文法解析)
・抽出構文木分析
・命令文検索
・命令文繋がりの形成
・共有命令文の抽出
・命令文による依存関係
・グラフの形成
・影響範囲の設定
・影響範囲の特定
出力手段3は、
・依存関係の辿り
・設定された影響範囲
・特定された影響範囲
を出力し、画面表示装置7の画面8に表示する。
【0022】
データベース4は、演算処理手段2で演算処理されることで生成された命令文による依存関係グラフ(すなわちデータ)を格納する。
【0023】
演算処理手段2について説明する。
ソースコードの構文解析手段は、プログラムのソースコードを構文解析する。
抽象構文木分析手段は、構文解析に基づいて階層構造としての抽象構文木に分析する。
【0024】
命令文検索手段は、抽象構文木を形成する命令文を検索する。抽象構文木に表現されている全てのノード(行、命令文)について依存関係を分析し、命令文を検索する。
【0025】
命令文繋がり作成手段は、検索された命令文から命令文の依存関係に従って命令文の繋がりを形成する。命令文の繋がりは複数のソースコードについて形成される。
【0026】
共有命令文の抽出手段は、同一であるときに当該命令文はそれぞれのソースコードに共有された命令文として抽出する。
【0027】
命令文による依存関係グラフの形成手段は、他のプログラムとの関係で、共有された命令文と依存関係で繋がった命令文との組み合わせを含んで複数のソースコードについて命令文による依存関係グラフを形成する。
【0028】
影響波及範囲設定手段は、依存関係グラフを基にして、依存関係にある影響波及範囲を設定する。
【0029】
影響波及範囲特定手段は、設定された影響波及範囲を基に、影響波及範囲を特定する。
【0030】
図2は、本実施例を用いるエンジンの構成を示す。
エンジンは、言語依存部分と言語非依存部分とから構成される。(1)構文解析に際しては、各種のプラグイン、例えばA分析プラグイン、B分析プラグイン、C分析プラグインが用いられる。1つのプラグインでもよい。
【0031】
図2に示すように、構文解析がなされ、抽出構文木が解析され、(2)依存関係分析がなされる。この分析によって依存関係が形成され、次いで(3)影響波及分析がなされる。この分析によって影響波及結果が生成される。
【0032】
図3は、処理の流れを示す。
ソースコードについて(1)文法解析を行う(S1)。ソースコードだけでは不足する型情報等をバイトコードなどの補完情報で補完するようにしてもよい。ここで補完するとは、ソースコードだけでは不足する情報を補うための補足情報をいう。例えばJava(登録商標)言語におけるclassやjarファイルの情報を指す。
(1)構文解析に基づいて抽象構文木を形成し(S2)、(2)依存関係分析を行う(S3)。この分析結果により依存関係を形成し(S4)、影響の基点を基に、(3)影響波及分析を行う(S5)。この分析結果により影響波及結果を生成する(S6)。
【0033】
図4は、ソースコードの構文解析手段及び抽象構文木分析手段によってソースコードの文法を解析し、抽象構文木を分析し形成することを示す。ここでは、人間の目で追うことに近付けるために、ソースコードの各命令文の意味を解析し、その結果を抽象構文木に変換する。抽象構文木を分析し、命令用語から命令文を検索する。
【0034】
図5は、命令文同士の繋がりを分析することを示す。
【0035】
例えば、メソッド呼出し文は、呼出先のメソッド宣言に繋がる。このように、メソッド呼出しだけでなく、変数の利用と宣言など、全ての命令文について繋がりを付与する。これを依存関係と呼ぶ。
【0036】
依存関係は影響波及を辿る道筋として用いる。
【0037】
図6は、影響波及範囲の設定及び影響波及範囲の特定を示す。
図6には、命令文1及び命令文2を基点とするソースコードの一連の命令文の繋がりが記載されている。
【0038】
命令文1を起点とするソースコードと命令文2を起点とするソースコードは、命令文5は同一であると、それぞれのソースコードに共有された命令文となっていることを示す。
【0039】
命令文5は命令文7、命令文8が繋がり、命令文7には命令文9が繋がる。
【0040】
図に示すように命令文5、命令文7、命令文9は、他のプログラムとの関係で、それぞれのソースコードに共有された命令文の繋がりを形成している。
【0041】
共有された命令文と依存関係で繋がった命令文との組み合わせを含んで複数のソースコードについての命令文による依存関係グラフが形成され、影響波及範囲が設定される。影響波及の調査は、命令文同士の依存関係を辿ることで行う。今、起点とされたソースコードの内、命令文2についてのソースコードを基点のソースコードとする。基点となる命令文2を指定し、基点となる命令文の依存関係を辿ることで設定された影響波及範囲が特定される。
【0042】
図7は、図6に示す状態でクラスやメソッドとの関係を示す。
図7において、命令文はクラスやメソッドに所属している。
【0043】
よって命令文を辿ることで、所属しているクラスやメソッドを特定することができる。例えば、命令文1はクラスAのメソッドαに所属している。
【0044】
図8は、図6に示す命令文と命令文の繋がりを具体例で示す。
図8において、ソースコードの命令文単位で影響波及のルートが示され、影響波及対象の命令文は命令用語から自動的に抽出される。
【0045】
図9は、依存関係を辿った影響波及調査の例を示す。
図9は、UseInfoクラスに定義されたnameプロパティが及ぼす影響範囲を特定する例を示す。この例では、nameプロパティが持つ値の変更に伴なって、改修またはテストが必要となる範囲を特定する。例えば、従来3桁で表現していた値を、10桁で表現するように修正する場合である。
【0046】
図9の説明は次の通りである。
UserInfoクラスのフィールドに定義されたnameプロパティの変更に対する影響波及を調査する。
【0047】
〔UserInfoクラスの影響波及〕
1.nameプロパティは、getName()メソッドおよびsetName(String)メソッドで用いられている。
getName()メソッドのreturn文でnameプロパティが返却されるため、getName()メソッドの呼出元に影響が波及する。
⇒UtilityクラスのmakeKey(Date, String)メソッドへ。
2.setName(String)メソッドでは、setName(String)メソッドの引数の値をnameプロパティに上書きするため、nameプロパティの変更に対する影響はなく、これ以上の波及はしない。
【0048】
〔Utilityクラスの影響波及〕
1.userInfo.getName()の値に影響があるため、その値を用いた計算結果を格納するstring変数に影響が波及する。
2.string変数は、encryption.encrypt(String)メソッドに渡されるため、その計算結果であるencryptedString変数、およびencrypt(String)メソッドに影響が波及する
⇒Encryptionクラスのencrypt(String)メソッドへ。
3.encryptedString変数はmakeKey(Date, String)メソッドの戻り値となるため、makeKey(Date, String)メソッドの呼出元へ影響が波及する。
⇒Logicクラスのlogic()メソッドへ。
【0049】
〔Encryptionクラスの影響波及〕
1.encrypt(String)メソッドのstring引数に影響があるため、その値を用いた命令文「process(string)」の引数に影響がある。
2.process(String)メソッドの引数のstring変数に影響があるため、その値を用いている「return string」命令文に影響がある。return文に影響があるため、process(String)メソッドの戻り値に影響するため、process(String)メソッドの呼出元に影響が波及する。
⇒Encryptionクラスのencrypt(String)メソッド(3)へ。
3.encryptedString変数をreturn文で返却しているため、encrypt(String)メソッドの呼出元に影響が波及する。
⇒UtilityクラスのmakeKey(Date, String)メソッドへ。
【0050】
〔Logicクラスの影響波及〕
UtilityクラスのmakeKey(Date, String)の戻り値に影響があるため、その値をセットしているkey変数に影響がある。
key変数はその後に用いられていないため、ここで影響波及は終了となる。
【0051】
図10は、本実施例による影響波及範囲調査による結果を呼出関係による影響波及調査との比較によって示す。呼出関係による影響波及調査方法では、影響のないクラス/メソッドが大量に抽出されるため、どこまで辿るかを人間が判断し、絞り込むことが必要となる。これに対して、本実施例では、影響波及調査された結果は、必要充分な結果であるため、どこまで辿るかという判断を必要としない。
【0052】
本実施例によれば、文法を命令文単位に構文解析することで、
・命令文同士の依存関係を分析できる
・処理の流れを分析できる
という特徴を得ることができる。これにより、影響する命令文を辿ることができ、例えば「呼出関係」を中心とした影響波及調査の問題を解決できる。そして、図6、図7に示すように、影響の終着点を機械的に判断することができる。スパゲティコードのような場合にあっても必要な命令文関係を抽出することができる。
【0053】
図11から図14は、本実施例による影響波及範囲調査による結果を呼出関係による影響波及調査との比較を具体的に示す。
【0054】
図11から図13は、従来の呼出関係による影響波及調査の結果を示す。詳細内容は、これらの図に記述した。
【0055】
図14は、本実施例による影響波及調査の結果を示す。
【0056】
したがって、これらの比較から本実施例によれば、影響のないクラス及びメソッドが大量に抽出されることはなく、命令文と命令文の繋ぎによる依存関係を辿ることで影響波及範囲を特定することができる。
【0057】
このように、本実施例は、大規模なシステムの改修の時に実施する影響波及調査の制度を向上させ、作業効率を向上させることができる。
【符号の説明】
【0058】
1…入力手段、2…演算処理手段、3…出力手段、4…データベース、5…プログラム、6…基点となる命令文、7…画面表示装置、8…画面、100…プログラムの影響波及範囲設定装置。

【特許請求の範囲】
【請求項1】
プログラムのソースコードが構文解析されて抽象構文木に分析され、該抽象構文木を形成する命令文が検索され、
検索された命令文から命令文の依存関係に従って命令文の繋がりが形成され、
ソースコードについての命令文と命令文の繋がりとによる依存関係グラフが形成されて、依存関係にある影響波及範囲が設定されること
を特徴とするプログラムの影響波及範囲設定装置。
【請求項2】
プログラムのソースコードが構文解析されて抽象構文木に分析され、
該抽象構文木を形成する命令文が命令文用語から検索され、
検索された命令文から命令文の依存関係に従って命令文の繋がりが形成され、
複数のソースコードについて、それぞれ検索された命令文の繋がりが形成され、
複数のソースコードの有する検索された命令文が、同一であるときに当該命令文はそれぞれのソースコードに共有された命令文とされ、
該共有された命令文と命令文の繋がりとの組み合わせを含んで複数のソースコードについての命令文と命令文の繋がりとによる依存関係グラフが形成されて共有して、依存関係にある影響波及範囲が設定されること
を特徴とするプログラムの影響波及範囲設定装置。
【請求項3】
請求項1または2に記載されたプログラムの影響波及範囲設定装置による影響範囲の特定方法において、
前記依存関係グラフ上で、基点となる命令文が指定されると、基点となる命令文からの依存関係を辿ることで影響波及範囲が特定されることを特徴とするプログラムの影響範囲波及範囲の特定方法。
【請求項4】
請求項1または2に記載されたプログラムの影響波及範囲設定装置による影響波及のあるプログラムの抽出方法において、
前記依存関係グラフ上で、基点となる命令文が特定されたときに、基点となる命令文からの依存関係を辿ることで命令文及び命令文の繋がりを備えたプログラムを影響波及のあるプログラムとして抽出することを特徴とする影響波及のあるプログラム抽出方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate


【公開番号】特開2012−212281(P2012−212281A)
【公開日】平成24年11月1日(2012.11.1)
【国際特許分類】
【出願番号】特願2011−77018(P2011−77018)
【出願日】平成23年3月31日(2011.3.31)
【出願人】(596127554)日立公共システムエンジニアリング株式会社 (30)
【Fターム(参考)】