(57)【特許請求の範囲】
【請求項１】
プログラムのソースコードが記録されたソースファイルからコンピュータプログラムのソースコードを読み込んで、所定のプログラム解析処理を行って自動的に少なくとも、前記ソースコードに基づいて作成される構文解析木、前記構文解析木に基づいて作成されるコールグラフ、前記構文解析木に基づいて作成されるフローグラフを含むプログラム解析情報を階層化して作成するプログラム解析情報作成手段と、
該プログラム解析情報作成手段によって、少なくとも、前記構文解析木、前記コールグラフ、前記フローグラフの各々のプログラム解析情報の作成が終了した段階で、少なくとも前記構文解析木、前記コールグラフ、前記フローグラフの解析情報単位ごとにトランザクションとして順次所定のデータ記録媒体に格納するプログラム解析情報格納手段と、
前記データ記録媒体から前記構文解析木を含むプログラム解析情報を読み出して、解析する種類に対応して設けられている所定のプログラム解析処理を実行し、コンピュータ画面上にＧＵＩにより前記プログラム解析処理の結果を表示するプログラム解析手段と、
を有し、
前記プログラム解析情報作成手段は、既に作成され前記データ記録媒体に格納されているプログラム解析情報を用いて上層のプログラム解析情報を作成することによりプログラム解析情報を階層化すると共に、
前記プログラム解析情報格納手段は、少なくとも、前記構文解析木、前記コールグラフ、前記フローグラフの各々のプログラム解析情報の作成が終了した段階で、前記トランザクションとして下層のプログラム解析情報から順番に階層的にデータベース化して前記データ記録媒体に格納することを特徴とするソフトウェア解析装置。
【請求項２】
前記プログラム解析手段は、前記データ記録媒体から前記プログラム解析情報を読み出して、所定のプログラム解析処理を実行し、コンピュータ画面上にＧＵＩにより前記プログラム解析処理の結果を表示し、前記結果に対しオペレータから指示が送られてきたときに再度処理を行い、その結果をＧＵＩにより表示することによって行うオペレータとの間の対話的処理を繰り返すことによりプログラム解析を実行することを特徴とする請求項１記載のソフトウェア解析装置。
【請求項３】
前記プログラム解析情報には、
前記構文解析木、前記コールグラフ、前記フローグラフの他に、前記ソースコードに基づいて前記ソースコードに用いられているシンボルの意味が記述されたシンボルテーブル、
前記構文解析木、シンボルテーブル、フローグラフ、コールグラフに基づいて作成されるデータフロー情報、前記構文解析木、シンボルテーブル、コールグラフ、フローグラフ、データフロー情報に基づいて作成されるプログラム依存グラフ、
およびモジュール入出力情報、
のうち少なくとも一つが含まれていることを特徴とする請求項１又は２記載のソフトウェア解析装置。
【請求項４】
前記プログラム解析情報作成手段は、前記構文解析木及びシンボルテーブル、コールグラフ及びフローグラフ、データフロー情報、並びにプログラム依存グラフ及びモジュール入出力情報を、この順序で作成することを特徴とする請求項３記載のソフトウェア解析装置。
【請求項５】
前記データベースは、オブジェクト指向型のデータベースであることを特徴とする請求項１，２，３又は４記載のソフトウェア解析装置。
【請求項６】
プログラムのソースコードが記録されたソースファイルからコンピュータプログラムのソースコードを読み込んで、所定のプログラム解析処理を行って自動的に少なくとも、前記ソースコードに基づいて作成される構文解析木、前記構文解析木に基づいて作成されるコールグラフ、前記構文解析木に基づいて作成されるフローグラフを含むプログラム解析情報を階層化して作成するプログラム解析情報作成工程と、
該プログラム解析情報作成工程によって、少なくとも、前記構文解析木、前記コールグラフ、前記フローグラフの各々のプログラム解析情報の作成が終了した段階で、少なくとも前記構文解析木、前記コールグラフ、前記フローグラフの解析情報単位ごとにトランザクションとして順次所定のデータ記録媒体に格納するプログラム解析情報格納工程と、
前記データ記録媒体から前記構文解析木を含むプログラム解析情報を読み出して、解析する種類に対応して設けられている所定のプログラム解析処理を実行し、コンピュータ画面上にＧＵＩにより前記プログラム解析処理の結果を表示するプログラム解析工程と、
を有し、
前記プログラム解析情報作成工程では、既に作成され前記データ記録媒体に格納されているプログラム解析情報を用いて上層のプログラム解析情報を作成することによりプログラム解析情報を階層化すると共に、
前記プログラム解析情報格納工程では、少なくとも、前記構文解析木、前記コールグラフ、前記フローグラフの各々のプログラム解析情報の作成が終了した段階で、前記トランザクションとして下層のプログラム解析情報から順番に階層的にデータベース化して前記データ記録媒体に格納することを特徴とするソフトウェア解析方法。
【請求項７】
前記プログラム解析工程は、前記データ記録媒体から前記プログラム解析情報を読み出して、所定のプログラム解析処理を実行し、コンピュータ画面上にＧＵＩにより前記プログラム解析処理の結果を表示し、前記結果に対しオペレータから指示が送られてきたときに再度処理を行い、その結果をＧＵＩにより表示することによって行うオペレータとの間の対話的処理を繰り返すことによりプログラム解析を実行することを特徴とする請求項６記載のソフトウェア解析方法。
【請求項８】
前記プログラム解析情報には、
前記構文解析木、前記コールグラフ、前記フローグラフの他に、前記ソースコードに基づいて前記ソースコードに用いられているシンボルの意味が記述されたシンボルテーブル、
前記構文解析木、シンボルテーブル、フローグラフ、コールグラフに基づいて作成されるデータフロー情報、前記構文解析木、シンボルテーブル、コールグラフ、フローグラフ、データフロー情報に基づいて作成されるプログラム依存グラフ、
およびモジュール入出力情報、
のうち少なくとも一つが含まれていることを特徴とする請求項６又は７記載のソフトウェア解析方法。
【請求項９】
前記プログラム解析情報作成工程は、前記構文解析木及びシンボルテーブル、コールグラフ及びフローグラフ、データフロー情報、並びにプログラム依存グラフ及びモジュール入出力情報を、この順序で作成することを特徴とする請求項８記載のソフトウェア解析方法。
【請求項１０】
前記データベースは、オブジェクト指向型のデータベースであることを特徴とする請求項６，７，８又は９記載のソフトウェア解析方法。
【請求項１１】
プログラムのソースコードが記録されたソースファイルからコンピュータプログラムのソースコードを読み込んで、所定のプログラム解析処理を行って自動的に少なくとも、前記ソースコードに基づいて作成される構文解析木、前記構文解析木に基づいて作成されるコールグラフ、前記構文解析木に基づいて作成されるフローグラフを含むプログラム解析情報を階層化して作成するプログラム解析情報作成機能と、
該プログラム解析情報作成機能によって、少なくとも、前記構文解析木、前記コールグラフ、前記フローグラフの各々のプログラム解析情報の作成が終了した段階で、少なくとも前記構文解析木、前記コールグラフ、前記フローグラフの解析情報単位ごとにトランザクションとして順次所定のデータ記録媒体に格納するプログラム解析情報格納機能と、
前記データ記録媒体から前記構文解析木を含むプログラム解析情報を読み出して、解析する種類に対応して設けられている所定のプログラム解析処理を実行し、コンピュータ画面上にＧＵＩにより前記プログラム解析処理の結果を表示するプログラム解析機能と、
を実行させるプログラムであって、
前記プログラム解析情報作成機能は、既に作成され前記データ記録媒体に格納されているプログラム解析情報を用いて上層のプログラム解析情報を作成することによりプログラム解析情報を階層化すると共に、
前記プログラム解析情報格納機能は、少なくとも、前記構文解析木、前記コールグラフ、前記フローグラフの各々のプログラム解析情報の作成が終了した段階で、前記トランザクションとして下層のプログラム解析情報から順番に階層的にデータベース化して前記データ記録媒体に格納するものであるプログラムを記憶したコンピュータ読み取り可能な記録媒体。
【請求項１２】
前記プログラム解析機能は、前記データ記録媒体から前記プログラム解析情報を読み出して、所定のプログラム解析処理を実行し、コンピュータ画面上にＧＵＩにより前記プログラム解析処理の結果を表示し、前記結果に対しオペレータから指示が送られてきたときに再度処理を行い、その結果をＧＵＩにより表示することによって行うオペレータとの間の対話的処理を繰り返すことによりプログラム解析を実行することを特徴とする請求項１１記載のコンピュータ読み取り可能な記録媒体。
【請求項１３】
前記プログラム解析情報には、
前記構文解析木、前記コールグラフ、前記フローグラフの他に、前記ソースコードに基づいて前記ソースコードに用いられているシンボルの意味が記述されたシンボルテーブル、
前記構文解析木、シンボルテーブル、フローグラフ、コールグラフに基づいて作成されるデータフロー情報、前記構文解析木、シンボルテーブル、コールグラフ、フローグラフ、データフロー情報に基づいて作成されるプログラム依存グラフ、
およびモジュール入出力情報、
のうち少なくとも一つが含まれていることを特徴とする請求項１１又は１２記載のコンピュータ読み取り可能な記録媒体。
【請求項１４】
前記プログラム解析情報作成機能は、前記構文解析木及びシンボルテーブル、コールグラフ及びフローグラフ、データフロー情報、並びにプログラム依存グラフ及びモジュール入出力情報を、この順序で作成することを特徴とする請求項１３記載のコンピュータ読み取り可能な記録媒体。
【請求項１５】
前記データベースは、オブジェクト指向型のデータベースであることを特徴とする請求項１１，１２，１３又は１４記載のコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータプログラムの内容を理解し易くするために、コンピュータプログラムについて解析を行うソフトウェア解析装置及びソフトウェア解析方法に関連する。
【０００２】
【従来の技術】
多数のプログラマが協力して大規模なプログラムを開発する場合や、既にあるプログラムの保守を行おうとする場合、他人が書いたプログラムを理解しなければならないことがある。しかし、他人が書いたプログラムを理解することは、大きな困難を伴う。
【０００３】
そこで、プログラムのソースコードを自動的に解析して様々な情報を提供することにより、プログラムの理解を支援する装置が提案されている。その一例としてコールグラフやフローグラフを作成し、プログラムを視覚的に把握できるようにする装置及び方法がある。これについては、例えば、本出願人による特願平９−３２４１５、特願平９−３２４５２などを参照することができる。
【０００４】
【発明が解決しようとする課題】
しかしながら、大規模なプログラム、例えば１００万ステップを超えるようなプログラムに対して解析を行おうとすると、解析情報のボリュームも非常に大きくなる。このため、解析情報が、通常のワークステーションやパーソナルコンピュータが実装できる最大容量のメモリに入りきらないとか、解析に要する時間が非常に長くかかるという状況が起こる。例えば、解析途中にメモリ容量が不足し、解析情報が入らなくなってしまった場合には、解析はそれ以上先に進めることはできないので、何らかの対応策を講じた上で、最初からプログラムの解析を再度行わなければならず、作業の効率を悪くしていた。
【０００５】
本発明は、上記事情に基づいてなされたものであり、コンピュータに実装できるメモリ容量に制限がある場合でも、大規模なプログラムの解析を自動的に行うことを可能とするソフトウェア解析装置及びソフトウェア解析方法を提供することを目的とする。
また、本発明の他の目的は、プログラムの解析を行っている際に何らかの要因で解析が中断された場合等に、中断される間際までに得られた情報を有効に利用することのできるソフトウェア解析装置及びソフトウェア解析方法を提供することである。
【０００６】
【課題を解決するための手段】
上記の目的を達成するために、本発明に係るソフトウェア解析装置は、プログラムのソースコードが記録されたソースファイルからコンピュータプログラムのソースコードを読み込んで、所定のプログラム解析処理を行って自動的に少なくとも、前記ソースコードに基づいて作成される構文解析木、前記構文解析木に基づいて作成されるコールグラフ、前記構文解析木に基づいて作成されるフローグラフを含むプログラム解析情報を階層化して作成するプログラム解析情報作成手段と、該プログラム解析情報作成手段によって、少なくとも、前記構文解析木、前記コールグラフ、前記フローグラフの各々のプログラム解析情報の作成が終了した段階で、少なくとも前記構文解析木、前記コールグラフ、前記フローグラフの解析情報単位ごとにトランザクションとして順次所定のデータ記録媒体に格納するプログラム解析情報格納手段と、前記データ記録媒体から前記構文解析木を含むプログラム解析情報を読み出して、解析する種類に対応して設けられている所定のプログラム解析処理を実行し、コンピュータ画面上にＧＵＩにより前記プログラム解析処理の結果を表示するプログラム解析手段と、を有し、前記プログラム解析情報作成手段は、既に作成され前記データ記録媒体に格納されているプログラム解析情報を用いて上層のプログラム解析情報を作成することによりプログラム解析情報を階層化すると共に、前記プログラム解析情報格納手段は、少なくとも、前記構文解析木、前記コールグラフ、前記フローグラフの各々のプログラム解析情報の作成が終了した段階で、前記トランザクションとして下層のプログラム解析情報から順番に階層的にデータベース化して前記データ記録媒体に格納することを特徴とする。
【０００７】
本発明に係るソフトウェア解析方法は、プログラムのソースコードが記録されたソースファイルからコンピュータプログラムのソースコードを読み込んで、所定のプログラム解析処理を行って自動的に少なくとも、前記ソースコードに基づいて作成される構文解析木、前記構文解析木に基づいて作成されるコールグラフ、前記構文解析木に基づいて作成されるフローグラフを含むプログラム解析情報を階層化して作成するプログラム解析情報作成工程と、該プログラム解析情報作成工程によって、少なくとも、前記構文解析木、前記コールグラフ、前記フローグラフの各々のプログラム解析情報の作成が終了した段階で、少なくとも前記構文解析木、前記コールグラフ、前記フローグラフの解析情報単位ごとにトランザクションとして順次所定のデータ記録媒体に格納するプログラム解析情報格納工程と、前記データ記録媒体から前記構文解析木を含むプログラム解析情報を読み出して、解析する種類に対応して設けられている所定のプログラム解析処理を実行し、コンピュータ画面上にＧＵＩにより前記プログラム解析処理の結果を表示するプログラム解析工程と、を有し、前記プログラム解析情報作成工程では、既に作成され前記データ記録媒体に格納されているプログラム解析情報を用いて上層のプログラム解析情報を作成することによりプログラム解析情報を階層化すると共に、前記プログラム解析情報格納工程では、少なくとも、前記構文解析木、前記コールグラフ、前記フローグラフの各々のプログラム解析情報の作成が終了した段階で、前記トランザクションとして下層のプログラム解析情報から順番に階層的にデータベース化して前記データ記録媒体に格納することを特徴とする。
【０００８】
本発明に係るコンピュータ読み取り可能な記録媒体は、プログラムのソースコードが記録されたソースファイルからコンピュータプログラムのソースコードを読み込んで、所定のプログラム解析処理を行って自動的に少なくとも、前記ソースコードに基づいて作成される構文解析木、前記構文解析木に基づいて作成されるコールグラフ、前記構文解析木に基づいて作成されるフローグラフを含むプログラム解析情報を階層化して作成するプログラム解析情報作成機能と、該プログラム解析情報作成機能によって、少なくとも、前記構文解析木、前記コールグラフ、前記フローグラフの各々のプログラム解析情報の作成が終了した段階で、少なくとも前記構文解析木、前記コールグラフ、前記フローグラフの解析情報単位ごとにトランザクションとして順次所定のデータ記録媒体に格納するプログラム解析情報格納機能と、前記データ記録媒体から前記構文解析木を含むプログラム解析情報を読み出して、解析する種類に対応して設けられている所定のプログラム解析処理を実行し、コンピュータ画面上にＧＵＩにより前記プログラム解析処理の結果を表示するプログラム解析機能と、を実行させるプログラムであって、前記プログラム解析情報作成機能は、既に作成され前記データ記録媒体に格納されているプログラム解析情報を用いて上層のプログラム解析情報を作成することによりプログラム解析情報を階層化すると共に、
前記プログラム解析情報格納機能は、少なくとも、前記構文解析木、前記コールグラフ、前記フローグラフの各々のプログラム解析情報の作成が終了した段階で、前記トランザクションとして下層のプログラム解析情報から順番に階層的にデータベース化して前記データ記録媒体に格納するものであるプログラムを記憶したことを特徴とする。
【０００９】
【発明の実施の形態】
以下に図面を参照して、本発明の実施の形態について説明する。図１は、本発明の一実施形態のソフトウェア解析装置（以下「本装置」という）における解析情報作成部について説明するための図、図２は本実施形態のソフトウェア解析装置がデータベースに格納する解析情報の構造を示す図、図３は本実施形態のプログラム解析部について説明するための図である。
【００１０】
図１において、ソースファイル１０は、所定の言語（例えばＣ言語）で記述されたプログラムのソースコードが記録されたファイルである。プログラム解析情報作成部１１は、コンピュータによるバッチ処理によって、読み込まれたソースファイル１０のソースコードについて所定の解析処理を行ってプログラム解析情報を作成し、これらをプログラム解析情報格納部１２によりデータベース化して、ハードディスク等の情報記録媒体１２ａに格納する。本実施形態の場合、プログラム解析情報には、図２に示すように、構文解析木（シンボルテーブルを含む）、コールグラフ、フローグラフ、データフロー情報、プログラム依存グラフ、モジュール入出力情報が含まれる。
【００１１】
プログラム解析情報作成部１１は、図２に示すように、プログラム解析情報を階層化して作成する。このように階層化するのは、上層のプログラム解析情報を作成するときに、下層のプログラム解析情報を利用することによるものである。このとき、一つの層ごとのひとまとまりのプログラム解析情報の作成が終了した段階で、プログラム解析情報格納部１２がこれらをトランザクションとして順次データベースに格納する。
【００１２】
例えば、コールグラフやフローグラフを作成するには構文解析木が必要となり、データフロー情報を作成するには構文解析木、コールグラフ及びフローグラフが必要となるので、図２の下層のプログラム解析情報から順番にプログラム解析情報格納部１２の情報記録媒体１２ａに格納してゆく。このように、上層のあるプログラム解析情報を作成する場合に、既に作成され、格納されているている下層のプログラム解析情報を必要とする関係を、ここでは「階層化」と呼んでいる。
【００１３】
仮に、トランザクション機能を用いずに、バッチ処理によってすべてのプログラム解析情報を作成し、それから一括して格納するようにすると、特に大規模なプログラムの場合には、プログラム解析情報の大きさがワークステーションやパーソナルコンピュータに搭載できるメモリの容量を超えてしまい、それまでに行った処理が無駄になることがある。
【００１４】
これに対して、本装置では、プログラム解析情報作成部１１が作成したプログラム解析情報を、プログラム解析情報格納部１２が階層ごとに、これらを順次ハードディスク等の情報記録媒体１２ａにデータベース化して格納するようにしたことによって、コンピュータ上の限られたメモリ容量の制約から開放されるというメリットがある。
【００１５】
また、図２のデータ構造の各階層ごとに、それらが作成された段階でトランザクションとしてハードディスク等の情報記録媒体１２ａに格納することによって、何らかの障害が発生した場合でも、プログラム解析情報のうち、それまでに格納された部分は安全に保護される。例えば構文解析からプログラム依存グラフの作成まで数日程度を要する大規模なプログラムの解析を行おうとした場合に、途中で何らかの障害が発生してコンピュータがダウンし、メインメモリ上に展開されていたデータが破壊されたとしても、少なくとも既にデータベースに格納された部分については、安全に保護され、次に作業を再開するときは、既にデータベースに格納されているプログラム解析情報については、改めて解析処理を行う必要はなく、それ以降の解析処理から再開すればよいので、重複した作業を回避することができる。
【００１６】
なお、本実施形態では、データベースとしては、オブジェクト指向データベースソフトウェアを利用し、プログラム解析情報は、オブジェクト指向言語、例えばＣ＋＋などを用いて作成する。このようなデータベースとするのは、プログラム解析情報は複雑なものなので、リレーショナルデータベースを用いたのでは格納が困難なためである。また、作成されたプログラム解析情報を、作成された構造のまま格納することができるので、便利である。
【００１７】
バッチ解析部１３は、プログラム解析情報格納部１２によって情報記録媒体１２ａに格納された情報を用いて、バッチ処理で解析することができる解析処理を行い、その結果をバッチ解析結果ファイル１４に格納する。このバッチ処理中は、オペレータからの指示などは特に必要なく、本装置が自動的に解析を行う。
バッチ解析結果ファイル１４には、例えばプログラムの規模に関連するメトリクス（ｍｅｔｒｉｃｓ）情報や冗長度情報、保守用文書情報などが含まれる。「メトリクス情報」とは、ソフトウェアの数値化指標に関する情報であり、本装置では、量的複雑さを表すメトリクスと、質的複雑さを表すメトリクスを計測し、その情報を作成する。量的複雑さのメトリクスとしては、プログラムの物理的な記述量を計測するサイズ・メトリクスと、制御構造の複雑さを計測するサイクロマティック数の二種類を計測し、質的複雑さのメトリクスとしては、モジュールの内容そのものを表す凝集度と結合度を計測する。「冗長度情報」とは、単一の手続きについて、出力に影響しない冗長な文に関する情報である。冗長な文は出力に影響しないので、ソースコードから削除しても外部に対する出力に変化はない。冗長度情報に従って、このような冗長な文を確認して対応策をとっておくことによって、意図しない動作の発生等を防止することができる。「保守用文書情報」とは、プログラムを保守する際に用いるドキュメント類で、定義されている手続きや型、変数名などの一覧や、それぞれの手続き等がどこに関連したものであるかを記載したものであり、例えば、他人が作成したプログラムを理解するときに使われる。「保守用文書情報」を取得しておくことで、ハイパーテキスト方式で情報提供することができ、紙ベースのドキュメントと比べると、格段に便利になる。
【００１８】
冗長度情報、メトリクス情報及び保守用文書情報などは、バッチ解析処理の結果生成されるが、バッチ解析処理の結果生成されるものは、これらに限られず、必要に応じて種々のバッチ解析処理を行い、その結果、それぞれのバッチ解析処理に対応した種々の情報を生成するよう、バッチ解析部１３を設計することが可能である。
【００１９】
図２において、「シンボルテーブル」とは、変数の情報の表である。例えば、同じ「ａ」という文字を使っている場合でも、それらが同じ変数を指す場合と、異なる変数を指す場合がある。例えば、異なる二つの関数の中で、その変数が大域変数であれば、同じものであるし、それぞれの関数においてローカルに定義された変数であれば、別々の変数となる。したがって、同じ文字で記述された変数が複数あったときに、それらが同じものなのか異なるものなのかは、直ちには識別できない。このようなシンボルに関する情報を管理するのがシンボルテーブルであり、このテーブルを参照することによって、同じシンボルで表されたものが同じものか異なるものかを知ることができる。
【００２０】
図２において、「コールグラフ」とは、手続き（Ｃ言語では「関数」）の間の呼び出し関係を示した情報である。このコールグラフに基づいて、図３のプログラム解析部２０1 がこれをノードとエッジを用いてグラフィック表示させた場合、グラフィック表示されたグラフでは、ノードが手続きを表し、エッジ（矢印）が手続き間の関係を表す。なお、コールグラフをグラフィック表示させると、手続き間の呼び出し関係が視覚的に把握できるだけでなく、プログラムの構造化の程度や内容の理解や、望ましくない手続き呼び出しの検出が容易になる。
【００２１】
図２において、「フローグラフ」とは、ある一つの手続き内の制御フローに関する情報である。フローグラフに基づいて、プログラム解析部２０2 がこれを、ノードとエッジを用いてグラフィック表示させると、ノードは基本ブロック（連続した文の列からなり、制御が先頭の文に移された後途中で停止したり分岐したりせず、最後の文で制御が離れるものをいう）を表し、エッジは基本ブロック間の制御のフローを表す。
【００２２】
フローグラフについても、プログラム解析部２０2 によって、その情報をグラフィック表示させると、その手続き内の制御フローが視覚的に把握できるだけでなく、プログラム中のある場所（一つの文か、または一つの変数）に影響を与える部分もしくは与えられる部分の解析や、望ましくない制御フローの検出を可能にする。例えば、ある場所が制御依存する部分はその場所から入口ノードに向かってフローグラフを辿ることで検出される。また、制御が到達することのないデッドコードは、入口ノード以外のノードであって、流入するエッジのないノードとして表現される。
【００２３】
図２において、「データフロー情報」とは、例えばある場所で定義された変数がどこで使用されるかといったことに関するデータの流れを解析した結果の情報である。プログラム解析部による対話処理でデータフロー異常検査を行うときは、図２に階層的に示したプログラム解析情報のうち、構文解析木、コールグラフ、フローグラフ、そしてデータフロー情報までが必要となる。データフロー異常とは、データに対する不当なイベントの組み合わせである。すべてのデータは、定義した上で使用し、最後に未定義にするという一連の順序を守って使用しなければならないが、このような順序を守らない不当な組み合わせは、データフロー異常となる。
【００２４】
データフロー異常が存在しても、ソースコードをコンパイルすることは可能である。しかし、実際にコンパイルしたプログラムを実行させているときに、異常なパスを通るとデータフロー異常が顕在化することがある。したがって、このような異常は、事前にソースコードの段階で除去しておくのが望ましい。データフロー異常の検出については、本出願人による特許出願、特願平９−３２４１５及び特願平９−３２４５２を参照することができる。なお、ここでは、データフロー異常検査を対話処理で行う場合について説明したが、データフロー異常検査は、バッチ処理で行うこともできる。
【００２５】
図２において、「プログラム依存グラフ」とは、制御の依存関係と、データの依存関係をグラフで表現したものである。プログラム依存グラフが作成されると、プログラムの影響解析を実行することができる。影響解析とは、プログラム中のある場所（一つの文か、または一つの変数）を変更すると、それがどこまで影響を与えるか、あるいは影響を与えないかを求める解析である。
【００２６】
次に、図３を参照して、プログラム解析部について説明する。同図には、プログラム解析部２０1 ，・・・，２０i が示されている。プログラム解析部２０1 等は、プログラム解析情報格納部１２によってハードディスク装置等にデータベース化して格納されているプログラム解析情報に基づいて、種々のプログラム解析を実行する部分である。各プログラム解析部２０1 ，・・・，２０i は解析する種類に対応して設けられている。プログラム解析部２０1 等は、プログラム解析情報格納部１２から必要なプログラム解析情報を取り出してきて、所定の解析処理を行い、その解析結果２１1 等をコンピュータ画面上にＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）２２1 等により表示させる。オペレータは、この結果を見て、何らかの指示が必要な場合には、ＧＵＩ２２1 等を介してプログラム解析部２０1 等へ指示を送り、プログラム解析部２０1 等に再度処理を行わせ、その結果を表示させる。このような処理を繰り返しながら、プログラム解析を行ってゆく。このように、オペレータがＧＵＩ２２1 等を介してコンピュータに指示し、それに対してコンピュータが処理を行うような操作を対話処理と呼ぶ。
【００２７】
本実施形態では、プログラム解析部２０1 は、コンピュータ画面にコールグラフをグラフィック表示させる解析処理を行う。これにより、コールグラフの内容を実際に視覚的に把握できるように、プログラム内の関数の呼出し関係の理解が容易となる。この場合、プログラム解析部２０1 は、プログラム解析情報として、構文解析木及びコールグラフをプログラム解析情報格納部１２から読み出して来る。また、プログラム解析部２０2 は、コンピュータ画面にフローグラフをグラフィック表示させる解析処理を行う。これにより、フローグラフの内容を実際に視覚的に把握できるように、ある関数の内部における変数の流れの理解が容易となる。この場合、プログラム解析部２０2 は、プログラム解析情報として、構文解析木及びフローグラフをプログラム解析情報格納部１２から読み出して来る。
【００２８】
プログラム解析部が実行する解析処理の他の例して、影響範囲解析がある。これは、プログラム解析情報格納部１２によりデータベースからプログラム解析情報として、構文解析木、コールグラフ、フローグラフ、プログラム依存グラフ、モジュール入出力情報を読み出して、プログラムのソースコードのある行が、他のどの行まで影響を及ぼしているかを解析する。具体的には、プログラムのソースコードを表示し、そこである行を指定して、その行がソースコードのどこに影響しているかを、例えば色を変えて表示する。そして、その影響されている行が更にどの行に影響しているか、ということを順次調べる、ということを行う。こういう対話的な処理を繰り返すことによって、オペレータは、例えば他人が作成したプログラムの構造を利用しやすくなる。
【００２９】
更に、プログラム解析部が行う別の例としては、構造解析、データフロー異常解析などがある。
図３において、ＧＵＩ２３は、バッチ解析結果ファイル１３の内容を、オペレータが見ることができるように表示させるためのものである。また、ＧＵＩ連動部２４は、ＧＵＩ２２1 ，・・・，２２i 及び２３のうちので任意の数のＧＵＩをコンピュータ画面に表示させ、例えばあるＧＵＩ画面に表示されたソースプログラムのある行を指定すると、他のＧＵＩ画面に表示されたフローグラフの対応する部分が色違いで表示されるというように、複数のＧＵＩ画面を関連付けて表示するための部分である。これを用いることによって、プログラム内容の理解がより容易となる。
【００３０】
本装置では、プログラム解析情報作成部１１において、どの解析情報までを作成するかを、オペレータが任意に指定できるようにしてもよい。このようにすると、例えば、コールグラフを表示するだけという場合には、それより上位の解析情報は必要ないので、その旨を指定しておくことにより、バッチ処理による解析処理がより高速化する。
【００３１】
次に、本発明の記録媒体について説明する。本発明のソフトウェア解析装置は、プログラムを読み込んだコンピュータが、そのプログラムに従って動作することによって実現される。したがって、このようプログラムを記録した記録媒体、例えばフロッピーディスク、ＣＤ−ＲＯＭ、光磁気ディスク、磁気テープ、半導体記憶装置などをコンピュータに装着し、当該プログラムを読み込ませることによって、コンピュータ上で本発明を実施することが可能となる。
【００３２】
尚、本発明は、上記実施形態に限定されるものではなく、その要旨の範囲内で種々の変更が可能である。
【００３３】
【発明の効果】
以上説明したように、本発明によれば、プログラム解析情報作成手段によって作成されたプログラム解析情報を複数に分割し、それぞれを順次所定のデータ記録媒体に格納するので、大規模なプログラムに対してプログラム解析情報を得ようとした場合に、コンピュータに実装できるメモリ容量に制限があっても、大規模なプログラムのプログラム解析情報を安全に得ることができる。
【図面の簡単な説明】
【図１】本発明の一実施形態のソフトウェア解析装置のにおける解析情報作成部について説明するためのである。
【図２】本発明の一実施形態のソフトウェア解析装置がデータベースに格納するプログラム解析情報の構造を示した図である。
【図３】本発明の一実施形態のプログラム解析部について説明するための図である。
【符号の説明】
１０    ソースファイル
１１    プログラム解析情報作成部
１２    プログラム解析情報格納部
１３    バッチ解析部
１４    バッチ解析結果ファイル
２０1 ，・・・２０i     プログラム解析部
２１1 ，・・・２１i     解析結果
２２1 ，・・・２２i ，２３    ＧＵＩ
２４    ＧＵＩ連動部
【図１】
0003997495.tif 000002
【図２】
0003997495.tif 000003
【図３】
0003997495.tif 000004