JP2008134699A - Java言語プログラムを用いた大規模業務系の影響分析ツール - Google Patents

Java言語プログラムを用いた大規模業務系の影響分析ツール Download PDF

Info

Publication number
JP2008134699A
JP2008134699A JP2006318618A JP2006318618A JP2008134699A JP 2008134699 A JP2008134699 A JP 2008134699A JP 2006318618 A JP2006318618 A JP 2006318618A JP 2006318618 A JP2006318618 A JP 2006318618A JP 2008134699 A JP2008134699 A JP 2008134699A
Authority
JP
Japan
Prior art keywords
class
concrete
information
abstract
extracted
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2006318618A
Other languages
English (en)
Other versions
JP5057540B2 (ja
Inventor
Hajime Oi
一 大井
Yoichi Kitagawa
陽一 北川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NIPPON SHOKEN TECHNOLOGY KK
Original Assignee
NIPPON SHOKEN TECHNOLOGY KK
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NIPPON SHOKEN TECHNOLOGY KK filed Critical NIPPON SHOKEN TECHNOLOGY KK
Priority to JP2006318618A priority Critical patent/JP5057540B2/ja
Publication of JP2008134699A publication Critical patent/JP2008134699A/ja
Application granted granted Critical
Publication of JP5057540B2 publication Critical patent/JP5057540B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】本発明の課題は、Java言語プログラムを用いた大規模業務系の保守作業の負担を著しく軽減できるツールを提供する。
【解決手段】Java言語プログラムのクラスファイルからクラス情報、メソッド情報及び参照先メソッド情報を抽出し、クラス情報から、オブジェクト化される具象クラスを探し、該具象クラスのIDと同一のオブジェクトIDを生成すると共に、オブジェクトIDを特定できなかった場合は、関連元の具象クラス・メソッドが属するツリー状に階層化された構造の先頭のクラスのクラス・メソッドIDを探索し、該先頭のクラス・メソッドIDからオブジェクトIDを探し、参照先メソッド情報及びオブジェクトIDをキー情報として具象クラス・メソッドIDと、該具象クラス・メソッドIDの関連先である具象クラス・メソッドIDの組み合わせを検索して、該クラス・メソッドに関連する一連の具象クラス・メソッドを抽出して画面に表示する。
【選択図】図11−2

Description

本発明は、Java(登録商標)言語プログラムの分析ツールに関し、特にJava言語プログラムを用いた大規模業務系の影響分析ツールに関する。なお、Javaは米Sun Microsystems,Incの登録商標である。
例えば証券業務などのような大規模業務系においては、従来、COBOL言語プログラムが一般に用いられている。そして保守効率を上げるために、プログラムは処理目的毎に分類され、階層化された構造を有するのが一般的である。また、プログラムが階層化された構造であることを前提とした構造解析ツール類も充実しており、これらのツールを使うことによって、効率的にシステムの保守を行うことができる。
ところで最近は、大規模業務系の再構築に当たり、使用言語をCOBOLからJavaに置き換える例が増えている。
COBOL言語に比べて、Java言語は生産性、拡張性及び適用性に優れているため、オープンシステムの開発用に広く用いられているが、保守作業効率において後述のような様々な問題があるため、非常に限られた条件の中でしか使用されていないのが実状である。
以下、まずJava言語の概要について述べ、次に大規模業務システムの開発にJava言語プログラムを用いた場合の課題について述べる。
(1)Java言語の概要
Java言語のプログラムは、複数のクラスの組み合わせにより成り立っている。クラスとは、データと処理とをまとめたものと言える。つまりJava言語では、関連するデータや処理をまとめたクラスという部品を作っておき、それらを自由に組み合わせたり、再利用して複雑なプログラムを作成する。クラスを構成するデータをフィールド、処理をメソッドと言い、フィールドやメソッドをクラスのメンバと称する。
クラスはプログラムコードであり、これを実際にコンピュータで実行するためには、オブジェクトを生成しなければならない。オブジェクトとは、プログラムコードであるクラスが、コンピュータメモリ上に実行可能な状態に存在している場合のクラスに対する呼称である。クラスからオブジェクトを生成することをインスタンス化又はオブジェクト化という。
フィールドとは、クラス内の変数(データ)であり、メソッドとは、データの操作方法(処理)を定義したものである。処理の対象となる値を引数(パラメータ)といい、処理の結果の値のことを戻り値(返り値)という。
Java言語プログラムの拡張性及び適用性が優れている一つの理由は、クラスの継承という仕組みがあるからである。クラスの継承とは、クラスがほかのクラスのメンバを受け継ぐ機能である。例えば、クラスAのメンバをクラスBが受け継ぐことができる。継承する元となるクラスをスーパークラス(親クラス)、継承して作ったクラスをサブクラス(子クラス)という。
またJava言語では、クラスに対するアクセス方法を定義したインターフェースと称されるものが使用される。インターフェースはクラスと似たものであるが、定数と、後述の抽象メソッドしかメンバになれないところがクラスとは異なる。
クラスは、抽象クラスと具象クラス及びインターフェースに分類される。抽象クラスは、通常のクラスにインターフェースの機能を付加したものであり、具象クラスは、実際のプログラムコードを記述し、インスタンス化可能としたものである。インターフェースと抽象クラスは、そのままではインスタンス化することはできない。つまり、抽象クラス、具象クラス、インターフェースのうちで、オブジェクトコードを生成できるのは具象クラスのみである。
一方メソッドも、抽象メソッドと具象メソッドに分類される。抽象メソッドとは、メソッドの名前、戻り型、引数だけを定義し、ロジック(処理の内容)は定義していないものをいう。この抽象メソッドはインターフェースと、抽象クラスにおいて定義される。具象メソッドは、メソッドの名前、戻り型、引数及びロジックを定義したもので、抽象クラス又は具象クラスで定義される。参照先の具象メソッドを実装メソッド、実装メソッドを有するクラスを実装クラスと称することもある。
次に、Java言語を用いて記述されたプログラムを図1−1を用いて説明する。
図の100,300,400は具象クラス、200はインターフェースの一例を示す。具象クラス100は、Userclassという名前を有する。そのクラスは、usrmdtというメソッドを有する。そのメソッドは、参照先がIStrategyというインターフェースであることを示している。
一方、インターフェース200は、IStrategyという名称を有し、tcという抽象メソッドを含んでいる。
また具象クラス300は、classAという名称を有し、tcという具象メソッドを有する。具象クラス300はオブジェクトを生成しているので実装クラスと称される。具象クラス100は、インターフェース200を介して別の具象クラス300と関連付けられるので、本明細書では、100を関連元クラス、300を関連先クラスという。
図1−2は、図1−1のように記述されたプログラムのクラス間の関係を表わすクラス図である。クラス100はインターフェース200を参照し、クラス300はクラス400を参照している。また、クラス300はインターフェース200を継承しているので、500で示す記号を用いて表示される。
図1−3は、オブジェクト同士の関係を示すシーケンス図である。前述のように、具象クラス、抽象クラス及びインターフェースのうちでオブジェクトを生成できるのは具象クラスだけである。この図は、クラス100,300,400のオブジェクト100´,300´,400´の関係を示している。クラス100,300,400のオブジェクトは一般に、別のクラスにより生成される。各オブジェクト100´,300´,400´を生成しているクラスを生成クラスと称し、クラス100,300,400を被生成クラスと称する。
次に、一つのクラスに含まれる情報について説明する。
図1−4は、一つのクラスに含まれる情報とその関連を示す図である。1つのクラスには、クラス情報10、メソッド情報20、データ情報60及びメソッド間の関連を示す情報30が含まれる。
クラス情報10には、クラスID11、クラス名12、スーパークラス名(親クラス名)13、インターフェース名14が含まれる。また、メソッド情報20には、メソッドID21、メソッド名22、メソッドの型(具象タイプ、抽象タイプ)23、引数24及び引数の型25の情報が含まれる。
メソッド間関連情報30としては、メソッド21が参照するメソッド31、参照するメソッドのメソッド名32、参照メソッドの引数のタイプ33が含まれる。参照先メソッド31は、static修飾子のついたメソッド34、インターフェースのメソッド35、コンストラクタという特殊なメソッド36及びその他のメソッド37の4種類に分類される。コンストラクタはオブジェクトの生成のときに自動的に呼び出されるメソッドであり、staticメソッドは、どのオブジェクトでも動作を同じにする特殊なメソッドである。
インターフェース35には、インターフェース名41とメソッド型42の情報が含まれ、その他のクラス37にも同様に、参照先のクラス38とメソッドの型39の情報が含まれる。またstaticメソッド34には、参照先クラス40の情報が含まれる。
当該クラス10でオブジェクトを生成する場合は、そのオブジェクトを生成する対象となったクラス50の情報であるクラス名51が含まれる。
一方、クラス10のフィールドに関する情報60として変数名61、変数を参照する場合の参照先クラス62、変数の型63等の情報が含まれる。
(2)Java言語プログラムを大規模業務系に用いた場合の問題点
Java言語は多数のクラスの組み合わせにより成り立っているため、生産性に優れ、また、システムを拡張するのに適した言語でもある。しかしながらシステムを保守する場合には、以下説明するような数々の問題がある。
証券業務システム等の大規模事務系のプログラムにJava言語を用いると、クラス数は、例えば数万個から数10万個、メソッド数は数10万個から数100万個に達する膨大なものとなる。
このようなシステムにおいて、何らかの不具合が発生した場合は、その不具合の原因となったクラスやメソッドを特定しなければならない。また、特定されたクラスやメソッドを修正したときに、影響を受ける一連のクラスやメソッドを把握する必要もある。
また、システムに新たな機能を追加するためにクラスを追加や修正する場合も同様に、追加や修正したクラスやメソッドにより影響を受ける一連のクラスやメソッドを把握する必要がある。
このような保守業務の効率化を図るために、COBOL言語を用いた場合と同様に、Java言語を用いたプログラムも、数万〜数10万のクラスは業務の処理目的毎に分類され、階層化された構造とされるのが一般的である。そしてJavaプログラムの保守においては、図1−2に例示したクラス図や、図1−3に例示したシーケンス図を用い、これらにソースコード分析を加えることによってクラスやメソッドを特定したり、特定のクラスやメソッドと関連のある一連のクラスやメソッドを把握している。
しかしながらJava言語プログラムは、不具合の発生したクラス、メソッドを特定したり、特定したクラス、メソッドに関連性のある一連のクラス、メソッドを把握することが困難な構造を有するため、保守業務においてプログラム開発者への負担が非常に大きい。
この問題を解決するために本発明者は、先にJava言語プログラムを、クラス・メソッドを単位として捉え、具象クラス・メソッド単位の流れとして把握することが可能な分析ツールを提案した(特願2006−306525参照)。
図1−5は、Java言語プログラムを、クラス・メソッドを単位として捉えた場合の処理の流れを例示したものである。
この図は、最上位階層のクラスC11のメソッドM2が次の階層のクラスC21のメソッドM4を参照し、クラスC21のメソッドM4が次の階層のクラスC31のメソッドM5を参照し、以下点線で示す参照関係がある例を示している。また同様に、クラスC11のメソッドM4がクラスC22のメソッドM1を参照し、クラスC22のメソッドM1がクラスC31のメソッドM5を参照している例を示している。
前述のクラス図(図1−2)は単に、クラスC11,C21,C22・・・の関連を示すだけであるため、保守業務に当たり、メソッド単位の詳細な処理の流れを調べるためには、プログラム開発者がソースコードを分析して把握せざるを得なくなる。
ここで、各クラスのIDは、C11,C21,C22・・・で表し、システムの中でユニークに(一意的に)特定できるコードが割り当てられ、各メソッドはM1,M2,M3・・・のように、各クラス内においてユニークに特定できるコードが割り当てられる。従って、クラスID+メソッドID(以下これをクラス・メソッドIDという)により、システム内の全てのメソッドをユニークに特定することができる。
それ故、システムを構成するJava言語プログラム内で実質的な処理に関与している(すなわちオブジェクトを生成している)全てのクラス・メソッドIDの関連を表すことができれば、所望のメソッドを特定したり、そのメソッドに関連する一連のクラス・メソッドを把握することができる。
本発明者は、数10万〜数100万に及ぶ全てのクラス・メソッドの中で、具象メソッドのみを抽出し、それらの関連を、クラス・メソッドIDを用いて表すことを試みた。しかし、コンピュータの能力を遥かに超える程膨大な処理になり、理論上は可能であっても、事実上は極めて困難であることが判った。その原因の一つは、Java言語では、クラスがインターフェースや抽象クラスを参照したり、クラス間の継承と呼ばれる処理が頻繁に行われることによる。
次に、継承の一例について、図1−6を用いて説明する。
図1−6は、クラス200がクラス100を継承し、クラス300がクラス200を継承する例を示している。クラス100にはクラスIDのC11と、メソッドIDのm1が定義され、クラス200にはクラスIDのC21とメソッドIDのm2が定義され、クラス300にはクラスIDのC31とメソッドIDのm3が定義されていると仮定する。ソースコードプログラム上で、このクラス・メソッドIDのC11m1,C21m2,C31m3を継承の手法を用いて記述すると、実際にはC11m1〜C31m3の6個のクラス・メソッドIDが定義されたことになる。
つまり、ソースコードプログラム上はC21m1,C31m1,C31m2は隠された状態となる。従って、全ての具象クラス・メソッドIDの関連を調べるには、このように隠されているクラス・メソッドも含めた、全てのクラス・メソッド関連を調べなければならない。
また、具象クラス同士がインターフェースや抽象クラスを介在した複雑な参照関係にある場合も、全てのクラス・メソッドの参照先を追跡して、オブジェクトの生成に関与している具象クラス・メソッドの関連を調べることが必要となる。従って、これらの隠蔽クラスも含めて、全ての具象クラス・メソッド間の関連を調べるためには膨大な処理量が発生する。しかしながら従来のツールには、クラス隠蔽及びメソッド隠蔽された箇所の分析機能がなく、また妥当な具象メソッドだけを導出する機能もないため、プログラムの保守が極めて困難になる。
また、図1−3に例示したように、オブジェクト100´,300´,400´の流れを示すシーケンス図も用いられるが、シーケンス図を作成する既存ツールは、継承関係やインターフェースが介在した関連の先を追跡した分析ができないため、シーケンス図を用いてもプログラム開発者の負担はそれ程小さくならない。
更に、従来の分析ツールはクラス図、シーケンス図を表示できるとは言え、一画面に表示できるクラス数、オブジェクト数は10数個程度が限界であり、膨大な数のクラス・メソッド関連を把握することはできないため、これもプログラムの保守を困難にする一つの理由となっている。
先願の特願2006−306525においては、オブジェクト化される具象クラスと同一のIDであるオブジェクトIDという概念を導入し、オブジェクトIDの情報に基づいて関連元の具象クラス・メソッドIDと、関連先のクラス・メソッドIDとのペア情報を生成している。
この方法によれば具象クラス同士がインターフェースや抽象クラスを介在した参照関係にある場合も、ペア情報を生成することができるが、クラスやメソッドが隠される態様によっては、関連先の具象クラス・メソッドIDを特定できない場合もある。
本発明の目的は、上記のような従来の問題点を解決し、Java言語プログラムを用いた大規模業務システムにおける保守作業の負担を著しく軽減することができるツールを提供することにある。
具体的には、本発明は、クラスの継承によりソースコードプログラム上では隠されたクラスに属する具象メソッドも含めて、具象クラス・メソッド間の関連を表示できるツールを提供することにある。
本発明の他の目的は、インターフェースまたは抽象クラスにより隠蔽された具象クラス・メソッドと、その関連を表示することが可能なツールを提供することにある。
本発明の他の目的は、クラスが機能的に分類され、階層化された構造のプログラムにおいて、ある分類に属する全ての具象クラス・メソッドと、その関連を表示することが可能なツールを提供することにある。
本発明の他の目的は、クラスが機能的に分類され、階層化された構造のプログラムにおいて、所望の具象クラス・メソッドを特定したときに、その特定された具象クラス・メソッドに関連する一連の具象クラス・メソッドを表示できるツールを提供することにある。
本発明の他の目的は、実装済みの資源を基に、リバースエンジニアリングによって設計書を生成し、設計書を保守するコストを大幅に削減すると同時に、設計書と実装の乖離を起こさないようにするツールを提供することにある。
上記の目的を達成するために本発明に係る分析ツールは、ツリー状に階層化されたJava言語プログラムのクラスファイルからクラス情報、メソッド情報及び参照先メソッド情報を抽出する第1の手段と、抽出したクラス情報から、オブジェクト化される具象クラスを探し、該具象クラスのIDと同一のIDであるオブジェクトIDを生成する第2の手段と、前記第2の手段によりオブジェクトIDを特定できなかった場合は、関連元の具象クラス・メソッドが属する前記ツリー状に階層化された構造の先頭のクラスのクラス・メソッドIDを探索し、該先頭のクラスのクラス・メソッドIDに基づいて該オブジェクトIDを求める第3の手段と、前記クラスファイルから抽出した参照先メソッド情報及び前記オブジェクトIDをキー情報として、具象クラスID及び具象メソッドIDよりなる具象クラス・メソッドIDと、該具象クラス・メソッドIDの関連先である具象クラス・メソッドIDの組み合わせを検索して関連元具象クラス・メソッドIDと関連先具象クラス・メソッドのペア情報を生成する第4の手段と、所望のクラス・メソッドを指定し、該クラス・メソッドに関連する一連の具象クラス・メソッドを抽出して画面に表示する第5の手段より構成したことに一つの特徴を有する。
本発明の他の特徴は、前記第4の手段は、オブジェクトIDと、該オブジェクトIDに属する具象クラス・メソッドIDとの関係を表す第1のテーブルを作成する手段を備えていることにある。
本発明の他の特徴は、前記第4の手段は、オブジェクトIDと、該オブジェクトIDに属する抽象クラスID及びインターフェースIDとの関係を表す第2のテーブルを作成する手段を備えていることにある。
本発明の他の特徴は、前記第4の手段は、オブジェクト化される具象クラスのID(被生成クラスID)と、オブジェクトの生成クラスのID(生成クラスID)との関係を表す第3のテーブルを作成する手段を備えていることにある。
本発明の他の特徴は、前記第4の手段は、インターフェース又は抽象クラスのクラスIDと、抽象メソッドのメソッドIDとよりなる抽象クラス・メソッドIDと、該抽象クラス・メソッドIDが属する具象クラス・メソッドIDとの関係を示す第4のテーブルを作成する手段を備えていることにある。
本発明の他の特徴は、前記第4の手段は、参照元クラス・メソッドIDと、該参照元クラス・メソッドIDが属するオブジェクトIDと、参照先クラス・メソッドIDと、該参照先クラス・メソッドIDが属するオブジェクトIDとの関係を表す第5のテーブルを作成する手段を備えたことにある。
本発明の他の特徴は、前記第3の手段は、前記第5のテーブルのテーブルレコード番号と、前記参照元クラス・メソッドを参照先とする先頭のクラス・メソッドである文脈クラス・メソッドのIDとの関係を表す第6のテーブルを作成する手段を備えたことにある。
本発明の他の特徴は、前記第3の手段は、前記文脈クラス・メソッドIDと、該文脈クラス・メソッドIDの配下にある一連のクラスの中の被生成クラスのIDとの関係を表す第7のテーブルを作成する手段を備えたことにある。
本発明によれば、次のような効果が得られる。
(1)Java言語プログラムを、クラス間の関連よりも更に詳細なクラス・メソッド間の関連として画面上で把握することが可能となる。クラス・メソッド間の関連は、オブジェクトを生成しないインターフェースや抽象クラスを除いた具象クラス・メソッド間の関連として把握することができ、且つクラス隠蔽により、ソースコードプログラム上では隠蔽されたクラス・メソッドも表示することができる。
(2)具象クラス・メソッドIDを単位としてその関連を把握できるので、あるクラスのあるデータ項目にアクセスするクラス・メソッドを特定したり、当該データ項目が利用されている一連のクラス・メソッドを特定することが可能となる。
(3)具象クラス・メソッドを対象としたクラス・メソッドを単位として、その関連を把握できるので、階層構造のJava言語プログラムにおいて、あるクラス・メソッドが他のクラス・メソッドに及ぼす範囲を特定したり、一つのトランザクションに用いられる全てのクラス・メソッドを特定し、画面上に表示することが可能となる。
(4)オブジェクトの関連を示す従来のシーケンス図を作成するツールでは、隠蔽メソッドへの関連より先の具象メソッドへの関連を分析することができないが、本発明ツールにおいては、隠蔽メソッドの先の具象メソッドへの関連も分析し、画面上に表示することが可能となる。
上記の(1)〜(4)により、大規模業務系のJava言語プログラムの保守作業の負担を著しく軽減することが可能になる。
(5)設計書をリバースエンジニアリングで生成することにより、人手で設計書を保守する工数を大幅に低減することができる。
(6)人手で設計書を保守すると、設計書と実装との乖離を起こし易いが、リバースエンジニアリングで生成することによって、実装との乖離を起こさない。
以下、本発明に係る分析ツールの概要をまず説明し、次にその一実施形態を図面を参照して説明する。
本発明は、具象クラス・メソッド間の関連を調べるのに、クラスIDとメソッドIDの他にオブジェクトIDという概念を導入し、これらのIDを基にして隠されたクラス及び隠蔽されたクラスも含めて、具象クラス・メソッドと、その具象クラス・メソッドが参照する具象クラス・メソッドとの関係を求めて表示できるようにしたツールにおいて、更に文脈クラス・メソッドIDという概念を導入することにより、具象クラス・メソッド間の参照関係をより高精度に探索できるようにしたものである。
本発明ツールにより、具象クラス・メソッドの関連情報を表示する手順は次のとおりである。
(1)Javaプログラムの各クラスファイルからクラス情報、メソッド情報、及び参照先メソッド情報を抽出する。
(2)抽出した情報をDBに登録する。
(3)登録された情報を基にしてオブジェクトID情報を生成する。
(4)クラスID、メソッドID及びオブジェクトIDを基にして、参照元の具象クラス・メソッドIDと、参照先の具象クラス・メソッドIDの関連情報を生成する。
(5)文脈クラス・メソッドIDを用いて、(4)では特定できないオブジェクトIDを探索する。
(6)具象クラス・メソッドの関連情報を表示する。
以下、これらの具体的内容を順に説明する。
(1)Javaプログラムからの情報抽出
Javaプログラムから、図1−4に例示したクラス情報10、メソッド情報20及び参照先情報30を抽出するために、まずクラスファイルを生成し、次にクラスファイルを分析する。
(1.1)クラスファイル生成
クラスファイルとは、Javaソースコードプログラムを構成する各クラスをコンパイルすることにより生成されたファイルである。例えばJavaソースコードプログラムの各クラスは、図2−1に例示されるように記述されており、これをコンパイルすると、図2−2に例示されるような数字で記述されたものになる。大規模業務システムではクラスの数が数10万個に達するから、その数のクラスファイルが作成されることになる。
このクラスファイルの中には具象ファイル、抽象クラス及びインターフェースのファイルが含まれる。
(1.2)ファイル分析
次に、このクラスファイルを分析して4種類の情報を抽出する。図3−1に示すクラス情報、図3−2に示すメソッド情報、図3−3に示すスーパークラス情報、及び図3−4に示すメソッド関連情報である。
従来、ソースコードプログラムからクラス情報やメソッド情報を抽出する試みはあるが、本発明においては更にメソッド関連情報を抽出したことに一つの特徴がある。
クラス情報には、具象クラス、抽象クラス及びインターフェースのクラスID、クラス名、パッケージ名、スーパークラス名、スーパークラスパッケージ名及びクラスの種類の情報が含まれる。
パッケージとは、複数のクラスやインターフェースをひとまとめにしたものである。またスーパークラスとは、継承する元となったクラス、つまり親クラスであり、継承して作ったクラスをサブクラス(子クラス)という。クラスの種類は、そのクラスが具象クラス、抽象クラス及びインターフェースの3種類に分類する情報である。
メソッド情報には、図3−2に示すように、クラスID、メソッドID、メソッド名、引数及び戻り値の情報、コンストラクタ、メソッドの種類などの情報が含まれる。メソッドIDは、各クラスIDの中で一義的に定められるIDである。コンストラクタとは、オブジェクトの生成をするときに自動的に呼び出される特殊なメソッドである。
スーパークラス情報には、図3−3に示すように、子クラスIDと親クラス名との関係、及びクラスIDとインターフェース名との関係を表す情報が含まれる。
メソッド関連情報には、図3−4に示すように、クラスID、メソッドIDの他に、一意キーID(図3−4のレコードを一意的(ユニーク)に特定するID)、参照先のクラス名、参照先のメソッド名が含まれる。また参照先クラスが具象クラス、インターフェース、抽象クラスのいずれに属するかを示す参照先クラス情報も含まれる。
図3−5は、クラスファイルから上記のクラス情報、メソッド情報、スーパークラス情報及びメソッド関連情報を抽出するフローを示す。
ステップS401において、図2−1に例示したクラスファイルを1件読み込む。続いて、クラス項目の記述からクラス名称の情報を取り出し(S402)、更にクラス種類の情報を取り出す(S403)。
ステップS404では、extendsの項目値を全部取り出す。extendsは継承を定義する記号であり、例えば
class A extends B
という記述は、サブクラス(子クラス)Aがスーパークラス(親クラス)Bを継承したことを表す。また、インターフェースに対してextendsの記号を用いる場合は、拡張インターフェース(子インターフェース)がそのインターフェース(親インターフェース)を継承したことを表す。
ステップS405では、implements項目値を全部取り出す。implementsは実装を定義する記号であり、例えば
class C implements D
と記述すると、例えばインターフェースDをクラスCが実装することを表す。
ステップS406では、読み込んだクラスファイルのクラス種類がインターフェースかクラスかを判定する。クラスの場合はextendsの項目に記述されたクラス(上記のD)をスーパークラス名称とし(S407)、また、implementsの項目値(上記のD)をインターフェース名称とする(S408)。
一方、ステップS406でインターフェースと判定された場合、extends項目値を拡張インターフェース名称とする(S409)。
次に、ステップS410〜S419において、メソッドに関する情報を抽出する。まず、クラスファイルからメソッド名称を取り出し(S412)、更に戻り値(処理の結果の値)の型名(例えば整数型)及び引数(処理の対象となる変数、パラメータ)の型名称を順次取り出す(S413,S414)。
ステップS415でメソッド名称がクラス名称に等しいか否か判断し、等しい場合、上記メソッドはオブジェクトの生成のときに呼び出されるコンストラクタというメソッドであると判断する(S416)。
ステップS415の判定がNOのときは、メソッド中に処理ロジックが存在するか否か判定する(S417)。処理ロジックが存在すれば具象メソッドと判断し(S418)、処理を記述せずに、単に呼び出した方だけを定義したメソッドは抽象メソッドと判断する(S419)。このようにして、図3−2に示したメソッド情報が抽出される。
次に、ステップS420〜S427によりメソッド関連情報を抽出する。ステップS420において、メソッド本体の処理ロジック中に記述された参照先のメソッド情報を検索する。ステップS421で未処理のメソッドがあるか否か判定し、ある場合はステップS422に進み、参照先メソッドのメソッド名称を取り出す。また、ステップS423において、参照先メソッドが属するクラスのクラス名称をそれぞれ取り出す。
次に、処理ロジックの引数がレジスタ変数か否かを判定し(S424)、レジスタ変数の場合は、ロジックを遡って、レジスタ変数に値を代入している箇所から引数の型名称(例えば整数型)を取り出す(S425)。またステップS424の判定がNOの場合は、参照先メソッドの引数の型名称を順次取り出す(S426)。また、参照先メソッドを呼び出すオペランドから参照先がインターフェースか、或いはクラスかを判断する(S427)。
このように本発明は、クラス情報及びメソッド情報だけでなく、参照先のクラス及びメソッドの情報をも抽出する。そして得られた情報は、図3−6に例示するXMLファイルとして整理される。
(2)抽出情報のDB投入
上記のようにして抽出された情報は、DBに投入される。図4−5は、DB投入のフローを示すもので、ステップS501において、前述のXMLファイルにより各クラス毎のレコードが読み込まれ、ステップS502でクラスに関する情報が、図4−1に例示するクラス情報テーブルT100に登録される。またステップS503では、メソッドに関する情報が、図4−2に例示するメソッド情報テーブルT200に登録される。ステップS504では、クラスのスーパークラス及びインターフェースの情報が、図4−3に例示するスーパークラス情報テーブルT300に登録される。更にステップS505では、メソッド関連情報が、図4−4に例示するメソッド関連情報テーブルT400に登録される。このようにして、数万〜数10万個の全クラスの情報が、全てDBに投入される(S506)。
(3)オブジェクトID情報の生成
まず、オブジェクトIDという新しい概念を導入することによって、具象クラス・メソッド間の関連情報を探索する仕組みについて説明する。
簡単な例として、図5−1に示すように、具象クラスA,B,CとインターフェースIA,IBがあり、IAをIBが継承し、クラスB及びCがインターフェースIBを継承している場合を考える。説明の便宜上、A,B,C・・・はクラスの名称と、クラスIDの両方を指称するものとし、クラス・メソッドIDは、例えばAa,IAmのように表すものとする。
オブジェクトIDは、オブジェクト化される具象クラスに対して付与される。この例では、具象クラスA,B,Cがインスタンス情報を生成するクラスに相当するので、各クラスA,B,CにクラスIDと同一のオブジェクトIDのA,B,Cが付与される。すなわち、オブジェクトIDはクラスA,B,Cのオブジェクトの生成クラス(生成クラス)ではなく、オブジェクト化されるクラス(被生成クラス)のクラスIDと同じコードとされる。なお説明の便宜上、ここではオブジェクトIDが付与されると記述するが、実際には、オブジェクトIDとクラス・メソッドとの対照表あるいはオブジェクトIDとインターフェースの対照表が作成される。また、クラス・メソッドIDがAaとAbのように、同じクラスに属する異なるメソッドにも同一のAというオブジェクトIDが付与される。
一方、インターフェースIA,IBはインスタンス化されないので、継承関係にある具象クラスのオブジェクトIDが付与される。図5の例では、インターフェースIA、IBは具象クラスBと継承関係にあるのでBというオブジェクトIDが付与されると同時に、具象クラスCとも継承関係にあるのでCというオブジェクトIDも付与される。すなわち、各インターフェースのクラス・メソッドIDに相当するIAm,IBmが、具象クラスBのオブジェクトIDのBに属するという対照表が作成されると共に、IAm及びIBnがオブジェクトIDのCに属するという関係が対照表に登録される。
このようにして、全てのクラス・メソッドがオブジェクト化されるクラスのオブジェクトIDに属するという関係表が作成される。従来は、例えばAaの関連先がBmであった場合、多数のクラスやインターフェースの参照関係、継承関係を追跡してBmを探索しなければならなかったが、本発明では、IAm,IBn、Bmに共通のオブジェクトIDであるBが付与され、AaがオブジェクトIDのBに属するIAmを参照先としているので、オブジェクトIDのBを媒介情報としてAaとBmとの関係をより探索しやすくなる。
以上述べたオブジェクトIDをキー情報として、具象クラス・メソッド間の関連を探索するには、事前に次のような準備をする必要がある。
第1は、オブジェクトIDと具象クラス・メソッドIDの対照表の作成である。図5の例で説明すると、クラス・メソッドAa,AbがオブジェクトIDのAに属し、クラス・メソッドBmがオブジェクトIDのBに属することを示すテーブルである。本明細書では、このテーブルをオブジェクト情報マスターテーブルと称する。
第2は、オブジェクトIDとインターフェースID(及び抽象クラスのID)との対照表である。図5の例で説明すると、インターフェースIA,IBがオブジェクトIDのBに属し、同様にIA,IBがオブジェクトIDのCにも属するという関係を示すテーブルである。本明細書では、このテーブルをオブジェクト対インターフェース情報テーブルと称する。
第3は、オブジェクト化される具象クラス(被生成クラス)と、そのオブジェクトの生成クラスのIDとの対照表である。本明細書では、前者のクラスを被生成クラス、後者のクラスを生成クラスと称する。図5の例には示されていないが、クラスAのオブジェクトはクラスA以外の別のクラス、例えばクラスXで生成される。また、クラスBのオブジェクトは別のクラス、例えばクラスYで生成される。従ってこの場合は、被生成クラスAと生成クラスXとの関係及び被生成クラスBと生成クラスYとの関係を示すテーブルとなる。本明細書では、このテーブルを生成クラス情報テーブルと称する。
第4は、継承関係にあるために隠蔽されている抽象メソッドを可視化する処理である。図5の例では、インターフェースIBがIAを継承しているため、クラス・メソッドIDとしてIAmとIBnしか記述されていないが、実際にはIBmが隠蔽されている(図1−6参照)。継承関係にある全ての抽象クラス・メソッドIAm,IBm,IBnがオブジェクトIDのBに属するという関係を表すためには、隠蔽されている抽象メソッドも含めた全抽象メソッドを可視化する処理が必要である。本明細書では、この処理を全抽象メソッド情報登録処理と称する。
第5は、具象クラス・メソッドIDが参照している参照先の抽象クラス・メソッドIDと、その抽象クラス・メソッドIDが属するオブジェクトID、及び同じオブジェクトIDに属する具象クラス・メソッドIDとの関係を示すテーブルである。図5の例では、クラスAの参照先のIAmと、IAmが属するオブジェクトのIDであるBと、オブジェクトBに属する具象クラスBの具象クラス・メソッドIDBmとの関係を示すテーブルである。本明細書では、このテーブルをインターフェース対実装対応情報テーブルと称する。
本発明は、以上説明したテーブルの情報に基づいて、具象クラス・メソッド間の関連情報を生成することに一つの特徴を有する。
以下、第1〜第5の処理及びテーブル作成のフローについて詳しく説明する。
(3.1)オブジェクト情報マスターテーブルの作成
図6−1は、オブジェクト情報マスターテーブルT500に含まれる情報を示すもので、オブジェクトIDと、オブジェクトIDに属する具象クラス・メソッドIDの関係を示す。また、クラスに親子関係がある場合は、親・子・孫の順に番号を付けた階層番号の情報も含まれる。
図6−2は、オブジェクトマスター情報テーブルを作成するフローを示す。まず、ステップS601において、クラス情報テーブルT100からクラスタイプが“0”のもの、すなわち具象クラスのみのクラスIDを抽出して、一時テーブル(T)を作成する。ステップS602では、テーブル(T)にクラスIDが登録されているか否かを判定し、登録されている場合は、そのクラスIDを1件取り出してそのクラスIDをオブジェクトID(O)とする(S603)。
次に、クラス情報テーブルT100を参照して、取り出したクラスIDに親クラス名が設定されているか否か判断する(S621)。親クラス名が設定されている場合は、親クラス名をキー情報として、クラス情報テーブルT100を参照して親クラスIDを取得する(S622)。そして取得したクラスIDを主体にして(S624)、再びステップS621とS622を繰り返すことにより最上位のクラスID(ST)を取得する(S623)。
階層番号(L)として(L)=0とし(S604)、(ST)を(B)に置き換えた後(S605)ステップS603で(L)+1を(L)に置き換えることによって最上位の階層番号が1となる。すなわちこの実施例では、階層番号は相対的な値で、最上位の親が一番若い番号となる。
次にステップS607において、メソッド情報テーブルT200から、最上位のクラス(B)に属する具象メソッド(メソッド種類が“0”のクラス)のメソッドIDを取り出す。取り出したメソッドIDと、クラスID(B)のペアと、階層番号(L)と、オブジェクトID(O)を1組として、集合メモリ(M1)に格納する。
この結果、オブジェクトID(O)と、そのオブジェクトIDを付与される最上位の親クラスに属する具象メソッドのクラス・メソッドIDの関連を表す情報が生成される。
次にステップS608では、クラス情報テーブルT100を参照して、クラスID(B)を親クラスとする子クラス(C)を検索する。ステップS609において、クラス(B)の子クラス(C)が存在すると判定された場合は、C→Bと置き換えて、ステップS606〜S609を繰り返す。この結果、親子関係にある全てのクラスのクラス・メソッドIDに対してオブジェクトID(O)が付与される。
ステップS611では、オブジェクトID(O)と、そのオブジェクトID(O)に属する具象クラス・メソッド及びクラスの階層の情報がオブジェクト情報マスターテーブルT500に書き込まれる。その後、具象クラスIDの一時テーブル(T)から取り出した1件のクラスIDを削除する(S612)。そして次の1件のクラスIDを取り出し、クラスIDがなくなるまで繰り返して行われる。この結果、クラス情報テーブルT100の全ての具象クラス・メソッドに対し、オブジェクトIDが付与されたことになる。
(3.2)オブジェクト対インターフェース情報テーブルの作成
図7−1は、オブジェクト対インターフェース情報テーブルT600に含まれる情報を示すもので、オブジェクトID(被生成クラスのクラスID)とそのオブジェクトIDを付与された抽象クラスのID及びインターフェースのIDの情報を含む。
図7−2は、オブジェクト対インターフェース情報テーブルT600を作成するフローを示す。
まずステップS631において、オブジェクト情報マスターテーブルT500に登録されているオブジェクトID(O)を全件抽出する。次にステップS632において、オブジェクトID(O)の中の1件のオブジェクトのオブジェクトID(O1)を取り出す。
オブジェクトID(O1)が存在するか否か判定し(S633)、存在する場合は、オブジェクト情報マスターテーブルT500からオブジェクトID(O1)に属する具象クラスID(C)を全件抽出する(S634)。そして、オブジェクトID(O1)と抽出した全件の具象クラスID(C)のリスト(L)を作成する(S635)。抽出した具象クラスID(C)の集合から1件の具象クラスID(C1)を取り出す(S636)。
ステップS637において、具象クラスID(C1)が存在するか否かを判定し、存在する場合はクラス情報テーブルT100を参照してクラスID(C1)の親クラス名を調べ、親クラス名がある場合は、スーパークラス情報テーブルT300を参照してそのクラスIDを調べ、更にテーブルT100を参照してそのクラスIDのクラス種類を調べることによって具象クラスID(C1)が参照するインターフェース及び具象クラスID(C1)の親に相当する抽象クラス(上位抽象クラス)のクラスID(P)を抽出する。
更にステップS639では、オブジェクトID(O1)と、インターフェース及び上位抽象クラスID(P)をオブジェクト対インターフェース情報テーブルT600に登録する。
次に、登録されたインターフェース及び上位抽象クラス(P)から1件のインターフェース又は抽象クラスID(P1)を取り出す(S640)。クラスID(P1)が存在するか否かを判定し(S641)、存在する場合はクラスID(C1)をクラスID(P1)に置き換え(S642)、再びステップS638に戻って同じ処理が繰り返される。
一方、ステップS641の判定でインターフェース及び抽象クラスID(P1)が存在しない場合は、リスト(L)よりオブジェクトID(O1)と具象クラスID(C1)のペアを削除し、ステップS636に戻って次の1件の具象クラスIDを取り出す。このステップS636〜S642の処理を繰り返すことによって、1件のオブジェクトID(O1)と、このオブジェクトID(O1)に属する全てのインターフェース及び抽象クラスのインターフェースID及び抽象クラスIDのペアの情報が登録されることになる。
また、ステップS637の判定の結果、クラスID(C1)が存在しないと判定された場合はステップS632に戻り、次の1件のオブジェクトIDを取り出して、同様の処理が行われる。
この結果、図6−2により生成された全件のオブジェクトID(O)と、このオブジェクトID(O)を付与されるインターフェースID及び抽象クラスIDの対照情報が作成される。
(3.3)生成クラス情報テーブルの作成
図8−1は、生成クラス情報テーブルT700に含まれる情報を示すもので、例えばクラスAのオブジェクトをクラスBで生成している場合、クラスAを被生成クラス、クラスBを生成クラスとしてクラスAとクラスBのIDを登録したものである。
図8−2は、生成クラス情報テーブルを作成するフローを示す。ステップS701では、メソッド関連情報テーブルT400から、参照先メソッド名及びメソッド戻り型名が未定義であるレコード(R1)を抽出する。このレコード(R1)は、そのクラスでオブジェクトを生成する処理、すなわちインスタンス化を行っている可能性があることを示す。ステップS702では、そのレコード(R1)のクラスID、メソッドID及び参照先クラス名、参照先パッケージ名を取り出す。取り出したレコード(R1)のクラスIDを被生成クラスのクラスIDと見なし、参照先クラス名の欄のクラスを、オブジェクトを生成している生成クラス名と見なす。
次に、ステップS704において、クラス情報テーブルT100を参照して、生成クラス名をキーにしてそのクラスIDを取得する。更にステップS705において、上記被生成クラスIDと生成クラスIDの組が、生成クラス情報テーブルT700に登録済みか否かを判定し、既に登録されている場合はステップS702に戻り、登録されていなかった場合には、そのテーブルT700に登録する(S706)。
一方、ステップS703の判定がNOの場合は、ステップS707に進み、メソッド関連情報テーブルT400から参照先メソッド名が参照先クラス名と等しく、且つメソッド戻り型名が未定義であるレコード(R2)を抽出する。この抽出されたレコード(R2)は、いわゆるnew演算子が記述されたクラス、つまりS702とは異なる方法でオブジェクトを生成していることを示す。以下、ステップS708〜S712において、前述のステップS702〜S706とまったく同様にして、被生成クラスIDと生成クラスIDのペアの情報が生成され、登録される。
この結果、オブジェクトを生成する資格のある具象クラスのID(被生成クラスID)と、そのオブジェクトを現に生成している具象クラスのID(生成クラスID)との対照表が作成される。
(3.4)全抽象メソッド情報登録処理
図9は、全抽象メソッド情報登録処理のフローを示す。この処理は、継承関係のために隠蔽されている抽象メソッドを可視化する処理である。
まずステップS801では、クラス情報テーブルT100及びスーパークラス情報テーブルT300より、上位インターフェース及び上位抽象クラスが、存在しないインターフェース及び抽象クラスのクラスIDの全件(T)を抽出する。抽出した全件のクラスID(T)から、1件ずつインターフェース又は抽象クラスのクラスID(T1)を取り出す(S802)。ステップS803でクラスID(T1)が存在するか否か判定し、YESの場合にはステップS804に進む。ステップS804では、メソッド情報テーブルT200を参照して、クラスID(T1)のレコードを取り出し、そのメソッドの中から抽象メソッドのメソッドID(TM)を抽出する。
次にステップS805において、クラス情報テーブルT100とスーパークラス情報テーブルT300を参照して、上記のインターフェース又は抽象クラスのクラスID(T1)の子インターフェース及び子抽象クラスのクラスIDの集合(S)を抽出する。抽出したクラスIDの集合(S)から、1件ずつ子インターフェース又は子抽象クラスのクラスID(S1)を取り出し、メソッド情報テーブルT200を参照して、クラスID(S1)に属するメソッドIDの最大値(MM)を求める(S808)。
更にステップS810では、前述のステップS804で抽出した抽象メソッドID(TM)を全件、上記子インターフェース又は子抽象クラスのクラスID(S)のメソッドとしてメソッド情報テーブルT200に登録する。この結果、親のインターフェース又は親の抽象クラスに属する抽象メソッドが、子のインターフェース又は子の抽象クラスに属する抽象メソッドとして登録される。その際、抽象メソッドIDには、親子の階層を示す情報として(MM)から始まる番号を設定する。更にステップS811では、子の抽象クラスのクラスIDの集合(S)をサブクラス一覧(SL)に追加する。
このようにして、親の抽象クラスの集合(T)と子の抽象クラスの集合(S)について、全て繰り返し同様の処理を行った後、ステップS813において、(T)の内容を(SL)の内容で置き換える。これにより、親子の関係にある抽象クラス又はインターフェースの全ての抽象メソッドが可視化されて、抽象メソッドテーブルT200に登録されたことになる。
(3.5)インターフェース対実装対応情報テーブルの作成
図10−1は、インターフェース対実装対応情報テーブルT800に含まれる情報を示すもので、参照先インターフェースまたは参照先抽象クラスのクラスID、及び参照先インターフェースまたは参照先抽象クラスにおける参照先抽象メソッドのメソッドIDと、その抽象メソッドが属するオブジェクトIDの情報が含まれる。また、同じオブジェクトIDに属する具象メソッドのメソッドIDと、その具象メソッドが属する具象クラスのクラスIDも含まれる。
図10−2は、インターフェース対実装対応情報テーブルを作成するフローチャートを示す。まずステップS901において、クラス情報テーブルT100からインターフェース及び抽象クラスの全件のクラスID(A)を抽出する。次に、ステップS902において、抽出したクラスID(A)よりインターフェース又は抽象クラスのクラスIDを1件(A1)ずつ順次取り出す。更に、ステップS903において、クラスID(A1)が存在するか否か判定し、YESの場合はメソッド情報テーブルT200を参照して、インターフェース又は抽象クラスのクラスID(A1)に属する抽象メソッドのメソッドレコード(AM)を抽出する(S904)。
次に、抽象メソッドレコード(AM)が1件以上存在するか否か判定し(S905)、存在する場合は、オブジェクト対インターフェース情報テーブルT600を参照して、抽象クラス(A1)が属するオブジェクトID(O)を抽出する(S906)。抽象クラスは、複数個のオブジェクトIDに属すことができるので、抽出したオブジェクトID(O)からオブジェクトIDを1件ずつ(O1)順次取り出す(S907)。次に、ステップS908において、オブジェクトID(O1)が存在するか否か判定し、YESの場合はステップS909に進む。
ステップS909においては、オブジェクト情報マスターテーブルT500を参照して、オブジェクトID(O1)に属する具象メソッドを求め、更にメソッド情報テーブルT200を参照して、その具象メソッドの名称、引数等を含むメソッドレコード(CM)を階層番号の大きな順に抽出する。ステップS910において、具象メソッドレコード(CM)が1件以上存在するか否か判定し、YESの場合はステップS911に進む。ステップS911においては、抽象メソッドのメソッドレコード(AM)からメソッド名称、引数情報を1件ずつ(AM1)順次取り出す。更にステップS912において、抽象メソッドのメソッドレコード(AM)を全て読み出したか否か判定し、全てレコードを読み出した場合はステップS913に進み、具象メソッドのメソッドレコード(CM)から、レコード番号の大きい順にメソッド名称、引数情報を1件ずつ(CM1)取り出す。そしてステップS914でAM1=CM1か否かを判定し、AM1とCM1が等しいときは、抽象クラスのクラスID(A1)及び抽象クラスID(A1)に属する抽象メソッドのメソッドID(AM1)よりなる抽象クラス・メソッドIDと、具象メソッドID(CM1)と該具象メソッドIDが属するクラスのクラスIDよりなる具象クラス・メソッドIDとが同じオブジェクトID(O1)に属すると見なされる。そしてステップS916において、抽象クラス・メソッドIDと、具象クラス・メソッドIDと、オブジェクトIDとの組がインターフェース対実装対応情報テーブルT800に登録される。
このようにして、ステップS901〜S917を繰り返し実行することによって、全てのインターフェース及び抽象クラスのクラス・メソッドIDが属するオブジェクトIDと、そのオブジェクトIDに属する具象クラスのクラス・メソッドIDとの関係を示すインターフェース対実装対応情報テーブルT800を作成することができる。
(4)メソッド間関連情報の生成
以上のようにして生成された各種の情報に基づいて、メソッド間関連情報を作成する。メソッド間関連情報とは、図1−5を例にとると、具象クラス・メソッドIDのC11m2と、その参照先の具象クラス・メソッドIDのC21m4とのペア情報を称し、C11m2を参照元のクラス・メソッドID、C21m4を参照先のクラス・メソッドIDという。なお、具象クラス・メソッドが抽象クラスやインターフェースを介して他の具象クラスを参照する場合もあるので、関連先クラス・メソッドID、関連元クラス・メソッドIDということもある。
このメソッド間の関連を表すペア情報は、図11−1に示すように、クラス情報テーブルT100、メソッド情報テーブルT200、メソッド関連情報テーブルT400、生成クラス情報テーブルT700、オブジェクト情報マスターテーブルT500及びインターフェース対実装対応情報テーブルT800の情報を参照しながら最終的に、メソッド間関連情報テーブルT900を作成することにより生成される。
図11−2は、メソッド間関連情報テーブルT900に含まれる情報を示す。901は処理フラグで、このテーブルT900を作成する過程で用いられる。分析が済んだときは0、オブジェクトIDを特定できないときは1、オブジェクトIDと参照先のクラス・メソッドを特定できないときには2がセットされる。902は参照元(関連元)クラスが属するオブジェクトのIDであり、前記のペア情報を生成するために用いられる。903は参照元(関連元)の具象クラス(実装クラス)のクラスID、904は参照元(関連元)の具象メソッド(実装メソッド)のメソッドIDであり、903と904により参照元(関連元)の具象クラス・メソッドIDが形成される。903の情報はメソッド関連情報テーブルT400(図3−4)のクラスIDと同じであり、904は該テーブルT400のメソッドIDと同じである。905は参照先(関連先)クラス・メソッドが属するオブジェクトのIDであり、これも前述のペア情報を生成するために用いられる。抽象メソッド又はインターフェースが介在するために参照先の具象クラス・メソッド及び、そのクラス・メソッドが属するオブジェクトIDが特定できないとき、つまり処理フラグ901が1又は2の場合、このオブジェクトID905としてオール0が設定される。906は参照先(関連先)の具象クラス(実装クラス)のクラスID、907は参照先(関連先)具象メソッドのメソッドIDである。
次に、図11−3から図11−6を参照して、メソッド間関連情報を作成するフローについて説明する。
ステップS1001において、メソッド情報テーブルT200(図3−2)から具象メソッドを1件ずつ取り出す。ステップS1002で具象メソッドが存在するか否かを判定し、存在する場合は、メソッド関連情報テーブルT400(図3−4)を参照して、参照先クラス名、参照先メソッド名及び参照先パッケージ名の情報を取り出す(S1003)。
なお、以下の説明では、参照先及び関連先を代表して関連先とし、参照元及び関連元を代表して関連元という用語を用いる。
ステップS1004で関連先情報が存在するか否か判定し、YESの場合はステップS1005に進む。
ステップS1005において、クラス情報テーブルT100を参照し、抽出したクラス名及びパッケージ名をキー情報として、関連先クラスのクラスID及びクラス種類の情報を取り出す。更にステップS1006において、メソッド情報テーブルT200を参照し、先に取り出したメソッド名と、上記ステップS1005で取り出したクラスIDをキー情報として、メソッドIDとメソッド種類の情報を取り出す。
以上の処理により、ある具象クラスに属する具象メソッドの関連先クラスのクラスID及びクラス種類と、関連先メソッドのメソッドID及びメソッド種類の情報が得られたことになる。ここでクラス種類は、クラス情報テーブルT100のテーブル項目値により、図11−5に示すように、インターフェース、抽象クラス、具象クラスに分類され、メソッド種類は、メソッド情報テーブルT200のテーブル項目値より抽象メソッド、具象メソッド、staticメソッドに分類される。なお、メソッド種類のレコードのないメソッドもある。
図11−3のステップS1008では、これらのクラス及びメソッドの分類に応じて、図11−5に示すような処理区分(1)〜(8)が決定される。例えば処理区分(1)は、関連先クラスがインターフェースであり、関連先メソッドが抽象メソッドである場合の処理を示し、処理区分(2)は、関連先クラスが抽象クラスであり、関連先メソッドが抽象メソッドである場合の処理を示している。なお、図11−5の表で斜線を施した箇所は、クラス・メソッドの組み合わせとして理論的に存在し得ないことを示している。
図11−4を参照して、まず処理区分(1)と(2)について説明する。
関連先クラスの種類がインターフェースか抽象クラスで、関連先メソッドの種類が抽象メソッドの場合、まずステップS1020において、インターフェース対実装対応情報テーブルT800を参照して、そのクラス・メソッドが属するオブジェクトIDと、そのオブジェクトIDに属する具象クラスID及び具象メソッドIDを取り出す。取り出したオブジェクトIDが1件だけか否か判定し(S1021)、1件しかない場合は、上記の取り出したオブジェクトIDを関連先のオブジェクトIDと決定する(S1022)。また、当該オブジェクトIDに属する具象クラスID及び具象メソッドIDも、それぞれ関連先具象クラスID及び関連先具象メソッドIDとして決定する(S1023)。
ステップS1024では、メソッド間関連情報テーブルT900の処理フラグ901に、分析済みを示す0をセットする。また、関連元具象メソッドが属する関連元クラスのクラスIDを関連元オブジェクトIDとする(S1025)。ステップS1075において、メソッド関連情報テーブルT900の関連元クラスのオブジェクトID、関連元の具象クラス・メソッド、関連先のオブジェクトID、関連先の具象クラス・メソッドIDを登録する。
一方、ステップS1022における判定がNOの場合は、関連先オブジェクトを全て0にする(S1026)と共に、関連先クラス及び関連先メソッドにも全部0をセットする(S1027)。更にステップS1028では、メソッド間関連情報テーブルT900の処理フラグ901に、関連先のクラス・メソッド及びオブジェクトが未特定であることを示す2をセットする。また、関連元オブジェクトIDも全部0にセットする(S1029)。
以上のように、関連先クラスの種類が、インターフェースが抽象クラスで、関連先メソッドの種類が抽象メソッドの場合は、予め作成したインターフェース及び抽象クラスのクラスIDと、該クラスIDが属するオブジェクトIDとの関係を表すテーブルT800を参照してオブジェクトIDを探索し、次に当該オブジェクトIDに属する具象クラスのクラスID及び具象メソッドのメソッドIDを探索することにより、関連先の具象クラス・メソッドIDを特定する。
次に、処理区分(5)又は(6)の場合、つまり、関連先のクラスが抽象クラスか具象クラスであって、関連先メソッドが具象メソッドである場合について説明する。クラスの種類が抽象クラスであっても、メソッドの種類が具象メソッドであれば、その抽象クラスにオブジェクトIDが付与されている。ステップS1030において、オブジェクト情報マスターテーブルT500を参照し、具象メソッドID及びクラスIDをキーに、オブジェクトIDの情報を取り出す。この取り出したオブジェクトIDが関連先オブジェクトID候補となる。
次に、上記オブジェクトID候補をキーとしてオブジェクト情報マスターテーブルT500を検索し、関連先具象メソッドと、メソッド名及びメソッド引数が同じメソッドを取り出す。その際、クラスに親子関係がある場合は下位クラスから探索する(S1031)。
Javaにはキャストと呼ばれる仕組みがあり、同じ名前のメソッドがクラスの親子間で双方に定義されている(「オーバーライド」と言う)場合、関連先クラスが親クラスであっても、文法上は子クラスのメソッドを指す必要がある。従って、オブジェクトに関連付くクラスのうち、末端の子クラスから順にメソッドを検索し、最初に見つかったメソッドを関連先メソッドとする。この検索の条件が「メソッドの名称、引数が同じ」ということになる。
例えば具象クラスA、Bが親と子の関係にあり、双方にメソッドm( )が定義されている場合。関連元クラスからの関連先が「クラスAのメソッドm( )」であっても、オブジェクトがBであれば参照先メソッドはクラスBのメソッドm( )になる。オブジェクトマスター情報テーブルに対しクラスAのメソッドm( )をキーに検索すると、オブジェクトIDはAとBが取得できる。オブジェクトがBの場合にはステップS1031の手順でクラスBのメソッドm( )を取り出す。ここでもしクラスAが抽象クラスだった場合は、オブジェクトIDはBのみ取得できる。この場合もステップS1031の手順でクラスBのメソッドm( )を取り出す。
ステップS1032では、取り出した関連先オブジェクトIDの候補が1件か否かを判定し、1件の場合は、取り出したオブジェクトID候補を関連先オブジェクトIDとする(S1033)。また、ステップS1031の探索により得られた具象メソッド及びその具象メソッドが属する具象クラスを、関連先具象クラス、関連先具象メソッドとする(S1034)。
ステップS1035では、メソッド間関連情報テーブルT900の処理フラグ901に分析済みを示す0をセットする。また、関連元クラスのオブジェクトID候補を関連元オブジェクトIDとして、同様にステップS1075で関連元、関連先のオブジェクトID、具象クラス・メソッドIDを登録する。
一方、ステップS1032の判定の結果、NOの場合はS1026〜S1029と同様に、関連元、関連先オブジェクトID及び関連元、関連先クラス・メソッドIDに全部0がセットされる(S1037〜S1040)。
以上のように、関連先のクラス種類が抽象クラスや具象クラスで、関連先のメソッドの種類が具象メソッドの場合も、オブジェクトIDを手がかりにして関連先の具象クラス(実装クラス)及び具象メソッド(実装メソッド)を特定できる場合がある。
次に、処理区分が(3)の場合、つまりクラスが抽象クラスでメソッド情報がない場合は、ステップS1050〜S1056により関連元、関連先のオブジェクトID、関連元、関連先の具象クラス・メソッドIDを特定する。メソッド情報テーブルに関連先メソッドの定義が無いとは、参照先メソッドが関連先メソッドで定義されずに、上位クラスで定義されていることを指す。関連先クラス・メソッドがメソッド情報テーブルに定義されていないのでオブジェクト情報マスターテーブルにも当該クラス・メソッドは定義されていない。そこで、上位クラスに具象メソッドを探し求める。ステップS1050では、メソッド名称と引数が同じであるという探索条件で上位クラスの具象メソッド(実装メソッド)を求める。次にステップS1051では、特定した具象メソッド(実装メソッド)と、そのメソッドが属するクラス情報をキーとしてオブジェクトをオブジェクト情報マスターテーブルを検索し、オブジェクト候補を取り出す。
以下のステップS1052〜S1060は、前述のステップS1032〜S1040と同じである。
処理区分(4)は、関連先のクラス種類が具象クラスでメソッド情報がない場合である。この場合は、オブジェクトIDは関連先クラスのIDであるから、オブジェクトを探索する手順が不要となり、上位クラスの具象メソッド(実装メソッド)を探索する手順のみとなる。すなわちステップS1070において、スーパークラス情報テーブルT300を参照して上位クラス(親クラス)のクラス名を探索し、次にメソッド情報テーブルT200を参照して、その上位クラスのクラスIDから、そのクラスIDに属するメソッドを探索する。そして、そのメソッドの中でメソッド種類が0のメソッド、すなわち具象メソッドを取り出す(S1070)。この具象クラス及び具象メソッドをキーに、オブジェクト情報マスターテーブルT500から関連先のオブジェクトIDを取り出す。取り出したオブジェクトID、具象クラスID及び具象メソッドIDを、それぞれ関連先のオブジェクトID、関連先の具象クラスID、関連先の具象メソッドIDとする(S1072)。更に、メソッド間関連情報テーブルT900の処理フラグ901に分析済みを示す0をセットする(S1073)。また、関連元クラスのオブジェクトID候補を関連元オブジェクトIDとして(S1074)、メソッド間関連情報テーブルT900に登録する。
一方、処理区分が(7)及び(8)の場合、つまりクラスの種類が抽象クラスか具象クラスで、メソッドの種類がstaticの場合は、ステップS1071において、メソッドを関連先具象メソッドとし、クラスを関連先の具象クラスとする。
以上の説明から明らかなように、オブジェクトIDという新しい概念を導入することにより、オブジェクトIDを手がかりにして関連先の具象クラス・メソッドを特定する精度を高めることが可能となる。
(5)特定できない関連先クラス・メソッドのオブジェクトIDの探索
図11−3及び図11−4の処理により、関連先クラス・メソッドが属するオブジェクトIDを特定できなかった場合には、メソッド間関連情報テーブルT900(図11−2)の処理フラグ901が“1”となる。
また関連先クラス・メソッドIDと、関連先クラス・メソッドが属するオブジェクトIDの両方が特定できなかった場合は、メソッド間関連情報テーブルT900の処理フラグ901に“2”がセットされる。
このように関連先クラス・メソッドが属するオブジェクトIDが特定できなかった場合は、文脈IDを用いてこれらを探索する処理が行われる。
ここで文脈IDとは、階層化された構造を有するJava言語プログラムにおいて、最も上位に位置するクラスのIDを指す。例えば図1−5では、クラスC11が文脈クラスに相当する。証券業務などの大規模業務系のように、数万〜数10万個のクラスを有するプログラムでは、最上位の階層に属する文脈クラスは数千個程度であり、この文脈クラス配下に多数のクラスがツリー状に階層化されて配列されている。
図12−1は、文脈IDを用いて未特定オブジェクトID及び未特定クラス・メソッドIDの探索処理を行うフローチャートを示す。まずステップS1501においては、未解決オブジェクト対文脈ID情報テーブルT1000の作成処理を行う。このテーブルT1000は図12−1に示すように、未特定のオブジェクトID又は未特定の関連先クラス・メソッドIDを含むメソッド間関連情報テーブルT900のレコード番号情報1001と、関連元クラス・メソッド903,904が属する文脈クラスのID1002,文脈メソッドのID1003を含む。また処理の済又は未済の区分を示すフラグ情報1004を含む。
次にステップS1502において、文脈毎生成クラス情報テーブルT1100の作成処理を行う。このテーブルT1100は、図12−3に示すように関連元クラス・メソッド903,904が属する文脈クラスのID1101文脈メソッドのID1102と、この文脈クラス・メソッドIDの配下にある全ての関連先クラスの被生成クラスID1103の情報を含む。
次にステップS1503において未特定オブジェクトIDの探索処理を行う。ステップS1504において探索件数が残っているか否かを判定し、残りが0になるまで同じ処理を繰り返す。
次にステップS1501,S1502,S1503の処理の具体的な内容を図13−1,13−2,13−3を参照して説明する。
図13−1は、ステップS1501の未解決オブジェクト対文脈ID情報テーブルT1000の作成処理を示すフローチャートである。
ステップS1601では、図11−2に示したメソッド間関連情報テーブルT900の処理フラグ901が1又は2のレコードを全件抽出する。すなわち、これらのレコードは、参照先が隠蔽クラスでオブジェクトIDが不明なものを表す。抽出したレコードは1件ずつ処理し(S1602)、全件終了するまで行われる(S1603)。
ステップS1604では、抽出したレコードの参照元クラスID903及び参照元メソッドID904を参照先としているクラス・メソッドを検索し、更に検索したクラス・メソッドを参照先としているクラス・メソッドを検索する処理を繰り返すことにより、ツリー状の階層構造をしたプログラムの最上位階層に位置する文脈クラス・メソッドを探索する。抽出したレコードの参照元クラスID903及び参照元メソッドID904を参照先とするクラス・メソッドは複数個となることもあるから探索の結果得られる文脈クラス・メソッドも複数個となることがある。
次に見付かった全ての文脈IDに対して次の処理を行う(S1605)。すなわちステップS1602で抽出したレコードのレコード番号と、ステップS1604で見付かった文脈クラス・メソッドIDの組を前記テーブルT1000に1レコードとして登録し、処理済フラグ1004の欄には、OFFを設定する。但し既に当該レコード番号と、当該文脈IDを組としたレコードが登録済であるときには二重に登録することはしない。
上記の処理フローにより、関連先クラス・メソッドが属するオブジェクトIDを特定できないものが、どの文脈クラス・メソッドの配下にあるかを特定することができる。
図13−2は、文脈毎被生成クラス情報テーブルT1100の作成処理(S1502)を示すフローチャートである。
ステップS1701では、未解決オブジェクト対文脈ID情報テーブルT1000(図12−2)に登録されている文脈クラスID1002及び文脈メソッドID1003を処理フラグ1004がOFFのレコードのみを対象として全件取り出す。抽出した文脈クラス・メソッドIDを1件ずつ処理し(S1702)、全件終了するまで行われる(S1703)。
ステップS1704においては、取り出した文脈クラス・メソッドIDの参照先クラス・メソッドIDを検索し、更に検索したクラス・メソッドIDの参照先クラス・メソッドIDを検索する処理を繰り返すことにより、参照先がないツリー構造の末端まで繰り返し検索する。
ステップS1705では、検索の結果見付かった全ての階層の全ての参照先具象クラスIDをキー情報として生成クラス情報テーブルT700を検索し、被生成クラスのIDを抽出する。すなわち登録されている文脈クラスの配下にある具象クラスでオブジェクトを生成されている被生成クラスIDを全てリストアップする。
ステップS1706では、ステップS1701で取り出された文脈クラス・メソッドIDと、ステップS1705で抽出された被生成クラスIDの組を1レコードとして文脈毎被生成クラス情報テーブルT1100に登録する。すなわち、当該文脈クラスの配下の具象クラスで生成されている全ての被生成クラスのIDは、当該文脈クラスの配下で利用されている全オブジェクトIDであるという考え方により、次に説明する探索処理でこのテーブルT1100が利用されることになる。
図13−3は未解決のオブジェクトIDを特定する処理を行うフローチャートを示す。ステップS1801において前述の未解決オブジェクト対文脈ID情報テーブルT1000から処理済フラグ1004がOFFのレコードを全件取り出し、これを1件ずつ処理する(S1802)。
ステップS1803において、全件のレコードの処理が終了したか否か判定し、NOの場合はステップS1804に進む。ステップS1804においては、メソッド間関連情報テーブルT900(図11−2)から、上記レコードのレコード番号で示すテーブルT900のレコードを取得する。
ステップS1806では、取り出したレコードの処理フラグ901が“1”(オブジェクトID未特定)か、“2”(クラス・メソッドID及びオブジェクトIDが未特定)かを判定し、“1”の場合はステップS1807に進む。
ステップS1807では、テーブルT900の参照先クラスのクラスID906及び参照先メソッドのメソッドID907をキー情報としてオブジェクト情報マスターテーブルT500(図6−1)を参照し、そのクラスID及びメソッドIDと一致するオブジェクトIDを検索する。
一方、ステップS1806の判定が“2”の場合は、ステップS1808に進み、テーブルT900の参照先クラスのクラスID906及び参照先メソッドのメソッドID907をキー情報として、インターフェース対実装対応情報テーブルT800(図10−1)を参照し、参照先クラスIDと参照先メソッドIDが一致するレコードを検索する。そして一致したレコードのオブジェクトID及びそのオブジェクトIDに属する具象クラスのクラスID及び具象メソッドのメソッドIDを取得する。
ステップS1809においては、文脈毎被生成クラス情報テーブルT1100を参照して、ステップS1807及びS1808で取得したオブジェクトIDと、被生成クラスID1103が一致し、且つステップS1802で抽出したレコードの文脈クラスID及び文脈メソッドIDとテーブルT1100の文脈クラスID1101及び文脈メソッドID1102が一致するレコードを検索する。
このように参照元クラスが属する文脈を検索する理由は、隠蔽クラスが属する文脈と、参照元クラスが属する文脈は同一であるためである。すなわち、関連元クラス・メソッドIDと、関連先のクラス・メソッドIDは同一の文脈に属しているという考え方に基づく。
ステップS1810では取得したオブジェクトIDと一致する被生成クラスIDが見付かったか否かを判定し、見付かった場合は、ステップS1804で取得したメソッド間関連情報テーブルT900の参照元クラス・メソッドID903,904及び参照元クラス・メソッドが属するオブジェクトIDと、ステップS1807,S1808で取得した参照先クラス・メソッドID及びその参照先クラス・メソッドが属するオブジェクトIDと、参照元及び参照先の文脈クラス・メソッドIDを新たなレコードとしてメソッド間関連情報テーブルT900に登録する。
すなわち、隠蔽クラス(参照先の抽象クラス)が属するオブジェクトID候補の中に、その隠蔽クラスの参照元クラスが属する文脈の配下で生成されるクラス(被生成クラス)が含まれているかどうかを検索し、含まれている場合には、そのオブジェクトIDを隠蔽クラスのオブジェクトIDとする。
この後、ステップS1812において、未解決オブジェクト対文脈ID情報テーブルT1000の処理済フラグ1004をONにする。すなわち一度見付かったクラスにはフラグを立ててステップS1501から始まる次回処理では対象外とすることで重複した検索を防ぎ効率化を図っている。
一方、ステップS1803の判定でYESの場合は、オブジェクトIDと一致した被生成クラスIDをマッチング件数としてカウントし(S1805)、図12−1のステップS1504ではこのマッチヌ件数が0になるまで繰り返してS1501〜S1503の処理を行う。
以上説明したように本発明によれば、文脈クラス・メソッドIDという新しい概念を用いることにより、特願2006−306525では特定できなかったクラス・メソッドが属するオブジェクトIDも特定することが可能になる。
(6)具象クラス・メソッド間関連情報の表示
次に、上述のようにして生成された具象クラス・メソッド間関連情報を表示するためのフローを、図14−1を参照して説明する。
Java言語プログラムのあるクラス・メソッドを指定し、例えばそのクラス・メソッドを修正した場合に、どの範囲のクラスに影響を及ぼすか解析を行うときには、まずステップS1301において、当該クラス・メソッドIDを指定する。次に、メソッド間関連情報テーブルT900から当該クラス・メソッドの関連先クラス・メソッド、該関連先クラス・メソッドの更に関連先のクラス・メソッドというように、次々に関連先クラス・メソッド情報を抽出する。
抽出されたクラス・メソッドの関連が、例えば図14−2のように表される場合を例にとると、ステップS1303では図14−3に示すようなクラス名、メソッド名及び引数の文字列からなるテキストデータを生成する。
更にステップS1304では、生成したテキストデータをウェブ上で表示する既存のソフトウェアに受け渡し、ユーザのPCのウェブブラウザソフトウェア上に、例えば図14−4のような形式で表示する(S1305)。
このように、テキストデータを図14−4のようにウェブ上で表示するソフトウェア自体は既に公知である。
ここで、メソッド間関連情報テーブルT900の情報には、表示を必要としない冗長な情報が含まれている場合もある。すなわち、テーブルT900を作成する過程において、ある具象クラス・メソッドの関連先として登録された具象クラス・メソッドの中には、その候補として抽出されたものも含まれているため、ペア情報を表示する際には、登録された情報の中から必要な関連元・関連先具象クラス・メソッド情報を選択、抽出する処理が必要になる場合もある。
図14−5は、文脈クラス・メソッドIDの情報を用いて、テーブルT900に登録された情報から表示する情報を絞り込む処理の一例を示すフローチャートである。
まずステップS1901において、指定したクラス・メソッドIDとテーブルT900における関連元具象クラス・メソッドIDが一致するレコードを抽出する。さらに抽出したレコードの関連先クラス・メソッドIDと関連元具象クラス・メソッドIDが一致するレコードを抽出し以下、同様に関連元と関連先が一致する一連のレコードを抽出する。
ステップS1902では、その抽出された一連のレコードの関連先文脈クラス・メソッドIDが設定されているか否か判定し、YESの場合は、更にステップS1903において、関連元文脈クラス・メソッドIDが設定されているか否か判断する。ステップS1903の判定もYESの場合は、ステップS1905において、関連元文脈クラス・メソッドIDと関連元文脈クラス・メソッドIDが一致するレコードを抽出し、そのレコードにおける関連元、関連先の具象クラス・メソッドIDのペア情報を表示する。すなわち、同じ文脈配下にある具象クラス・メソッドのペア情報は冗長な情報ではないので、必ず表示することになる。
一方、ステップS1903においてNOと判定された場合、つまり関連元具象クラス・メソッドの文脈クラス・メソッドIDが設定されていない場合は、指定した文脈クラス・メソッドIDと、関連先文脈クラス・メソッドIDが一致するレコードを抽出し、そのレコードの具象クラス・メソッドIDのペア情報を表示する。すなわち、表示の際にユーザが文脈を指定した場合は、その文脈以外の情報を表示する必要がないためである。
ステップS1902の判定がNOの場合は、ステップS1904に進み、関連元文脈クラス・メソッドIDが設定されているか否かを判定する。この判定がYESの場合は、抽出したレコード全部の関連元、関連先具象クラス・メソッドIDのペア情報を表示する。但しステップS1905の一致レコードがある場合は、ステップS1907の情報は表示しない。すなわち関連先文脈クラス・メソッドIDが無く、関連元文脈クラス・メソッドIDだけが設定されている場合は、冗長な情報を含んでいるか否かの判断ができないので、原則として全レコードを表示する。
またステップS1908の場合、つまり関連先文脈クラス・メソッドID及び関連元文脈クラス・メソッドIDの両方ともに設定されていない場合も、全レコードを抽出し、全レコードの具象クラス・メソッドIDのペア情報を表示する
図14−6は、文脈クラス・メソッドIDを用いて、テーブルT900に登録された情報から表示する情報を絞り込む処理の別の例を示すフローチャートである。
ステップS2001では、指定したクラス・メソッドIDと関連先クラス・メソッドIDが一致するレコードを抽出する。さらに抽出したレコードの関連先クラス・メソッドを関連元クラス・メッソッドIDとするレコードを検索し、以下同様に、関連先と関連元クラス・メソッドが一致する一連のレコードを検索する。
その後、ステップS2002及びS2003,S2004において、関連元及び関連先の項目に文脈クラス・メソッドIDが設定されているか否か判定する。関連元文脈クラス・メソッドIDと関連先文脈クラス・メソッドIDが設定されている場合は、両IDが一致するレコードを抽出し、そのレコードの具象クラス・メソッドIDのペア情報を表示する(S2005)。
一方、関連元文脈クラス・メソッドIDは設定されているが、関連先文脈クラス・メソッドIDは設定されていない場合は、原則として全レコードの具象クラス・メソッドIDのペア情報を表示するが、ステップS2005の一致レコードがある場合は、レコードを抽出しない(S2006)。
また関連元文脈クラス・メソッドIDが設定されず、関連先文脈クラス・メソッドIDが設定されている場合(S2007)も、ステップS206と同様の処理を行う。
更に関連元文脈クラス・メソッドID及び関連先文脈クラス・メソッドIDの両方ともに設定されていない場合は、全レコードを抽出して、すべての関連元、関連先の具象クラス・メソッドIDのペア情報を表示する。
以上述べたように、文脈クラス・メソッドIDを用いることによって、メソッド間関連情報テーブルに登録された情報から適正な情報だけを選択抽出して表示することが可能になる。
図14−7は、本発明ツールが適用される大規模業務系の説明図であり、70は端末機器、71はサーバ、72はDB、73は保守用のパソコンである。
証券業務を例にとると、各支店に設置された数百台〜数千台のパソコンからなる端末70がネットワーク74を通して本店のサーバ71に接続されている。各端末70からは証券や債券の取引等のデータが入力され、本店のサーバ71により処理されてデータベース72に蓄積される。
一方、この証券業務システムに用いられるJava言語プログラムの保守を行うために、前述のテーブルT100〜T900で示されたデータがDB72に格納され、各フローチャートで示されたプログラムが保守用のパソコン73に格納されている。保守用のパソコン73から特定のクラス・メソッドを指定する情報を入力すると、図14−4に例示した関係図が画面に表示される。
以上説明した本発明ツールによれば、Java言語プログラムにおけるクラス継承により、ソースコードプログラム上では隠蔽されたクラス・メソッドも含めて、具象クラス・メソッド間の関連を表示することが可能となる。また、クラス・メソッドの数が数10万個から数100万個に達する大規模業務系のJava言語プログラムの中で、特定の業務処理(トランザクション)に用いられる全ての具象クラス・メソッドを抽出し、これを画面上に表示することができる。
更に、所定の具象クラス・メソッドを指定して、それに関連する具象クラス・メソッドを抽出・表示することにより、所定の具象クラス・メソッドが影響を及ぼす範囲を特定することもできる。
従って、あるデータ項目にアクセスするクラス・メソッドを指定して、そのデータ項目が利用されているトランザクション、データベース並びに業務ロジックなどを特定することが可能となるため、大規模業務系のJava言語プログラムの保守作業の負担を従来に比べて著しく軽減することが可能となる。
Java言語プログラムの説明図。 Java言語プログラムのクラス図の一例を示す説明図。 Java言語プログラムのシーケンス図の一例を示す説明図。 Java言語プログラムにおけるクラスに含まれる情報とその関連を示す説明図。 Java言語プログラムをクラス・メソッドを単位として捉えた場合の処理の流れを示す説明図。 Java言語プログラムにおけるクラス継承の概念を説明するための説明図。 Javaソースコードプログラムの一例を示す説明図。 Javaソースコードプログラムのコンパイルを説明するための図。 クラスファイルのクラス情報の内容を示す説明図。 クラスファイルのメソッド情報の内容を示す説明図。 クラスファイルのスーパークラス情報の内容を示す説明図。 クラスファイルメソッド関連情報の内容を示す説明図。 クラスファイルから各情報を抽出するフローを示すフローチャート。 クラスファイルを分析した結果得られるXMLファイルを示す説明図。 クラス情報テーブルの説明図。 メソッド情報テーブルの説明図。 スーパークラス情報テーブルの説明図。 メソッド関連情報テーブルの説明図。 クラスファイルより抽出した情報をDBに投入するフローを示すフローチャート。 オブジェクトIDの情報を生成する仕組みを説明する説明図。 オブジェクトマスター情報テーブルの説明図。 オブジェクトマスター情報テーブルを作成するフローを示すフローチャート。 オブジェクト対インターフェース情報テーブルの説明図。 オブジェクト対インターフェース情報テーブルを作成するフローを示すフローチャート。 生成クラス情報テーブルの説明図。 生成クラス情報テーブルを作成するフローを示すフローチャート。 全抽象メソッド情報登録処理のフローを示すフローチャート。 インターフェース対実装情報テーブルの説明図。 インターフェース対実装情報テーブルを作成するフローを示すフローチャート。 メソッド間関連情報テーブルと他のテーブルとの関係を示す説明図。 メソッド間関連情報テーブルの説明図。 メソッド間関連情報テーブルを作成するフローを示すフローチャート。 メソッド間関連情報テーブルを作成するフローを示すフローチャート。 クラス種類とメソッド種類の説明図。 未特定オブジェクトID及び未特定クラス・メソッドIDの探索処理を行うフローチャート。 未解決オブジェクト対文脈ID情報テーブルの説明図。 文脈毎被生成クラス情報テーブルの説明図。 未解決オブジェクト対文脈ID情報テーブル作成処理のフローチャート。 文脈毎被生成クラス情報テーブル作成処理のフローチャート。 未解決オブジェクトマッチング処理のフローチャート。 クラス・メソッド間の関係を表示するフローを示すフローチャート。 クラス・メソッド間の関係を表示する説明図。 クラス・メソッド間の関係を表示するために生成するテキストデータの説明図。 クラス・メソッド間の関係を表示する画面の説明図。 メソッド間関連情報テーブルに登録された情報から表示情報を選択抽出する処理の一例を示すフローチャート。 メソッド間関連情報テーブルに登録された情報から表示情報を選択抽出する処理の他の例を示すフローチャート。 本発明ツールから適用されるシステムの一例を示すブロック図。
符号の説明
100,300,400:具象クラス
200:インターフェース
100´,300´,400´:オブジェクト
10:クラス情報
20:メソッド情報
30:メソッド間関連情報
C11,C21,C22,C31,C41,C42,C43:具象クラス
M1,M2,M3,M4,M5:具象メソッド
T100:クラス情報テーブル
T200:メソッド情報テーブル
T300:スーパークラス情報テーブル
T400:メソッド関連情報テーブル
T500:オブジェクトマスター情報テーブル
T600:オブジェクト対インターフェース情報テーブル
T700:生成クラス情報テーブル
T800:インターフェース対実装情報テーブル
T900:メソッド間関連情報テーブル
A,B,C:クラス
IA,IB:インターフェース
a,b,m,n:メソッド
70:端末
71:サーバ
72:データベース(DB)
73:PC
74:ネットワーク

Claims (8)

  1. ツリー状に階層化されたJava言語プログラムのクラスファイルからクラス情報、メソッド情報及び参照先メソッド情報を抽出する第1の手段と、
    抽出したクラス情報から、オブジェクト化される具象クラスを探し、該具象クラスのIDと同一のIDであるオブジェクトIDを生成する第2の手段と、
    前記第2の手段によりオブジェクトIDを特定できなかった場合は、関連元の具象クラス・メソッドが属する前記ツリー状に階層化された構造の先頭のクラスのクラス・メソッドID(文脈ID)を探索し、該先頭のクラスのクラス・メソッドID(文脈ID)に基づいて該オブジェクトIDを求める第3の手段と、
    前記クラスファイルから抽出した参照先メソッド情報、前記オブジェクトIDおよび前記文脈IDをキー情報として、具象クラスID及び具象メソッドIDよりなる具象クラス・メソッドIDと、該具象クラス・メソッドIDの関連先である具象クラス・メソッドIDの組み合わせを検索して関連元具象クラス・メソッドIDと関連先具象クラス・メソッドのペア情報を生成する第4の手段と、
    所望のクラス・メソッドを指定し、該クラス・メソッドに関連する一連の具象クラス・メソッドを抽出して画面に表示する第5の手段よりなることを特徴とするJava言語プログラムの分析ツール。
  2. 請求項1において、前記第4の手段は、オブジェクトIDと、該オブジェクトIDに属する具象クラス・メソッドIDとの関係を表す第1のテーブルを作成する手段を有することを特徴とする分析ツール。
  3. 請求項1において、前記第4の手段は、オブジェクトIDと、該オブジェクトIDに属する抽象クラスID及びインターフェースIDとの関係を表す第2のテーブルを作成する手段を有することを特徴とする分析ツール。
  4. 請求項1において、前記第4の手段は、オブジェクト化される具象クラスのID(被生成クラスID)と、オブジェクトの生成クラスのID(生成クラスID)との関係を表す第3のテーブルを作成する手段を有することを特徴とする分析ツール。
  5. 請求項1において、前記第4の手段は、インターフェース又は抽象クラスのクラスIDと、抽象メソッドのメソッドIDとよりなる抽象クラス・メソッドIDと、該抽象クラス・メソッドIDが属する具象クラス・メソッドIDとの関係を示す第4のテーブルを作成する手段とを含むことを特徴とする分析ツール。
  6. 請求項1において、前記第4の手段は、参照元クラス・メソッドIDと、該参照元クラス・メソッドIDが属するオブジェクトIDと、参照先クラス・メソッドIDと、該参照先クラス・メソッドIDが属するオブジェクトIDとの関係を表す第5のテーブルを作成する手段を含むことを特徴とする分析ツール。
  7. 請求項6において、前記第3の手段は、前記第5のテーブルのテーブルレコード番号と、前記参照元クラス・メソッドを参照先とする先頭のクラス・メソッドである文脈クラス・メソッドのIDとの関係を表す第6のテーブルを作成する手段を含むことを特徴とする分析ツール。
  8. 請求項7において、前記第3の手段は、前記文脈クラス・メソッドIDと、該文脈クラス・メソッドIDの配下にある一連のクラスの中の被生成クラスのIDとの関係を表す第7のテーブルを作成する手段を含むことを特徴とする分析ツール。
JP2006318618A 2006-11-27 2006-11-27 Java(登録商標)言語プログラムを用いた大規模業務系の影響分析を行うプログラム Expired - Fee Related JP5057540B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006318618A JP5057540B2 (ja) 2006-11-27 2006-11-27 Java(登録商標)言語プログラムを用いた大規模業務系の影響分析を行うプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006318618A JP5057540B2 (ja) 2006-11-27 2006-11-27 Java(登録商標)言語プログラムを用いた大規模業務系の影響分析を行うプログラム

Publications (2)

Publication Number Publication Date
JP2008134699A true JP2008134699A (ja) 2008-06-12
JP5057540B2 JP5057540B2 (ja) 2012-10-24

Family

ID=39559535

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006318618A Expired - Fee Related JP5057540B2 (ja) 2006-11-27 2006-11-27 Java(登録商標)言語プログラムを用いた大規模業務系の影響分析を行うプログラム

Country Status (1)

Country Link
JP (1) JP5057540B2 (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003005968A (ja) * 2001-06-18 2003-01-10 Fujitsu Ltd プログラム
JP2008123254A (ja) * 2006-11-13 2008-05-29 Nippon Shoken Technology Kk Java言語プログラムを用いた大規模業務系の影響分析ツール

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003005968A (ja) * 2001-06-18 2003-01-10 Fujitsu Ltd プログラム
JP2008123254A (ja) * 2006-11-13 2008-05-29 Nippon Shoken Technology Kk Java言語プログラムを用いた大規模業務系の影響分析ツール

Also Published As

Publication number Publication date
JP5057540B2 (ja) 2012-10-24

Similar Documents

Publication Publication Date Title
Brito et al. Migrating to GraphQL: A practical assessment
Ringler et al. One knowledge graph to rule them all? Analyzing the differences between DBpedia, YAGO, Wikidata & co.
Lal Neo4j graph data modeling
Bolt et al. A visual approach to spot statistically-significant differences in event logs based on process metrics
CN101739335A (zh) 建议的应用评估系统
US20040181440A1 (en) Automatic generation of a dimensional model for business analytics from an object model for online transaction processing
Stolee et al. Refactoring pipe-like mashups for end-user programmers
Babur et al. Hierarchical clustering of metamodels for comparative analysis and visualization
CN101286151A (zh) 建立多维模型和数据仓库模式的映射的方法及相关系统
CN103262047A (zh) 使用代码克隆检测的智能代码差分
US20200257731A1 (en) Disambiguation of massive graph databases
Athanasiou et al. Big POI data integration with Linked Data technologies.
Lambrix et al. Visualization for ontology evolution
Achichi et al. Automatic key selection for data linking
Kondylakis et al. RDF graph summarization: principles, techniques and applications (tutorial)
Petermann et al. Graph mining for complex data analytics
Reinhardt et al. Navigational models for computer supported project management tasks on construction sites
JP5057539B2 (ja) Java(登録商標)言語プログラムを用いた大規模業務系の影響分析を行うプログラム
Muñoz et al. Mining cardinalities from knowledge bases
Ranwez et al. Ontological distance measures for information visualisation on conceptual maps
JP4948126B2 (ja) Java(登録商標)言語プログラムを用いた大規模業務システムを分析するプログラム及びその処理方法
JP5057540B2 (ja) Java(登録商標)言語プログラムを用いた大規模業務系の影響分析を行うプログラム
Berkani et al. ETL processes in the era of variety
Kumar et al. High utility pattern mining distributed algorithm based on spark RDD
Komendantskaya et al. Proof mining with dependent types

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090422

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120321

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120424

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120726

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120728

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150810

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5057540

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees