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