JP4948126B2 - Java(登録商標)言語プログラムを用いた大規模業務システムを分析するプログラム及びその処理方法 - Google Patents

Java(登録商標)言語プログラムを用いた大規模業務システムを分析するプログラム及びその処理方法 Download PDF

Info

Publication number
JP4948126B2
JP4948126B2 JP2006306422A JP2006306422A JP4948126B2 JP 4948126 B2 JP4948126 B2 JP 4948126B2 JP 2006306422 A JP2006306422 A JP 2006306422A JP 2006306422 A JP2006306422 A JP 2006306422A JP 4948126 B2 JP4948126 B2 JP 4948126B2
Authority
JP
Japan
Prior art keywords
class
information
concrete
destination
methods
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.)
Expired - Fee Related
Application number
JP2006306422A
Other languages
English (en)
Other versions
JP2008123254A (ja
Inventor
陽一 北川
Original Assignee
日本証券テクノロジー株式会社
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 日本証券テクノロジー株式会社 filed Critical 日本証券テクノロジー株式会社
Priority to JP2006306422A priority Critical patent/JP4948126B2/ja
Publication of JP2008123254A publication Critical patent/JP2008123254A/ja
Application granted granted Critical
Publication of JP4948126B2 publication Critical patent/JP4948126B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、Java(登録商標)言語プログラムを用いた大規模業務システムの影響分析を行うためのプログラム及びその処理方法に関する。(なおJavaは、米国のSun Microsystems,Incの登録商標である)
例えば証券業務などのような大規模業務系においては、従来、COBOL言語プログラムが一般に用いられている。そして保守効率を上げるために、プログラムは処理目的毎に分類され、階層化された構造を有するのが一般的である。また、プログラムが階層化された構造であることを前提とした構造解析ツール類も充実しており、これらのツールを使うことによって、効率的にシステムの保守を行うことができる。
ところで最近は、大規模業務系の再構築に当たり、使用言語をCOBOLからJavaに置き換える例が増えている。
COBOL言語に比べて、Java言語は生産性、拡張性及び適用性に優れているため、オープンシステムの開発用に広く用いられているが、保守作業効率において後述のような様々な問題があるため、非常に限られた条件の中でしか使用されていないのが実状である。
以下、まずJava言語の概要について述べ、次に大規模業務システムの開発に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等の情報が含まれる。
次に、Java言語プログラムを大規模業務系に用いた場合の問題点について述べる。
Java言語は多数のクラスの組み合わせにより成り立っているため、生産性に優れ、また、システムを拡張するのに適した言語でもある。しかしながらシステムを保守する場合には、以下説明するような数々の問題がある。
証券業務システム等の大規模事務系のプログラムにJava言語を用いると、クラス数は、例えば数万個から数10万個、メソッド数は数10万個から数100万個に達する膨大なものとなる。
このようなシステムにおいて、何らかの不具合が発生した場合は、その不具合の原因となったクラスやメソッドを特定しなければならない。また、特定されたクラスやメソッドを修正したときに、影響を受ける一連のクラスやメソッドを把握する必要もある。
また、システムに新たな機能を追加するためにクラスを追加したり、修正する場合も同様に、追加や修正したクラスやメソッドにより影響を受ける一連のクラスやメソッドを把握する必要がある。
このような保守業務の効率化を図るために、COBOL言語を用いた場合と同様に、Java言語を用いたプログラムも、数万〜数10万のクラスは業務の処理目的毎に分類され、階層化された構造とされるのが一般的である。そしてJavaプログラムの保守においては、図1−2に例示したクラス図や、図1−3に例示したシーケンス図を用い、これらにソースコード分析を加えることによってクラスやメソッドを特定したり、特定のクラスやメソッドと関連のある一連のクラスやメソッドを把握している。
しかしながらJava言語プログラムは、不具合の発生したクラス、メソッドを特定したり、特定したクラス、メソッドに関連性のある一連のクラス、メソッドを把握することが困難な構造を有するため、保守業務においてプログラム開発者への負担が非常に大きい。
一つの理由は、従来のツールではメソッド単位の詳細な流れを把握することはできないことによる。
また、図1−3に例示したように、オブジェクト100´,300´,400´の流れを示すシーケンス図も用いられるが、Java言語プログラムでは、具象クラス100,300,400とオブジェクト100´,300´,400´とは同期がとれていない。すなわち、オブジェクト100´は具象クラス300で生成され、オブジェクト300´は具象クラス400で生成されるというように、具象クラスとそのクラスのオブジェクトを生成するクラスとは一般に別々であるため、シーケンス図を用いてもプログラム開発者の負担はそれ程小さくならない。
更に、従来の分析ツールはクラス図、シーケンス図を表示できるとは言え、一画面に表示できるクラス数、オブジェクト数は10数個程度が限界であり、膨大な数のクラス・メソッド関連を把握することはできないため、これもプログラムの保守を困難にする一つの理由となっている。
本発明の目的は、上記のような従来の問題点を解決し、Java言語プログラムを用いた大規模業務システムにおける保守作業の負担を著しく軽減することができるツールを提供することにある。
具体的には、本発明は、クラスの継承によりソースコードプログラム上では隠されたクラスに属する具象メソッドも含めて、具象クラス・メソッド間の関連を表示できるツールを提供することにある。
本発明の他の目的は、インターフェースまたは抽象クラスにより隠蔽された具象クラス・メソッドと、その関連を表示することが可能なツールを提供することにある。
本発明の他の目的は、クラスが機能的に分類され、階層化された構造のプログラムにおいて、ある分類に属する全ての具象クラス・メソッドと、その関連を表示することが可能なツールを提供することにある。
本発明の他の目的は、クラスが機能的に分類され、階層化された構造のプログラムにおいて、所望の具象クラス・メソッドを特定したときに、その特定された具象クラス・メソッドに関連する一連の具象クラス・メソッドを表示できるツールを提供することにある。
本発明の他の目的は、実装済みの資源を基に、リバースエンジニアリングによって設計書を生成し、設計書を保守するコストを大幅に削減すると同時に、設計書と実装の乖離を起こさないようにするツールを提供することにある。
上記の目的を達成するために本発明は、データと、該データの操作方法を定義するメソッドとよりなるクラスを多数組み合わせて形成されるJava(登録商標)言語プログラムを用いた大規模業務システムにおいて、ユーザが特定のクラスと、該クラスに属する特定のメソッドを指定する情報を入力すると、指定されたクラスとメソッドに関連するクラスとメソッドを抽出し、表示する処理方法であって、上記Java(登録商標)言語プログラムのクラスファイルから、
(イ)該プログラムを形成するクラスのID情報と、該クラスが具象クラス、抽象クラス、インターフェイスの何れの種類のクラスであるかを示すクラス種類情報とを含むクラス情報と、
(ロ)各クラスに属するメソッドの情報であって、属するクラスのID情報、該メソッドのID情報と、該メソッドが具象メソッド、抽象メソッド、その他のメソッドの何れの種類のメソッドであるかを示すメソッド種類情報とを含むメソッド情報と、
(ハ)メソッド間の関連を示す情報であって、該メソッドが属するクラスのクラスID情報、該メソッドのID情報、該メソッドの関連先のクラス、メソッドのID情報及び関連先のクラスが具象クラス、抽象クラス、インターフェイスの何れの種類のクラスであるかを示す関連先クラス種類情報を含むメソッド関連情報とを抽出する処理ステップと、前記クラスファイルから抽出したクラス情報、メソッド情報及びメソッド関連情報に基づいて、関連元の具象クラスと、該関連元具象クラスに属する関連元の具象メソッドとのIDを示す関連元クラス・メソッドIDと、上記関連元具象クラスの関連先である関連先具象クラスと、該関連先具象クラスに属する関連先の具象メソッドとのIDを示す関連先クラス・メソッドIDとの組み合わせからなるペア情報を生成する処理ステップと、ユーザが所望のクラスと該クラスに属するメソッドを指定したときに、上記ペア情報から指定されたクラス及びメソッドに関連する一連の具象クラス・メソッドを抽出し、表示する処理ステップとを備えたことに一つの特徴を有する。
本発明の他の特徴は、上記のペア情報を生成する処理ステップは、前記メソッド情報を格納したテーブルから具象メソッドのメソッド種類情報を有する具象メソッドID情報を1件ずつ取り出す処理ステップと、前記メソッド関連情報を参照して取り出した具象メソッドが関連先情報を有するか否か判定する処理ステップと、関連先情報が存在する場合は、関連先のクラスのクラスID情報及びクラス種類情報と関連先のメソッドのメソッドID情報及びメソッド種類情報を取り出す処理ステップと、1件ずつ取り出した具象メソッドのID情報と、該具象メソッドが属する具象クラスのID情報を関連元具象クラス・メソッドのID情報とし、関連先クラスの中の具象クラス及び具象メソッドのID情報を関連先具象クラス・メソッド情報として、上記関連元具象クラス・メソッドID情報及び上記作用効果具象クラス・メソッドID情報のペア情報をテーブルに登録する処理ステップとを具備したことにある。
本発明によれば、次のような効果が得られる。
(1)Java言語プログラムを、クラス間の関連よりも更に詳細なクラス・メソッド間の関連として画面上で把握することが可能となる。クラス・メソッド間の関連は、オブジェクトを生成しないインターフェースや抽象クラスを除いた具象クラス・メソッド間の関連として把握することができる。
(2)具象クラス・メソッドIDを単位としてその関連を把握できるので、あるクラスのあるデータ項目にアクセスするクラス・メソッドを特定したり、当該データ項目が利用されている一連のクラス・メソッドを特定することが可能となる。
(3)具象クラス・メソッドを対象としたクラス・メソッドを単位として、その関連を把握できるので、階層構造のJava言語プログラムにおいて、あるクラス・メソッドが他のクラス・メソッドに及ぼす範囲を特定したり、一つのトランザクションに用いられる全てのクラス・メソッドを特定し、画面上に表示することが可能となる。
(4)オブジェクトの関連を示す従来のシーケンス図を作成するツールでは、隠蔽メソッドへの関連より先の具象メソッドへの関連を分析することもできないが、本発明ツールにおいては、隠蔽メソッドの先の具象メソッドへの関連も分析し、画面上に表示することが可能となる。
上記の(1)〜(4)により、大規模業務系のJava言語プログラムの保守作業の負担を著しく軽減することが可能になる。
(5)設計書をリバースエンジニアリングで生成することにより、人手で設計書を保守する工数を大幅に低減することができる。
(6)人手で設計書を保守すると、設計書と実装との乖離を起こし易いが、リバースエンジニアリングで生成することによって、実装との乖離を起こさない。
本発明はJava言語プログラムをクラス・メソッドの単位として捉え、特にシステムを構成するJava言語プログラム内で実質的な処理に関与している具象クラス・メソッドIDの関連を表すようにしたものである。
図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の関連を表すことができれば、所望のメソッドを特定したり、そのメソッドに関連する一連のクラス・メソッドを把握することができる。
以下、本発明に係る分析ツールを生成する手順について説明する。
(1)クラスファイル生成
まず、Javaプログラムからクラスファイルを生成する。
クラスファイルとは、Javaソースコードプログラムを構成する各クラスをコンパイルすることにより生成されたファイルである。例えばJavaソースコードプログラムの各クラスは、図2−1に例示されるように記述されており、これをコンパイルすると、図2−2に例示されるような数字で記述されたものになる。大規模業務システムではクラスの数が数10万個に達するから、その数のクラスファイルが作成されることになる。
このクラスファイルの中には具象ファイル、抽象クラス及びインターフェースのファイルが含まれる。
(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ファイルとして整理される。
(3)抽出情報の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)。
(4)メソッド間関連情報の生成
次にDBに投入された各種の情報に基づいて、メソッド間関連情報を作成する。メソッド間関連情報とは、図1−5を例にとると、具象クラス・メソッドIDのC11m2と、その参照先の具象クラス・メソッドIDのC21m4とのペア情報を称し、C11m2を参照元のクラス・メソッドID、C21m4を参照先のクラス・メソッドIDという。なお、具象クラス・メソッドが抽象クラスやインターフェースを介して他の具象クラスを参照する場合もあるので、関連先クラス・メソッドID、関連元クラス・メソッドIDということもある。
このメソッド間の関連を表すペア情報は、メソッド間関連情報テーブルを作成することにより生成される。
図5−1は、メソッド間関連情報テーブルT900を示す。901は処理フラグで、このテーブルT900を作成する過程で用いられる。分析が済んだときは0、オブジェクトIDを特定できないときは1、オブジェクトIDと参照先のクラス・メソッドを特定できないときには2がセットされる。903は参照元(関連元)の具象クラス(実装クラス)のクラスID、904は参照元(関連元)の具象メソッド(実装メソッド)のメソッドIDであり、903と904により参照元(関連元)の具象クラス・メソッドIDが形成される。903の情報はメソッド関連情報テーブルT400(図3−4)のクラスIDと同じであり、904は該テーブルT400のメソッドIDと同じである。906は参照先(関連先)の具象クラス(実装クラス)のクラスID、907は参照先(関連先)具象メソッドのメソッドIDである。
次に、図5−2を参照して、メソッド間関連情報を作成するフローについて説明する。
ステップS1001において、メソッド情報テーブルT200(図3−2)から具象メソッドを1件ずつ取り出す。ステップS1002で具象メソッドが存在するか否かを判定し、存在する場合は、メソッド関連情報テーブルT400(図3−4)を参照して、参照先クラス名、参照先メソッド名及び参照先パッケージ名の情報を取り出す(S1003)。
なお、以下の説明では、参照先及び関連先を代表して関連先とし、参照元及び関連元を代表して関連元という用語を用いる。
ステップS1004で関連先情報が存在するか否か判定し、YESの場合はステップS1005に進む。
ステップS1005において、クラス情報テーブルT100を参照し、抽出したクラス名及びパッケージ名をキー情報として、関連先クラスのクラスID及びクラス種類の情報を取り出す。更にステップS1006において、メソッド情報テーブルT200を参照し、先に取り出したメソッド名と、上記ステップS1005で取り出したクラスIDをキー情報として、メソッドIDとメソッド種類の情報を取り出す。
ステップS1005で取り出したクラス種類が具象クラスの場合、そのクラスIDをテーブルT900の関連先ID906として登録し、ステップS1006で取り出したメソッド種類が具象メソッドの場合、そのメソッドIDを関連先メソッドID907として登録する(S1007)。
またステップS1001で取り出した具象メソッドのIDをテーブルT900の関連元メソッドID904として登録し、その関連元具象メソッドが属する具象クラスのクラスIDをテーブルT900の関連元クラスID903として登録する(S1007)。
以上の処理により関連元の具象クラス・メソッドIDと関連先の具象クラス・メソッドIDのペア情報が生成される。
(5)具象クラス・メソッド間関連情報の表示
次に、上述のようにして生成された具象クラス・メソッド間関連情報を表示するためのフローを、図6−1を参照して説明する。
Java言語プログラムのあるクラス・メソッドを指定し、例えばそのクラス・メソッドを修正した場合に、どの範囲のクラスに影響を及ぼすか解析を行うときには、まずステップS1301において、当該クラス・メソッドIDを指定する。次に、メソッド間関連情報テーブルT900から当該クラス・メソッドの関連先クラス・メソッド、該関連先クラス・メソッドの更に関連先のクラス・メソッドというように、次々に関連先クラス・メソッド情報を抽出する。
抽出されたクラス・メソッドの関連が、例えば図6−2のように表される場合を例にとると、ステップS1303では図6−3に示すようなクラス名、メソッド名及び引数の文字列からなるテキストデータを生成する。
更にステップS1304では、生成したテキストデータをウェブ上で表示する既存のソフトウェアに受け渡し、ユーザのPCのウェブブラウザソフトウェア上に、例えば図6−4のような形式で表示する(S1305)。
このように、テキストデータを図6−4のようにウェブ上で表示するソフトウェア自体は既に公知である。
図6−5は、本発明ツールが適用される大規模業務系の説明図であり、70は端末機器、71はサーバ、72はDB、73は保守用のパソコンである。
証券業務を例にとると、各支店に設置された数百台〜数千台のパソコンからなる端末70がネットワーク74を通して本店のサーバ71に接続されている。各端末70からは証券や債券の取引等のデータが入力され、本店のサーバ71により処理されてデータベース72に蓄積される。
一方、この証券業務システムに用いられるJava言語プログラムの保守を行うために、前述のテーブルT100〜T900で示されたデータがDB72に格納され、各フローチャートで示されたプログラムが保守用のパソコン73に格納されている。保守用のパソコン73から特定のクラス・メソッドを指定する情報を入力すると、図6−4に例示した関係図が画面に表示される。
以上説明した本発明ツールによれば、クラス・メソッドの数が数10万個から数100万個に達する大規模業務系のJava言語プログラムの中で、特定の業務処理(トランザクション)に用いられるすべての具象クラス・メソッドを抽出し、これを画面上に表示することができる。
更に、所定の具象クラス・メソッドを指定して、それに関連する具象クラス・メソッドを抽出・表示することにより、所定の具象クラス・メソッドが影響を及ぼす範囲を特定することもできる。
従って、あるデータ項目にアクセスするクラス・メソッドを指定して、そのデータ項目が利用されているトランザクション、データベース並びに業務ロジックなどを特定することが可能となるため、大規模業務系のJava言語プログラムの保守作業の負担を従来に比べて著しく軽減することが可能となる。
Java言語プログラムの説明図。 Java言語プログラムのクラス図の一例を示す説明図。 Java言語プログラムのシーケンス図の一例を示す説明図。 Java言語プログラムにおけるクラスに含まれる情報とその関連を示す説明図。 Java言語プログラムをクラス・メソッドを単位として捉えた場合の処理の流れを示す説明図。 Javaソースコードプログラムの一例を示す説明図。 Javaソースコードプログラムのコンパイルを説明するための図。 クラスファイルのクラス情報の内容を示す説明図。 クラスファイルのメソッド情報の内容を示す説明図。 クラスファイルのスーパークラス情報の内容を示す説明図。 クラスファイルメソッド関連情報の内容を示す説明図。 クラスファイルから各情報を抽出するフローを示すフローチャート。 クラスファイルを分析した結果得られるXMLファイルを示す説明図。 クラス情報テーブルの説明図。 メソッド情報テーブルの説明図。 スーパークラス情報テーブルの説明図。 メソッド関連情報テーブルの説明図。 クラスファイルより抽出した情報をDBに投入するフローを示すフローチャート。 メソッド間関連情報テーブルの説明図。 メソッド間関連情報テーブルを作成するフローを示すフローチャート。 クラス・メソッド間の関係を表示するフローを示すフローチャート。 クラス・メソッド間の関係を表示する説明図。 クラス・メソッド間の関係を表示するために生成するテキストデータの説明図。 クラス・メソッド間の関係を表示する画面の説明図。 本発明ツールから適用されるシステムの一例を示すブロック図。
符号の説明
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:メソッド関連情報テーブル
T900:メソッド間関連情報テーブル
70:端末
71:サーバ
72:データベース(DB)
73:PC
74:ネットワーク

Claims (3)

  1. データと、該データの操作方法を定義するメソッドとよりなるクラスを多数組み合わせて形成されるJava(登録商標)言語プログラムを用いた大規模業務システムにおいて、ユーザが特定のクラスと、該クラスに属する特定のメソッドを指定する情報を入力すると、指定されたクラスとメソッドに関連するクラスとメソッドを抽出し、表示するためにコンピュータが実行する方法であって、
    上記Java(登録商標)言語プログラムのクラスファイルから、
    (イ)該プログラムを形成するクラスのID情報と、該クラスが具象クラス、抽象クラス、インターフェイスの何れの種類のクラスであるかを示すクラス種類情報とを含むクラス情報と、
    (ロ)各クラスに属するメソッドの情報であって、属するクラスのID情報、該メソッドのID情報と、該メソッドが具象メソッド、抽象メソッド、その他のメソッドの何れの種類のメソッドであるかを示すメソッド種類情報とを含むメソッド情報と、
    (ハ)メソッド間の関連を示す情報であって、該メソッドが属するクラスのクラスID情報、該メソッドのID情報、該メソッドの関連先のクラス、メソッドのID情報及び関連先のクラスが具象クラス、抽象クラス、インターフェイスの何れの種類のクラスであるかを示す関連先クラス種類情報を含むメソッド関連情報と
    を抽出する処理ステップと、
    前記クラスファイルから抽出したクラス情報、メソッド情報及びメソッド関連情報に基づいて、関連元の具象クラスと、該関連元具象クラスに属する関連元の具象メソッドとのIDを示す関連元クラス・メソッドIDと、上記関連元具象クラスの関連先である関連先具象クラスと、該関連先具象クラスに属する関連先の具象メソッドとのIDを示す関連先クラス・メソッドIDとの組み合わせからなるペア情報を生成する処理ステップと
    ユーザが所望のクラスと該クラスに属するメソッドを指定したときに、上記ペア情報から指定されたクラス及びメソッドに関連する一連の具象クラス・メソッドを抽出し、表示する処理ステップと
    を有することを特徴とするJava(登録商標)言語プログラムを用いた大規模業務システムの処理方法。
  2. データと、該データの操作方法を定義するメソッドとよりなるクラスを多数組み合わせて形成されるJava(登録商標)言語プログラムを用いた大規模業務システムにおいて、ユーザが特定のクラスと、該クラスに属する特定のメソッドを指定する情報を入力すると、指定されたクラスとメソッドに関連するクラスとメソッドを抽出し、表示することによってJava言語プログラムを用いた大規模業務システムの影響分析を行うためのプログラムであって、
    上記Java(登録商標)言語プログラムのクラスファイルから、
    (イ)該プログラムを形成するクラスのID情報と、該クラスが具象クラス、抽象クラス、インターフェイスの何れの種類のクラスであるかを示すクラス種類情報とを含むクラス情報と、
    (ロ)各クラスに属するメソッドの情報であって、属するクラスのID情報、該メソッドのID情報と、該メソッドが具象メソッド、抽象メソッド、その他のメソッドの何れの種類のメソッドであるかを示すメソッド種類情報とを含むメソッド情報と、
    (ハ)メソッド間の関連を示す情報であって、該メソッドが属するクラスのクラスID情報、該メソッドのID情報、該メソッドの関連先のクラス、メソッドのID情報及び関連先のクラスが具象クラス、抽象クラス、インターフェイスの何れの種類のクラスであるかを示す関連先クラス種類情報を含むメソッド関連情報と
    を抽出する処理と
    前記クラスファイルから抽出したクラス情報、メソッド情報及びメソッド関連情報に基づいて、関連元の具象クラスと、該関連元具象クラスに属する関連元の具象メソッドとのIDを示す関連元クラス・メソッドIDと、上記関連元具象クラスの関連先である関連先具象クラスと、該関連先具象クラスに属する関連先の具象メソッドとのIDを示す関連先クラス・メソッドIDとの組み合わせからなるペア情報を生成する処理と
    ユーザが所望のクラスと該クラスに属するメソッドを指定したときに、上記ペア情報から指定されたクラス及びメソッドに関連する一連の具象クラス・メソッドを抽出し、表示する処理とをコンピュータに実行させることを特徴とするJava(登録商標)言語プログラムを用いた大規模業務システムを分析するプログラム
  3. 請求項1において、ペア情報を生成する処理ステップは、
    前記メソッド情報を格納したテーブルから具象メソッドのメソッド種類情報を有する具象メソッドID情報を1件ずつ取り出す処理ステップと、
    前記メソッド関連情報を参照して取り出した具象メソッドが関連先情報を有するか否か判定する処理ステップと、
    関連先情報が存在する場合は、関連先のクラスのクラスID情報及びクラス種類情報と関連先のメソッドのメソッドID情報及びメソッド種類情報を取り出す処理ステップと、
    1件ずつ取り出した具象メソッドのID情報と、該具象メソッドが属する具象クラスのID情報を関連元具象クラス・メソッドのID情報とし、関連先クラスの中の具象クラス及び具象メソッドのID情報を関連先具象クラス・メソッド情報として、上記関連元具象クラス・メソッドID情報及び上記作用効果具象クラス・メソッドID情報のペア情報をテーブルに登録する処理ステップと
    を具備することを特徴とするJava(登録商標)言語プログラムを用いた大規模業務システムの処理方法。
JP2006306422A 2006-11-13 2006-11-13 Java(登録商標)言語プログラムを用いた大規模業務システムを分析するプログラム及びその処理方法 Expired - Fee Related JP4948126B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006306422A JP4948126B2 (ja) 2006-11-13 2006-11-13 Java(登録商標)言語プログラムを用いた大規模業務システムを分析するプログラム及びその処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006306422A JP4948126B2 (ja) 2006-11-13 2006-11-13 Java(登録商標)言語プログラムを用いた大規模業務システムを分析するプログラム及びその処理方法

Publications (2)

Publication Number Publication Date
JP2008123254A JP2008123254A (ja) 2008-05-29
JP4948126B2 true JP4948126B2 (ja) 2012-06-06

Family

ID=39507944

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006306422A Expired - Fee Related JP4948126B2 (ja) 2006-11-13 2006-11-13 Java(登録商標)言語プログラムを用いた大規模業務システムを分析するプログラム及びその処理方法

Country Status (1)

Country Link
JP (1) JP4948126B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5057539B2 (ja) * 2006-11-13 2012-10-24 日本証券テクノロジー株式会社 Java(登録商標)言語プログラムを用いた大規模業務系の影響分析を行うプログラム
JP5057540B2 (ja) * 2006-11-27 2012-10-24 日本証券テクノロジー株式会社 Java(登録商標)言語プログラムを用いた大規模業務系の影響分析を行うプログラム
JP5381179B2 (ja) * 2008-06-06 2014-01-08 株式会社リコー 画像処理装置
JP5427802B2 (ja) * 2011-02-17 2014-02-26 株式会社日立ソリューションズ プログラミング言語間でのライブラリ変換方法及びプログラム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07319676A (ja) * 1994-05-20 1995-12-08 Hitachi Ltd メッセージフロー図生成方式
JPH1195990A (ja) * 1997-09-22 1999-04-09 Nippon Telegr & Teleph Corp <Ntt> プログラム構造表示方法および装置
JP2002222082A (ja) * 2000-11-24 2002-08-09 Fujitsu Ltd 記録媒体およびプログラム
CA2436609C (en) * 2000-12-08 2011-10-25 Fujitsu Limited Sequence analysis method and apparatus

Also Published As

Publication number Publication date
JP2008123254A (ja) 2008-05-29

Similar Documents

Publication Publication Date Title
Kaliszyk et al. Holstep: A machine learning dataset for higher-order logic theorem proving
Kamimura et al. Extracting candidates of microservices from monolithic application code
Kazman et al. View extraction and view fusion in architectural understanding
Androutsopoulos et al. State-based model slicing: A survey
JPH08512152A (ja) インクリメンタル生成システム
US20050125401A1 (en) Wizard for usage in real-time aggregation and scoring in an information handling system
Garcés et al. White-box modernization of legacy applications: The oracle forms case study
TW200844855A (en) Using collaborative development information in a team environment
US20120272211A1 (en) Generating Constraints in a Class Model
Bhattacharya et al. Combining concern input with program analysis for bloat detection
JP4948126B2 (ja) Java(登録商標)言語プログラムを用いた大規模業務システムを分析するプログラム及びその処理方法
JPH10254689A (ja) クライアント・サーバシステムのアプリケーション構成設計支援方式
Boronat Code-first model-driven engineering: On the agile adoption of mde tooling
Chekhaba et al. Coach: classification-based architectural patterns detection in Android apps
Wojszczyk et al. The process of verifying the implementation of design patterns—used data models
Molina et al. Specifying conceptual interface patterns in an object-oriented method with automatic code generation
Mafazi et al. Conflict resolution for on-the-fly change propagation in business processes
JP5057539B2 (ja) Java(登録商標)言語プログラムを用いた大規模業務系の影響分析を行うプログラム
US10657476B2 (en) Just in time compilation (JIT) for business process execution
Garcés et al. White-box modernization of legacy applications
Wang et al. An aspect-oriented UML tool for software development with early aspects
Horozal et al. Tool Support for Architectural Pattern Selection and Application in Cloud-Centric Service-Oriented IDEs
JP3540241B2 (ja) アプリケーション起動メニュー定義ファイル生成装置及びアプリケーション起動メニュー生成装置
Chagas et al. Kdm as the underlying metamodel in architecture-conformance checking
Salah An environment for comprehending the behavior of software systems

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: 20111004

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111101

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111226

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120118

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: 20120305

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: 20120306

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

Free format text: PAYMENT UNTIL: 20150316

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4948126

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees