(57)【要約】【課題】本発明の課題は、Ｊａｖａ言語プログラムを用いた大規模業務系の保守作業の負担を著しく軽減できるツールを提供することである。【解決手段】Ｊａｖａ言語プログラムのクラスファイルからクラス情報、メソッド情報及び参照先メソッド情報を抽出し、抽出したクラス情報の中で、オブジェクトを生成する具象クラス及び生成する可能性のあるクラスと同一のＩＤであるオブジェクトＩＤを生成すると共に、前記クラスファイルから抽出した参照先メソッド情報及び前記オブジェクトＩＤをキー情報として具象クラスＩＤ及び具象メソッドＩＤよりなる具象クラス・メソッドＩＤと、該具象クラス・メソッドＩＤの関連先である具象クラス・メソッドＩＤの組み合わせを検索して関連元具象クラス・メソッドＩＤと関連先具象クラス・メソッドのペア情報を生成し、所望のクラス・メソッドを指定し、該クラス・メソッドに関連する一連の具象クラス・メソッドを抽出して画面に表示するようにしたＪａｖａ言語プログラムの分析ツール。【選択図】図１２−１
2008123259.tif 000002
【特許請求の範囲】
【請求項１】
Ｊａｖａ言語プログラムのクラスファイルからクラス情報、メソッド情報及び参照先メソッド情報を抽出する第１の手段と、
抽出したクラス情報の中で、オブジェクト化される具象クラスと同一のＩＤであるオブジェクトＩＤを生成する第２の手段と、
前記クラスファイルから抽出した参照先メソッド情報及び前記オブジェクトＩＤをキー情報として具象クラスＩＤ及び具象メソッドＩＤよりなる具象クラス・メソッドＩＤと、該具象クラス・メソッドＩＤの関連先である具象クラス・メソッドＩＤの組み合わせを検索して関連元具象クラス・メソッドＩＤと関連先具象クラス・メソッドのペア情報を生成する第３の手段と、
所望のクラス・メソッドを指定し、該クラス・メソッドに関連する一連の具象クラス・メソッドを抽出して画面に表示する第４の手段よりなることを特徴とするＪａｖａ言語プログラムの分析ツール。
【請求項２】
請求項１において、前記第１の手段のクラス情報は、クラスのＩＤ情報と、該クラスが具象クラス、インターフェース及び抽象クラスの何れかに属するかを示すクラス種類の情報と、該クラスの親子の関係にあるクラス情報を含んでいることを特徴とする分析ツール。
【請求項３】
請求項１において、前記第１の手段のメソッド情報は、メソッドのＩＤ情報と、メソッドが具象メソッド、抽象メソッド及びその他のメソッドの何れに属するかを示すメソッド種類の情報を含むことを特徴とする分析ツール。
【請求項４】
請求項１において、前記第１の手段の参照先メソッド情報は、参照元クラス・メソッドのＩＤ情報と、該参照元クラス・メソッドの参照先となるクラス・メソッドの名称情報と、参照先クラスが具象クラス、インターフェース及び抽象クラスの何れに属するかを示す参照先クラス種類の情報を含むことを特徴とする分析ツール。
【請求項５】
請求項１において、前記第２の手段におけるオブジェクトＩＤは、オブジェクトを生成する能力のある具象クラスのクラスＩＤと同一のＩＤであることを特徴とする分析ツール。
【請求項６】
請求項１において、前記第３の手段は、オブジェクトＩＤと、該オブジェクトＩＤに属する具象クラス・メソッドＩＤとの関係を表す第１のテーブルを作成する手段を有することを特徴とする分析ツール。
【請求項７】
請求項６において、前記第３の手段は、オブジェクトＩＤと、該オブジェクトＩＤを付与された親クラスに属する具象クラス・メソッドＩＤと、該親クラスの階層情報と、前記オブジェクトＩＤを付与された子クラスに属する具象クラス・メソッドＩＤと、該子クラスの階層情報とを表す第１のテーブルを作成する手段を有することを特徴とする分析ツール。
【請求項８】
請求項１において、前記第３の手段は、オブジェクトＩＤと、該オブジェクトＩＤに属する抽象クラスＩＤ及びインターフェースＩＤとの関係を表す第２のテーブルを作成する手段を有することを特徴とする分析ツール。
【請求項９】
請求項１において、前記第３の手段は、オブジェクト化される具象クラスのＩＤ（被生成クラスＩＤ）と、オブジェクトの生成クラスのＩＤ（生成クラスＩＤ）との関係を表す第３のテーブルを作成する手段を有することを特徴とする分析ツール。
【請求項１０】
請求項１において、前記第３の手段は、親のインターフェース及び親の抽象クラスに属する抽象メソッドを子のインターフェース及び子の抽象クラスに属する抽象メソッドとして登録することにより、隠蔽されている全抽象メソッドを登録する処理を含むことを特徴とする分析ツール。
【請求項１１】
請求項１において、前記第３の手段は、インターフェース又は抽象クラスのクラスＩＤと、抽象メソッドのメソッドＩＤとよりなる抽象クラス・メソッドＩＤと、該抽象クラス・メソッドＩＤが属する具象クラス・メソッドＩＤとの関係を示す第４のテーブルを作成する手段とを含むことを特徴とする分析ツール。
【請求項１２】
請求項１において、前記第３の手段は、参照元クラス・メソッドＩＤと、該参照元クラス・メソッドＩＤが属するオブジェクトＩＤと、参照先クラス・メソッドＩＤと、該参照先クラス・メソッドＩＤが属するオブジェクトＩＤとの関係を表す第５のテーブルを作成する手段を含むことを特徴とする分析ツール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｊａｖａ（登録商標）言語プログラムの分析ツールに関し、特にＪａｖａ言語プログラムを用いた大規模業務系の影響分析ツールに関する。なお、Ｊａｖａは米Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃの登録商標である。
【背景技術】
【０００２】
例えば証券業務などのような大規模業務系においては、従来、ＣＯＢＯＬ言語プログラムが一般に用いられている。そして保守効率を上げるために、プログラムは処理目的毎に分類され、階層化された構造を有するのが一般的である。また、プログラムが階層化された構造であることを前提とした構造解析ツール類も充実しており、これらのツールを使うことによって、効率的にシステムの保守を行うことができる。
【０００３】
ところで最近は、大規模業務系の再構築に当たり、使用言語をＣＯＢＯＬからＪａｖａに置き換える例が増えている。
【０００４】
ＣＯＢＯＬ言語に比べて、Ｊａｖａ言語は生産性、拡張性及び適用性に優れているため、オープンシステムの開発用に広く用いられているが、保守作業効率において後述のような様々な問題があるため、非常に限られた条件の中でしか使用されていないのが実状である。
【０００５】
以下、まずＪａｖａ言語の概要について述べ、次に大規模業務システムの開発にＪａｖａ言語プログラムを用いた場合の課題について述べる。
【０００６】
（１）Ｊａｖａ言語の概要
Ｊａｖａ言語のプログラムは、複数のクラスの組み合わせにより成り立っている。クラスとは、データと処理とをまとめたものと言える。つまりＪａｖａ言語では、関連するデータや処理をまとめたクラスという部品を作っておき、それらを自由に組み合わせたり、再利用して複雑なプログラムを作成する。クラスを構成するデータをフィールド、処理をメソッドと言い、フィールドやメソッドをクラスのメンバと称する。
【０００７】
クラスはプログラムコードであり、これを実際にコンピュータで実行するためには、オブジェクトを生成しなければならない。オブジェクトとは、プログラムコードであるクラスが、コンピュータメモリ上に実行可能な状態に存在している場合のクラスに対する呼称である。クラスからオブジェクトを生成することをインスタンス化又はオブジェクト化という。
【０００８】
フィールドとは、クラス内の変数（データ）であり、メソッドとは、データの操作方法（処理）を定義したものである。処理の対象となる値を引数（パラメータ）といい、処理の結果の値のことを戻り値（返り値）という。
【０００９】
Ｊａｖａ言語プログラムの拡張性及び適用性が優れている一つの理由は、クラスの継承という仕組みがあるからである。クラスの継承とは、クラスがほかのクラスのメンバを受け継ぐ機能である。例えば、クラスＡのメンバをクラスＢが受け継ぐことができる。継承する元となるクラスをスーパークラス（親クラス）、継承して作ったクラスをサブクラス（子クラス）という。
【００１０】
またＪａｖａ言語では、クラスに対するアクセス方法を定義したインターフェースと称されるものが使用される。インターフェースはクラスと似たものであるが、定数と、後述の抽象メソッドしかメンバになれないところがクラスとは異なる。
【００１１】
クラスは、抽象クラスと具象クラス及びインターフェースに分類される。抽象クラスは、通常のクラスにインターフェースの機能を付加したものであり、具象クラスは、実際のプログラムコードを記述し、インスタンス化可能としたものである。インターフェースと抽象クラスは、そのままではインスタンス化することはできない。つまり、抽象クラス、具象クラス、インターフェースのうちで、オブジェクトコードを生成できるのは具象クラスのみである。
【００１２】
一方メソッドも、抽象メソッドと具象メソッドに分類される。抽象メソッドとは、メソッドの名前、戻り型、引数だけを定義し、ロジック（処理の内容）は定義していないものをいう。この抽象メソッドはインターフェースと、抽象クラスにおいて定義される。具象メソッドは、メソッドの名前、戻り型、引数及びロジックを定義したもので、抽象クラス又は具象クラスで定義される。参照先の具象メソッドを実装メソッド、実装メソッドを有するクラスを実装クラスと称することもある。
【００１３】
次に、Ｊａｖａ言語を用いて記述されたプログラムを図１−１を用いて説明する。
【００１４】
図の１００，３００，４００は具象クラス、２００はインターフェースの一例を示す。具象クラス１００は、Ｕｓｅｒｃｌａｓｓという名前を有する。そのクラスは、ｕｓｒｍｄｔというメソッドを有する。そのメソッドは、参照先がＩＳｔｒａｔｅｇｙというインターフェースであることを示している。
【００１５】
一方、インターフェース２００は、ＩＳｔｒａｔｅｇｙという名称を有し、ｔｃという抽象メソッドを含んでいる。
【００１６】
また具象クラス３００は、ｃｌａｓｓＡという名称を有し、ｔｃという具象メソッドを有する。具象クラス３００はオブジェクトを生成しているので実装クラスと称される。具象クラス１００は、インターフェース２００を介して別の具象クラス３００と関連付けられるので、本明細書では、１００を関連元クラス、３００を関連先クラスという。
【００１７】
図１−２は、図１−１のように記述されたプログラムのクラス間の関係を表わすクラス図である。クラス１００はインターフェース２００を参照し、クラス３００はクラス４００を参照している。また、クラス３００はインターフェース２００を継承しているので、５００で示す記号を用いて表示される。
【００１８】
図１−３は、オブジェクト同士の関係を示すシーケンス図である。前述のように、具象クラス、抽象クラス及びインターフェースのうちでオブジェクトを生成できるのは具象クラスだけである。この図は、クラス１００，３００，４００のオブジェクト１００´，３００´，４００´の関係を示している。クラス１００，３００，４００のオブジェクトは一般に、別のクラスにより生成される。各オブジェクト１００´，３００´，４００´を生成しているクラスを生成クラスと称し、クラス１００，３００，４００を被生成クラスと称する。
【００１９】
次に、一つのクラスに含まれる情報について説明する。
【００２０】
図１−４は、一つのクラスに含まれる情報とその関連を示す図である。１つのクラスには、クラス情報１０、メソッド情報２０、データ情報６０及びメソッド間の関連を示す情報３０が含まれる。
【００２１】
クラス情報１０には、クラスＩＤ１１、クラス名１２、スーパークラス名（親クラス名）１３、インターフェース名１４が含まれる。また、メソッド情報２０には、メソッドＩＤ２１、メソッド名２２、メソッドの型（具象タイプ、抽象タイプ）２３、引数２４及び引数の型２５の情報が含まれる。
【００２２】
メソッド間関連情報３０としては、メソッド２１が参照するメソッド３１、参照するメソッドのメソッド名３２、参照メソッドの引数のタイプ３３が含まれる。参照先メソッド３１は、ｓｔａｔｉｃ修飾子のついたメソッド３４、インターフェースのメソッド３５、コンストラクタという特殊なメソッド３６及びその他のメソッド３７の４種類に分類される。コンストラクタはオブジェクトの生成のときに自動的に呼び出されるメソッドであり、ｓｔａｔｉｃメソッドは、どのオブジェクトでも動作を同じにする特殊なメソッドである。
【００２３】
インターフェース３５には、インターフェース名４１とメソッド型４２の情報が含まれ、その他のクラス３７にも同様に、参照先のクラス３８とメソッドの型３９の情報が含まれる。またｓｔａｔｉｃメソッド３４には、参照先クラス４０の情報が含まれる。
【００２４】
当該クラス１０でオブジェクトを生成する場合は、そのオブジェクトを生成する対象となったクラス５０の情報であるクラス名５１が含まれる。
【００２５】
一方、クラス１０のフィールドに関する情報６０として変数名６１、変数を参照する場合の参照先クラス６２、変数の型６３等の情報が含まれる。
【００２６】
（２）Ｊａｖａ言語プログラムを大規模業務系に用いた場合の問題点
Ｊａｖａ言語は多数のクラスの組み合わせにより成り立っているため、生産性に優れ、また、システムを拡張するのに適した言語でもある。しかしながらシステムを保守する場合には、以下説明するような数々の問題がある。
【００２７】
証券業務システム等の大規模事務系のプログラムにＪａｖａ言語を用いると、クラス数は、例えば数万個から数１０万個、メソッド数は数１０万個から数１００万個に達する膨大なものとなる。
【００２８】
このようなシステムにおいて、何らかの不具合が発生した場合は、その不具合の原因となったクラスやメソッドを特定しなければならない。また、特定されたクラスやメソッドを修正したときに、影響を受ける一連のクラスやメソッドを把握する必要もある。
【００２９】
また、システムに新たな機能を追加するためにクラスを追加や修正する場合も同様に、追加や修正したクラスやメソッドにより影響を受ける一連のクラスやメソッドを把握する必要がある。
【００３０】
このような保守業務の効率化を図るために、ＣＯＢＯＬ言語を用いた場合と同様に、Ｊａｖａ言語を用いたプログラムも、数万〜数１０万のクラスは業務の処理目的毎に分類され、階層化された構造とされるのが一般的である。そしてＪａｖａプログラムの保守においては、図１−２に例示したクラス図や、図１−３に例示したシーケンス図を用い、これらにソースコード分析を加えることによってクラスやメソッドを特定したり、特定のクラスやメソッドと関連のある一連のクラスやメソッドを把握している。
【００３１】
しかしながらＪａｖａ言語プログラムは、不具合の発生したクラス、メソッドを特定したり、特定したクラス、メソッドに関連性のある一連のクラス、メソッドを把握することが困難な構造を有するため、保守業務においてプログラム開発者への負担が非常に大きい。
【００３２】
一つの理由は、従来のツールではメソッド単位の詳細な流れを把握することはできないことによる。図１−５は、Ｊａｖａ言語プログラムを、クラス・メソッドを単位として捉えた場合の処理の流れを例示したものである。
【００３３】
この図は、最上位階層のクラスＣ１１のメソッドＭ２が次の階層のクラスＣ２１のメソッドＭ４を参照し、クラスＣ２１のメソッドＭ４が次の階層のクラスＣ３１のメソッドＭ５を参照し、以下点線で示す参照関係がある例を示している。また同様に、クラスＣ１１のメソッドＭ４がクラスＣ２２のメソッドＭ１を参照し、クラスＣ２２のメソッドＭ１がクラスＣ３１のメソッドＭ５を参照している例を示している。
【００３４】
前述のクラス図（図１−２）は単に、クラスＣ１１，Ｃ２１，Ｃ２２・・・の関連を示すだけであるため、保守業務に当たり、メソッド単位の詳細な処理の流れを調べるためには、プログラム開発者がソースコードを分析して把握せざるを得なくなる。
【００３５】
ここで、各クラスのＩＤは、Ｃ１１，Ｃ２１，Ｃ２２・・・で表し、システムの中でユニークに（一意的に）特定できるコードが割り当てられ、各メソッドはＭ１，Ｍ２，Ｍ３・・・のように、各クラス内においてユニークに特定できるコードが割り当てられる。従って、クラスＩＤ＋メソッドＩＤ（以下これをクラス・メソッドＩＤという）により、システム内の全てのメソッドをユニークに特定することができる。
【００３６】
それ故、システムを構成するＪａｖａ言語プログラム内で実質的な処理に関与している（すなわちオブジェクトを生成している）全てのクラス・メソッドＩＤの関連を表すことができれば、所望のメソッドを特定したり、そのメソッドに関連する一連のクラス・メソッドを把握することができる。
【００３７】
本発明者は、数１０万〜数１００万に及ぶ全てのクラス・メソッドの中で、具象メソッドのみを抽出し、それらの関連を、クラス・メソッドＩＤを用いて表すことを試みた。しかし、コンピュータの能力を遥かに超える程膨大な処理になり、理論上は可能であっても、事実上は極めて困難であることが判った。その原因の一つは、Ｊａｖａ言語では、クラスがインターフェースや抽象クラスを参照したり、クラス間の継承と呼ばれる処理が頻繁に行われることによる。
【００３８】
次に、継承の一例について、図１−６を用いて説明する。
【００３９】
図１−６は、クラス２００がクラス１００を継承し、クラス３００がクラス２００を継承する例を示している。クラス１００にはクラスＩＤのＣ１１と、メソッドＩＤのｍ１が定義され、クラス２００にはクラスＩＤのＣ２１とメソッドＩＤのｍ２が定義され、クラス３００にはクラスＩＤのＣ３１とメソッドＩＤのｍ３が定義されていると仮定する。ソースコードプログラム上で、このクラス・メソッドＩＤのＣ１１ｍ１，Ｃ２１ｍ２，Ｃ３１ｍ３を継承の手法を用いて記述すると、実際にはＣ１１ｍ１〜Ｃ３１ｍ３の６個のクラス・メソッドＩＤが定義されたことになる。
【００４０】
つまり、ソースコードプログラム上はＣ２１ｍ１，Ｃ３１ｍ１，Ｃ３１ｍ２は隠された状態となる。従って、全ての具象クラス・メソッドＩＤの関連を調べるには、このように隠されているクラス・メソッドも含めた、全てのクラス・メソッド関連を調べなければならない。
【００４１】
また、具象クラス同士がインターフェースや抽象クラスを介在した複雑な参照関係にある場合も、全てのクラス・メソッドの参照先を追跡して、オブジェクトの生成に関与している具象クラス・メソッドの関連を調べることが必要となる。従って、これらの隠蔽クラスも含めて、全ての具象クラス・メソッド間の関連を調べるためには膨大な処理量が発生する。しかしながら従来のツールには、クラス隠蔽及びメソッド隠蔽された箇所の分析機能がなく、また妥当な具象メソッドだけを導出する機能もないため、プログラムの保守が極めて困難になる。
【００４２】
また、図１−３に例示したように、オブジェクト１００´，３００´，４００´の流れを示すシーケンス図も用いられるが、シーケンス図を作成する既存ツールは、継承関係やインターフェースが介在した関連の先を追跡した分析ができないため、シーケンス図を用いてもプログラム開発者の負担はそれ程小さくならない。
【００４３】
更に、従来の分析ツールはクラス図、シーケンス図を表示できるとは言え、一画面に表示できるクラス数、オブジェクト数は１０数個程度が限界であり、膨大な数のクラス・メソッド関連を把握することはできないため、これもプログラムの保守を困難にする一つの理由となっている。
【発明の開示】
【発明が解決しようとする課題】
【００４４】
本発明の目的は、上記のような従来の問題点を解決し、Ｊａｖａ言語プログラムを用いた大規模業務システムにおける保守作業の負担を著しく軽減することができるツールを提供することにある。
【００４５】
具体的には、本発明は、クラスの継承によりソースコードプログラム上では隠されたクラスに属する具象メソッドも含めて、具象クラス・メソッド間の関連を表示できるツールを提供することにある。
【００４６】
本発明の他の目的は、インターフェースまたは抽象クラスにより隠蔽された具象クラス・メソッドと、その関連を表示することが可能なツールを提供することにある。
【００４７】
本発明の他の目的は、クラスが機能的に分類され、階層化された構造のプログラムにおいて、ある分類に属する全ての具象クラス・メソッドと、その関連を表示することが可能なツールを提供することにある。
【００４８】
本発明の他の目的は、クラスが機能的に分類され、階層化された構造のプログラムにおいて、所望の具象クラス・メソッドを特定したときに、その特定された具象クラス・メソッドに関連する一連の具象クラス・メソッドを表示できるツールを提供することにある。
【００４９】
本発明の他の目的は、実装済みの資源を基に、リバースエンジニアリングによって設計書を生成し、設計書を保守するコストを大幅に削減すると同時に、設計書と実装の乖離を起こさないようにするツールを提供することにある。
【課題を解決するための手段】
【００５０】
上記の目的を達成するために本発明に係る分析ツールは、Ｊａｖａ言語プログラムのクラスファイルからクラス情報、メソッド情報及び参照先メソッド情報を抽出する第１の手段と、抽出したクラス情報の中で、オブジェクト化される具象クラスと同一のＩＤであるオブジェクトＩＤを生成する第２の手段と、前記クラスファイルから抽出した参照先メソッド情報及び前記オブジェクトＩＤをキー情報として具象クラスＩＤ及び具象メソッドＩＤよりなる具象クラス・メソッドＩＤと、該具象クラス・メソッドＩＤの関連先である具象クラス・メソッドＩＤの組み合わせを検索して関連元具象クラス・メソッドＩＤと関連先具象クラス・メソッドのペア情報を生成する第３の手段と、所望のクラス・メソッドを指定し、該クラス・メソッドに関連する一連の具象クラス・メソッドを抽出して画面に表示する第４の手段より構成したことに一つの特徴を有する。
【００５１】
本発明の他の特徴は、前記第１の手段のクラス情報が、クラスのＩＤ情報と、該クラスが具象クラス、インターフェース及び抽象クラスの何れかに属するかを示すクラス種類の情報と、該クラスの親子の関係にあるクラス情報を含んでいることにある。
【００５２】
本発明の他の特徴は、前記第１の手段のメソッド情報が、メソッドのＩＤ情報と、メソッドが具象メソッド、抽象メソッド及びその他のメソッドの何れに属するかを示すメソッド種類の情報を含んでいることにある。
【００５３】
本発明の他の特徴は、前記第１の手段の参照先メソッド情報が、参照元クラス・メソッドのＩＤ情報と、該参照元クラス・メソッドの参照先となるクラス・メソッドの一意キー情報及び名称情報と、参照先クラスが具象クラス、インターフェース及び抽象クラスの何れに属するかを示す参照先クラス種類の情報を含んでいることにある。
【００５４】
本発明の他の特徴は、前記第２の手段におけるオブジェクトＩＤを、オブジェクトを生成する能力のある具象クラスのクラスＩＤと同一のＩＤとしたことにある。
【００５５】
本発明の他の特徴は、前記第３の手段が、オブジェクトＩＤと、該オブジェクトＩＤに属する具象クラス・メソッドＩＤとの関係を表す第１のテーブルを作成する手段を備えたことにある。
【００５６】
本発明の他の特徴は、前記第３の手段が、オブジェクトＩＤと、該オブジェクトＩＤを付与された親クラスに属する具象クラス・メソッドＩＤと、該親クラスの階層情報と、前記オブジェクトＩＤを付与された子クラスに属する具象クラス・メソッドＩＤと、該子クラスの階層情報とを表す第１のテーブルを作成する手段を備えたことにある。
【００５７】
本発明の他の特徴は、前記第３の手段が、オブジェクトＩＤと、該オブジェクトＩＤに属する抽象クラスＩＤ及びインターフェースＩＤとの関係を表す第２のテーブルを作成する手段を備えたことにある。
【００５８】
本発明の他の特徴は、前記第３の手段が、オブジェクト化される具象クラスのＩＤ（被生成クラスＩＤ）と、オブジェクトの生成クラスのＩＤ（生成クラスＩＤ）との関係を表す第３のテーブルを作成する手段を備えたことにある。
【００５９】
本発明の他の特徴は、前記第３の手段が、親のインターフェース及び親の抽象クラスに属する抽象メソッドを子のインターフェース及び子の抽象クラスに属する抽象メソッドとして登録することにより、隠蔽されている全抽象メソッドを登録する処理を含むことにある。
【００６０】
本発明の他の特徴は、前記第３の手段が、インターフェース又は抽象クラスのクラスＩＤと、抽象メソッドのメソッドＩＤとよりなる抽象クラス・メソッドＩＤと、該抽象クラス・メソッドＩＤが属する具象クラス・メソッドＩＤとの関係を示す第４のテーブルを作成する手段を備えたことにある。
【００６１】
本発明の他の特徴は、前記第３の手段が、参照元クラス・メソッドＩＤと、該参照元クラス・メソッドＩＤが属するオブジェクトＩＤと、参照先クラス・メソッドＩＤと、該参照先クラス・メソッドＩＤが属するオブジェクトＩＤとの関係を表す第５のテーブルを作成する手段を備えたことにある。
【発明の効果】
【００６２】
本発明によれば、次のような効果が得られる。
【００６３】
（１）Ｊａｖａ言語プログラムを、クラス間の関連よりも更に詳細なクラス・メソッド間の関連として画面上で把握することが可能となる。クラス・メソッド間の関連は、オブジェクトを生成しないインターフェースや抽象クラスを除いた具象クラス・メソッド間の関連として把握することができ、且つクラス隠蔽により、ソースコードプログラム上では隠蔽されたクラス・メソッドも表示することができる。
【００６４】
（２）具象クラス・メソッドＩＤを単位としてその関連を把握できるので、あるクラスのあるデータ項目にアクセスするクラス・メソッドを特定したり、当該データ項目が利用されている一連のクラス・メソッドを特定することが可能となる。
【００６５】
（３）具象クラス・メソッドを対象としたクラス・メソッドを単位として、その関連を把握できるので、階層構造のＪａｖａ言語プログラムにおいて、あるクラス・メソッドが他のクラス・メソッドに及ぼす範囲を特定したり、一つのトランザクションに用いられる全てのクラス・メソッドを特定し、画面上に表示することが可能となる。
【００６６】
（４）オブジェクトの関連を示す従来のシーケンス図を作成するツールでは、隠蔽メソッドへの関連より先の具象メソッドへの関連を分析することができないが、本発明ツールにおいては、隠蔽メソッドの先の具象メソッドへの関連も分析し、画面上に表示することが可能となる。
【００６７】
上記の（１）〜（４）により、大規模業務系のＪａｖａ言語プログラムの保守作業の負担を著しく軽減することが可能になる。
【００６８】
（５）設計書をリバースエンジニアリングで生成することにより、人手で設計書を保守する工数を大幅に低減することができる。
【００６９】
（６）人手で設計書を保守すると、設計書と実装との乖離を起こし易いが、リバースエンジニアリングで生成することによって、実装との乖離を起こさない。
【発明を実施するための最良の形態】
【００７０】
以下、本発明に係る分析ツールの概要をまず説明し、次にその一実施形態を図面を参照して説明する。
【００７１】
本発明は、具象クラス・メソッド間の関連を調べるのに、クラスＩＤとメソッドＩＤの他にオブジェクトＩＤという概念を導入し、これらのＩＤを基にして隠されたクラス及び隠蔽されたクラスも含めて、具象クラス・メソッドと、その具象クラス・メソッドが参照する具象クラス・メソッドとの関係を求めて表示できるようにしたことに基本的な特徴を有する。
【００７２】
本発明ツールにより、具象クラス・メソッドの関連情報を表示する手順は次のとおりである。
（１）Ｊａｖａプログラムの各クラスファイルからクラス情報、メソッド情報、及び参照先メソッド情報を抽出する。
（２）抽出した情報をＤＢに登録する。
（３）登録された情報を基にしてオブジェクトＩＤ情報を生成する。
（４）クラスＩＤ、メソッドＩＤ及びオブジェクトＩＤを基にして、参照元の具象クラス・メソッドＩＤと、参照先の具象クラス・メソッドＩＤの関連情報を生成する。
（５）具象クラス・メソッドの関連情報を表示する。
【００７３】
以下、これらの具体的内容を順に説明する。
【００７４】
（１）Ｊａｖａプログラムからの情報抽出
Ｊａｖａプログラムから、図１−４に例示したクラス情報１０、メソッド情報２０及び参照先情報３０を抽出するために、まずクラスファイルを生成し、次にクラスファイルを分析する。
【００７５】
（１．１）クラスファイル生成
クラスファイルとは、Ｊａｖａソースコードプログラムを構成する各クラスをコンパイルすることにより生成されたファイルである。例えばＪａｖａソースコードプログラムの各クラスは、図２−１に例示されるように記述されており、これをコンパイルすると、図２−２に例示されるような数字で記述されたものになる。大規模業務システムではクラスの数が数１０万個に達するから、その数のクラスファイルが作成されることになる。
【００７６】
このクラスファイルの中には具象ファイル、抽象クラス及びインターフェースのファイルが含まれる。
【００７７】
（１．２）ファイル分析
次に、このクラスファイルを分析して４種類の情報を抽出する。図３−１に示すクラス情報、図３−２に示すメソッド情報、図３−３に示すスーパークラス情報、及び図３−４に示すメソッド関連情報である。
【００７８】
従来、ソースコードプログラムからクラス情報やメソッド情報を抽出する試みはあるが、本発明においては更にメソッド関連情報を抽出したことに一つの特徴がある。
【００７９】
クラス情報には、具象クラス、抽象クラス及びインターフェースのクラスＩＤ、クラス名、パッケージ名、スーパークラス名、スーパークラスパッケージ名及びクラスの種類の情報が含まれる。
【００８０】
パッケージとは、複数のクラスやインターフェースをひとまとめにしたものである。またスーパークラスとは、継承する元となったクラス、つまり親クラスであり、継承して作ったクラスをサブクラス（子クラス）という。クラスの種類は、そのクラスが具象クラス、抽象クラス及びインターフェースの３種類に分類する情報である。
【００８１】
メソッド情報には、図３−２に示すように、クラスＩＤ、メソッドＩＤ、メソッド名、引数及び戻り値の情報、コンストラクタ、メソッドの種類などの情報が含まれる。メソッドＩＤは、各クラスＩＤの中で一義的に定められるＩＤである。コンストラクタとは、オブジェクトの生成をするときに自動的に呼び出される特殊なメソッドである。
【００８２】
スーパークラス情報には、図３−３に示すように、子クラスＩＤと親クラス名との関係、及びクラスＩＤとインターフェース名との関係を表す情報が含まれる。
【００８３】
メソッド関連情報には、図３−４に示すように、クラスＩＤ、メソッドＩＤの他に、一意キーＩＤ（図３−４のレコードを一意的（ユニーク）に特定するＩＤ）、参照先のクラス名、参照先のメソッド名が含まれる。また参照先クラスが具象クラス、インターフェース、抽象クラスのいずれに属するかを示す参照先クラス情報も含まれる。
【００８４】
図３−５は、クラスファイルから上記のクラス情報、メソッド情報、スーパークラス情報及びメソッド関連情報を抽出するフローを示す。
【００８５】
ステップＳ４０１において、図２−１に例示したクラスファイルを１件読み込む。続いて、クラス項目の記述からクラス名称の情報を取り出し（Ｓ４０２）、更にクラス種類の情報を取り出す（Ｓ４０３）。
【００８６】
ステップＳ４０４では、ｅｘｔｅｎｄｓの項目値を全部取り出す。ｅｘｔｅｎｄｓは継承を定義する記号であり、例えば
ｃｌａｓｓ  Ａ  ｅｘｔｅｎｄｓ  Ｂ
という記述は、サブクラス（子クラス）Ａがスーパークラス（親クラス）Ｂを継承したことを表す。また、インターフェースに対してｅｘｔｅｎｄｓの記号を用いる場合は、拡張インターフェース（子インターフェース）がそのインターフェース（親インターフェース）を継承したことを表す。
【００８７】
ステップＳ４０５では、ｉｍｐｌｅｍｅｎｔｓ項目値を全部取り出す。ｉｍｐｌｅｍｅｎｔｓは実装を定義する記号であり、例えば
ｃｌａｓｓ  Ｃ  ｉｍｐｌｅｍｅｎｔｓ  Ｄ
と記述すると、例えばインターフェースＤをクラスＣが実装することを表す。
【００８８】
ステップＳ４０６では、読み込んだクラスファイルのクラス種類がインターフェースかクラスかを判定する。クラスの場合はｅｘｔｅｎｄｓの項目に記述されたクラス（上記のＤ）をスーパークラス名称とし（Ｓ４０７）、また、ｉｍｐｌｅｍｅｎｔｓの項目値（上記のＤ）をインターフェース名称とする（Ｓ４０８）。
【００８９】
一方、ステップＳ４０６でインターフェースと判定された場合、ｅｘｔｅｎｄｓ項目値を拡張インターフェース名称とする（Ｓ４０９）。
【００９０】
次に、ステップＳ４１０〜Ｓ４１９において、メソッドに関する情報を抽出する。まず、クラスファイルからメソッド名称を取り出し（Ｓ４１２）、更に戻り値（処理の結果の値）の型名（例えば整数型）及び引数（処理の対象となる変数、パラメータ）の型名称を順次取り出す（Ｓ４１３，Ｓ４１４）。
【００９１】
ステップＳ４１５でメソッド名称がクラス名称に等しいか否か判断し、等しい場合、上記メソッドはオブジェクトの生成のときに呼び出されるコンストラクタというメソッドであると判断する（Ｓ４１６）。
【００９２】
ステップＳ４１５の判定がＮＯのときは、メソッド中に処理ロジックが存在するか否か判定する（Ｓ４１７）。処理ロジックが存在すれば具象メソッドと判断し（Ｓ４１８）、処理を記述せずに、単に呼び出した方だけを定義したメソッドは抽象メソッドと判断する（Ｓ４１９）。このようにして、図３−２に示したメソッド情報が抽出される。
【００９３】
次に、ステップＳ４２０〜Ｓ４２７によりメソッド関連情報を抽出する。ステップＳ４２０において、メソッド本体の処理ロジック中に記述された参照先のメソッド情報を検索する。ステップＳ４２１で未処理のメソッドがあるか否か判定し、ある場合はステップＳ４２２に進み、参照先メソッドのメソッド名称を取り出す。また、ステップＳ４２３において、参照先メソッドが属するクラスのクラス名称をそれぞれ取り出す。
【００９４】
次に、処理ロジックの引数がレジスタ変数か否かを判定し（Ｓ４２４）、レジスタ変数の場合は、ロジックを遡って、レジスタ変数に値を代入している箇所から引数の型名称（例えば整数型）を取り出す（Ｓ４２５）。またステップＳ４２４の判定がＮＯの場合は、参照先メソッドの引数の型名称を順次取り出す（Ｓ４２６）。また、参照先メソッドを呼び出すオペランドから参照先がインターフェースか、或いはクラスかを判断する（Ｓ４２７）。
【００９５】
このように本発明は、クラス情報及びメソッド情報だけでなく、参照先のクラス及びメソッドの情報をも抽出する。そして得られた情報は、図３−６に例示するＸＭＬファイルとして整理される。
【００９６】
（２）抽出情報のＤＢ投入
上記のようにして抽出された情報は、ＤＢに投入される。図４−５は、ＤＢ投入のフローを示すもので、ステップＳ５０１において、前述のＸＭＬファイルにより各クラス毎のレコードが読み込まれ、ステップＳ５０２でクラスに関する情報が、図４−１に例示するクラス情報テーブルＴ１００に登録される。またステップＳ５０３では、メソッドに関する情報が、図４−２に例示するメソッド情報テーブルＴ２００に登録される。ステップＳ５０４では、クラスのスーパークラス及びインターフェースの情報が、図４−３に例示するスーパークラス情報テーブルＴ３００に登録される。更にステップＳ５０５では、メソッド関連情報が、図４−４に例示するメソッド関連情報テーブルＴ４００に登録される。このようにして、数万〜数１０万個の全クラスの情報が、全てＤＢに投入される（Ｓ５０６）。
【００９７】
（３）オブジェクトＩＤ情報の生成
まず、オブジェクトＩＤという新しい概念を導入することによって、具象クラス・メソッド間の関連情報を探索する仕組みについて説明する。
【００９８】
簡単な例として、図５−１に示すように、具象クラスＡ，Ｂ，ＣとインターフェースＩＡ，ＩＢがあり、ＩＡをＩＢが継承し、クラスＢ及びＣがインターフェースＩＢを継承している場合を考える。説明の便宜上、Ａ，Ｂ，Ｃ・・・はクラスの名称と、クラスＩＤの両方を指称するものとし、クラス・メソッドＩＤは、例えばＡａ，ＩＡｍのように表すものとする。
【００９９】
オブジェクトＩＤは、オブジェクト化される具象クラスに対して付与される。この例では、具象クラスＡ，Ｂ，Ｃがインスタンス情報を生成するクラスに相当するので、各クラスＡ，Ｂ，ＣにクラスＩＤと同一のオブジェクトＩＤのＡ，Ｂ，Ｃが付与される。すなわち、オブジェクトＩＤはクラスＡ，Ｂ，Ｃのオブジェクトの生成クラス（生成クラス）ではなく、オブジェクト化されるクラス（被生成クラス）のクラスＩＤと同じコードとされる。なお説明の便宜上、ここではオブジェクトＩＤが付与されると記述するが、実際には、オブジェクトＩＤとクラス・メソッドとの対照表あるいはオブジェクトＩＤとインターフェースの対照表が作成される。また、クラス・メソッドＩＤがＡａとＡｂのように、同じクラスに属する異なるメソッドにも同一のＡというオブジェクトＩＤが付与される。
【０１００】
一方、インターフェースＩＡ，ＩＢはインスタンス化されないので、継承関係にある具象クラスのオブジェクトＩＤが付与される。図５の例では、インターフェースＩＡ、ＩＢは具象クラスＢと継承関係にあるのでＢというオブジェクトＩＤが付与されると同時に、具象クラスＣとも継承関係にあるのでＣというオブジェクトＩＤも付与される。すなわち、各インターフェースのクラス・メソッドＩＤに相当するＩＡｍ，ＩＢｍが、具象クラスＢのオブジェクトＩＤのＢに属するという対照表が作成されると共に、ＩＡｍ及びＩＢｎがオブジェクトＩＤのＣに属するという関係が対照表に登録される。
【０１０１】
このようにして、全てのクラス・メソッドがオブジェクト化されるクラスのオブジェクトＩＤに属するという関係表が作成される。従来は、例えばＡａの関連先がＢｍであった場合、多数のクラスやインターフェースの参照関係、継承関係を追跡してＢｍを探索しなければならなかったが、本発明では、ＩＡｍ，ＩＢｎ、Ｂｍに共通のオブジェクトＩＤであるＢが付与され、ＡａがオブジェクトＩＤのＢに属するＩＡｍを参照先としているので、オブジェクトＩＤのＢを媒介情報としてＡａとＢｍとの関係をより探索しやすくなる。
【０１０２】
以上述べたオブジェクトＩＤをキー情報として、具象クラス・メソッド間の関連を探索するには、事前に次のような準備をする必要がある。
【０１０３】
第１は、オブジェクトＩＤと具象クラス・メソッドＩＤの対照表の作成である。図５の例で説明すると、クラス・メソッドＡａ，ＡｂがオブジェクトＩＤのＡに属し、クラス・メソッドＢｍがオブジェクトＩＤのＢに属することを示すテーブルである。本明細書では、このテーブルをオブジェクト情報マスターテーブルと称する。
【０１０４】
第２は、オブジェクトＩＤとインターフェースＩＤ（及び抽象クラスのＩＤ）との対照表である。図５の例で説明すると、インターフェースＩＡ，ＩＢがオブジェクトＩＤのＢに属し、同様にＩＡ，ＩＢがオブジェクトＩＤのＣにも属するという関係を示すテーブルである。本明細書では、このテーブルをオブジェクト対インターフェース情報テーブルと称する。
【０１０５】
第３は、オブジェクト化される具象クラス（被生成クラス）と、そのオブジェクトの生成クラスのＩＤとの対照表である。本明細書では、前者のクラスを被生成クラス、後者のクラスを生成クラスと称する。図５の例には示されていないが、クラスＡのオブジェクトはクラスＡ以外の別のクラス、例えばクラスＸで生成される。また、クラスＢのオブジェクトは別のクラス、例えばクラスＹで生成される。従ってこの場合は、被生成クラスＡと生成クラスＸとの関係及び被生成クラスＢと生成クラスＹとの関係を示すテーブルとなる。本明細書では、このテーブルを生成クラス情報テーブルと称する。
【０１０６】
第４は、継承関係にあるために隠蔽されている抽象メソッドを可視化する処理である。図５の例では、インターフェースＩＢがＩＡを継承しているため、クラス・メソッドＩＤとしてＩＡｍとＩＢｎしか記述されていないが、実際にはＩＢｍが隠蔽されている（図１−６参照）。継承関係にある全ての抽象クラス・メソッドＩＡｍ，ＩＢｍ，ＩＢｎがオブジェクトＩＤのＢに属するという関係を表すためには、隠蔽されている抽象メソッドも含めた全抽象メソッドを可視化する処理が必要である。本明細書では、この処理を全抽象メソッド情報登録処理と称する。
【０１０７】
第５は、具象クラス・メソッドＩＤが参照している参照先の抽象クラス・メソッドＩＤと、その抽象クラス・メソッドＩＤが属するオブジェクトＩＤ、及び同じオブジェクトＩＤに属する具象クラス・メソッドＩＤとの関係を示すテーブルである。図５の例では、クラスＡの参照先のＩＡｍと、ＩＡｍが属するオブジェクトのＩＤであるＢと、オブジェクトＢに属する具象クラスＢの具象クラス・メソッドＩＤＢｍとの関係を示すテーブルである。本明細書では、このテーブルをインターフェース対実装対応情報テーブルと称する。
【０１０８】
本発明は、以上説明したテーブルの情報に基づいて、具象クラス・メソッド間の関連情報を生成することに一つの特徴を有する。
【０１０９】
以下、第１〜第５の処理及びテーブル作成のフローについて詳しく説明する。
【０１１０】
（３．１）オブジェクト情報マスターテーブルの作成
図６−１は、オブジェクト情報マスターテーブルＴ５００に含まれる情報を示すもので、オブジェクトＩＤと、オブジェクトＩＤに属する具象クラス・メソッドＩＤの関係を示す。また、クラスに親子関係がある場合は、親・子・孫の順に番号を付けた階層番号の情報も含まれる。
【０１１１】
図６−２は、オブジェクトマスター情報テーブルを作成するフローを示す。まず、ステップＳ６０１において、クラス情報テーブルＴ１００からクラスタイプが“０”のもの、すなわち具象クラスのみのクラスＩＤを抽出して、一時テーブル（Ｔ）を作成する。ステップＳ６０２では、テーブル（Ｔ）にクラスＩＤが登録されているか否かを判定し、登録されている場合は、そのクラスＩＤを１件取り出してそのクラスＩＤをオブジェクトＩＤ（Ｏ）とする（Ｓ６０３）。
【０１１２】
次に、クラス情報テーブルＴ１００を参照して、取り出したクラスＩＤに親クラス名が設定されているか否か判断する（Ｓ６２１）。親クラス名が設定されている場合は、親クラス名をキー情報として、クラス情報テーブルＴ１００を参照して親クラスＩＤを取得する（Ｓ６２２）。そして取得したクラスＩＤを主体にして（Ｓ６２４）、再びステップＳ６２１とＳ６２２を繰り返すことにより最上位のクラスＩＤ（ＳＴ）を取得する（Ｓ６２３）。
【０１１３】
階層番号（Ｌ）として（Ｌ）＝０とし（Ｓ６０４）、（ＳＴ）を（Ｂ）に置き換えた後（Ｓ６０５）ステップＳ６０３で（Ｌ）＋１を（Ｌ）に置き換えることによって最上位の階層番号が１となる。すなわちこの実施例では、階層番号は相対的な値で、最上位の親が一番若い番号となる。
【０１１４】
次にステップＳ６０７において、メソッド情報テーブルＴ２００から、最上位のクラス（Ｂ）に属する具象メソッド（メソッド種類が“０”のクラス）のメソッドＩＤを取り出す。取り出したメソッドＩＤと、クラスＩＤ（Ｂ）のペアと、階層番号（Ｌ）と、オブジェクトＩＤ（Ｏ）を１組として、集合メモリ（Ｍ１）に格納する。
【０１１５】
この結果、オブジェクトＩＤ（Ｏ）と、そのオブジェクトＩＤを付与される最上位の親クラスに属する具象メソッドのクラス・メソッドＩＤの関連を表す情報が生成される。
【０１１６】
次にステップＳ６０８では、クラス情報テーブルＴ１００を参照して、クラスＩＤ（Ｂ）を親クラスとする子クラス（Ｃ）を検索する。ステップＳ６０９において、クラス（Ｂ）の子クラス（Ｃ）が存在すると判定された場合は、Ｃ→Ｂと置き換えて、ステップＳ６０６〜Ｓ６０９を繰り返す。この結果、親子関係にある全てのクラスのクラス・メソッドＩＤに対してオブジェクトＩＤ（Ｏ）が付与される。
【０１１７】
ステップＳ６１１では、オブジェクトＩＤ（Ｏ）と、そのオブジェクトＩＤ（Ｏ）に属する具象クラス・メソッド及びクラスの階層の情報がオブジェクト情報マスターテーブルＴ５００に書き込まれる。その後、具象クラスＩＤの一時テーブル（Ｔ）から取り出した１件のクラスＩＤを削除する（Ｓ６１２）。そして次の１件のクラスＩＤを取り出し、クラスＩＤがなくなるまで繰り返して行われる。この結果、クラス情報テーブルＴ１００の全ての具象クラス・メソッドに対し、オブジェクトＩＤが付与されたことになる。
【０１１８】
（３．２）オブジェクト対インターフェース情報テーブルの作成
図７−１は、オブジェクト対インターフェース情報テーブルＴ６００に含まれる情報を示すもので、オブジェクトＩＤ（被生成クラスのクラスＩＤ）とそのオブジェクトＩＤを付与された抽象クラスのＩＤ及びインターフェースのＩＤの情報を含む。
【０１１９】
図７−２は、オブジェクト対インターフェース情報テーブルＴ６００を作成するフローを示す。
【０１２０】
まずステップＳ６３１において、オブジェクト情報マスターテーブルＴ５００に登録されているオブジェクトＩＤ（Ｏ）を全件抽出する。次にステップＳ６３２において、オブジェクトＩＤ（Ｏ）の中の１件のオブジェクトのオブジェクトＩＤ（Ｏ１）を取り出す。
【０１２１】
オブジェクトＩＤ（Ｏ１）が存在するか否か判定し（Ｓ６３３）、存在する場合は、オブジェクト情報マスターテーブルＴ５００からオブジェクトＩＤ（Ｏ１）に属する具象クラスＩＤ（Ｃ）を全件抽出する（Ｓ６３４）。そして、オブジェクトＩＤ（Ｏ１）と抽出した全件の具象クラスＩＤ（Ｃ）のリスト（Ｌ）を作成する（Ｓ６３５）。抽出した具象クラスＩＤ（Ｃ）の集合から１件の具象クラスＩＤ（Ｃ１）を取り出す（Ｓ６３６）。
【０１２２】
ステップＳ６３７において、具象クラスＩＤ（Ｃ１）が存在するか否かを判定し、存在する場合はクラス情報テーブルＴ１００を参照してクラスＩＤ（Ｃ１）の親クラス名を調べ、親クラス名がある場合は、スーパークラス情報テーブルＴ３００を参照してそのクラスＩＤを調べ、更にテーブルＴ１００を参照してそのクラスＩＤのクラス種類を調べることによって具象クラスＩＤ（Ｃ１）が参照するインターフェース及び具象クラスＩＤ（Ｃ１）の親に相当する抽象クラス（上位抽象クラス）のクラスＩＤ（Ｐ）を抽出する。
【０１２３】
更にステップＳ６３９では、オブジェクトＩＤ（Ｏ１）と、インターフェース及び上位抽象クラスＩＤ（Ｐ）をオブジェクト対インターフェース情報テーブルＴ６００に登録する。
【０１２４】
次に、登録されたインターフェース及び上位抽象クラス（Ｐ）から１件のインターフェース又は抽象クラスＩＤ（Ｐ１）を取り出す（Ｓ６４０）。クラスＩＤ（Ｐ１）が存在するか否かを判定し（Ｓ６４１）、存在する場合はクラスＩＤ（Ｃ１）をクラスＩＤ（Ｐ１）に置き換え（Ｓ６４２）、再びステップＳ６３８に戻って同じ処理が繰り返される。
【０１２５】
一方、ステップＳ６４１の判定でインターフェース及び抽象クラスＩＤ（Ｐ１）が存在しない場合は、リスト（Ｌ）よりオブジェクトＩＤ（Ｏ１）と具象クラスＩＤ（Ｃ１）のペアを削除し、ステップＳ６３６に戻って次の１件の具象クラスＩＤを取り出す。このステップＳ６３６〜Ｓ６４２の処理を繰り返すことによって、１件のオブジェクトＩＤ（Ｏ１）と、このオブジェクトＩＤ（Ｏ１）に属する全てのインターフェース及び抽象クラスのインターフェースＩＤ及び抽象クラスＩＤのペアの情報が登録されることになる。
【０１２６】
また、ステップＳ６３７の判定の結果、クラスＩＤ（Ｃ１）が存在しないと判定された場合はステップＳ６３２に戻り、次の１件のオブジェクトＩＤを取り出して、同様の処理が行われる。
【０１２７】
この結果、図６−２により生成された全件のオブジェクトＩＤ（Ｏ）と、このオブジェクトＩＤ（Ｏ）を付与されるインターフェースＩＤ及び抽象クラスＩＤの対照情報が作成される。
【０１２８】
（３．３）生成クラス情報テーブルの作成
図８−１は、生成クラス情報テーブルＴ７００に含まれる情報を示すもので、例えばクラスＡのオブジェクトをクラスＢで生成している場合、クラスＡを被生成クラス、クラスＢを生成クラスとしてクラスＡとクラスＢのＩＤを登録したものである。
【０１２９】
図８−２は、生成クラス情報テーブルを作成するフローを示す。ステップＳ７０１では、メソッド関連情報テーブルＴ４００から、参照先メソッド名及びメソッド戻り型名が未定義であるレコード（Ｒ１）を抽出する。このレコード（Ｒ１）は、そのクラスでオブジェクトを生成する処理、すなわちインスタンス化を行っている可能性があることを示す。ステップＳ７０２では、そのレコード（Ｒ１）のクラスＩＤ、メソッドＩＤ及び参照先クラス名、参照先パッケージ名を取り出す。取り出したレコード（Ｒ１）のクラスＩＤを被生成クラスのクラスＩＤと見なし、参照先クラス名の欄のクラスを、オブジェクトを生成している生成クラス名と見なす。
【０１３０】
次に、ステップＳ７０４において、クラス情報テーブルＴ１００を参照して、生成クラス名をキーにしてそのクラスＩＤを取得する。更にステップＳ７０５において、上記被生成クラスＩＤと生成クラスＩＤの組が、生成クラス情報テーブルＴ７００に登録済みか否かを判定し、既に登録されている場合はステップＳ７０２に戻り、登録されていなかった場合には、そのテーブルＴ７００に登録する（Ｓ７０６）。
【０１３１】
一方、ステップＳ７０３の判定がＮＯの場合は、ステップＳ７０７に進み、メソッド関連情報テーブルＴ４００から参照先メソッド名が参照先クラス名と等しく、且つメソッド戻り型名が未定義であるレコード（Ｒ２）を抽出する。この抽出されたレコード（Ｒ２）は、いわゆるｎｅｗ演算子が記述されたクラス、つまりＳ７０２とは異なる方法でオブジェクトを生成していることを示す。以下、ステップＳ７０８〜Ｓ７１２において、前述のステップＳ７０２〜Ｓ７０６とまったく同様にして、被生成クラスＩＤと生成クラスＩＤのペアの情報が生成され、登録される。
【０１３２】
この結果、オブジェクトを生成する資格のある具象クラスのＩＤ（被生成クラスＩＤ）と、そのオブジェクトを現に生成している具象クラスのＩＤ（生成クラスＩＤ）との対照表が作成される。
【０１３３】
（３．４）全抽象メソッド情報登録処理
図９は、全抽象メソッド情報登録処理のフローを示す。この処理は、継承関係のために隠蔽されている抽象メソッドを可視化する処理である。
【０１３４】
まずステップＳ８０１では、クラス情報テーブルＴ１００及びスーパークラス情報テーブルＴ３００より、上位インターフェース及び上位抽象クラスが、存在しないインターフェース及び抽象クラスのクラスＩＤの全件（Ｔ）を抽出する。抽出した全件のクラスＩＤ（Ｔ）から、１件ずつインターフェース又は抽象クラスのクラスＩＤ（Ｔ１）を取り出す（Ｓ８０２）。ステップＳ８０３でクラスＩＤ（Ｔ１）が存在するか否か判定し、ＹＥＳの場合にはステップＳ８０４に進む。ステップＳ８０４では、メソッド情報テーブルＴ２００を参照して、クラスＩＤ（Ｔ１）のレコードを取り出し、そのメソッドの中から抽象メソッドのメソッドＩＤ（ＴＭ）を抽出する。
【０１３５】
次にステップＳ８０５において、クラス情報テーブルＴ１００とスーパークラス情報テーブルＴ３００を参照して、上記のインターフェース又は抽象クラスのクラスＩＤ（Ｔ１）の子インターフェース及び子抽象クラスのクラスＩＤの集合（Ｓ）を抽出する。抽出したクラスＩＤの集合（Ｓ）から、１件ずつ子インターフェース又は子抽象クラスのクラスＩＤ（Ｓ１）を取り出し、メソッド情報テーブルＴ２００を参照して、クラスＩＤ（Ｓ１）に属するメソッドＩＤの最大値（ＭＭ）を求める（Ｓ８０８）。
【０１３６】
更にステップＳ８１０では、前述のステップＳ８０４で抽出した抽象メソッドＩＤ（ＴＭ）を全件、上記子インターフェース又は子抽象クラスのクラスＩＤ（Ｓ）のメソッドとしてメソッド情報テーブルＴ２００に登録する。この結果、親のインターフェース又は親の抽象クラスに属する抽象メソッドが、子のインターフェース又は子の抽象クラスに属する抽象メソッドとして登録される。その際、抽象メソッドＩＤには、親子の階層を示す情報として（ＭＭ）から始まる番号を設定する。更にステップＳ８１１では、子の抽象クラスのクラスＩＤの集合（Ｓ）をサブクラス一覧（ＳＬ）に追加する。
【０１３７】
このようにして、親の抽象クラスの集合（Ｔ）と子の抽象クラスの集合（Ｓ）について、全て繰り返し同様の処理を行った後、ステップＳ８１３において、（Ｔ）の内容を（ＳＬ）の内容で置き換える。これにより、親子の関係にある抽象クラス又はインターフェースの全ての抽象メソッドが可視化されて、抽象メソッドテーブルＴ２００に登録されたことになる。
【０１３８】
（３．５）インターフェース対実装対応情報テーブルの作成
図１０−１は、インターフェース対実装対応情報テーブルＴ８００に含まれる情報を示すもので、参照先インターフェースまたは参照先抽象クラスのクラスＩＤ、及び参照先インターフェースまたは参照先抽象クラスにおける参照先抽象メソッドのメソッドＩＤと、その抽象メソッドが属するオブジェクトＩＤの情報が含まれる。また、同じオブジェクトＩＤに属する具象メソッドのメソッドＩＤと、その具象メソッドが属する具象クラスのクラスＩＤも含まれる。
【０１３９】
図１０−２は、インターフェース対実装対応情報テーブルを作成するフローチャートを示す。まずステップＳ９０１において、クラス情報テーブルＴ１００からインターフェース及び抽象クラスの全件のクラスＩＤ（Ａ）を抽出する。次に、ステップＳ９０２において、抽出したクラスＩＤ（Ａ）よりインターフェース又は抽象クラスのクラスＩＤを１件（Ａ１）ずつ順次取り出す。更に、ステップＳ９０３において、クラスＩＤ（Ａ１）が存在するか否か判定し、ＹＥＳの場合はメソッド情報テーブルＴ２００を参照して、インターフェース又は抽象クラスのクラスＩＤ（Ａ１）に属する抽象メソッドのメソッドレコード（ＡＭ）を抽出する（Ｓ９０４）。
【０１４０】
次に、抽象メソッドレコード（ＡＭ）が１件以上存在するか否か判定し（Ｓ９０５）、存在する場合は、オブジェクト対インターフェース情報テーブルＴ６００を参照して、抽象クラス（Ａ１）が属するオブジェクトＩＤ（Ｏ）を抽出する（Ｓ９０６）。抽象クラスは、複数個のオブジェクトＩＤに属すことができるので、抽出したオブジェクトＩＤ（Ｏ）からオブジェクトＩＤを１件ずつ（Ｏ１）順次取り出す（Ｓ９０７）。次に、ステップＳ９０８において、オブジェクトＩＤ（Ｏ１）が存在するか否か判定し、ＹＥＳの場合はステップＳ９０９に進む。
【０１４１】
ステップＳ９０９においては、オブジェクト情報マスターテーブルＴ５００を参照して、オブジェクトＩＤ（Ｏ１）に属する具象メソッドを求め、更にメソッド情報テーブルＴ２００を参照して、その具象メソッドの名称、引数等を含むメソッドレコード（ＣＭ）を階層番号の大きな順に抽出する。ステップＳ９１０において、具象メソッドレコード（ＣＭ）が１件以上存在するか否か判定し、ＹＥＳの場合はステップＳ９１１に進む。ステップＳ９１１においては、抽象メソッドのメソッドレコード（ＡＭ）からメソッド名称、引数情報を１件ずつ（ＡＭ１）順次取り出す。更にステップＳ９１２において、抽象メソッドのメソッドレコード（ＡＭ）を全て読み出したか否か判定し、全てレコードを読み出した場合はステップＳ９１３に進み、具象メソッドのメソッドレコード（ＣＭ）から、レコード番号の大きい順にメソッド名称、引数情報を１件ずつ（ＣＭ１）取り出す。そしてステップＳ９１４でＡＭ１＝ＣＭ１か否かを判定し、ＡＭ１とＣＭ１が等しいときは、抽象クラスのクラスＩＤ（Ａ１）及び抽象クラスＩＤ（Ａ１）に属する抽象メソッドのメソッドＩＤ（ＡＭ１）よりなる抽象クラス・メソッドＩＤと、具象メソッドＩＤ（ＣＭ１）と該具象メソッドＩＤが属するクラスのクラスＩＤよりなる具象クラス・メソッドＩＤとが同じオブジェクトＩＤ（Ｏ１）に属すると見なされる。そしてステップＳ９１６において、抽象クラス・メソッドＩＤと、具象クラス・メソッドＩＤと、オブジェクトＩＤとの組がインターフェース対実装対応情報テーブルＴ８００に登録される。
【０１４２】
このようにして、ステップＳ９０１〜Ｓ９１７を繰り返し実行することによって、全てのインターフェース及び抽象クラスのクラス・メソッドＩＤが属するオブジェクトＩＤと、そのオブジェクトＩＤに属する具象クラスのクラス・メソッドＩＤとの関係を示すインターフェース対実装対応情報テーブルＴ８００を作成することができる。
【０１４３】
（４）メソッド間関連情報の生成
以上のようにして生成された各種の情報に基づいて、メソッド間関連情報を作成する。メソッド間関連情報とは、図１−５を例にとると、具象クラス・メソッドＩＤのＣ１１ｍ２と、その参照先の具象クラス・メソッドＩＤのＣ２１ｍ４とのペア情報を称し、Ｃ１１ｍ２を参照元のクラス・メソッドＩＤ、Ｃ２１ｍ４を参照先のクラス・メソッドＩＤという。なお、具象クラス・メソッドが抽象クラスやインターフェースを介して他の具象クラスを参照する場合もあるので、関連先クラス・メソッドＩＤ、関連元クラス・メソッドＩＤということもある。
【０１４４】
このメソッド間の関連を表すペア情報は、図１１−１に示すように、クラス情報テーブルＴ１００、メソッド情報テーブルＴ２００、メソッド関連情報テーブルＴ４００、生成クラス情報テーブルＴ７００、オブジェクト情報マスターテーブルＴ５００及びインターフェース対実装対応情報テーブルＴ８００の情報を参照しながら最終的に、メソッド間関連情報テーブルＴ９００を作成することにより生成される。
【０１４５】
図１１−２は、メソッド間関連情報テーブルＴ９００に含まれる情報を示す。９０１は処理フラグで、このテーブルＴ９００を作成する過程で用いられる。分析が済んだときは０、オブジェクトＩＤを特定できないときは１、オブジェクトＩＤと参照先のクラス・メソッドを特定できないときには２がセットされる。９０２は参照元（関連元）クラスが属するオブジェクトのＩＤであり、前記のペア情報を生成するために用いられる。９０３は参照元（関連元）の具象クラス（実装クラス）のクラスＩＤ、９０４は参照元（関連元）の具象メソッド（実装メソッド）のメソッドＩＤであり、９０３と９０４により参照元（関連元）の具象クラス・メソッドＩＤが形成される。９０３の情報はメソッド関連情報テーブルＴ４００（図３−４）のクラスＩＤと同じであり、９０４は該テーブルＴ４００のメソッドＩＤと同じである。９０５は参照先（関連先）クラス・メソッドが属するオブジェクトのＩＤであり、これも前述のペア情報を生成するために用いられる。抽象メソッド又はインターフェースが介在するために参照先の具象クラス・メソッド及び、そのクラス・メソッドが属するオブジェクトＩＤが特定できないとき、つまり処理フラグ９０１が１又は２の場合、このオブジェクトＩＤ９０５としてオール０が設定される。９０６は参照先（関連先）の具象クラス（実装クラス）のクラスＩＤ、９０７は参照先（関連先）具象メソッドのメソッドＩＤである。
【０１４６】
次に、図１１−３から図１１−６を参照して、メソッド間関連情報を作成するフローについて説明する。
【０１４７】
ステップＳ１００１において、メソッド情報テーブルＴ２００（図３−２）から具象メソッドを１件ずつ取り出す。ステップＳ１００２で具象メソッドが存在するか否かを判定し、存在する場合は、メソッド関連情報テーブルＴ４００（図３−４）を参照して、参照先クラス名、参照先メソッド名及び参照先パッケージ名の情報を取り出す（Ｓ１００３）。
【０１４８】
なお、以下の説明では、参照先及び関連先を代表して関連先とし、参照元及び関連元を代表して関連元という用語を用いる。
【０１４９】
ステップＳ１００４で関連先情報が存在するか否か判定し、ＹＥＳの場合はステップＳ１００５に進む。
【０１５０】
ステップＳ１００５において、クラス情報テーブルＴ１００を参照し、抽出したクラス名及びパッケージ名をキー情報として、関連先クラスのクラスＩＤ及びクラス種類の情報を取り出す。更にステップＳ１００６において、メソッド情報テーブルＴ２００を参照し、先に取り出したメソッド名と、上記ステップＳ１００５で取り出したクラスＩＤをキー情報として、メソッドＩＤとメソッド種類の情報を取り出す。
【０１５１】
以上の処理により、ある具象クラスに属する具象メソッドの関連先クラスのクラスＩＤ及びクラス種類と、関連先メソッドのメソッドＩＤ及びメソッド種類の情報が得られたことになる。ここでクラス種類は、クラス情報テーブルＴ１００のテーブル項目値により、図１１−５に示すように、インターフェース、抽象クラス、具象クラスに分類され、メソッド種類は、メソッド情報テーブルＴ２００のテーブル項目値より抽象メソッド、具象メソッド、ｓｔａｔｉｃメソッドに分類される。なお、メソッド種類のレコードのないメソッドもある。
【０１５２】
図１１−３のステップＳ１００８では、これらのクラス及びメソッドの分類に応じて、図１１−５に示すような処理区分（１）〜（８）が決定される。例えば処理区分（１）は、関連先クラスがインターフェースであり、関連先メソッドが抽象メソッドである場合の処理を示し、処理区分（２）は、関連先クラスが抽象クラスであり、関連先メソッドが抽象メソッドである場合の処理を示している。なお、図１１−５の表で斜線を施した箇所は、クラス・メソッドの組み合わせとして理論的に存在し得ないことを示している。
【０１５３】
図１１−４を参照して、まず処理区分（１）と（２）について説明する。
【０１５４】
関連先クラスの種類がインターフェースか抽象クラスで、関連先メソッドの種類が抽象メソッドの場合、まずステップＳ１０２０において、インターフェース対実装対応情報テーブルＴ８００を参照して、そのクラス・メソッドが属するオブジェクトＩＤと、そのオブジェクトＩＤに属する具象クラスＩＤ及び具象メソッドＩＤを取り出す。取り出したオブジェクトＩＤが１件だけか否か判定し（Ｓ１０２１）、１件しかない場合は、上記の取り出したオブジェクトＩＤを関連先のオブジェクトＩＤと決定する（Ｓ１０２２）。また、当該オブジェクトＩＤに属する具象クラスＩＤ及び具象メソッドＩＤも、それぞれ関連先具象クラスＩＤ及び関連先具象メソッドＩＤとして決定する（Ｓ１０２３）。
【０１５５】
ステップＳ１０２４では、メソッド間関連情報テーブルＴ９００の処理フラグ９０１に、分析済みを示す０をセットする。また、関連元具象メソッドが属する関連元クラスのクラスＩＤを関連元オブジェクトＩＤとする（Ｓ１０２５）。ステップＳ１０７５において、メソッド関連情報テーブルＴ９００の関連元クラスのオブジェクトＩＤ、関連元の具象クラス・メソッド、関連先のオブジェクトＩＤ、関連先の具象クラス・メソッドＩＤを登録する。
【０１５６】
一方、ステップＳ１０２２における判定がＮＯの場合は、関連先オブジェクトを全て０にする（Ｓ１０２６）と共に、関連先クラス及び関連先メソッドにも全部０をセットする（Ｓ１０２７）。更にステップＳ１０２８では、メソッド間関連情報テーブルＴ９００の処理フラグ９０１に、関連先のクラス・メソッド及びオブジェクトが未特定であることを示す２をセットする。また、関連元オブジェクトＩＤも全部０にセットする（Ｓ１０２９）。
【０１５７】
以上のように、関連先クラスの種類が、インターフェースが抽象クラスで、関連先メソッドの種類が抽象メソッドの場合は、予め作成したインターフェース及び抽象クラスのクラスＩＤと、該クラスＩＤが属するオブジェクトＩＤとの関係を表すテーブルＴ８００を参照してオブジェクトＩＤを探索し、次に当該オブジェクトＩＤに属する具象クラスのクラスＩＤ及び具象メソッドのメソッドＩＤを探索することにより、関連先の具象クラス・メソッドＩＤを特定する。
【０１５８】
次に、処理区分（５）又は（６）の場合、つまり、関連先のクラスが抽象クラスか具象クラスであって、関連先メソッドが具象メソッドである場合について説明する。クラスの種類が抽象クラスであっても、メソッドの種類が具象メソッドであれば、その抽象クラスにオブジェクトＩＤが付与されている。ステップＳ１０３０において、オブジェクト情報マスターテーブルＴ５００を参照し、具象メソッドＩＤ及びクラスＩＤをキーに、オブジェクトＩＤの情報を取り出す。この取り出したオブジェクトＩＤが関連先オブジェクトＩＤ候補となる。
【０１５９】
次に、上記オブジェクトＩＤ候補をキーとしてオブジェクト情報マスターテーブルＴ５００を検索し、関連先具象メソッドと、メソッド名及びメソッド引数が同じメソッドを取り出す。その際、クラスに親子関係がある場合は下位クラスから探索する（Ｓ１０３１）。
【０１６０】
Ｊａｖａにはキャストと呼ばれる仕組みがあり、同じ名前のメソッドがクラスの親子間で双方に定義されている（「オーバーライド」と言う）場合、関連先クラスが親クラスであっても、文法上は子クラスのメソッドを指す必要がある。従って、オブジェクトに関連付くクラスのうち、末端の子クラスから順にメソッドを検索し、最初に見つかったメソッドを関連先メソッドとする。この検索の条件が「メソッドの名称、引数が同じ」ということになる。
【０１６１】
例えば具象クラスＡ、Ｂが親と子の関係にあり、双方にメソッドｍ（  ）が定義されている場合。関連元クラスからの関連先が「クラスＡのメソッドｍ（  ）」であっても、オブジェクトがＢであれば参照先メソッドはクラスＢのメソッドｍ（  ）になる。オブジェクトマスター情報テーブルに対しクラスＡのメソッドｍ（  ）をキーに検索すると、オブジェクトＩＤはＡとＢが取得できる。オブジェクトがＢの場合にはステップＳ１０３１の手順でクラスＢのメソッドｍ（  ）を取り出す。ここでもしクラスＡが抽象クラスだった場合は、オブジェクトＩＤはＢのみ取得できる。この場合もステップＳ１０３１の手順でクラスＢのメソッドｍ（  ）を取り出す。
【０１６２】
ステップＳ１０３２では、取り出した関連先オブジェクトＩＤの候補が１件か否かを判定し、１件の場合は、取り出したオブジェクトＩＤ候補を関連先オブジェクトＩＤとする（Ｓ１０３３）。また、ステップＳ１０３１の探索により得られた具象メソッド及びその具象メソッドが属する具象クラスを、関連先具象クラス、関連先具象メソッドとする（Ｓ１０３４）。
【０１６３】
ステップＳ１０３５では、メソッド間関連情報テーブルＴ９００の処理フラグ９０１に分析済みを示す０をセットする。また、関連元クラスのオブジェクトＩＤ候補を関連元オブジェクトＩＤとして、同様にステップＳ１０７５で関連元、関連先のオブジェクトＩＤ、具象クラス・メソッドＩＤを登録する。
【０１６４】
一方、ステップＳ１０３２の判定の結果、ＮＯの場合はＳ１０２６〜Ｓ１０２９と同様に、関連元、関連先オブジェクトＩＤ及び関連元、関連先クラス・メソッドＩＤに全部０がセットされる（Ｓ１０３７〜Ｓ１０４０）。
【０１６５】
以上のように、関連先のクラス種類が抽象クラスや具象クラスで、関連先のメソッドの種類が具象メソッドの場合も、オブジェクトＩＤを手がかりにして関連先の具象クラス（実装クラス）及び具象メソッド（実装メソッド）を特定できる場合がある。
【０１６６】
次に、処理区分が（３）の場合、つまりクラスが抽象クラスでメソッド情報がない場合は、ステップＳ１０５０〜Ｓ１０５６により関連元、関連先のオブジェクトＩＤ、関連元、関連先の具象クラス・メソッドＩＤを特定する。メソッド情報テーブルに関連先メソッドの定義が無いとは、参照先メソッドが関連先メソッドで定義されずに、上位クラスで定義されていることを指す。関連先クラス・メソッドがメソッド情報テーブルに定義されていないのでオブジェクト情報マスターテーブルにも当該クラス・メソッドは定義されていない。そこで、上位クラスに具象メソッドを探し求める。ステップＳ１０５０では、メソッド名称と引数が同じであるという探索条件で上位クラスの具象メソッド（実装メソッド）を求める。次にステップＳ１０５１では、特定した具象メソッド（実装メソッド）と、そのメソッドが属するクラス情報をキーとしてオブジェクトをオブジェクト情報マスターテーブルを検索し、オブジェクト候補を取り出す。
【０１６７】
以下のステップＳ１０５２〜Ｓ１０６０は、前述のステップＳ１０３２〜Ｓ１０４０と同じである。
【０１６８】
処理区分（４）は、関連先のクラス種類が具象クラスでメソッド情報がない場合である。この場合は、オブジェクトＩＤは関連先クラスのＩＤであるから、オブジェクトを探索する手順が不要となり、上位クラスの具象メソッド（実装メソッド）を探索する手順のみとなる。すなわちステップＳ１０７０において、スーパークラス情報テーブルＴ３００を参照して上位クラス（親クラス）のクラス名を探索し、次にメソッド情報テーブルＴ２００を参照して、その上位クラスのクラスＩＤから、そのクラスＩＤに属するメソッドを探索する。そして、そのメソッドの中でメソッド種類が０のメソッド、すなわち具象メソッドを取り出す（Ｓ１０７０）。この具象クラス及び具象メソッドをキーに、オブジェクト情報マスターテーブルＴ５００から関連先のオブジェクトＩＤを取り出す。取り出したオブジェクトＩＤ、具象クラスＩＤ及び具象メソッドＩＤを、それぞれ関連先のオブジェクトＩＤ、関連先の具象クラスＩＤ、関連先の具象メソッドＩＤとする（Ｓ１０７２）。更に、メソッド間関連情報テーブルＴ９００の処理フラグ９０１に分析済みを示す０をセットする（Ｓ１０７３）。また、関連元クラスのオブジェクトＩＤ候補を関連元オブジェクトＩＤとして（Ｓ１０７４）、メソッド間関連情報テーブルＴ９００に登録する。
【０１６９】
一方、処理区分が（７）及び（８）の場合、つまりクラスの種類が抽象クラスか具象クラスで、メソッドの種類がｓｔａｔｉｃの場合は、ステップＳ１０７１において、メソッドを関連先具象メソッドとし、クラスを関連先の具象クラスとする。
【０１７０】
以上の説明から明らかなように、オブジェクトＩＤという新しい概念を導入することにより、オブジェクトＩＤを手がかりにして関連先の具象クラス・メソッドを特定する精度を高めることが可能となる。
【０１７１】
（５）具象クラス・メソッド間関連情報の表示
次に、上述のようにして生成された具象クラス・メソッド間関連情報を表示するためのフローを、図１２−１を参照して説明する。
【０１７２】
Ｊａｖａ言語プログラムのあるクラス・メソッドを指定し、例えばそのクラス・メソッドを修正した場合に、どの範囲のクラスに影響を及ぼすか解析を行うときには、まずステップＳ１３０１において、当該クラス・メソッドＩＤを指定する。次に、メソッド間関連情報テーブルＴ９００から当該クラス・メソッドの関連先クラス・メソッド、該関連先クラス・メソッドの更に関連先のクラス・メソッドというように、次々に関連先クラス・メソッド情報を抽出する。
【０１７３】
抽出されたクラス・メソッドの関連が、例えば図１２−２のように表される場合を例にとると、ステップＳ１３０３では図１２−３に示すようなクラス名、メソッド名及び引数の文字列からなるテキストデータを生成する。
【０１７４】
更にステップＳ１３０４では、生成したテキストデータをウェブ上で表示する既存のソフトウェアに受け渡し、ユーザのＰＣのウェブブラウザソフトウェア上に、例えば図１２−４のような形式で表示する（Ｓ１３０５）。
【０１７５】
このように、テキストデータを図１２−４のようにウェブ上で表示するソフトウェア自体は既に公知である。
【０１７６】
図１２−５は、本発明ツールが適用される大規模業務系の説明図であり、７０は端末機器、７１はサーバ、７２はＤＢ、７３は保守用のパソコンである。
【０１７７】
証券業務を例にとると、各支店に設置された数百台〜数千台のパソコンからなる端末７０がネットワーク７４を通して本店のサーバ７１に接続されている。各端末７０からは証券や債券の取引等のデータが入力され、本店のサーバ７１により処理されてデータベース７２に蓄積される。
【０１７８】
一方、この証券業務システムに用いられるＪａｖａ言語プログラムの保守を行うために、前述のテーブルＴ１００〜Ｔ９００で示されたデータがＤＢ７２に格納され、各フローチャートで示されたプログラムが保守用のパソコン７３に格納されている。保守用のパソコン７３から特定のクラス・メソッドを指定する情報を入力すると、図１２−４に例示した関係図が画面に表示される。
【０１７９】
以上説明した本発明ツールによれば、Ｊａｖａ言語プログラムにおけるクラス継承により、ソースコードプログラム上では隠蔽されたクラス・メソッドも含めて、具象クラス・メソッド間の関連を表示することが可能となる。また、クラス・メソッドの数が数１０万個から数１００万個に達する大規模業務系のＪａｖａ言語プログラムの中で、特定の業務処理（トランザクション）に用いられる全ての具象クラス・メソッドを抽出し、これを画面上に表示することができる。
【０１８０】
更に、所定の具象クラス・メソッドを指定して、それに関連する具象クラス・メソッドを抽出・表示することにより、所定の具象クラス・メソッドが影響を及ぼす範囲を特定することもできる。
【０１８１】
従って、あるデータ項目にアクセスするクラス・メソッドを指定して、そのデータ項目が利用されているトランザクション、データベース並びに業務ロジックなどを特定することが可能となるため、大規模業務系のＪａｖａ言語プログラムの保守作業の負担を従来に比べて著しく軽減することが可能となる。
【図面の簡単な説明】
【０１８２】
【図１−１】Ｊａｖａ言語プログラムの説明図。
【図１−２】Ｊａｖａ言語プログラムのクラス図の一例を示す説明図。
【図１−３】Ｊａｖａ言語プログラムのシーケンス図の一例を示す説明図。
【図１−４】Ｊａｖａ言語プログラムにおけるクラスに含まれる情報とその関連を示す説明図。
【図１−５】Ｊａｖａ言語プログラムをクラス・メソッドを単位として捉えた場合の処理の流れを示す説明図。
【図１−６】Ｊａｖａ言語プログラムにおけるクラス継承の概念を説明するための説明図。
【図２−１】Ｊａｖａソースコードプログラムの一例を示す説明図。
【図２−２】Ｊａｖａソースコードプログラムのコンパイルを説明するための図。
【図３−１】クラスファイルのクラス情報の内容を示す説明図。
【図３−２】クラスファイルのメソッド情報の内容を示す説明図。
【図３−３】クラスファイルのスーパークラス情報の内容を示す説明図。
【図３−４】クラスファイルメソッド関連情報の内容を示す説明図。
【図３−５】クラスファイルから各情報を抽出するフローを示すフローチャート。
【図３−６】クラスファイルを分析した結果得られるＸＭＬファイルを示す説明図。
【図４−１】クラス情報テーブルの説明図。
【図４−２】メソッド情報テーブルの説明図。
【図４−３】スーパークラス情報テーブルの説明図。
【図４−４】メソッド関連情報テーブルの説明図。
【図４−５】クラスファイルより抽出した情報をＤＢに投入するフローを示すフローチャート。
【図５】オブジェクトＩＤの情報を生成する仕組みを説明する説明図。
【図６−１】オブジェクトマスター情報テーブルの説明図。
【図６−２】オブジェクトマスター情報テーブルを作成するフローを示すフローチャート。
【図７−１】オブジェクト対インターフェース情報テーブルの説明図。
【図７−２】オブジェクト対インターフェース情報テーブルを作成するフローを示すフローチャート。
【図８−１】生成クラス情報テーブルの説明図。
【図８−２】生成クラス情報テーブルを作成するフローを示すフローチャート。
【図９】全抽象メソッド情報登録処理のフローを示すフローチャート。
【図１０−１】インターフェース対実装情報テーブルの説明図。
【図１０−２】インターフェース対実装情報テーブルを作成するフローを示すフローチャート。
【図１１−１】メソッド間関連情報テーブルと他のテーブルとの関係を示す説明図。
【図１１−２】メソッド間関連情報テーブルの説明図。
【図１１−３】メソッド間関連情報テーブルを作成するフローを示すフローチャート。
【図１１−４】メソッド間関連情報テーブルを作成するフローを示すフローチャート。
【図１１−５】クラス種類とメソッド種類の説明図。
【図１２−１】クラス・メソッド間の関係を表示するフローを示すフローチャート。
【図１２−２】クラス・メソッド間の関係を表示する説明図。
【図１２−３】クラス・メソッド間の関係を表示するために生成するテキストデータの説明図。
【図１２−４】クラス・メソッド間の関係を表示する画面の説明図。
【図１２−５】本発明ツールから適用されるシステムの一例を示すブロック図。
【符号の説明】
【０１８３】
１００，３００，４００：具象クラス
２００：インターフェース
１００´，３００´，４００´：オブジェクト
１０：クラス情報
２０：メソッド情報
３０：メソッド間関連情報
Ｃ１１，Ｃ２１，Ｃ２２，Ｃ３１，Ｃ４１，Ｃ４２，Ｃ４３：具象クラス
Ｍ１，Ｍ２，Ｍ３，Ｍ４，Ｍ５：具象メソッド
Ｔ１００：クラス情報テーブル
Ｔ２００：メソッド情報テーブル
Ｔ３００：スーパークラス情報テーブル
Ｔ４００：メソッド関連情報テーブル
Ｔ５００：オブジェクトマスター情報テーブル
Ｔ６００：オブジェクト対インターフェース情報テーブル
Ｔ７００：生成クラス情報テーブル
Ｔ８００：インターフェース対実装情報テーブル
Ｔ９００：メソッド間関連情報テーブル
Ａ，Ｂ，Ｃ：クラス
ＩＡ，ＩＢ：インターフェース
ａ，ｂ，ｍ，ｎ：メソッド
７０：端末
７１：サーバ
７２：データベース（ＤＢ）
７３：ＰＣ
７４：ネットワーク
【図１−１】
2008123259.tif 000003
【図１−２】
2008123259.tif 000004
【図１−３】
2008123259.tif 000005
【図１−４】
2008123259.tif 000006
【図１−５】
2008123259.tif 000007
【図１−６】
2008123259.tif 000008
【図２−１】
2008123259.tif 000009
【図２−２】
2008123259.tif 000010
【図３−１】
2008123259.tif 000011
【図３−２】
2008123259.tif 000012
【図３−３】
2008123259.tif 000013
【図３−４】
2008123259.tif 000014
【図３−５】
2008123259.tif 000015
【図３−６】
2008123259.tif 000016
【図４−１】
2008123259.tif 000017
【図４−２】
2008123259.tif 000018
【図４−３】
2008123259.tif 000019
【図４−４】
2008123259.tif 000020
【図４−５】
2008123259.tif 000021
【図５】
2008123259.tif 000022
【図６−１】
2008123259.tif 000023
【図６−２】
2008123259.tif 000024
【図７−１】
2008123259.tif 000025
【図７−２】
2008123259.tif 000026
【図８−１】
2008123259.tif 000027
【図８−２】
2008123259.tif 000028
【図９】
2008123259.tif 000029
【図１０−１】
2008123259.tif 000030
【図１０−２】
2008123259.tif 000031
【図１１−１】
2008123259.tif 000032
【図１１−２】
2008123259.tif 000033
【図１１−３】
2008123259.tif 000034
【図１１−４】
2008123259.tif 000035
【図１１−５】
2008123259.tif 000036
【図１２−１】
2008123259.tif 000037
【図１２−２】
2008123259.tif 000038
【図１２−３】
2008123259.tif 000039
【図１２−４】
2008123259.tif 000040
【図１２−５】
2008123259.tif 000041