(57)【特許請求の範囲】
【請求項１】
ソースプログラムを構文解析する構文解析手段と、実行経路に沿ってプログラム中の文を探索する実行経路探索手段と、或る変数の値を設定する文を識別する設定文識別手段と、利用者の要求に応じてソースプログラムを出力する出力手段を備えると共に、
前記設定文識別手段は、ソースプログラム中の各変数の出現位置に対し、その値を設定することになる箇所を求め、各出現位置に対する値の設定箇所を識別できるような形式でソースプログラムを出力する機能を備えていることを特徴とするプログラム分析装置。
【請求項２】
ソースプログラムを構文解析する構文解析手段と、実行経路に沿ってプログラム中の文を探索する実行経路探索手段と、或る変数の値を設定する文を識別する設定分識別手段と、文中における変数や定数、データファイル間の代入、比較等の関係を抽出する関係生成手段と、その関係を用いて注目する変数やデータファイルから影響を受ける変数を検索する関係検索手段と、利用者の要求に応じて検索結果を出力する出力手段を備えると共に、
前記関係検索手段は、抽出した各関係における変数に対して、その値の設定箇所を求めておき、同一変数であっても値の設定箇所毎に区別して関係を検索する機能を備えていることを特徴とするプログラム分析装置。
【請求項３】
コンピュータを、
ソースプログラムを構文解析する構文解析手段と、
実行経路に沿ってプログラム中の文を探索する実行経路探索手段と、
ソースプログラム中の各変数の出現位置に対し、前記実行経路探索手段で探索した文の中から、その変数の値を設定する文を識別して変数の設定箇所を求め、前記各変数の出現位置に対する値の設定箇所を識別できるような形式でソースプログラムを出力できるように処理を行う設定文識別手段
として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ソースプログラムを修正する際に、該プログラムを分析し理解を助けるために利用されるプログラム分析装置及び記録媒体に関する。近年、既存のプログラムを変更して仕様変更、追加を行うことが広く行われるようになってきている。そのために、既存のプログラムの動作を迅速に理解し、変更による有害な副作用がないことを容易に確認できることが重要である。プログラムには、不十分な参考資料しか付随しない場合が多く、プログラム分析装置は不可欠となっている。
【０００２】
【従来の技術】
図１４は従来例の説明図であり、Ａ図は従来例１、Ｂ図は従来例２を示す。以下、図１４に基づいて従来例を説明する。
【０００３】
§１：従来例１の説明
図１４のＡ図に示したように、従来例１のプログラム分析装置は、装置本体１と、該装置本体１に接続された表示部３（ディスプレイ装置）を備えると共に、該装置本体１内に、分析対象のソースプログラム４の解析を行う構文解析部２等を備えている。装置本体１は、利用者の指示を入力したり、表示部３に対し、ソースプログラム４や構文解析結果のデータ等の表示を行う際の制御等を行うものである。
【０００４】
このプログラム分析装置でソースプログラム４の分析を行う場合、装置本体１の制御に基づき、構文解析部２がソースプログラム４の構文解析を行ない、その結果を表示部３の画面に表示する。このプログラム分析装置は、ソースプログラム４中の指定された変数の定義情報を参照したり、その変数が使用されている箇所全てを一覧する機能を持っている。
【０００５】
§２：従来例２の説明
図１４のＢ図に示したように、従来例２のプログラム分析装置は、装置本体１と、該装置本体１に接続された表示部３を備えると共に、前記装置本体１内に、分析対象のソースプログラム４の解析を行う構文解析部２と、関係生成部５と、関係検索部６等を備えている。前記装置本体１は、利用者の指示を入力したり、表示部３に対し、ソースプログラムや構文解析結果のデータ等の表示を行う際の制御等を行うものである。
【０００６】
関係生成部５は、ソースプログラム４の各文について、その文が代入や比較など、変数、定数、データファイル間の関係を使っている場合、関係の種別と共に、それら変数、定数、データファイルの情報を、変数はその値の設定箇所の情報と共に抽出し、関係データ７としてワーク用メモリ等に格納する機能を備えている。
【０００７】
関係データ７は、複数のプログラムについて、関係生成部５が生成した関係データである。関係検索部６は、利用者が指示した変数を起点として、その変数が持っている関係を使って、影響する他の変数、定数、データファイルの検索を行うものである。波及抑止変数データ８及び設定箇所無視変数データ９は、前記検索に先立って利用者が指定するデータである。
【０００８】
この従来例２のプログラム分析装置では、関係生成部５により、変数やデータファイル間の値の代入などの関係を抽出し、関係検索部６により、大量のプログラムの中から、或る変数に影響を受ける部分を効率良く検索する機能を持ったものもある。これらの機能により、注目している変数の情報や、その影響範囲を知ることができるようになっている。
【０００９】
【発明が解決しようとする課題】
前記のような従来のものにおいては、次のような課題があった。
【００１０】
ソースプログラムを修正する場合、修正しようとする箇所における変数の値がどこで参照されているのかを知ることは重要である。従来のプログラム分析装置では、この場所を簡単に知ることができず、利用者はその都度問い合わせを行うなどして確認する必要があった。
【００１１】
また、代入関係などを使って変数の影響を受ける部分を検索する際には、複数の用途のために使い回される作業変数などの影響で、本来は無関係であるはずの変数まで検索され、結果の精度を損なう場合があった。更に、精度を高めるには、実際のプログラムの実行経路に沿って逐一分析を行って行く必要があったが、この方法では、大量のプログラムを一括して分析することができず、作業の効率を著しく損なう欠点があった。
【００１２】
本発明は、このような従来の課題を解決するため、変数の各出現位置に対して、その直前に実行される値の設定箇所を求めておき、この設定箇所情報を変数の識別に利用する。つまり、プログラム表示の際に、各変数の値の設定箇所を識別できるようにし、また、変数間の代入関係を使用する際の影響の検索においても、値の設定箇所を考慮して関係を検索することで、値のつながりのない箇所への影響を出さないようにして、作業効率を向上させると共に、多くのプログラムを組み合わせた大規模なシステムでも高い精度で効率良く分析できるようにすることを目的とする。
【００１３】
【課題を解決するための手段】
図１は本発明の原理説明図である。本発明は前記の目的を達成するため、次のように構成した。
【００１４】
(1) ：プログラム分析装置において、ソースプログラム４を構文解析する構文解析手段２Ａと、実行経路に沿ってプログラム中の文を探索する実行経路探索手段１１Ａと、或る変数の値を設定する文を識別する設定文識別手段１２Ａと、利用者の要求に応じてソースプログラムを出力する出力手段（表示部３、プリンタ等）１３を備えると共に、前記設定文識別手段１２Ａは、ソースプログラム４中の各変数の出現位置に対し、その値を設定することになる箇所を求め、各出現位置に対する値の設定箇所を識別できるような形式でソースプログラム４を出力する（例えば、表示部３で表示する）機能を備えている。
【００１５】
(2) ：プログラム分析装置において、ソースプログラム４を構文解析する構文解析手段２Ａと、実行経路に沿ってプログラム中の文を探索する実行経路探索手段１１Ａと、或る変数の値を設定する文を識別する設定文識別手段１２Ａと、文中における変数や定数、データファイル間の代入、比較等の関係を抽出する関係生成手段５Ａと、その関係を用いて注目する変数やデータファイルから影響を受ける変数を検索する関係検索手段６Ａと、利用者の要求に応じて検索結果を出力する出力手段１３を備えると共に、前記関係検索手段６Ａは、抽出した各関係における変数に対して、その値の設定箇所を求めておき、同一変数であっても値の設定箇所毎に区別して関係を検索する機能を備えている。
【００１６】
(3) ：コンピュータを、ソースプログラムを構文解析する構文解析手段と、実行経路に沿ってプログラム中の文を探索する実行経路探索手段と、ソースプログラム中の各変数の出現位置に対し、前記実行経路探索手段で探索した文の中から、その変数の値を設定する文を識別して変数の設定箇所を求め、前記各変数の出現位置に対する値の設定箇所を識別できるような形式でソースプログラムを出力できるように処理を行う設定文識別手段として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【００１７】
（作用）
前記構成に基づく本発明の作用を、図１に基づいて説明する。
【００１８】
(a) ：前記(1) では、構文解析手段２Ａはソースプログラム４を構文解析し、実行経路探索手段１１Ａは実行経路に沿ってプログラム中の文を探索し、設定文識別手段１２Ａは或る変数の値を設定する文を識別し、出力手段１３は利用者の要求に応じてソースプログラム４を出力する。そして、前記設定文識別手段１２Ａは、ソースプログラム４中の各変数の出現位置に対し、その値を設定することになる箇所を求め、各出現位置に対する値の設定箇所を識別できるような形式でソースプログラム４を出力する（例えば、表示部３で表示する）。
【００１９】
このようにすれば、変数の出現箇所についてその値の設定箇所が容易に識別できるため、何度も問い合わせを行う必要がなく、自然な形で注目箇所の影響範囲を知ることができる。従って、プログラム分析処理が効率良く行える。
【００２０】
(b) ：前記(2) では、構文解析手段２Ａはソースプログラム４を構文解析し、実行経路探索手段１１Ａは実行経路に沿ってプログラム中の文を探索し、設定文識別手段１２Ａは或る変数の値を設定する文を識別し、関係生成手段５Ａは文中における変数や定数、データファイル間の代入、比較等の関係を抽出し、出力手段１３は利用者の要求に応じて検索結果を出力する（例えば、表示する）。
【００２１】
そして、関係検索手段６Ａは、抽出した各関係における変数に対して、その値の設定箇所を求めておき、同一変数であっても値の設定箇所毎に区別して関係を検索する。
【００２２】
このようにすれば、変数の出現箇所についてその値の設定箇所が容易に識別できるため、何度も問い合わせを行う必要がなく、自然な形で注目箇所の影響範囲を知ることができる。また、変数やファイルの代入などの関係を使った変数の影響の分析においても、作業変数による分析精度の劣化を避けることができるから、従来、困難だった、多くのプログラムを組み合わせた大規模なシステムでも、高い精度で効率良く分析することができる。
【００２３】
(c) ：前記(3) では、コンピュータが、前記記録媒体からプログラムを読み出して実行することにより、ソースプログラム４を構文解析する手順と、実行経路に沿ってプログラム中の文を探索する手順と、或る変数の値を設定する文を識別する手順と、利用者の要求に応じてソースプログラム４を出力する手順と、ソースプログラム４中の各変数の出現位置に対し、その値を設定することになる箇所を求め、各出現位置に対する値の設定箇所を識別できるような形式でソースプログラム４を出力する手順とを実行する。
【００２４】
このようにすれば、変数の出現箇所についてその値の設定箇所が容易に識別できるため、何度も問い合わせを行う必要がなく、自然な形で注目箇所の影響範囲を知ることができる。従って、プログラム分析処理が効率良く行える。
【００２５】
【発明の実施の形態】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
【００２６】
§１：装置例の説明・・・図２参照
図２は具体的な装置例であり、Ａ図は装置構成例、Ｂ図は磁気ディスクの説明図である。前記プログラム分析装置は、パーソナルコンピュータ、ワークステーション等の任意のコンピュータにより実現する。
【００２７】
この例では、プログラム分析装置を、装置本体（コンピュータ本体）１と、該装置本体１に接続された表示部（ディスプレイ装置）３、キーボード、マウス等の入力装置２１、光ディスクドライブやフロッピィディスクドライブ等のリムーバブルディスクドライブ（ＲＤＤ）２２、磁気ディスク装置（ＭＤＤ）２３、プリンタ２４等により構成する。
【００２８】
そして、装置本体１には、ＣＰＵ２５と、該ＣＰＵ２５にバスを介して接続されたＲＯＭ２６、メモリ２７、インターフェイス制御部（Ｉ／Ｆ制御部）２８、通信制御部２９等を設ける。
【００２９】
そして、前記磁気ディスク装置２３の磁気ディスク（記録媒体）には、図２のＢ図に示したような領域を設定し、プログラム等を格納する。この場合、例えば、前記領域は、ソースプログラムを格納するためのソースプログラム格納領域３２と、処理結果データを格納するための処理結果データ格納領域３３と、処理プログラムを格納するための処理プログラム格納領域３４と、その他のデータを格納するためのその他データ格納領域３５等を設ける。
【００３０】
なお、以下に説明するプログラム分析処理用のプログラムは、前記処理プログラム格納領域３４に格納しておき、ＣＰＵ２５がこのプログラムを読み出して実行することによりプログラム分析処理を実現する。
【００３１】
しかし、本願発明は、このような例に限らず、例えば、前記磁気ディスク３１に、次のようにしてプログラムを格納し、このプログラムをＣＰＵ２５が実行することで前記プログラム分析処理を行うことも可能である。
【００３２】
▲１▼：他の装置で作成されたリムーバブルディスクに格納されているプログラム（他の装置で作成したプログラムデータ）を、リムーバブルディスクドライブ（ＲＤＤ）２２により読み取り、磁気ディスク装置２３の磁気ディスク３１に格納する。
【００３３】
▲２▼：ＬＡＮ等の通信回線を介して他の装置から伝送されたプログラム等のデータを、通信制御部２９を介して受信し、そのデータを磁気ディスク装置２３の磁気ディスク３１（記録媒体）に格納する。
【００３４】
§２：プログラム分析装置の構成と機能等の説明・・・図３参照
図３はプログラム分析装置の説明図であり、Ａ図は装置例１、Ｂ図は装置例２を示す。以下、図３に基づいて、プログラム分析装置の構成と機能等を説明する。
【００３５】
(1) ：装置例１の説明
図３のＡ図に示したように、装置例１のプログラム分析装置は、装置本体１と、該装置本体１に接続された表示部３を備えると共に、該装置本体１内に、分析対象のソースプログラム４の構文解析を行う構文解析部２と、実行経路探索部１１と、設定文識別部１２等を備えている。装置本体１（図２の装置本体１に対応する）は、利用者（以下「ユーザ」と記す）の指示を入力したり、表示部３に対しソースプログラム４や構文解析結果のデータ等の表示を行う際の制御等を行うものである。この場合、前記実行経路探索部１１と設定文識別部１２は一体となって処理を行う。
【００３６】
すなわち、装置例１のプログラム分析装置は、ソースプログラム４を構文解析する構文解析部２と、実行経路に沿ってプログラム中の文を探索する実行経路探索部１１と、或る変数の値を設定する文を識別する設定文識別部１２と、利用者の要求に応じてソースプログラムを出力する表示部３を備えている。そして、設定文識別部１２は、ソースプログラム４中の各変数の出現位置に対し、その値を設定することになる箇所を求め、各出現位置に対する値の設定箇所を識別できるような形式でソースプログラム４を出力する（例えば、表示部３で表示する）機能を備えている。
【００３７】
また、設定文識別部１２は、利用者が指定した特定の変数の特定の使用箇所について、それと同じ値の設定箇所となる使用箇所のみ識別できるような形式でソースプログラムを出力する機能と、ソースプログラム４中の各変数の各出現位置に対する値の設定箇所を識別できる情報を、ソースプログラム４にコメント文の形式で挿入する機能を備えている。なお、前記構文解析部２、実行経路探索部１１、設定文識別部１２は、それぞれ図１の構文解析手段２Ａ、実行経路探索手段１１Ａ、設定文識別手段１２Ａに対応している。
【００３８】
(2) ：装置例２の説明
図３のＢ図に示したように、装置例２のプログラム分析装置は、装置本体１と、該装置本体１に接続された表示部３を備えると共に、前記装置本体１内に、分析対象のソースプログラム４の解析を行う構文解析部２と、実行経路探索部１１と、設定文識別部１２と、関係生成部５と、関係検索部６等を備えている。
【００３９】
装置本体１は、利用者の指示を入力したり、表示部３に対しソースプログラム４や構文解析結果のデータ等の表示を行う際の制御等を行うものである。この場合、実行経路探索部１１と設定文識別部１２は一体となって処理を行う。
【００４０】
関係生成部５は、ソースプログラム４の各文についてその文が代入や比較など、変数、定数、データファイル間の関係を使っている場合、関係の種別と共に、それら変数、定数、データファイルの情報を、変数はその値の設定箇所の情報と共に抽出し、関係データ７としてワーク用メモリ等に格納するものである。
【００４１】
関係データ７は、複数のプログラムについて関係生成部５が生成した関係データである。関係検索部６は、ユーザが指示した変数を起点として、その変数が持っている関係を使って、影響する他の変数、定数、データファイルの検索を行うものである。波及抑止変数データ８、及び設定箇所無視変数データ９は、前記検索に先立ってユーザが指定するデータである。
【００４２】
装置例２のプログラム分析装置では、関係生成部５により、変数やデータファイル間の値の代入などの関係を抽出し、関係検索部６により、大量のプログラムの中から、或る変数に影響を受ける部分を効率良く検索する機能を持ったものもある。これらの機能により、注目している変数の情報や、その影響範囲を知ることができる。
【００４３】
すなわち、装置例２のプログラム分析装置は、ソースプログラム４を構文解析する構文解析部２と、実行経路に沿ってプログラム中の文を探索する実行経路探索部１１と、或る変数の値を設定する文を識別する設定文識別部１２と、文中における変数や定数、データファイル間の代入、比較等の関係を抽出する関係生成部５と、その関係を用いて注目する変数やデータファイルから影響を受ける変数を検索する関係検索部６と、利用者の要求に応じて検索結果を表示する表示部３を備えている。
【００４４】
そして、関係検索部６は、抽出した各関係における変数に対して、その値の設定箇所を求めておき、同一変数であっても値の設定箇所毎に区別して関係を検索する機能を備えている。また、予め検索が不要と判明している変数（波及抑止変数データ８）を設定箇所単位でユーザが指定した場合、関係検索部６は、検索の際に、その設定箇所が持つ関係は検索しない機能を備えている。
【００４５】
更に、設定箇所単位で区別せずに検索してよいと判明している変数（設定箇所無視変数データ９）をユーザが指定した場合、関係検索部６は、検索の際に、その変数は設定箇所で区別せずに検索する機能と、検索結果の一部として、値の設定箇所が異なるために検索しなかった関係を持つ変数を出力する機能と、作業変数として複数の用途で使われる可能性のある変数をリストアップする機能を備えている。
【００４６】
なお、前記構文解析部２、実行経路探索部１１、設定文識別部１２、関係生成部５、関係検索部６は、それぞれ図１の構文解析手段２Ａ、実行経路探索手段１１Ａ、設定文識別手段１２Ａ、関係生成手段５Ａ、関係検索手段６Ａに対応している。
【００４７】
§３：処理例の説明
以下、プログラム分析装置の処理例について詳細に説明する。
【００４８】
（例１の説明）
(1) ：例１の処理の説明・・・図４参照
図４は例１の処理フローチャートである。以下、図４に基づいて例１の処理を説明する。なお、Ｓ１〜Ｓ７は各処理ステップを示す。
【００４９】
例１では、先ず、構文解析部２は、ソースファイルのソースプログラム４から構文要素を読み込み（Ｓ１）、読み終えたかどうかを判断する（Ｓ２）。その結果、読み終えていなければ、前記読み込んだ構文要素に対し構文解析を行う（Ｓ３）。そして、設定文識別部１２は、前記構文解析の結果が変数を示す構文要素かどうかを判断する（Ｓ４）。
【００５０】
もし、変数を示す構文要素であると判断したら、実行経路探索部１１は、実行経路を遡って変数の設定箇所を求める（Ｓ６）。そして、設定文識別部１２は、変数名に設定箇所を示す情報を付加して表示部３へ送り、該表示部３の画面に表示し（Ｓ７）、前記Ｓ１の処理へ戻る。
【００５１】
また、設定文識別部１２は、前記Ｓ４の処理で変数を示す構文要素でないと判断したら、前記解析結果の情報を表示部３へ送り、該表示部３の画面にそのまま表示し（Ｓ５）、前記Ｓ１の処理へ戻る。また、前記Ｓ２の処理で、全部読み終えたと判断した場合（分析対象のソースプログラム４を全て読み終えた場合）は、この処理を終了する。
【００５２】
(2) ：例１のデータの説明・・・図５参照
図５は例１のデータ例であり、Ａ図は例１の入力となるプログラム（ソースプログラム）であり、Ｂ図は例１の出力例である。前記例１の処理におけるデータ例は次の通りである。
【００５３】
▲１▼：ソースプログラム例
入力となるプログラム（ソースプログラム４）としては、例えば、図５のＡ図のようなプログラムである。このプログラム例において、行番号が１０、２０、３０の「ｉｎｔ  ｘ＝１」、「ｉｎｔ  ｙ，ｚ」、「ｉｎｔ  ａ＝２」は、それぞれ変数宣言である。この場合、「ｉｎｔ」は変数の型を表しており、「ｉｎｔｘ＝１」は変数ｘがあり、その値は１であることを示し、「ｉｎｔ  ｙ，ｚ」は、変数ｙ，ｚがあることを示し、「ｉｎｔ  ａ＝２」は変数ａがあり、その値は２であることを示す。
【００５４】
行番号４０の「ｙ＝ｘ」はｘの値をｙに代入することを示し、行番号５０の「ｘ＝３」は３という値をｘに代入することを示す。行番号６０の「ｉｆ（ｙ＞１）」は、もし、ｙの値が１より大きいなら」ということを示し、行番号７０の「ｘ＝ａ」は、もし、ｙの値が１より大きいなら、ｘにａを代入し、「行番号８０の「ｚ＝ｘ」は、ｘをｚに代入することを示す。以上のようなプログラムをソースプログラム４として処理を行う。
【００５５】
▲２▼：出力例
前記図５のＡ図に示したソースプログラム４を入力して処理を行ない、例えば、図５のＢ図のようなデータを出力する。この場合、＠印は、設定する位置を識別するための識別情報（図４のＳ７の処理で付加する情報）である。例えば、行番号１０の「ｉｎｔ  ｘ＠１０＝１」は、「ｘは行番号＝１０で値が代入される」ことを示し、行番号２０の「ｉｎｔ  ｙ＠２０，ｚ＠２０；」は、「ｙは行番号＝２０で値が代入され、ｚは行番号＝２０で値が代入される」ことを示している。
【００５６】
また、行番号＝３０の「ｉｎｔ  ａ＠３０＝２」は、「ａは行番号＝３０で値＝２が代入される」ことを示し、行番号＝４０の「ｙ＠４０＝ｘ＠１０」は、「行番号＝１０で代入されるｘの値を、行番号＝４０で代入されるｙの値に代入する」ことを示している。
【００５７】
以下同様にして、行番号８０の「ｚ＠８０＝ｘ＠５０ｏｒ７０」は、行番号＝５０で代入されるｘの値、又は、行番号＝７０で代入されるｘの値を、行番号＝８０で代入されるｚの値に代入することを示す。このように、変数名に設定箇所を示す情報として＠印を付加して出力（表示、印刷等）することにより、設定箇所が容易に識別できるため、何度も問い合わせを行う必要がなく、自然な形で注目箇所の影響範囲を知ることができる。従って、プログラム分析処理が効率良く行える。
【００５８】
（例２の説明）
(1) ：例２の処理概要
例２は、前記例１において、ユーザが指定した変数についてだけ行う処理例である。この場合、表示前にユーザに変数の出現箇所を選択させ、それと同じ設定箇所となる出現箇所のみを、他と区別できる方法で表示する。
【００５９】
(2) ：例２の処理の説明・・・図６参照
図６は例２の処理フローチャートである。以下、図６に基づいて例２の処理を説明する。なお、Ｓ１１〜Ｓ１９は各処理ステップを示す。
【００６０】
例２では、先ず、ユーザがキーボード、或いはマウス等の操作により特定の変数を指定する。この時、構文解析部２が前記指定した変数を検出すると（Ｓ１１）、ソースファイルのソースプログラム４から、構文要素を読み込み（Ｓ１２）、読み終えたかどうかを判断する（Ｓ１３）。
【００６１】
その結果、読み終えていなければ、構文解析部２は、前記読み込んだ構文要素に対し構文解析を行う（Ｓ１４）。そして、設定文識別部１２は前記構文解析の結果が変数を示す構文要素であるかどうかを判断する（Ｓ１５）。
【００６２】
もし、変数を示す構文要素であると判断したら、実行経路探索部１１が実行経路を遡って変数の設定箇所を求める（Ｓ１６）。そして、該当箇所がユーザの指定した変数かどうかを判断し（Ｓ１７）、ユーザの指定した箇所であれば、変数名に設定箇所を示す情報を付加して表示し（Ｓ１８）、前記Ｓ１２の処理へ戻る。
【００６３】
しかし、前記Ｓ１７の処理で、該当箇所がユーザの指定した変数でなければ、そのまま表示し（Ｓ１９）、前記Ｓ１２の処理へ戻る。このようにして処理を行ない、前記Ｓ１３の処理で全部読み終えたと判断した場合は処理を終了する。
【００６４】
(3) ：出力例
図７のＡ図は例２の出力例である。例２では、前記処理により、例えば、図７のＡ図に示すようなデータを出力する。この例では、注目している変数を見やすくするため、該当する部分をアンダーラインにより強調している。
【００６５】
例えば、行番号＝１０では出力が「ｉｎｔ  ｘ＝１」となっており、ｘがアンダーラインにより強調されている。また、行番号＝４０では出力が「ｙ＝ｘ」となっており、ｘがアンダーラインにより強調されている。このようにして、アンダーラインにより注目している変数を見やすくする。
【００６６】
このように、例２では、設定文識別部１２が、ユーザの指定した特定の変数の特定の使用箇所について、それと同じ値の設定箇所となる使用箇所のみ識別できるように、例えば、アンダーラインを付加した形式でソースプログラム４を出力する。このようにすれば、注目している変数のみを見易くすることができる。従って、プログラム分析処理が効率良く行える。
【００６７】
（例３の説明）
例３は、前記例１において、ソースプログラムを、装置本体側の表示部３に表示する代わりに、コメントの形式で設定箇所の情報を付加してファイルに出力するものである。
【００６８】
この場合の出力例を図７のＢ図に示す。例３の出力例において、例えば、行番号＝４０では、出力「ｙ＝ｘ」に対し、「／＊  ｘ＠１０  ＊／」のように、コメントの形式で設定箇所の情報を付加してファイルに出力する。この場合、前記設定箇所の情報である「／＊  ｘ＠１０  ＊／」は、「この行で使われている変数ｘの値は、行番号＝１０で代入されている。」という内容のコメント文の形式で挿入されたものである。このようにコメントの形式で設定箇所の情報を付加してファイルに出力すれば、出力をそのままプログラムとして使用できる、という利点がある。
【００６９】
（例４の説明）
例４で使用する装置は、図３のＢ図に示した構成の装置である。例４では、変数、定数、データファイル間の関係を用いて、変数の影響を検索する際に、影響する変数を、値の設定箇所単位で求める。
【００７０】
(1) ：関係データ作成時の処理の説明・・・図８参照
図８は例４の関係データ作成時の処理フローチャートである。以下、図８に基づいて、例４の関係データ作成時の処理を説明する。なお、Ｓ２１〜Ｓ３０は各処理ステップを示す。
【００７１】
構文解析部２は、ソースファイルのソースプログラム４から構文要素を読み込み（Ｓ２１）、データを読み終えたかどうかを判断し（Ｓ２２）、読み終えてなければ、前記読み出した構文要素について構文解析を行う（Ｓ２３）。そして、構文解析を行った結果が、変数初期値の宣言なら、初期値の関係を作成し（Ｓ２４）、代入文なら、代入先と代入元の値の設定箇所との関係を作成し（Ｓ２５）、比較文なら、比較値同士の値の設定箇所の関係を作成し（Ｓ２６）、ファイル入力なら、ファイルと受け取り変数の関係を作成する（Ｓ２７）。
【００７２】
更に、ファイル出力なら、ファイルと書き込み値の設定箇所との関係を作成し（Ｓ２８）、サブルーチンコールなら、引数の値の設定箇所と呼出先の仮引数の関係を作成する（Ｓ２９）。そして、前記作成した関係データを出力し（Ｓ３０）、前記Ｓ２１の処理へ戻る。このようにして処理を行ない、前記Ｓ２２の処理で、全て読みおえたと判断したら、この処理を終了する。
【００７３】
(2) ：関係データ検索時の処理の説明・・・図９参照
図９は例４の関係データ検索時の処理フローチャートである。以下、図９に基づいて、例４の関係データ検索時の処理を説明する。なお、Ｓ３１〜Ｓ３６は各処理ステップを示す。
【００７４】
関係データ検索時には、先ず、ユーザに起点変数を指定させる（Ｓ３１）。その後、関係検索部６は、前記起点変数の設定箇所を全て検索リストに入れて（Ｓ３２）、関係データ７に、検索リストにある未検索設定箇所があるかどうかを判断し（Ｓ３３）、未検索設定箇所が有れば、その関係先が未だ未検索かどうかを判断する（Ｓ３４）。
【００７５】
その結果、その関係先が未だ未検索ならば、検索リストに入れて（Ｓ３５）、前記Ｓ３３の処理へ戻る。また、前記Ｓ３４の処理で、その関係先が未検索でなければ、前記Ｓ３３の処理へ戻る。更に、前記Ｓ３３の処理で、検索リストに未検索設定箇所がなければ、検索リストの設定箇所を出力して（Ｓ３６）、この処理を終了する。
【００７６】
(3) ：ソースプログラム例
図１０はソースプログラム例１、図１１はソースプログラム例２、図１２は作成された関係データ例、図１３は出力例を示す。
【００７７】
前記例４の処理において、検索の入力となるソースプログラム４の例は、例えば、図１０、１１に示したようなものであり、このソースプログラム４から作成された関係データの例は図１２に示した通りである。また、検索結果の出力は、例えば、図１３に示した通りである。
【００７８】
すなわち、図１２の関係データは、図８のＳ２４〜Ｓ２９の処理により作成された関係データ例であり、代入先と代入元のデータが関係しているデータとして並んでいる。また、図１３の出力例は、図９の処理による出力例である。
【００７９】
図１３では、波及数（波及レベル）とユーザが指定した変数を含むデータがある。例えば、変数「ＹＥＡＲ」はユーザが指定した変数であり、その波及数は０（波及しない）であり、関係の種類は「起点」であり、プログラム名はＰＧ２（図１１に示したプログラム）であり、プログラムの行数は１３０行である。その内容は、前記変数「ＹＥＡＲ」は、ＰＧ２の１３０行にある起点文によって影響を受け、波及数は０であることを示す。
【００８０】
また、変数「’００’」はユーザが指定した変数であり、その波及数は１であり、関係の種類は「比較」であり、プログラム名はＰＧ２であり、プログラムの行数は１３０行である。その内容は、前記変数「’００’」は、ＰＧ２の１３０行にある比較文によって影響を受け、波及数は１であることを示す。
【００８１】
また、変数「１００００」はユーザが指定した変数であり、その波及数は１であり、関係の種類は「代入」であり、プログラム名はＰＧ２であり、プログラムの行数は１２０行である。その内容は、前記変数「１００００」は、ＰＧ２の１２０行にある「代入」によって影響を受け、波及数は１であることを示す。
【００８２】
以下、同様にして、変数が「ＮＹＵＫＩＮ−ＨＩ＠１０」はユーザが指定した変数であり、その波及数は４（波及レベル＝４）であり、関係の種類は「代入」であり、プログラム名はＰＧ１（図１０に示したソースプログラム）であり、プログラムの行数は５０行である。その内容は、前記変数「ＮＹＵＫＩＮ−ＨＩ＠１０」は、ＰＧ１の５０行にある「代入」文によって影響を受け、波及数は４であることを示す。
【００８３】
このように、例４では、変数の出現箇所についてその値の設定箇所が容易に識別できるため、何度も問い合わせを行う必要がなく、自然な形で注目箇所の影響範囲を知ることができる。また、変数やファイルの代入などの関係を使った変数の影響の分析においても、作業変数による分析精度の劣化を避けることができるから、従来、困難だった、多くのプログラムを組み合わせた大規模なシステムでも、高い精度で効率良く分析することができる。
【００８４】
（例５の説明）
例５は、前記例４の処理を行う際に、予めユーザに指定されている設定箇所の変数については、その関係を無効にすることで、不要な検索を行わないようにする例である。
【００８５】
すなわち、例５では、ユーザは、波及抑止変数指定手段（キーボード、マウス等）により予め検索が不要と判明している変数（波及抑止変数データ８）を設定箇所単位で指定する。このようにすると、関係検索手段６Ａは、検索の際に、その設定箇所が持つ関係は検索しない。このようにすれば、余計なデータが出力されないから、検索結果が簡素化され、分析処理が効率良くできる。
【００８６】
（例６の説明）
例６は、前記例４の処理を行う際に、予めユーザに指定されている変数については、設定箇所を区別せずに、関係を検索することで、より多くの検索を行うようにするものである。
【００８７】
すなわち、例６では、ユーザが設定箇所無視変数指定手段（キーボード、マウス等）により、設定箇所単位で区別せずに検索してよいと判明している変数（設定箇所無視変数データ９）を指定する。このようにすれば、関係検索部６は、検索の際に、その変数は設定箇所で区別せずに検索する。このようにすれば、例えば、細切れで値が設定されている変数の影響を出したい場合に有利である。
【００８８】
（例７の説明）
例７は、前記例４の処理を行う際に、値の設定箇所が異なるために検索しなかった関係がある変数を保存しておき、その一覧を出力（例えば、表示）することで、複数の用途で使われている可能性がある変数を見つけ出すものである。図１３の出力例では、ＰＧ１の変数ｘがそれに該当する。
【００８９】
このように、例７では、関係検索部６は、検索結果の一部として、値の設定箇所が異なるために検索しなかった関係を持つ変数を出力すると共に、作業変数として複数の用途で使われる可能性のある変数をリストアップする。このようにすれば、変数の見分けを付けやすいため、分析の精度が向上する。
【００９０】
【発明の効果】
以上説明したように、本発明によれば次のような効果がある。
【００９１】
(1) ：本発明は、変数の各出現位置に対して、その直前に実行される値の設定箇所を求めておき、この設定箇所情報を変数の識別に利用する。つまり、プログラム表示の際に、各変数の値の設定箇所を識別できるようにし、また、変数間の代入関係を使用する際の影響の検索においても、値の設定箇所を考慮して関係を検索することで、値のつながりのない箇所への影響を出さないようにして、作業効率を向上させることができる。また、多くのプログラムを組み合わせた大規模なシステムでも高い精度で分析できる。
【００９２】
(2) ：構文解析手段はソースプログラムを構文解析し、実行経路探索手段は実行経路に沿ってプログラム中の文を探索し、設定文識別手段は或る変数の値を設定する文を識別し、出力手段は利用者の要求に応じてソースプログラムを出力する。そして、設定文識別手段は、ソースプログラム中の各変数の出現位置に対し、その値を設定することになる箇所を求め、各出現位置に対する値の設定箇所を識別できるような形式でソースプログラムを出力する。
【００９３】
このようにすれば、変数の出現箇所についてその値の設定箇所が容易に識別できるため、何度も問い合わせを行う必要がなく、自然な形で注目箇所の影響範囲を知ることができる。従って、プログラム分析処理が効率良く行える。
【００９４】
(3) ：構文解析手段はソースプログラムを構文解析し、実行経路探索手段は実行経路に沿ってプログラム中の文を探索し、設定文識別手段は或る変数の値を設定する文を識別し、関係生成手段は文中における変数や定数、データファイル間の代入、比較等の関係を抽出し、出力手段は利用者の要求に応じて検索結果を出力する（例えば、表示する）。
【００９５】
そして、関係検索手段は、抽出した各関係における変数に対して、その値の設定箇所を求めておき、同一変数であっても値の設定箇所毎に区別して関係を検索する。
【００９６】
このようにすれば、変数の出現箇所についてその値の設定箇所が容易に識別できるため、何度も問い合わせを行う必要がなく、自然な形で注目箇所の影響範囲を知ることができる。また、変数やファイルの代入などの関係を使った変数の影響の分析においても、作業変数による分析精度の劣化を避けることができるから、従来、困難だった、多くのプログラムを組み合わせた大規模なシステムでも、高い精度で効率良く分析することができる。
【００９７】
(4) ：コンピュータが記録媒体からプログラムを読み出して実行することにより、ソースプログラムを構文解析する構文解析手段と、実行経路に沿ってプログラム中の文を探索する実行経路探索手段と、ソースプログラム中の各変数の出現位置に対し、前記実行経路探索手段で探索した文の中から、その変数の値を設定する文を識別して変数の設定箇所を求め、前記各変数の出現位置に対する値の設定箇所を識別できるような形式でソースプログラムを出力できるように処理を行う設定文識別手段として機能させる。
【００９８】
このようにすれば、変数の出現箇所についてその値の設定箇所が容易に識別できるため、何度も問い合わせを行う必要がなく、自然な形で注目箇所の影響範囲を知ることができる。従って、プログラム分析処理が効率良く行える。
【００９９】
以上の説明に関して、更に以下の項を開示する。
【０１００】
▲１▼：請求項１のプログラム分析装置において、設定文識別手段１２Ａは、利用者が指定した特定の変数の特定の使用箇所について、それと同じ値の設定箇所となる使用箇所のみ識別できるような形式でソースプログラム４を出力する機能を備えていることを特徴とする。このようにすれば、注目している変数のみを見易くすることができる。従って、プログラム分析処理が効率良く行える。
【０１０１】
▲２▼：請求項１のプログラム分析装置において、ソースプログラム４中の各変数の各出現位置に対する値の設定箇所を識別できる情報を、ソースプログラム４にコメント文の形式で挿入する情報挿入処理手段（設定文識別手段１２Ａの一部）を備えている。この場合、出力されたプログラムはそのままプログラムとして使用することができる。従って、プログラム分析処理が効率良く行える。
【０１０２】
▲３▼：請求項４のプログラム分析装置において、予め検索が不要と判明している変数（波及抑止変数データ８）を設定箇所単位で利用者が指定する波及抑止変数指定手段（キーボード、マウス等）を備え、前記関係検索手段６Ａは、検索の際に、その設定箇所が持つ関係は検索しない機能を備えている。このようにすれば、余計なデータが出力されないから、検索結果が簡素化され、分析処理が効率良くできる。
【０１０３】
▲４▼：前記請求項４のプログラム分析装置において、設定箇所単位で区別せずに検索してよいと判明している変数（設定箇所無視変数データ９）を利用者が指定する設定箇所無視変数指定手段（キーボード、マウス等）を備え、前記関係検索手段６Ａは、検索の際に、その変数は設定箇所で区別せずに検索する機能を備えている。このようにすれば、例えば、細切れで値が設定されている変数の影響を出したい場合に有利である。
【０１０４】
▲５▼：請求項４のプログラム分析装置において、前記関係検索手段６Ａは、検索結果の一部として、値の設定箇所が異なるために検索しなかった関係を持つ変数を出力する機能と、作業変数として複数の用途で使われる可能性のある変数をリストアップする機能を備えている。このようにすれば、変数の見分けを付けやすいため、分析の精度が向上する。
【図面の簡単な説明】
【図１】本発明の原理説明図である。
【図２】本発明の実施の形態における具体的な装置例である。
【図３】本発明の実施の形態におけるプログラム分析装置の説明図である。
【図４】本発明の実施の形態における例１の処理フローチャートである。
【図５】本発明の実施の形態における例１のデータ例である。
【図６】本発明の実施の形態における例２の処理フローチャートである。
【図７】本発明の実施の形態における例２、例３の出力例である。
【図８】本発明の実施の形態における例４の関係データ作成時の処理フローチャートである。
【図９】本発明の実施の形態における例４の関係データ検索時の処理フローチャートである。
【図１０】本発明の実施の形態におけるソースプログラム例１である。
【図１１】本発明の実施の形態におけるソースプログラム例２である。
【図１２】本発明の実施の形態における作成された関係データ例である。
【図１３】本発明の実施の形態における出力例である。
【図１４】従来例の説明図である。
【符号の説明】
１  装置本体
２  構文解析部
３  表示部
４  ソースプログラム
５  関係生成部
６  関係検索部
７  関係データ
８  波及抑止変数データ
９  設定箇所無視変数データ
１１  実行経路探索部
１２  設定文識別部
１３  出力手段
２１  入力装置
２２  リムーバブルディスクドライブ（ＲＤＤ）
２３  磁気ディスク装置（ＭＤＤ）
２４  プリンタ
２５  ＣＰＵ
２６  ＲＯＭ
２７  メモリ
２８  Ｉ／Ｆ制御部（インターフェイス制御部）
２９  通信制御部
３１  磁気ディスク
３２  ソースプログラム格納領域
３３  処理結果データ格納領域
３４  処理プログラム格納領域
３５  その他データ格納領域
【図１】
0003857842.tif 000002
【図２】
0003857842.tif 000003
【図３】
0003857842.tif 000004
【図４】
0003857842.tif 000005
【図５】
0003857842.tif 000006
【図６】
0003857842.tif 000007
【図７】
0003857842.tif 000008
【図８】
0003857842.tif 000009
【図９】
0003857842.tif 000010
【図１０】
0003857842.tif 000011
【図１１】
0003857842.tif 000012
【図１２】
0003857842.tif 000013
【図１３】
0003857842.tif 000014
【図１４】
0003857842.tif 000015