(57)【特許請求の範囲】
【請求項１】
ソースコード中に含まれる変数が他の部分に与える影響を解析する影響解析装置であって、
解析の対象となる少なくとも１つ以上のソースコード毎に生成された、変数のデータ依存関係に関する少なくとも１つ以上の変数情報を対象として、代入または参照が行われた変数とその存在場所との対応関係を表す複数のテーブル情報を生成するテーブル生成手段と、
上記テーブル生成手段により生成された複数のテーブル情報を用いて、変数の代入および参照関係を辿ることによって変数の影響範囲を求める解析手段とを備え、
上記テーブル生成手段は、それぞれのソースコード毎に生成された各変数情報を対象として、変数とその代入が行われた文との対応関係を表す第１のテーブル情報、変数とその参照が行われた文との対応関係を表す第２のテーブル情報、文とそこで代入が行われた変数との対応関係を表す第３のテーブル情報を生成することを特徴とする影響解析装置。
【請求項２】
上記テーブル生成手段は、それぞれのソースコード中に含まれる同じ名前の変数を全て同じ変数であるとして上記複数のテーブル情報を生成することを特徴とする請求項１に記載の影響解析装置。
【請求項３】
上記テーブル生成手段は、それぞれのソースコード中に含まれる変数がどこかで代入された場合に、その変数の全ての参照がその代入に依存しているものとして上記複数のテーブル情報を生成することを特徴とする請求項１または２に記載の影響解析装置。
【請求項４】
上記解析の対象となる少なくとも１つ以上のソースコードを読み込み、それぞれのソースコード毎に上記変数情報を生成する変数情報生成手段と、
上記変数情報生成手段により生成された各変数情報を保存する記憶手段とを備え、
上記テーブル生成手段および解析手段は、上記変数情報生成手段によりあらかじめ生成されて上記記憶手段に保存されている各変数情報を用いて、上記複数のテーブル情報の生成およびそれらを用いた影響解析を実行することを特徴とする請求項１〜３の何れか１項に記載の影響解析装置。
【請求項５】
ソースコード中に含まれる変数が他の部分に与える影響を解析する影響解析方法であって、
解析の対象となる少なくとも１つ以上のソースコード毎に生成された、変数のデータ依存関係に関する少なくとも１つ以上の変数情報を対象として、代入または参照が行われた変数とその存在場所との対応関係を表す複数のテーブル情報を生成するテーブル生成ステップと、
上記生成された複数のテーブル情報を用いて、変数の代入および参照関係を辿ることによって変数の影響範囲を求める解析ステップとを有し、
上記テーブル生成ステップでは、それぞれのソースコード毎に生成された各変数情報を対象として、変数とその代入が行われた文との対応関係を表す第１のテーブル情報、変数とその参照が行われた文との対応関係を表す第２のテーブル情報、文とそこで代入が行われた変数との対応関係を表す第３のテーブル情報を生成することを特徴とする影響解析方法。
【請求項６】
上記解析ステップでは、上記第１のテーブル情報を起点として、以降上記第２のテーブル情報と上記第３のテーブル情報とを交互にアクセスして上記変数の代入および参照関係を辿ることによって上記変数の影響範囲を求めることを特徴とする請求項５に記載の影響解析方法。
【請求項７】
解析の対象となる少なくとも１つ以上のソースコード毎に生成された、変数のデータ依存関係に関する少なくとも１つ以上の変数情報を対象として、代入または参照が行われた変数とその存在場所との対応関係を表す複数のテーブル情報を生成するテーブル生成手段と、
上記テーブル生成手段により生成された複数のテーブル情報を用いて、変数の代入および参照関係を辿ることによって変数の影響範囲を求める解析手段としてコンピュータを機能させ、
かつ上記テーブル生成手段にて、それぞれのソースコード毎に生成された各変数情報を対象として、変数とその代入が行われた文との対応関係を表す第１のテーブル情報、変数とその参照が行われた文との対応関係を表す第２のテーブル情報、文とそこで代入が行われた変数との対応関係を表す第３のテーブル情報を生成するためのプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項８】
解析の対象となる少なくとも１つ以上のソースコード毎に生成された、変数のデータ依存関係に関する少なくとも１つ以上の変数情報を対象として、代入または参照が行われた変数とその存在場所との対応関係を表す複数のテーブル情報を生成するテーブル生成手段と、
上記テーブル生成手段により生成された複数のテーブル情報を用いて、変数の代入および参照関係を辿ることによって変数の影響範囲を求める解析手段としてコンピュータを機能させ、
かつ上記テーブル生成手段にて、それぞれのソースコード毎に生成された各変数情報を対象として、変数とその代入が行われた文との対応関係を表す第１のテーブル情報、変数とその参照が行われた文との対応関係を表す第２のテーブル情報、文とそこで代入が行われた変数との対応関係を表す第３のテーブル情報を生成するためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は影響解析装置および方法、更にはこれらをソフトウェアの機能で実現するためのプログラム、および上記プログラムを格納した記録媒体に関し、特に、一般的なプログラム言語で記述されたソースコードを解析する際に利用される影響解析装置および方法に用いて好適なものである。
【０００２】
【従来の技術】
従来、例えば既存のソフトウェア資産を利用してより良いコンピュータシステムを構築することが一般的に行われている。この場合、既に構築されている既存のソースコード（ソースプログラム）をデバッグして保守したり、あるいはソースコードが無いときにはリバース・エンジニリアリングを行ったりしている。このプログラムの保守やリバース・エンジニリアリングでは、プログラム中のある変数およびその変数に関係する部分については修正せず、これら以外の部分だけを修正したいという場合もある。
【０００３】
ところが、プログラムの内容によっては、その変数がプログラムの他の部分に影響を与えている場合がある。したがって、ある変数に対して修正を加えるときに、その影響がそのプログラムのどの部分まで及ぶのかを調べることなく無闇に行うと、予測し得ないエラー等が発生して、そのプログラムが正常に動作しなくなってしまうことがある。
【０００４】
したがって、ソースコードの解析・修正作業においては、変数の影響がどの範囲まで及び、どの部分には及ばないかを解析することが、プログラムを開発する上において極めて重要となる。そこで本出願人は、このような解析を行うための装置として、例えば特願平１０−２４３５５号に記載の変数影響解析装置を提案した。この装置は、プログラム中での影響範囲を解析するものである。
【０００５】
【発明が解決しようとする課題】
ところで、１つのプログラムは、例えば機能単位毎に分割した個々のモジュールに対応する複数のソースコードを夫々コンパイルし、それらをリンクすることによって作成されることが多い。以下では、このように１つの実行プログラムを作るに当たってリンクするために必要なソースコード群の単位を「リンク単位」と呼ぶ。さらに、複数のリンク単位の実行プログラムが連携して１つのコンピュータシステムを構築している場合も多い。
【０００６】
通常、プログラムを保守する際にはソースコードやそのリンク単位等をユーザが理解しており、これをもとに保守作業を行うことが多い。しかしながら、これらの情報をユーザが必ず理解しているとは限らない。従来の変数影響解析装置では、ユーザがこれらリンク単位等の情報を理解していることを前提に作られているため、ユーザはリンク単位を意識しておく必要があり、リンク単位が不明である場合には解析できなかった。
【０００７】
また、別の課題として、リンク単位となっている複数のソースファイルに渡って影響解析を行う場合、例えば対象となるソースファイル自体が数千、数万ファイルになることがある。その場合、従来の変数影響解析装置では全ての影響解析を行っていたために解析結果を得るためには非常に時間がかかり、実質的には使い物にならなかった。
さらに、従来の変数影響解析装置では、影響解析できる範囲は１つのリンク単位内に限られており、複数のリンク単位が連携して構築されるようなシステムに関しては解析できないという課題があった。
【０００８】
本発明は、このような問題を解決するために成されたものであり、与えられたソースコード群の中でユーザがリンク単位を意識しなくても影響範囲の解析を行うことができるようにすることを目的とする。
また、本発明は、解析対象となるソースファイルが多くなった場合にも高速に影響解析を行うことができるようにすることを目的とする。
さらに、本発明は、１つのリンク単位を越えて影響範囲の解析を行うことができるようにすることも目的としている。
【０００９】
【課題を解決するための手段】
本発明の影響解析装置は、解析の対象となる少なくとも１つ以上のソースコード毎に生成された、変数のデータ依存関係に関する少なくとも１つ以上の変数情報を対象として、代入または参照が行われた変数とその存在場所との対応関係を表す複数のテーブル情報を生成するテーブル生成手段と、上記テーブル生成手段により生成された複数のテーブル情報を用いて、変数の代入および参照関係を辿ることによって変数の影響範囲を求める解析手段とを備え、上記テーブル生成手段は、それぞれのソースコード毎に生成された各変数情報を対象として、変数とその代入が行われた文との対応関係を表す第１のテーブル情報、変数とその参照が行われた文との対応関係を表す第２のテーブル情報、文とそこで代入が行われた変数との対応関係を表す第３のテーブル情報を生成する。
【００１３】
また、本発明の影響解析方法は、解析の対象となる少なくとも１つ以上のソースコード毎に生成された、変数のデータ依存関係に関する少なくとも１つ以上の変数情報を対象として、代入または参照が行われた変数とその存在場所との対応関係を表す複数のテーブル情報を生成するテーブル生成ステップと、上記生成された複数のテーブル情報を用いて、変数の代入および参照関係を辿ることによって変数の影響範囲を求める解析ステップとを有し、上記テーブル生成ステップでは、それぞれのソースコード毎に生成された各変数情報を対象として、変数とその代入が行われた文との対応関係を表す第１のテーブル情報、変数とその参照が行われた文との対応関係を表す第２のテーブル情報、文とそこで代入が行われた変数との対応関係を表す第３のテーブル情報を生成する。
【００１４】
また、本発明のコンピュータ読み取り可能な記録媒体は、解析の対象となる少なくとも１つ以上のソースコード毎に生成された、変数のデータ依存関係に関する少なくとも１つ以上の変数情報を対象として、代入または参照が行われた変数とその存在場所との対応関係を表す複数のテーブル情報を生成するテーブル生成手段と、上記テーブル生成手段により生成された複数のテーブル情報を用いて、変数の代入および参照関係を辿ることによって変数の影響範囲を求める解析手段としてコンピュータを機能させ、かつ上記テーブル生成手段にて、それぞれのソースコード毎に生成された各変数情報を対象として、変数とその代入が行われた文との対応関係を表す第１のテーブル情報、変数とその参照が行われた文との対応関係を表す第２のテーブル情報、文とそこで代入が行われた変数との対応関係を表す第３のテーブル情報を生成するためのプログラムを記録する。
【００１５】
また、本発明のプログラムは、解析の対象となる少なくとも１つ以上のソースコード毎に生成された、変数のデータ依存関係に関する少なくとも１つ以上の変数情報を対象として、代入または参照が行われた変数とその存在場所との対応関係を表す複数のテーブル情報を生成するテーブル生成手段と、上記テーブル生成手段により生成された複数のテーブル情報を用いて、変数の代入および参照関係を辿ることによって変数の影響範囲を求める解析手段としてコンピュータを機能させ、かつ上記テーブル生成手段にて、それぞれのソースコード毎に生成された各変数情報を対象として、変数とその代入が行われた文との対応関係を表す第１のテーブル情報、変数とその参照が行われた文との対応関係を表す第２のテーブル情報、文とそこで代入が行われた変数との対応関係を表す第３のテーブル情報を生成する。
【００１６】
【発明の実施の形態】
以下、本発明の一実施形態を図面に基づいて説明する。
図１は、本実施形態による影響解析装置の主要な機能構成を示すブロック図である。
【００１７】
図１において、１-1〜１-nは影響範囲解析の対象となるｎ個のソースコードであり、これらの中の何れかの組み合わせによってリンク単位が構成される。また、これらｎ個のソースコード１-1〜１-nの中に複数のリンク単位が含まれていても良い。解析の対象として与えられるこれらｎ個のソースコード１-1〜１-nは、その中の何れの組み合わせによってリンク単位が構成されているのかが不明であっても良い。
【００１８】
２は変数情報生成部であり、解析の対象となる上記ｎ個のソースコード１-1〜１-nを読み込み、それぞれのソースコード毎に構文解析して、変数の代入・参照関係を表す変数情報３-1〜３-nをそれぞれ生成する。すなわち、例えば第１のソースコード１-1から第１の変数情報３-1を生成し、第ｎのソースコード１-nから第ｎの変数情報３-nを生成する。生成した変数情報３-1〜３-nは、各ソースコード毎に１つのファイルに入れてそれぞれ記憶部４に保存する。
【００１９】
５はテーブル情報生成部であり、上記変数情報生成部２によりそれぞれのソースコード毎に生成されて記憶部４に保存された各変数情報３-1〜３-nを対象として、代入または参照が行われた変数とその存在場所との対応関係を表す複数のテーブル情報を生成する。ここでは、例えば変数とその代入が行われた文との対応関係を表す第１のテーブル情報６-1と、変数とその参照が行われた文との対応関係を表す第２のテーブル情報６-2と、文とそこで代入が行われた変数との対応関係を表す第３のテーブル情報６-3とを生成する。
【００２０】
７は解析部であり、上記テーブル情報生成部５により生成された３つのテーブル情報６-1〜６-3を用いて、変数の代入および参照関係を辿ることによって所望の変数の影響範囲を解析する。例えば、第１のテーブル情報６-1を起点として、以降第２のテーブル情報６-2と第３のテーブル情報６-3とを交互にアクセスして変数の代入および参照の関係を辿ることにより、当該変数の影響範囲を求める。
そして、その解析結果をリスト８として出力する。
【００２１】
以下に、上記のように構成した影響解析装置の動作を、具体例を挙げながら説明する。なお、ここでは説明の簡単のため、変数の影響解析の対象とするソースコードが２つの場合について説明する。図２は、その２つのソースコード１-1，１-2およびこれから生成される変数情報３-1，３-2の一部構成例を示す図である。
【００２２】
図２において、第１のソースコード１-1では、１行目において変数Ａに"１"が代入され、２行目において変数Ｂが参照されてその値が変数Ｘに代入され、３行目において変数Ａが参照されてその値が変数Ｂに代入されている。また、４行目においては２つの変数Ｂ，Ｙが参照され、６行目においては変数Ｂが参照されてその値が変数Ｃに代入されている。一方、第２のソースコード１-2では、１行目において変数Ａに"０"が代入され、２行目において変数Ｄが参照されてその値が変数Ｘに代入され、３行目において２つの変数Ｂ，Ｘが参照されている。
【００２３】
変数情報生成部２は、このような２個のソースコード１-1，１-2を読み込み、それぞれのソースコード中に含まれる各変数の代入・参照関係を解析して、変数の代入・参照関係に関する変数情報３-1，３-2をそれぞれのソースコード毎に生成する。例えば、第１のソースコード１-1に関しては、変数Ａは１行目で代入されるとともに３行目で参照され、変数Ｂは２，４，６行目で参照されるとともに３行目で代入され、変数Ｃは６行目で代入され、変数Ｘは２行目で代入され、変数Ｙは４行目で参照されているという変数情報を生成する。第２のソースコード１-2に関しても同様である。
【００２４】
このようにして生成された変数情報３-1，３-2は、それぞれ別個のファイルとして記憶部４に保存される。テーブル情報生成部５は、記憶部４に保存された各変数情報３-1，３-2を用いて、上述の３つのテーブル情報６-1〜６-3を生成する。図３は、上記図２に示した２つのソースコード１-1，１-2を解析対象とした場合に生成される３つのテーブル情報６-1〜６-3を示す図である。
【００２５】
図３において、第１のテーブル情報６-1は、変数とその代入が行われた文との対応関係を表すものである。この第１のテーブル情報６-1に含まれる各変数Ａ，Ｂ，Ｃ，Ｘは、解析対象とする全ソースコード１-1，１-2の中で代入が行われている全ての変数である。また、それらに対応する文は、その変数の代入が行われているソースコード中の場所を示すものである。例えば変数Ａは、第１のソースコード１-1の１行目（１−１で表記）と、第２のソースコード１-2の１行目（２−１で表記）とで代入が行われている。
【００２６】
また、第２のテーブル情報６-2は、変数とその参照が行われた文との対応関係を表すものである。この第２のテーブル情報６-2に含まれる各変数Ａ，Ｂ，Ｄ，Ｘ，Ｙは、解析対象とする全ソースコード１-1，１-2の中で参照が行われている全ての変数である。また、それらに対応する文は、その変数の参照が行われているソースコード中の場所を示すものである。例えば変数Ａは、第１のソースコード１-1の３行目（１−３で表記）で参照が行われている。
【００２７】
また、第３のテーブル情報６-3は、文とそこで代入が行われた変数との対応関係を表すものである。この第３のテーブル情報６-3に含まれる各文１−１，１−２，１−３，１−６，２−１，２−２は、解析対象とする全ソースコード１-1，１-2の中で代入が行われている全ての場所を表すものであり、それらの場所で代入されている変数が夫々対応して示されている。例えば第１のソースコード１-1の１行目では、変数Ａの代入が行われている。
【００２８】
なお、この図３の例では、変数の代入や参照が行われた文を１−１，１−２…などで表記しているが、１つの文が複数行に渡って記述されることもあるので、これらの表記は単純な行番号を示すものではない。実際には、各テーブル情報６-1〜６-3中の文を表す部分に対して、各ソースコード１-1，１-2の各文ごとにユニークな文ＩＤを与え、この文ＩＤとそれが存在するソースコード中の場所との関係を表すもう１つのテーブル情報を備えている。
【００２９】
解析部７は、テーブル情報生成部５により生成された図３に示した３つのテーブル情報６-1〜６-3を用いて、例えば対象変数リスト９にリストアップされているユーザにより指定された所望の変数の代入および参照関係を辿ることによって影響範囲を解析し、その解析結果をリスト８として出力する。
【００３０】
例えば、変数Ａの影響範囲を解析したい場合は、まず第１のテーブル情報６-1を見て、その変数Ａが各ソースコード１-1，１-2の中のどの場所で代入されているかを調べる。ここでは、第１のソースコード１-1の１行目と、第２のソースコード１-2の１行目において変数Ａの代入が行われていることが分かる。この時点で、その検出した代入場所を解析結果リスト８に登録する。
【００３１】
次に、第２のテーブル情報６-2を見て、指定された変数Ａが各ソースコード１-1，１-2の中のどの場所で参照されているかを調べる。ここでは、第１のソースコード１-1の３行目において変数Ａの参照が行われていることが分かる。この時点で、その検出した参照場所を解析結果リスト８に追加する。次に、第３のテーブル情報６-3を見て、上記第２のテーブル情報６-2に記述されている場所で参照された変数Ａがどの変数に代入されているかを調べる。ここでは、第１のソースコード１-1の３行目において参照された変数Ａが変数Ｂに代入されていることが分かる。
【００３２】
この場合、変数Ａの値は変数Ｂに代入されてさらに他の部分に影響を及ぼすことになるので、次に変数Ｂの影響範囲も調べる必要がある。そこで、第２のテーブル情報６-2を再び見て、その変数Ｂが各ソースコード１-1，１-2の中のどの場所で参照されているかを調べる。ここでは、第１のソースコード１-1の２，４，６行目と、第２のソースコード１-2の３行目において変数Ｂの参照が行われていることが分かる。この時点で、それらの検出した参照場所を解析結果リスト８に追加する。
【００３３】
さらに、第３のテーブル情報６-3を見て、上記第２のテーブル情報６-2に記述されている場所で参照された変数Ｂがそれぞれどの変数に代入されているかを調べる。ここでは、第１のソースコード１-1の２行目において参照された変数Ｂが変数Ｘに代入されるとともに、第１のソースコード１-1の６行目において参照された変数Ｂが変数Ｃに代入されていることが分かる。なお、第１のソースコード１-1の４行目において参照された変数Ｂと、第２のソースコード１-2の３行目において参照された変数Ｂは何れの変数にも代入されていないので、これらについてはここで処理が終了する。
【００３４】
ここで変数Ｂの値が代入されている新たな変数Ｘ，Ｃについては、更にその影響範囲を調べるために、再び第２のテーブル情報６-2を見て、その変数Ｘ，Ｃが各ソースコード１-1，１-2の中のどの場所で参照されているかを調べる。ここでは、第２のソースコード１-2の３行目において変数Ｘの参照が行われていることが分かる。ただし、この参照場所は解析結果リスト８に既に登録されているので、解析結果リスト８への追加は行わない。
【００３５】
さらに、第３のテーブル情報６-3を見て、上記第２のテーブル情報６-2に記述されている場所で参照された変数Ｘがどの変数に代入されているかを調べる。ここでは、変数Ｘは何れの変数にも代入されていないので、ここで全ての解析処理が終了する。以上のように、第１のテーブル情報６-1を起点として、以降第２のテーブル情報６-2と第３のテーブル情報６-3とを交互にアクセスして変数の代入および参照関係を辿ることにより、変数Ａの影響範囲を求めることができる。このとき得られた変数Ａの影響範囲の解析結果リスト８を示すと、図４のようになる。
【００３６】
なお、今の例では生じていないが、第３のテーブル情報６-3から第２のテーブル情報６-2に戻る際に既に解析済の変数が指定された場合には、その変数について続けて解析しても以前と同じ結果が得られるだけなので、そこで解析処理を終了する。そのために、どの変数について解析を行ったかの履歴情報を保持するようにして、常にこの履歴情報を更新および参考にしながら上述のような処理を実行する。
【００３７】
以上の説明から分かるように、本実施形態の影響解析装置では、それぞれのソースコード１-1，１-2中に含まれる同じ名前の変数は、全て同じ変数であるものとしている。これは、複数のソースコード間に渡って影響範囲の解析を行う変数は、殆どの場合が大域変数（グローバル変数）であり、全てのソースコードで名前を統一して使われているため、同じ名前の変数を同一視しても問題がないからである。
【００３８】
また、本実施形態の影響解析装置では、それぞれのソースコード１-1，１-2中に含まれる変数がどこかの場所で代入されたら、その変数の全ての参照はその代入に依存しているものと考えている。つまり、プログラムの制御フローは全く無視している。例えば、第１のソースコード１-1において制御フローも考慮して変数Ａの影響範囲を解析すると２行目は影響範囲に入らないが、本実施形態のように制御フローを無視した場合にはこの２行目も影響範囲に入る（図４において１−２も影響範囲のリストとして登録されている）。
【００３９】
図５および図６は、本実施形態による影響解析方法の処理手順を示すフローチャートである。このうち図５は、図１の記憶部４に保存されている変数情報３-1〜３-nから３つのテーブル情報６-1〜６-3を生成するテーブル情報生成部５の処理、すなわち、解析部７による影響解析の前処理の手順を示す。
【００４０】
図５において、まずステップＳ１で、ユーザがテーブル情報生成部５に対して影響解析を行う対象のソースコード群を指定する。ここでは、特にリンク単位を意識することなく、任意のソースコードを指定することが可能である。また、与えられた全てのソースコード１-1〜１-nを指定することも可能である。次に、ステップＳ２でテーブル情報生成部５は、上記指定されたソースコード群の各々に対応する変数情報をそれぞれ記憶部４から読み込む。
【００４１】
すなわち、複数のソースコード１-1〜１-nの各々に対応する変数情報３-1〜３-nがあらかじめ変数情報生成部２により生成されて記憶部４に保存されているので、その中から指定されたソースコード群に対応する変数情報を読み込む。そして、ステップＳ３で、その読み込んだ変数情報の全体を対象として、上述した第１〜第３のテーブル情報６-1〜６-3を生成する。
【００４２】
図６は、上記テーブル情報生成部５により生成された３つのテーブル情報６-1〜６-3を用いて変数の影響解析を行う解析部７の処理手順を示す。なお、この図６のフローチャートに入る前に、別途ユーザがどの変数に対して影響解析を行いたいかという指定をしておき、対象変数リスト９にその変数がリスト化されているものとする。図６において、まずステップＳ１１で、ユーザから影響解析を行いたい変数の指定があったか否かを判断する（図３の例では、変数Ａを指定している）。変数の指定があった場合は、ステップＳ１２で第１のテーブル情報６-1を見て、ステップＳ１３で上記指定された変数が第１のテーブル情報６-1内に存在するか否かを判断する。
【００４３】
ここで、指定された変数が第１のテーブル情報６-1内に有る場合は、ステップＳ１４に進み、その変数に対応して第１のテーブル情報６-1内に記述されている代入が行われた文（図３の例では、１−１、２−１の２つの代入文）を解析結果リスト８に登録する。次に、ステップＳ１５で第２のテーブル情報６-2を見て、ステップＳ１６で上記指定された変数が第２のテーブル情報６-2内に存在するか否かを判断する。
【００４４】
ここで、指定された変数が第２のテーブル情報６-2内に有る場合は、ステップＳ１７に進み、その変数に対応して第２のテーブル情報６-2内に記述されている参照が行われた文（図３の例では、１−３の参照文）を解析結果リスト８に追加する。さらに、ステップＳ１８で第３のテーブル情報６-3を見て、ステップＳ１９で上記第２のテーブル情報６-2内に記述されている参照文が第３のテーブル情報６-3内に存在するか否かを判断する。
【００４５】
ここで、上記第２のテーブル情報６-2内に記述されている参照文が第３のテーブル情報６-3内に有る場合は、ステップＳ２０に進み、最初に指定された変数（図３の例では変数Ａ）を上記参照文に対応して記述されている代入が行われた変数（図３の例では変数Ｂ）に置き換える。このように、以降の影響解析処理で対象とする変数名を変更した後、ステップＳ１５に戻り、再び第２のテーブル情報６-2を見て以下同様の処理を繰り返し行う。
【００４６】
なお、上記ステップＳ１９で、上記第２のテーブル情報６-2内に記述されている参照文が第３のテーブル情報６-3内に複数有る場合、ステップＳ２０では、以降の処理で対象とする変数を複数設定する。そして、以降のステップＳ１５〜Ｓ１９の処理では、設定された複数の変数のそれぞれに対して同様の処理を実行する。このとき、ステップＳ１６およびステップＳ１９では、該当するものが１つでも有れば、その該当するものに関してＹｅｓの分岐に従って処理を進める。
【００４７】
また、上記ステップＳ１３，Ｓ１６，Ｓ１９の何れかにおいて、第１のテーブル情報６-1および第２のテーブル情報６-2内に指定された変数が存在しない場合や、上記第２のテーブル情報６-2内に記述されている参照文が第３のテーブル情報６-3内に存在しない場合には、影響解析の処理を終了する。このようにして影響解析の処理を終了したときに解析結果リスト８に記述されている内容が、求めたい変数の影響範囲を表していることになる。
【００４８】
以上詳しく説明したように、本実施形態では、まず解析対象となるそれぞれのソースコード毎に変数の代入・参照関係に関する変数情報を夫々生成する。次に、それぞれのソースコード中に含まれる同じ名前の変数は全て同じものであるとし、かつ、ソースコード中の制御フローを無視するという条件の下で、複数の変数情報をもとに３つのテーブル情報を生成する。そして、これらのテーブル情報を用いて変数の代入および参照関係を辿ることによって影響範囲を求めるようにしている。
【００４９】
これにより、与えられた複数のソースコード１-1〜１-nの中でどの組み合わせでリンク単位を構成するかを特定できなくても、例えばそれらをまとめて解析処理を行えば、その中である変数の影響する範囲を解析することができる。また、異なるソースコードに含まれる変数でも同じ名前の変数は同じものであるとして解析しているので、従来の変数影響解析装置の解析で制限されていたリンク単位を越えて影響範囲の解析を行うこともできる。
【００５０】
また、上述のように制御フローを無視するという条件を課すことにより、影響解析を厳密に行うことはできないが、各ソースコード１-1〜１-n中の各文に現れる変数の代入、参照情報を求めれば良くなるので、構文解析する単位はソースコード毎に行えば良くなり、ある程度良好な解析結果を現実に実行可能な時間内に得ることができる。
【００５１】
さらに、本実施形態では、上記変数情報生成部２により生成された変数情報３-1〜３-nを保存する記憶部４を備え、各変数情報３-1〜３-nを変数情報生成部２によりあらかじめ生成して記憶部４に保存しておくようにしている。したがって、上述した変数の影響解析処理を一連に行うのではなく、所望の変数の影響解析を行いたいときにテーブル情報６-1〜６-3の生成から始めれば良く、影響解析の処理を更に高速化することができる。
【００５２】
この場合、最初の段階では、全てのソースコード１-1〜１-nについて各変数情報３-1〜３-nを求めて記憶部４に保存することになるが、その後は、変更が加えられたソースコードについてのみ対応する変数情報を生成し、その部分だけ記憶部４の内容を更新すれば良い。なお、この変数情報３-1〜３-nを求める処理自体は、通常の構文解析手法を用いて行うことが可能である。
【００５３】
なお、上記実施形態では、解析部７で影響解析を行う際に、第１のテーブル情報６-1からスタートしてその後第２のテーブル情報６-2と第３のテーブル情報６-3とを繰り返し見ていき、該当する変数や文が存在しなくなった時点で解析処理を終了していたが、第２のテーブル情報６-2と第３のテーブル情報６-3の繰り返し処理の回数があらかじめ定めた回数に達したときに解析処理を終了するようにしても良い。
【００５４】
また、上記実施形態では、影響解析を行う所望の変数を１つだけ指定する例について説明したが、複数の変数を指定しても良い。この場合、指定された複数の変数の影響範囲を１つ１つ順に解析していき、各変数の解析結果を個別のリストとして出力するようにしても良いし、各変数の解析結果を１つのリストに合わせて出力するようにしても良い。１つのリストに合わせて出力する場合、各変数の解析結果のうち重複するものについては排除するようにしても良い。
【００５５】
また、上記実施形態では、ある変数単体の影響解析を行う場合について説明したが、色々な型の変数をいくつか集めて構成した構造体に対しても本発明を適用することが可能である。この場合は、例えば、図６のステップＳ１１で影響解析を行う所望の変数が指定されたときに、その変数が構造体の一部であるかどうかをまず判断し、構造体の一部であれば、その構造体を構成する他の変数も影響解析を行う対象の中に含める。以降は、その構造体を構成する複数の変数に対してステップＳ１２〜Ｓ２０の処理をそれぞれ実行すれば良い。
【００５６】
（本発明の他の実施形態）
以上に説明した本実施形態の影響解析装置は、コンピュータのＣＰＵあるいはＭＰＵ、ＲＡＭ、ＲＯＭなどで構成されるものであり、ＲＡＭやＲＯＭに記憶されたプログラムが動作することによって実現でき、上記プログラムは本発明の実施形態に含まれる。また、コンピュータが上記機能を果たすように動作させるプログラムを、例えばＣＤ−ＲＯＭのような記録媒体に記録し、コンピュータに読み込ませることによって実現できるものであり、上記プログラムを記録した記録媒体は本発明の実施形態に含まれる。上記プログラムを記録する記録媒体としては、ＣＤ−ＲＯＭ以外に、フレキシブルディスク、ハードディスク、磁気テープ、光磁気ディスク、不揮発性メモリカード等を用いることができる。
【００５７】
また、コンピュータが供給されたプログラムを実行することにより上述の実施形態の機能が実現されるだけでなく、そのプログラムがコンピュータにおいて稼働しているＯＳ（オペレーティングシステム）あるいは他のアプリケーションソフト等と共同して上述の実施形態の機能が実現される場合や、供給されたプログラムの処理の全てあるいは一部がコンピュータの機能拡張ボードや機能拡張ユニットにより行われて上述の実施形態の機能が実現される場合も、かかるプログラムは本発明の実施形態に含まれる。
【００５８】
【発明の効果】
本発明は上述したように、解析の対象となる少なくとも１つ以上のソースコードのそれぞれに対応する各変数情報を用いて、代入または参照が行われた変数とその存在場所との対応関係を表す複数のテーブル情報を生成し、その複数のテーブル情報を用いて、変数の代入および参照関係を辿ることによって変数の影響範囲を求めるようにしたので、与えられた複数のソースコードの中でどの組み合わせでリンク単位を構成するかを意識することなく、その中で関係のあるソースコード間で所望の変数の影響範囲を解析することができる。
【００５９】
また、それぞれのソースコード中に含まれる同じ名前の変数は全て同じ変数であるとして解析を行っているので、リンク単位を越えて影響範囲の解析を行うこともできる。さらに、それぞれのソースコード中に含まれる変数の全ての参照がその変数の代入に依存しているものとして解析を行っているので、各ソースコード中の各文に現れる変数の代入、参照情報を求めれば良くなり、短い時間で解析処理を実行することができる。
【００６０】
さらに、本発明の他の特徴によれば、それぞれのソースコードに対応する変数情報を保存する記憶手段を備え、上記変数情報をあらかじめ生成して保存しておくようにしたので、所望の変数の影響解析を行いたいときには、保存されている変数情報を用いてテーブル情報の生成から始めれば良くなり、影響解析の処理にかかる時間を更に短縮化することができる。
【図面の簡単な説明】
【図１】本実施形態による影響解析装置の主要な機能構成を示すブロック図である。
【図２】ソースコードの一部構成例を示す図である。
【図３】図２に示した２つのソースコードを解析対象とした場合に生成される３つのテーブル情報と影響解析の流れを示す図である。
【図４】変数Ａの影響範囲の解析結果リストを示す図である。
【図５】本実施形態による影響解析方法の処理手順を示すフローチャートである。
【図６】本実施形態による影響解析方法の処理手順を示すフローチャートである。
【符号の説明】
１-1〜１-n  ソースコード
２  変数情報生成部
３-1〜３-n  変数情報
４  記憶部
５  テーブル情報生成部
６-1〜６-3  テーブル情報
７  解析部
８  解析結果リスト
【図１】
0004782315.tif 000002
【図２】
0004782315.tif 000003
【図３】
0004782315.tif 000004
【図４】
0004782315.tif 000005
【図５】
0004782315.tif 000006
【図６】
0004782315.tif 000007