(57)【要約】【課題】プログラムの分析とプログラムの入出力情報の取得を効率良く行うプログラム分析プログラム、プログラム分析装置、プログラム分析方法を提供する。【解決手段】プログラム群から実行経路と変数を検出する実行経路検出部１２と、検出された実行経路と変数の追跡を行う実行経路追跡部１４と、実行経路の追跡に伴って変数の取り得る値を求め、以後追跡する実行経路における変数値を限定する変数値限定部２１と、実行経路の追跡中に、該実行経路が変数値の満たす条件により分岐する箇所がある場合、該箇所以降、追跡される実行経路を、限定された変数値が該条件を満たす実行経路だけに限定する実行経路限定部２２と、実行経路の追跡中に、データの入出力が行われる箇所がある場合、該入出力情報を取得する入出力情報取得部２３とを備えた。【選択図】図１
2007122207.tif 000002
【特許請求の範囲】
【請求項１】
プログラム群の分析をコンピュータに実行させるプログラム分析プログラムであって、
前記プログラム群から実行経路と変数を検出する実行経路検出ステップと、
前記実行経路検出ステップにより検出された実行経路と変数の追跡を行う実行経路追跡ステップと、
前記実行経路追跡ステップによる実行経路の追跡に伴って変数の取り得る値を求め、以後追跡する実行経路における変数値を限定する変数値限定ステップと、
前記実行経路追跡ステップによる実行経路の追跡中に、該実行経路が変数値の満たす条件により分岐する箇所がある場合、該箇所以降、前記実行経路追跡ステップにより追跡される実行経路を、前記変数値限定ステップにより限定された変数値が該条件を満たす実行経路だけに限定する実行経路限定ステップと、
前記実行経路追跡ステップによる実行経路の追跡中に、データの入出力が行われる箇所がある場合、該入出力情報を取得する入出力情報取得ステップと
をコンピュータに実行させるプログラム分析プログラム。
【請求項２】
請求項１に記載のプログラム分析プログラムにおいて、
前記入出力情報取得ステップの後に、前記実行経路追跡ステップにより追跡された実行経路と前記入出力情報取得ステップにより検出された入出力情報とを、プログラム分析結果として出力するプログラム分析結果出力ステップをコンピュータに実行させることを特徴とするプログラム分析プログラム。
【請求項３】
請求項１または請求項２に記載のプログラム分析プログラムにおいて、
前記実行経路検出ステップと前記実行経路追跡ステップの間に、前記実行経路検出ステップにより検出された変数を、実行経路またはデータの入出力に影響のある変数だけに限定する変数限定ステップをコンピュータに実行させることを特徴とするプログラム分析プログラム。
【請求項４】
請求項３に記載のプログラム分析プログラムにおいて、
前記実行経路またはデータの入出力に影響のある変数は、プログラムの呼び出しの引数に用いられる変数、条件に用いられる変数、データの入出力に用いられる変数のいずれかであることを特徴とするプログラム分析プログラム。
【請求項５】
請求項１乃至請求項４のいずれかに記載のプログラム分析プログラムにおいて、
前記変数値限定ステップは、条件により分岐した実行経路における変数値を、該条件を満たす変数値に限定することを特徴とするプログラム分析プログラム。
【請求項６】
請求項５に記載のプログラム分析プログラムにおいて、
条件により分岐した実行経路の追跡が終了したときに、該条件を満たす場合に変数の取り得る値と、該条件を満たさなかった場合に変数の取り得る値を変数値限定部に設定することを特徴とするプログラム分析プログラム。
【請求項７】
プログラム群の分析を行うプログラム分析装置であって、
前記プログラム群から実行経路と変数を検出する実行経路検出部と、
前記実行経路検出部により検出された実行経路と変数の追跡を行う実行経路追跡部と、
前記実行経路追跡部による実行経路の追跡に伴って変数の取り得る値を求め、以後追跡する実行経路における変数値を限定する変数値限定部と、
前記実行経路追跡部による実行経路の追跡中に、該実行経路が変数値の満たす条件により分岐する箇所がある場合、該箇所以降、前記実行経路追跡部により追跡される実行経路を、前記変数値限定部により限定された変数値が該条件を満たす実行経路だけに限定する実行経路限定部と、
前記実行経路追跡部による実行経路の追跡中に、データの入出力が行われる箇所がある場合、該入出力情報を取得する入出力情報取得部と
を備えるプログラム分析装置。
【請求項８】
請求項７に記載のプログラム分析装置において、
更に、前記実行経路追跡部により追跡された実行経路と前記入出力情報取得部により検出された入出力情報とを、プログラム分析結果として出力するプログラム分析結果出力部を備えることを特徴とするプログラム分析装置。
【請求項９】
プログラム群の分析を行うプログラム分析方法であって、
前記プログラム群から実行経路と変数を検出する実行経路検出ステップと、
前記実行経路検出ステップにより検出された実行経路と変数の追跡を行う実行経路追跡ステップと、
前記実行経路追跡ステップによる実行経路の追跡に伴って変数の取り得る値を求め、以後追跡する実行経路における変数値を限定する変数値限定ステップと、
前記実行経路追跡ステップによる実行経路の追跡中に、該実行経路が変数値の満たす条件により分岐する箇所がある場合、該箇所以降、前記実行経路追跡ステップにより追跡される実行経路を、前記変数値限定ステップにより限定された変数値が該条件を満たす実行経路だけに限定する実行経路限定ステップと、
前記実行経路追跡ステップによる実行経路の追跡中に、データの入出力が行われる箇所がある場合、該入出力情報を取得する入出力情報取得ステップと
を実行するプログラム分析方法。
【請求項１０】
請求項９に記載のプログラム分析方法において、
前記入出力情報取得ステップの後に、前記実行経路追跡ステップにより追跡された実行経路と前記入出力情報取得ステップにより検出された入出力情報とを、プログラム分析結果として出力するプログラム分析結果出力ステップを実行することを特徴とするプログラム分析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーション資産のリバースエンジニアリング技術に関するものである。
【背景技術】
【０００２】
一度構築したコンピュータシステムであっても、歳月を経ることにより、改良を行う必要やシステム全体を見直す必要が生じることがある。このとき、対象とするコンピュータシステムのドキュメントの収集を行い、それを理解する作業が必要となる。しかし、開発当時の管理体制や、その後の担当者の異動等により、ドキュメントが十分に入手できない場合がある。
【０００３】
また、コンピュータシステムは、規模が大きく複雑なため、対象のシステムの入出力情報を正確に把握する作業は、膨大な工数が必要になる。
【０００４】
このような問題に対して、稼働中のコンピュータシステムのアプリケーション資産について分析を行い、ドキュメントを生成し、整理することにより、理解を助けるというアプローチがある。これは、リバースエンジニアリングと呼ばれる。従来のリバースエンジニアリング技術によれば、個々のプログラムやジョブの呼び出し構造や、各プログラムがアクセスするデータの情報を抽出することができる。
【０００５】
また、プログラムの実行経路を追跡しながら分析する方法として、シンボリック実行がある。シンボリック実行は、全ての変数に対して、プログラム内の実行経路を追跡し、分岐が発生した場合は、それぞれ別々の経路として解析を行う。
【０００６】
なお、本発明の関連ある従来技術として、例えば、下記に示す特許文献１が知られている。このプログラム解析装置及びプログラム解析方法及び記録媒体は、プログラムを解析し、そのプログラムの構成図を生成するものである。
【特許文献１】特開２００２−２１５３９１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、リバースエンジニアリングの対象となる多くのシステムでは、システム内で利用している主要なデータベースやファイルなどのデータに対しては、共通アクセスルーチンと呼ばれるプログラムや処理を利用してアクセスする形で記述しているプログラムが多く、業務ロジックが直接データベースやファイルにアクセスするプログラムは少ない。そのため、従来のリバースエンジニアリングで利用されている、呼び出し構造の抽出技術や各プログラムの入出力情報を組み合わせただけでは、実際はアクセスしないデータベースが多く取得されてしまい、高精度の解析ができない。更に、大規模なアプリケーション資産を対象とすると、上述した解析には、多くのメモリと処理時間が必要となり、十分な精度を持つ解析結果が限られた時間内に得られない場合がある。
【０００８】
また、シンボリック実行では、全ての変数の値を保持し、実行の可能性がある実行経路を全て分析しようとするため、上述した課題と同様に、大規模なアプリケーション資産を対象とすると、上述した解析には、多くのメモリと処理時間が必要となり、十分な精度を持つ解析結果が限られた時間内に得られない場合がある。
【０００９】
また、従来のリバースエンジニアリング技術では、アプリケーション資産内のどの処理がどのデータにアクセスするかを高い精度で把握することはできなかった。
【００１０】
また、特許文献１のようなリバースエンジニアリング技術では、対象とするプログラム内を遡って分析するため、注目する文の数が増えると、遡る回数が増え、実行時間が増加してしまう。
【００１１】
また、特許文献１のようなリバースエンジニアリング技術では、対象とする処理の入出力情報を仕様書として整理することができず、手作業で入出力情報を記述していた。
【００１２】
本発明は上述した問題点を解決するためになされたものであり、プログラムの分析とプログラムの入出力情報の取得を効率良く行うプログラム分析プログラム、プログラム分析装置、プログラム分析方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上述した課題を解決するため、本発明は、プログラム群の分析をコンピュータに実行させるプログラム分析プログラムであって、前記プログラム群から実行経路と変数を検出する実行経路検出ステップと、前記実行経路検出ステップにより検出された実行経路と変数の追跡を行う実行経路追跡ステップと、前記実行経路追跡ステップによる実行経路の追跡に伴って変数の取り得る値を求め、以後追跡する実行経路における変数値を限定する変数値限定ステップと、前記実行経路追跡ステップによる実行経路の追跡中に、該実行経路が変数値の満たす条件により分岐する箇所がある場合、該箇所以降、前記実行経路追跡ステップにより追跡される実行経路を、前記変数値限定ステップにより限定された変数値が該条件を満たす実行経路だけに限定する実行経路限定ステップと、前記実行経路追跡ステップによる実行経路の追跡中に、データの入出力が行われる箇所がある場合、該入出力情報を取得する入出力情報取得ステップとをコンピュータに実行させるものである。
【００１４】
また、本発明に係るプログラム分析プログラムにおいて、前記入出力情報取得ステップの後に、前記実行経路追跡ステップにより追跡された実行経路と前記入出力情報取得ステップにより検出された入出力情報とを、プログラム分析結果として出力するプログラム分析結果出力ステップをコンピュータに実行させることを特徴とするものである。
【００１５】
また、本発明に係るプログラム分析プログラムにおいて、前記実行経路検出ステップと前記実行経路追跡ステップの間に、前記実行経路検出ステップにより検出された変数を、実行経路またはデータの入出力に影響のある変数だけに限定する変数限定ステップをコンピュータに実行させることを特徴とするものである。
【００１６】
また、本発明に係るプログラム分析プログラムにおいて、前記実行経路またはデータの入出力に影響のある変数は、プログラムの呼び出しの引数に用いられる変数、条件に用いられる変数、データの入出力に用いられる変数のいずれかであることを特徴とするものである。
【００１７】
また、本発明に係るプログラム分析プログラムにおいて、前記変数値限定ステップは、条件により分岐した実行経路における変数値を、該条件を満たす変数値に限定することを特徴とするものである。
【００１８】
また、本発明に係るプログラム分析プログラムにおいて、条件により分岐した実行経路の追跡が終了したときに、該条件を満たす場合に変数の取り得る値と、該条件を満たさなかった場合に変数の取り得る値を変数値限定部に設定することを特徴とするものである。
【００１９】
また、本発明は、プログラム群の分析を行うプログラム分析装置であって、前記プログラム群から実行経路と変数を検出する実行経路検出部と、前記実行経路検出部により検出された実行経路と変数の追跡を行う実行経路追跡部と、前記実行経路追跡部による実行経路の追跡に伴って変数の取り得る値を求め、以後追跡する実行経路における変数値を限定する変数値限定部と、前記実行経路追跡部による実行経路の追跡中に、該実行経路が変数値の満たす条件により分岐する箇所がある場合、該箇所以降、前記実行経路追跡部により追跡される実行経路を、前記変数値限定部により限定された変数値が該条件を満たす実行経路だけに限定する実行経路限定部と、前記実行経路追跡部による実行経路の追跡中に、データの入出力が行われる箇所がある場合、該入出力情報を取得する入出力情報取得部と
を備えたものである。
【００２０】
また、本発明に係るプログラム分析装置において、更に、前記実行経路追跡部により追跡された実行経路と前記入出力情報取得部により検出された入出力情報とを、プログラム分析結果として出力するプログラム分析結果出力部を備えることを特徴とするものである。
【００２１】
また、本発明に係るプログラム分析装置において、更に、前記実行経路検出部により検出された変数を、実行経路またはデータの入出力に影響のある変数だけに限定する変数限定部を備えることを特徴とするものである。
【００２２】
また、本発明に係るプログラム分析装置において、前記実行経路またはデータの入出力に影響のある変数は、プログラムの呼び出しの引数に用いられる変数、条件に用いられる変数、データ入出力に用いられる変数のいずれかであることを特徴とするものである。
【００２３】
また、本発明に係るプログラム分析装置において、前記変数値限定部は、条件により分岐した実行経路における変数値を、該条件を満たす変数値に限定することを特徴とするものである。
【００２４】
また、本発明は、プログラム群の分析を行うプログラム分析方法であって、前記プログラム群から実行経路と変数を検出する実行経路検出ステップと、前記実行経路検出ステップにより検出された実行経路と変数の追跡を行う実行経路追跡ステップと、前記実行経路追跡ステップによる実行経路の追跡に伴って変数の取り得る値を求め、以後追跡する実行経路における変数値を限定する変数値限定ステップと、前記実行経路追跡ステップによる実行経路の追跡中に、該実行経路が変数値の満たす条件により分岐する箇所がある場合、該箇所以降、前記実行経路追跡ステップにより追跡される実行経路を、前記変数値限定ステップにより限定された変数値が該条件を満たす実行経路だけに限定する実行経路限定ステップと、前記実行経路追跡ステップによる実行経路の追跡中に、データの入出力が行われる箇所がある場合、該入出力情報を取得する入出力情報取得ステップとを実行するものである。
【発明の効果】
【００２５】
本発明によれば、実行経路を追跡し、変数値を限定することにより、実際に入出力が行われる可能性のある入出力情報だけを取得することができる。
【発明を実施するための最良の形態】
【００２６】
以下、本発明の実施の形態について図面を参照しつつ説明する。
【００２７】
まず、プログラム分析装置の構成について説明する。
【００２８】
図１は、本発明に係るプログラム分析装置の構成の一例を示すブロック図である。このプログラム分析装置は、実行経路検出部１２、変数限定部１３、実行経路追跡部１４、変数値限定部２１、実行経路限定部２２、入出力情報取得部２３、仕様書生成部３１を備える。
【００２９】
次に、プログラム分析装置によるプログラム分析処理の動作について説明する。
【００３０】
図２は、本発明に係るプログラム分析装置によるプログラム分析処理の動作の一例を示すフローチャートである。最初のプログラム分析処理の実行前に、ユーザの指示に従って、アプリケーション資産のうち予め分析を開始するプログラムを指定し、対象プログラムとする。後述するように、プログラム分析処理中でサブルーチンのプログラム分析処理を実行する場合は、そのサブルーチンを対象プログラムとする。
【００３１】
次に、実行経路検出部１２は、アプリケーション資産に含まれる対象プログラムを取得して構文解析を行うことにより、対象プログラムの先頭からの実行経路を検出し、その結果を実行経路情報として保持する（Ｓ１２）。
【００３２】
次に、変数限定部１３は、変数限定処理を行う（Ｓ１３）。変数限定処理として、変数限定部１３は、実行経路情報から、入出力命令文や呼び出し文を内部に含む条件式で用いられる変数を検出し、検出された変数を変数情報として保持する。更に、変数限定部１３は、実行経路情報から、サブルーチン呼び出し文の引数として用いられる変数を検出し、検出された変数を変数情報として保持する。更に、変数限定部１３は、実行経路情報から、上述した条件式で用いられる変数や上述したサブルーチン呼び出し文の引数として用いられる変数に値を設定している変数を検出し、検出された変数を変数情報として保持する。
【００３３】
次に、実行経路追跡部１４は、実行経路情報を用いて実行経路の追跡を行い（Ｓ１４）、追跡が終了したか否かの判断を行う（Ｓ１５）。追跡が終了した場合（Ｓ１５，Ｙ）、仕様書生成部３１は、仕様書の作成を行い（Ｓ３０）、このフローを終了する。
【００３４】
一方、追跡が終了していない場合（Ｓ１５，Ｎ）、変数値限定部２１は、実行経路の追跡中に変数情報内の変数に対する変数値設定文が登場したか否かの判断を行う（Ｓ２１）。変数値設定文が登場しない場合（Ｓ２１，Ｎ）、処理Ｓ２３へ移行する。一方、変数値設定文が登場した場合（Ｓ２１，Ｙ）、変数値限定部２１は、変数値限定処理を行う（Ｓ２２）。変数値限定処理として、変数値限定部２１は、変数値設定文により設定された変数値が限定できるか否かを判断し、限定できる場合は以後の変数値を限定し、その変数値を変数値情報として保持する。
【００３５】
次に、実行経路限定部２２は、追跡中に条件文が登場したか否かの判断を行う（Ｓ２３）。条件文が登場しない場合（Ｓ２３，Ｎ）、処理Ｓ２５へ移行する。一方、条件文が登場した場合（Ｓ２３，Ｙ）、実行経路限定部２２は、実行経路限定処理を行う（Ｓ２４）。実行経路限定処理として、実行経路限定部２２は、条件文に変数値情報の変数値を適用することにより実行経路が限定できるか否かを判断する。限定できる場合、実行経路限定部２２は、限定した実行経路を実行経路情報として保持する。限定できない場合、実行経路限定部２２は、全ての条件内について実行文の分析を行う。このとき、条件毎の実行文では、それぞれの条件を満たすように変数値が限定される。また、条件毎の実行文で設定された変数値は、変数値情報に保持され、条件文終了後も限定された変数値として用いられる。
【００３６】
次に、入出力情報取得部２３は、追跡中にデータの入出力文が登場したか否かの判断を行う（Ｓ２５）。入出力文が登場しない場合（Ｓ２５，Ｎ）、処理Ｓ２７へ移行する。一方、入出力文が登場した場合（Ｓ２５，Ｙ）、入出力情報取得部２３は、データの入出力に関する入出力情報を取得して保持する、入出力情報取得処理を行う（Ｓ２６）。
【００３７】
次に、実行経路検出部１２は、追跡中にサブルーチン呼び出し文が登場したか否かの判断を行う（Ｓ２７）。サブルーチン呼び出し文としては、例えばＣＯＢＯＬ言語の場合、セクション呼び出し（ＰＥＲＦＯＲＭ文）、プログラム呼び出し（ＣＡＬＬ文）、移動（ＧＯＴＯ文）が抽出される。サブルーチン呼び出し文が登場しない場合（Ｓ２７，Ｎ）、処理Ｓ１４へ戻り、追跡を継続する。一方、サブルーチン呼び出し文が登場した場合（Ｓ２７，Ｙ）、実行経路検出部１２は、変数値情報から得られる変数値を引数として与えたサブルーチンを対象プログラムとするプログラム分析処理を行い、プログラム分析処理の結果を受け取り（Ｓ２８）、処理Ｓ１４へ戻り、追跡を継続する。
【００３８】
次に、プログラム分析装置の動作について、アプリケーション資産の具体例を用いて説明する。
【００３９】
具体例として、ＣＯＢＯＬ言語で記述され、業務ロジックであるＰＲＯＧＲＡＭＡ、共通アクセスルーチン（親）であるＰＲＯＧＲＡＭＢ、共通アクセスルーチン（子）であるＰＧＤＡＴＡ＿Ａ，ＰＧＤＡＴＡ＿Ｂ，ＰＧＤＡＴＡ＿Ｃ，ＰＧＤＡＴＡ＿Ｄ，ＰＧＤＡＴＡ＿Ｅ，ＰＧＤＡＴＡ＿Ｆの各プログラムで構成されるアプリケーション資産を用いる。図３は、アプリケーション資産の具体例のうちのＰＲＯＧＲＡＭＡを示すソースコードである。図４は、アプリケーション資産の具体例のうちのＰＲＯＧＲＡＭＢを示すソースコードである。図５は、アプリケーション資産の具体例のうちのＰＧＤＡＴＡ＿Ｄを示すソースコードである。
【００４０】
まず、最初の対象プログラムとして、呼び出し元であるＰＲＯＧＲＡＭＡがユーザにより指定され、ＰＲＯＧＲＡＭＡを対象プログラムとしたプログラム分析処理が開始される。
【００４１】
次に、変数限定処理により、実行に影響があり、追跡が必要となる変数として、引数に用いられている機能区分，処理区分，業務区分、条件に用いられる機能区分，Ａが検出され、変数情報に保持される。以後、追跡する変数はこれらに限定される。
【００４２】
次に、実行経路の追跡に従って説明する。
【００４３】
実行経路限定部２２は、１行目「ＩＦ  Ａ＝１  ＴＨＥＮ」により、条件の真偽が判定できないため、真の場合と偽の場合の追跡を行う。
【００４４】
１行目が真の場合、変数値限定部２１は、真の場合の実行文内において、Ａの値を１に限定し、変数値情報に保持する。次に、２行目「ＭＯＶＥ  １  ＴＯ  処理区分」により、変数値限定部２１は、処理区分の値を１に限定し、変数値情報に保持する。ここでは、真偽が判定できなかったので、真の場合の実行文が終了すると、変数値限定部２１は、変数値情報は１または元の状態のいずれかとして保持する。１行目が偽の場合、変数値限定部２１は追跡を行い、追跡後、変数値情報は、真の場合の１、偽の場合、元の状態のいずれかとして、次に進める。真偽が判定できた場合、変数値限定部２１は、条件を満たす一方の条件のみを解析し、変数値情報は、追跡を行った時点での最新の状態を引き続き保持し、元の状態は考慮しない。
【００４５】
ＰＲＯＧＲＡＭＡにおいて、５行目「ＭＯＶＥ  ２  ＴＯ  業務区分」により、変数値限定部２１は、業務区分の値を２に限定し、変数値情報に保持する。次に、６行目「ＲＥＡＤ  Ａ」により、入出力情報取得部２３は、入力情報Ａを入出力情報に保持する。
【００４６】
次に、実行経路限定部２２は、９行目「ＩＦ  機能区分＝２  ＴＨＥＮ」により、条件の真偽が判定できないため、真の場合と偽の場合の追跡を行う。９行目が偽の場合、ＰＲＯＧＲＡＭＡが終了するため、この場合の実行経路の追跡を終了する。
【００４７】
次に、９行目が真の場合の実行経路の追跡について説明する。
【００４８】
変数値限定部２１は、条件である機能区分の値を２に限定し、条件内では、変数値情報に保持する。次に、１０行目「ＭＯＶＥ  ４  ＴＯ  処理区分」により、変数値限定部２１は、処理区分の値を４に限定し、変数値情報に保持する。次に、１１〜１行目「ＣＡＬＬ  ＰＲＯＧＲＡＭＢ  ＵＳＩＮＧ  引数値」により、実行経路検出部１２は、ＰＲＯＧＲＡＭＢを対象プログラムとしたプログラム分析処理を行う。ここで、ＰＲＯＧＲＡＭＢの引数値として各変数の値が渡されるが、機能区分，処理区分，業務区分の値は、変数値情報に保持されている機能区分＝２，処理区分＝４，業務区分＝２に限定される。
【００４９】
ＰＲＯＧＲＡＭＢにおいて、１〜１９行目の条件文のうち、１０行目「ＥＬＳＥ  ＩＦ  機能区分＝２  ＡＮＤ  処理区分＝ＡＮＹ」の条件を満たすため、１１行目「ＣＡＬＬ  ＰＧＤＡＴＡ＿Ｄ  ＵＳＩＮＧ  引数値」により、実行経路検出部１２は、ＰＧＤＡＴＡ＿Ｄを対象プログラムとしたプログラム分析処理を行う。ここで、ＰＲＯＧＲＡＭＢと同様、ＰＧＤＡＴＡ＿Ｄの引数値として各変数の値が渡されるが、機能区分，処理区分，業務区分の値は、変数値情報に保持されている機能区分＝２，処理区分＝４，業務区分＝２に限定される。
【００５０】
ＰＧＤＡＴＡ＿Ｄにおいて、１〜１９行目の条件文のうち、１０行目「ＥＬＳＥ  ＩＦ  処理区分＝４」の条件を満たすため、１１行目の出力文「ＵＰＤＡＴＥ  ＤＡＴＡ＿Ｄ」により、入出力情報取得部２３は、出力情報ＤＡＴＡ＿Ｄを入出力情報に保持する。その後、ＰＧＤＡＴＡ＿Ｄが終了し、ＰＲＯＧＲＡＭＢが終了し、条件部分が終了する。条件を終了した後、条件を実施しなかった場合の変数値と合わせて、機能区分＝２または不定、処理区分＝４または不定として、変数値限定部２１に保持する。この場合、ＰＲＯＧＲＡＭＡが終了するため、実行経路の追跡を終了する。
【００５１】
次に、仕様書生成部３１は、入出力情報を用いて仕様書を生成し、出力する。ここでは、仕様書のうち処理構造図の生成について説明する。処理構造図は、プログラム内の呼び出し構造、入出力情報、呼び出し先での入出力情報を合わせて記述するものである。ここで、従来のリバースエンジニアリング技術により生成される処理構造図と本発明に係るプログラム分析装置により生成される処理構造図を比較して説明する。
【００５２】
図６は、従来のリバースエンジニアリング技術により生成される処理構造図の一例である。この処理構造図において、プログラム名には、分析を開始したプログラムであるＰＲＯＧＲＡＭＡが記述され、ＳＥＣＴＩＯＮ（２層目）には、ＰＲＯＧＲＡＭＢの呼び出しが記述され、読み取りテーブルには、入出力情報のうち入力情報（ＳＥＬＥＣＴ，ＦＥＴＣＨ）が記述され、書き込みテーブルには、入出力情報のうち出力情報（ＵＰＤＡＴＥ，ＤＥＬＥＴＥ，ＩＮＳＥＲＴ）が記述されている。従来のリバースエンジニアリング技術では変数値が限定せずに分析を行うため、この処理構造図には、条件文における全ての条件を実行した場合に現れる入出力情報が記述される。
【００５３】
図７は、本発明に係るプログラム分析装置により生成される処理構造図の一例である。本発明に係るプログラム分析装置は変数値を限定して分析を行うため、この処理構造図は、実際に入出力が行われる可能性のある入出力情報だけが記述される。従って、本発明によれば、精度の高い情報を仕様書として出力することができる。
【００５４】
本発明によれば、変数限定処理、実行経路限定処理を行うことにより、従来のように全ての変数、実行経路を分析する必要がなく、プログラム分析に必要なメモリや時間が大幅に削減され、高速なプログラム分析を行うことができる。
【００５５】
また、変数値限定処理を行うことにより、追跡を行う実行経路を限定することができ、実際に入出力が行われる可能性のある入出力情報だけを取得することができる。結果として、仕様書等の出力データの量を削減できると共に、ユーザにとって見やすい出力データとなる。
【００５６】
なお、変数限定部１３を用いず、変数限定処理を行わない構成とし、全ての変数を追跡しても良い。
【００５７】
また、仕様書生成部３１の代わりに、入出力情報から、処理とデータの関係表を生成する構成を用いても良い。変数限定処理により限定された変数に関する全ての処理と入出力情報との関係を検出し、処理の種類とデータの種類を軸とし、関係がある位置に印をつけた表を生成する。この処理とデータの関係表によれば、ユーザは、あるデータにどの処理がアクセスしているかを知ることができる。
【００５８】
更に、プログラム分析装置を構成するコンピュータにおいて上述した各ステップを実行させるプログラムを、プログラム分析プログラムとして提供することができる。上述したプログラムは、コンピュータにより読取り可能な記録媒体に記憶させることによって、プログラム分析装置を構成するコンピュータに実行させることが可能となる。ここで、上記コンピュータにより読取り可能な記録媒体としては、ＲＯＭやＲＡＭ等のコンピュータに内部実装される内部記憶装置、ＣＤ−ＲＯＭやフレキシブルディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカード等の可搬型記憶媒体や、コンピュータプログラムを保持するデータベース、或いは、他のコンピュータ並びにそのデータベースや、更に回線上の伝送媒体をも含むものである。
【００５９】
なお、実行経路検出ステップは、実施の形態における処理Ｓ１２に対応する。また、実行経路追跡ステップは、実施の形態における処理Ｓ１４に対応する。また、変数値限定ステップは、実施の形態における処理Ｓ２２に対応する。また、実行経路限定ステップは、実施の形態における処理Ｓ２４に対応する。また、入出力情報取得ステップは、実施の形態における処理Ｓ２６に対応する。また、変数限定ステップは、実施の形態における処理Ｓ１３に対応する。また、プログラム分析結果出力ステップは、実施の形態における処理Ｓ３０に対応する。また、プログラム分析結果出力部は、実施の形態における仕様書生成部に対応する。
【００６０】
（付記１）  プログラム群の分析をコンピュータに実行させるプログラム分析プログラムであって、
前記プログラム群から実行経路と変数を検出する実行経路検出ステップと、
前記実行経路検出ステップにより検出された実行経路と変数の追跡を行う実行経路追跡ステップと、
前記実行経路追跡ステップによる実行経路の追跡に伴って変数の取り得る値を求め、以後追跡する実行経路における変数値を限定する変数値限定ステップと、
前記実行経路追跡ステップによる実行経路の追跡中に、該実行経路が変数値の満たす条件により分岐する箇所がある場合、該箇所以降、前記実行経路追跡ステップにより追跡される実行経路を、前記変数値限定ステップにより限定された変数値が該条件を満たす実行経路だけに限定する実行経路限定ステップと、
前記実行経路追跡ステップによる実行経路の追跡中に、データの入出力が行われる箇所がある場合、該入出力情報を取得する入出力情報取得ステップと
をコンピュータに実行させるプログラム分析プログラム。
（付記２）  付記１に記載のプログラム分析プログラムにおいて、
前記入出力情報取得ステップの後に、前記実行経路追跡ステップにより追跡された実行経路と前記入出力情報取得ステップにより検出された入出力情報とを、プログラム分析結果として出力するプログラム分析結果出力ステップをコンピュータに実行させることを特徴とするプログラム分析プログラム。
（付記３）  付記１または付記２に記載のプログラム分析プログラムにおいて、
前記実行経路検出ステップと前記実行経路追跡ステップの間に、前記実行経路検出ステップにより検出された変数を、実行経路またはデータの入出力に影響のある変数だけに限定する変数限定ステップをコンピュータに実行させることを特徴とするプログラム分析プログラム。
（付記４）  付記３に記載のプログラム分析プログラムにおいて、
前記実行経路またはデータの入出力に影響のある変数は、プログラムの呼び出しの引数に用いられる変数、条件に用いられる変数、データの入出力に用いられる変数のいずれかであることを特徴とするプログラム分析プログラム。
（付記５）  付記１乃至付記４のいずれかに記載のプログラム分析プログラムにおいて、
前記変数値限定ステップは、条件により分岐した実行経路における変数値を、該条件を満たす変数値に限定することを特徴とするプログラム分析プログラム。
（付記６）  付記５に記載のプログラム分析プログラムにおいて、
条件により分岐した実行経路の追跡が終了したときに、該条件を満たす場合に変数の取り得る値と、該条件を満たさなかった場合に変数の取り得る値を変数値限定部に設定することを特徴とするプログラム分析プログラム。
（付記７）  プログラム群の分析を行うプログラム分析装置であって、
前記プログラム群から実行経路と変数を検出する実行経路検出部と、
前記実行経路検出部により検出された実行経路と変数の追跡を行う実行経路追跡部と、
前記実行経路追跡部による実行経路の追跡に伴って変数の取り得る値を求め、以後追跡する実行経路における変数値を限定する変数値限定部と、
前記実行経路追跡部による実行経路の追跡中に、該実行経路が変数値の満たす条件により分岐する箇所がある場合、該箇所以降、前記実行経路追跡部により追跡される実行経路を、前記変数値限定部により限定された変数値が該条件を満たす実行経路だけに限定する実行経路限定部と、
前記実行経路追跡部による実行経路の追跡中に、データの入出力が行われる箇所がある場合、該入出力情報を取得する入出力情報取得部と
を備えるプログラム分析装置。
（付記８）  付記７に記載のプログラム分析装置において、
更に、前記実行経路追跡部により追跡された実行経路と前記入出力情報取得部により検出された入出力情報とを、プログラム分析結果として出力するプログラム分析結果出力部を備えることを特徴とするプログラム分析装置。
（付記９）  付記７または付記８に記載のプログラム分析装置において、
更に、前記実行経路検出部により検出された変数を、実行経路またはデータの入出力に影響のある変数だけに限定する変数限定部を備えることを特徴とするプログラム分析装置。
（付記１０）  付記９に記載のプログラム分析装置において、
前記実行経路またはデータの入出力に影響のある変数は、プログラムの呼び出しの引数に用いられる変数、条件に用いられる変数、データの入出力に用いられる変数のいずれかであることを特徴とするプログラム分析装置。
（付記１１）  付記７乃至付記１０のいずれかに記載のプログラム分析装置において、
前記変数値限定部は、条件により分岐した実行経路における変数値を、該条件を満たす変数値に限定することを特徴とするプログラム分析装置。
（付記１２）  プログラム群の分析を行うプログラム分析方法であって、
前記プログラム群から実行経路と変数を検出する実行経路検出ステップと、
前記実行経路検出ステップにより検出された実行経路と変数の追跡を行う実行経路追跡ステップと、
前記実行経路追跡ステップによる実行経路の追跡に伴って変数の取り得る値を求め、以後追跡する実行経路における変数値を限定する変数値限定ステップと、
前記実行経路追跡ステップによる実行経路の追跡中に、該実行経路が変数値の満たす条件により分岐する箇所がある場合、該箇所以降、前記実行経路追跡ステップにより追跡される実行経路を、前記変数値限定ステップにより限定された変数値が該条件を満たす実行経路だけに限定する実行経路限定ステップと、
前記実行経路追跡ステップによる実行経路の追跡中に、データの入出力が行われる箇所がある場合、該入出力情報を取得する入出力情報取得ステップと
を実行するプログラム分析方法。
（付記１３）  付記１２に記載のプログラム分析方法において、
前記入出力情報取得ステップの後に、前記実行経路追跡ステップにより追跡された実行経路と前記入出力情報取得ステップにより検出された入出力情報とを、プログラム分析結果として出力するプログラム分析結果出力ステップを実行することを特徴とするプログラム分析方法。
（付記１４）  付記１２または付記１３に記載のプログラム分析方法において、
前記実行経路検出ステップと前記実行経路追跡ステップの間に、前記実行経路検出ステップにより検出された変数を、実行経路またはデータの入出力に影響のある変数だけに限定する変数限定ステップを実行することを特徴とするプログラム分析方法。
（付記１５）  付記１４に記載のプログラム分析方法において、
前記実行経路またはデータの入出力に影響のある変数は、プログラムの呼び出しの引数に用いられる変数、条件に用いられる変数、データの入出力に用いられる変数のいずれかであることを特徴とするプログラム分析方法。
（付記１６）  付記１２乃至付記１５のいずれかに記載のプログラム分析方法において、
前記変数値限定ステップは、条件により分岐した実行経路における変数値を、該条件を満たす変数値に限定することを特徴とするプログラム分析方法。
【図面の簡単な説明】
【００６１】
【図１】本発明に係るプログラム分析装置の構成の一例を示すブロック図である。
【図２】本発明に係るプログラム分析装置によるプログラム分析処理の動作の一例を示すフローチャートである。
【図３】アプリケーション資産の具体例のうちのＰＲＯＧＲＡＭＡを示すソースコードである。
【図４】アプリケーション資産の具体例のうちのＰＲＯＧＲＡＭＢを示すソースコードである。
【図５】アプリケーション資産の具体例のうちのＰＧＤＡＴＡ＿Ｄを示すソースコードである。
【図６】従来のリバースエンジニアリング技術により生成される処理構造図の一例である。
【図７】本発明に係るプログラム分析装置により生成される処理構造図の一例である。
【符号の説明】
【００６２】
１２  実行経路検出部、１３  変数限定部、１４  実行経路追跡部、２１  変数値限定部、２２  実行経路限定部、２３  入出力情報取得部、３１  仕様書生成部。
【図１】
2007122207.tif 000003
【図２】
2007122207.tif 000004
【図３】
2007122207.tif 000005
【図４】
2007122207.tif 000006
【図５】
2007122207.tif 000007
【図６】
2007122207.tif 000008
【図７】
2007122207.tif 000009