JP2008071007A - アスペクト解析方法及び装置並びにコンピュータプログラム - Google Patents

アスペクト解析方法及び装置並びにコンピュータプログラム Download PDF

Info

Publication number
JP2008071007A
JP2008071007A JP2006247601A JP2006247601A JP2008071007A JP 2008071007 A JP2008071007 A JP 2008071007A JP 2006247601 A JP2006247601 A JP 2006247601A JP 2006247601 A JP2006247601 A JP 2006247601A JP 2008071007 A JP2008071007 A JP 2008071007A
Authority
JP
Japan
Prior art keywords
advice
analyzing
class
information
classes
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.)
Pending
Application number
JP2006247601A
Other languages
English (en)
Inventor
Yoshiyuki Kawamura
嘉之 河村
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.)
Hitachi Software Engineering Co Ltd
Original Assignee
Hitachi Software Engineering Co Ltd
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 Hitachi Software Engineering Co Ltd filed Critical Hitachi Software Engineering Co Ltd
Priority to JP2006247601A priority Critical patent/JP2008071007A/ja
Publication of JP2008071007A publication Critical patent/JP2008071007A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】 アスペクトの影響範囲を容易に確認することができるアスペクト解析方法及び装置を提供すること。
【解決手段】 クラス情報解析手段により前記複数のクラスのそれぞれに含まれるメソッドの呼び出し関係を解析する第1のステップと、アスペクト解析手段により前記メソッドに織り込まれるアスペクトの呼び出し関係を解析する第2のステップと、シーケンス図作成手段によりクラス相互間におけるメソッドとアスペクトの呼び出し関係を示すシーケンス図を作成し、表示する第3のステップとを備える。
【選択図】 図11

Description

本発明は、開発対象または開発済みのプログラムを構成する複数のクラスに織り込まれるアスペクトを解析する方法および装置並びにコンピュータ・プログラムに関する。
現在、アプリケーション開発において新しい概念である、アスペクト指向プログラミングが注目されている。
アスペクト指向とは、プログラムの構成要素となる各モジュール間で共通に使われる機能を切り出し、それを後から自動的にプログラムに織り込んでいくものである。アスペクトの例として、ログやトランザクション管理などがあげられる。また、アスペクト指向は、オブジェクト指向と相反する概念ではないため、この2つを組み合わせて利用することが可能である。
ここで、ログを例に用いてアスペクト指向プログラミングについて説明する。
ログを出力する際、従来においては、ログコンポーネントを呼び出すコードをプログラム中から呼び出すことによって、ログを出力してきた。このような場合、開発者が自分が担当しているモジュールにログコンポーネントを呼び出すコードを記述することが一般的であるが、個々の開発者のスキルによってログ出力の度合いが異なるため、システム全体で均質な情報量のログを出力することは難しかった。
アスペクト指向プログラミングを用いることにより、ログを出力する機能をアスペクトとして切り出し、これをシステム全体のプログラムに対して自動的に織り込むことができるため、システム全体を通して均質な情報量のログを出力するようにすることが可能となる。
このようにアスペクト指向プログラミングを用いることにより、モジュール間で横断的に使用する機能を切り出して、設定によって後から埋め込むことが可能となる。
アスペクトは、そのアスペクトが行う処理を記述したアドバイスと、そのアドバイスをどこに埋め込むかを指定するポイントカットから構成されている。
アドバイスには、埋め込む先の処理の前に実行されるbeforeアドバイス、後に実行されるafterアドバイス、その処理の前後を包み込むように実行されるaroundアドバイスの3種類がある。
また、メソッドに対するアドバイスとフィールドアクセスに対するアドバイスがある。
ポイントカットでは、あるクラスのどのメソッドを呼び出したか、どのフィールドにアクセスしたか、あるクラスをインスタンス化したかなどをポイントとして切り出して指定することができる。
ポイントカットは、クラス名やメソッド名などを直接指定する以外にも、ワイルドカード(*)を用いることによって一度に複数のポイントを指定することもできる。
アスペクト指向プログラミングを実現するために、アスペクトをどのように定義するかを規定し、アドバイスをプログラムに織り込むことが必要となる。このような機能を実現する環境をアスペクト指向環境と呼ぶ。
現在、オブジェクト指向言語であるJava(登録商標)と組み合わせて使えるアスペクト指向環境がいくつか利用可能である。ここでは、そのひとつであるAspectJのアスペクト表記方法を用いるものとする。
AspectJでは、アスペクトの定義を以下のような形式で表記する。

package sample;

public aspect Debug {
pointcut callHello(): execution(* sample.Hello.sayHello(..));

Object around() : callHello() {
Object t = thisJoinPoint.getTarget();
System.out.println("target is " + t.getClass().getName());
Object result = proceed();
System.out.println("returning " + result);
return result;
}
}
アスペクトの定義は、pointcut句によるポイントカットの指定とアドバイスの実装から構成される。
pointcut句では、メソッドに対しては、execution宣言により実行のポイントを指定したり、within宣言によってあるパッケージに含まれるクラスのすべてのメソッドというような指定をしたりすることができる。それぞれの宣言の引数には、メソッドのシグネチャを指定する。
メソッドのシグネチャは、「<戻り値> <クラス名>.<メソッド名>(引数)」で構成される。ここには、*(ワイルドカード)を用いることもでき、say*のように指定することにより、sayHello、sayGoodbyのようにsayで始まる文字列にマッチさせることもできる。
メソッドの引数は、受け付ける引数の型を記述する以外にも「..」を指定することにより任意の引数を指定することもできる。
また、pointcut句では、フィールドに対しては、get宣言により読み込みアクセス、set宣言により書き込みアクセスのポイントを指定できる。それぞれの宣言の引数には、フィールド名を指定する。
フィールド名は、「<クラス名>.<フィールド名>」で構成される。ここにもメソッドと同様にワイルドカードを指定することができる。
AspectJの開発環境として、AJDTというツールがある。これを用いることにより、あるアスペクトがどのJavaクラスに適用されるかといった情報を表示することができる。また、アスペクトがどのようにクラスに適用されたかをシステム全体を通して見ることができるビューアも用意されている。
なお、本発明に関連する公知技術文献としては下記の特許文献1がある。
特開2005-258944号
アスペクト指向プログラミングでは、プログラム中に散在する共通の処理を抜き出して、アスペクトとしてまとめる。そのため、アスペクトは、プログラム本体と切り離されて定義されることが普通である。そのため、プログラム本体とアスペクトの関連を把握するのはあまり簡単ではない。
また、アスペクトをプログラムのどの箇所に設定するかは、特別な設定式を用いる。この設定式には、ワイルドカードなどを用いてプログラム中の複数のポイントにアスペクトを設定することが可能であり、これを用いることによって効率よくアスペクトの設定を行うことができる。
しかし、これを用いた場合、そのアスペクトが、プログラム開発者自身の想定している箇所に正しく設定されているかを確認することはなかなか難しい。換言すれば、アスペクトがどのメソッドに設定され、その影響範囲がどのようになっているかを容易に把握できないという問題がある。
本発明の目的は、アスペクト指向プログラミングを用いたアプリケーション開発において、アスペクトの影響範囲を容易に確認することができるアスペクト解析方法及び装置並びにコンピュータプログラムを提供することである。
上記目的を達成するために、本発明に係るアスペクト解析方法は、開発対象または開発済みのプログラムを構成する複数のクラスに織り込まれるアスペクトを解析する方法であって、
クラス情報解析手段により前記複数のクラスのそれぞれに含まれるメソッドの呼び出し関係を解析する第1のステップと、アスペクト解析手段により前記メソッドに織り込まれるアスペクトの呼び出し関係を解析する第2のステップと、シーケンス図作成手段によりクラス相互間におけるメソッドとアスペクトの呼び出し関係を示すシーケンス図を作成し、表示する第3のステップとを備えることを特徴とする。
また、前記第3のステップにおいて、1つのメソッドに織り込まれる複数のアスペクトを実行順に重ね表示することを特徴とする。
また、前記第3のステップにおいて、表示された複数のアスペクトの1つを選択する操作に対して他のアスペクトとの呼び出し関係を詳細表示することを特徴とする。
本発明に係るアスペクト解析装置は、開発対象または開発済みのプログラムを構成する複数のクラスに織り込まれるアスペクトを解析する装置であって、
前記複数のクラスのそれぞれに含まれるメソッドの呼び出し関係を解析するクラス情報解析手段と、前記メソッドに織り込まれるアスペクトの呼び出し関係を解析するアスペクト解析手段と、前記クラス情報解析手段及びアスペクト解析手段の解析結果に基づきクラス相互間におけるメソッドとアスペクトの呼び出し関係を示すシーケンス図を作成し、表示するシーケンス図作成手段とを備えることを特徴とする。
また、前記シーケンス図作成手段は、1つのメソッドに織り込まれた複数のアスペクトを実行順に重ね表示することを特徴とする。
また、前記シーケンス図作成手段は、表示された複数のアスペクトの1つを選択する操作に対して他のアスペクトとの呼び出し関係を詳細表示することを特徴とする。
本発明に係るアスペクト解析用のコンピュータプログラムは、開発対象または開発済みのプログラムを構成する複数のクラスに織り込まれるアスペクトを解析するコンピュータプログラムであって、
前記複数のクラスのそれぞれに含まれるメソッドの呼び出し関係を解析するステップと、前記メソッドに織り込まれるアスペクトの呼び出し関係を解析するステップと、前記クラス情報解析手段及びアスペクト解析手段の解析結果に基づきクラス相互間におけるメソッドとアスペクトの呼び出し関係を示すシーケンス図を作成し、表示するステップとをコンピュータに実行させることを特徴とする。
本発明によれば、次のような効果がある。
(1)クラスのそれぞれに含まれるメソッドの呼び出し関係と、各メソッドに織り込まれるアスペクトの呼び出し関係をシーケンス図によって視覚的に表示することにより、どのアスペクトがどのメソッドに設定されているかを視覚的に確認することができる。
(2)シーケンス図上で、メソッドの呼び出しの流れとアスペクトの実行の流れを同時に表示することによって、どのような順序でアスペクトおよびメソッドが呼び出されるかを把握することができる。
以下、本発明を適用したアスペクト解析装置の一実施の形態について図面を参照して詳細に説明する。
図1は、本発明のアスペクト解析装置を実現するコンピュータのハードウェア構成例を示したブロック図である。
図1に示すコンピュータ(101)は、中央演算装置(CPU)(102)とメインメモリ(103)を持ち、マザーボード(104)により接続されている。また、マザーボード(104)に接続された磁気ディスク装置(105)とグラフィックカード(106)を持ち、グラフィックカード(106)は外部のディスプレイ装置(107)と接続されている。
入力装置として、マウス(108)とキーボード(109)を持ち、これらはマザーボード(104)に接続されている。
図2は、図1のハードウェア構成においてアスペクトの織り込み位置を解析する構成を機能的に示したシステム構成図であり、本発明のアスペクト解析装置(201)は、クラス情報解析部(202)、クラス蓄積部(203)、アスペクト解析部(204)、アスペクト蓄積部(205)、ユーザインターフェース管理部(206)で構成される。
ユーザインターフェース管理部(206)は、ディスプレイ装置(207)と入力装置(208)と接続されている。
クラス情報解析部(202)は、クラス蓄積部(203)およびユーザインターフェース管理部(206)と接続されている。
アスペクト解析部(204)は、アスペクト蓄積部(205)とユーザインターフェース管理部(206)と接続されている。
クラス蓄積部(203)、アスペクト蓄積部(202)は、磁気ディスク装置(105)上で実現される。入力装置(208)は、図1のマウス、およびキーボードとなる。
図3は、クラスのメソッド情報のデータフォーマットである。
1つのメソッド情報は、ID(301)、クラス名(302)、メソッド名(303)、引数(304)、戻り値(305)で構成されている。クラスにあるメソッド1つに対して1つのエントリが対応する。同じ名前のメソッドでも引数の型が異なれば別のエントリとなる。
図4は、メソッドの呼び出し関係情報のデータフォーマットである。
1つのフィールド情報は、呼び出し元ID(401)、シーケンス番号(402)、呼び出し先ID(403)で構成されている。
呼び出し元ID、呼び出し先IDは、図3のクラスのメソッド情報のデータフォーマットのIDフィールドの値が入る。
シーケンス番号は、メソッドが呼び出された順番に付けられる番号であり、小さな番号ほど先に呼び出されたことを示す。
図5は、アスペクト情報のデータフォーマットである。
1つのアスペクト情報はID(501)、名前(502)で構成されている。
名前はそのアスペクトを特定できる任意の文字列となる。
図6は、アドバイス情報のデータフォーマットである。
1つのアドバイス情報は、ID(601)、アスペクト(602)、名前(603)、ターゲット(604)、タイプ(605)、実装(606)で構成されている。
アスペクト(602)は、このアドバイスが関連するアスペクトのIDが入る。
名前(603)はそのアドバイスを認識できる任意の文字列となる。
ターゲット(604)はメソッドもしくはフィールドであるが、今回はメソッドのみを扱うものとする。
タイプ(605)はaround、before、afterのいずれかである。
実装(606)は、そのアドバイスのプログラムコードとなる。
図7は、ポイントカット情報のデータフォーマットである。
1つのポイントカット情報は、ID(701)、アスペクト(702)、名前(703)、ポイントカット表記(704)で構成されている。
アスペクト(702)には、このポイントカットが関連するアスペクトのIDが入る。
名前(703)はそのポイントカットを特定できる任意の文字列となる。
ポイントカット表記(704)はどのメソッドに対応するアスペクトを織り込むかを指定するもので、アスペクト実行環境であるAspectJの文法に従う。
図8は、メソッドの呼び出し関係と、メソッドに関連付けられたアスペクトを表現するデータ構造を木構造で示した図である。
あるメソッドを始点としてそのメソッドが呼び出すメソッドを木構造で表していく(801)。メソッドの呼び出し木の各ノードで保持されるデータは、どのメソッドに対応するかを表すメソッド情報(803)、そのメソッドに関連付けられたアスペクトリスト(804)、そのメソッドが呼び出すメソッドリスト(805)で構成される。
アスペクトリスト(804)および呼び出すメソッドリスト(805)は、順番は保持されるリストとなる。
図9は、クラス情報解析部(202)で扱うクラスのデータ構造である。
クラス名領域(901)は、クラスの解析中に現在解析中のクラスの名前を保持する。現在のメソッド領域(902)には現在解析中のメソッド情報が保持される。メソッド配列(903)およびメソッド呼び出し配列(904)には、クラスを読み込んで解析した結果を保持する。
図10は、アスペクト解析部(204)で扱うアスペクトのデータ構造である。
アスペクト情報領域(1001)には現在解析中のアスペクト情報が保持される。
アスペクト配列(1002)、アドバイス配列(1003)、ポイントカット配列(1004)には、アスペクトを読み込んで解析した結果を保持する。
図11は、本実施形態のアスペクト解析装置での解析結果の表示例を示す図である。
本装置の表示画面は、UMLのシーケンス図を用いている。
UMLのシーケンス図は、クラスに対応するクラス名を表示した箱(1102)と、そこから伸びる線(ライフライン)(1103)と、そのクラスからのメソッド呼び出しを表す矢印で構成される。
呼び出し元のクラス(1101)から呼び出し先のクラス(1102)へはメソッド呼び出しを表す矢印線(S1)で結ばれ、その矢印線の下に呼び出すメソッドの名前が記述される。
呼び出されるクラスのライフライン(1103)上に配置される長四角(1104)はそのメソッドの実行を表し、そこから伸びる矢印線(S2)はそのメソッドから他のクラスのメソッドを呼び出すことを表す。また、そのメソッドの実行が終わった時点で、呼び出し元のクラスへと矢印線が引かれる(S4)。
本実施形態では、標準的なシーケンス図にアスペクトの表示を加えたものである。
アスペクトは、メソッドの矢印線(S1)と呼び出し先のクラスのライフライン(1103)の間に表示される。
複数のアスペクトがメソッドに適用される場合は、重ねて表示される。アスペクトは、メソッド呼び出し時は図の左から右に、メソッド終了時は右から左に実行されるものとする。また、アスペクトが織り込むアドバイスがbeforeアドバイスの場合はメソッドの上部に(1105)、afterアドバイスの場合はメソッドの下部に(1107)、aroundアドバイスの場合はメソッドの横に(1106)描画する。
ここでは、それぞれ分類しやすいようにbeforeアドバイスを横線で、afterアドバイスを縦線で、aroundアドバイスを斜め線で塗りつぶしている。この際、アスペクトは簡略化された状態で表示される。
ここで、図11に示すClassAからClassBのgetNameメソッドを呼び出すシナリオを考える。
ClassBのgetNameメソッドには、1つのbeforeアドバイス、1つのaroundアドバイス、2つのafterアドバイスが設定されている。
getNameメソッドが呼び出された際、メソッドの呼び出し時にはbeforeアドバイスとaroundアドバイスが呼び出されるため、ここでは1つのbeforeアドバイスと1つのaroundアドバイスが呼び出される。
この図では、メソッド呼び出し時は左から右の順番にアドバイスを呼び出すことを表すので、ここでは、aroundアドバイス1つが先に呼び出され、その後beforeアドバイスが呼び出されることとなる。これらのアドバイスが実行された後、メソッドの本体が実行されることとなる。ここで、他のクラスを呼び出すなどの処理を行い、それが終了すると、呼び出し元のクラスに制御を移すが、その前に設定されたアドバイスが実行される。
メソッド終了時には、aroundアドバイスとafterアドバイスが呼び出されるため、ここでは1つのaroundアドバイスと2つのafterアドバイスが呼び出される。
この図では、メソッド終了時は右から左の順番にアドバイスを呼び出すことを表すので、ここではaroundアドバイスを1つ呼び出した後でafterアドバイスを2つ呼び出すこととなる。
これらのアドバイスの実行が終了した後、呼び出し元のクラスに制御が戻ってくる。
図12は、簡略表示されたアドバイスを展開して表示した例である。
図11に示された簡略表示されたアドバイスを1つ選択し、入力装置208を構成するマウス操作によってダブルクリックすると、そのアドバイスを含むアスペクトが展開されて表示され、クラスと同様に名前とライフラインが表示される(1201)。そして、そのアドバイスを呼び出すクラス・アドバイスからとそのアドバイスが呼び出すクラス・アドバイスに向かって矢印線で結ばれる(S2、S5)。
この際、メソッド呼び出し時にこのアドバイスよりも前に呼び出されるアドバイスとメソッド終了時にこのアドバイスよりも後に呼び出されるアドバイスはこのアスペクトの左側に、メソッド呼び出し時にこのアドバイスよりも後に呼び出されるアドバイスとメソッド終了時にこのアドバイスよりも先に呼び出されるアドバイスは対応するメソッドの左側に簡略表示された状態で表示される。
このようにメソッドとアドバイスの関係をグラフィカルに表示することによって、そのアドバイスを含むアスペクトが正しく設定されているかを視覚的に把握することが可能になる。
例えば、あるアスペクトを作成し、シーケンス図を表示させて、そのアスペクトに含まれるアドバイスが意図しているように設定されているか確認することができるようになる。その際、予想しないアドバイスが組み込まれていた時は、そのアドバイスを展開しダブルクリックすることにより、そのアドバイスを含むアスペクトをすぐに確認し、どの設定が間違っているかを発見することができる。
以下、以上のように構成されたアスペクト解析装置の処理について詳細に説明する。
最初に本実施形態の装置において必要なデータを準備する。
図13は、本実施形態の装置が起動時に行う準備作業を示すフローチャートである。
最初に、クラス蓄積部(203)に蓄積してある全てのクラスを1つずつ読み込む(ステップ1301)。次にクラス情報解析部(203)にて、読み込んだクラスを解析し、その情報を図3に示すクラスのメソッド情報として作成する(ステップ1302)。
次に、再度、クラス蓄積部(203)からクラスを一つずつ読み直し(1303)、クラス情報解析部(202)にて、読み込んだクラスを解析し、図4に示すメソッドの呼び出し関係情報を作成する(ステップ1304)。
ここで、再度クラスを読み込んでいるのは、ステップ1301および1302でメソッド情報を作成した後でなければメソッド間の関連付けが行えないからである。
次に、アスペクト蓄積部(205)にあるアスペクトを1つずつ読み込む(ステップ1305)。そして、アスペクト解析部(205)にて、読み込んだアスペクトを解析し、その情報を図5に示すアスペクト情報、図6に示すアドバイス情報、図7に示すポイントカット情報として作成する(ステップ1306)。
各ステップの処理の詳細を以下で説明する。
図14は、図13のフローチャートにおけるメソッドの解析処理の詳細を示すフローチャートである。
この処理は、Java(登録商標)の文法に従って構文解析を進めるものとする。
はじめに、クラス宣言を見つけ、そこからクラス名を取得し(ステップ1401)、クラス名領域に格納する(ステップ1402)。
次に、プログラムのコードブロックごとに処理を進める(ステップ1403)。
取り出したコードブロックを解析し(ステップ1404)、そこにメソッド宣言がないかを調べ(ステップ1405)、存在した場合は、そのメソッド名、引数、戻り値を取得し、ID番号を振り、クラス名を含めてメソッド情報を作成し(ステップ1406)、メソッド配列に格納する(ステップ1407)。
図15は、図13におけるフローチャートのメソッド呼び出し関係の解析処理の詳細を示すフローチャートである。
この処理は、Javaの文法に従って構文解析を進めるものとする。
まず、クラスファイルのコードブロックを1つずつ取り出し(ステップ1501)、コードを解析する(ステップ1502)。
次に、そのブロックにメソッド宣言がないかを調べ(ステップ1503)、存在した場合は、メソッド配列に格納されたメソッド情報を取得し、現在のメソッド領域に格納する(ステップ1504)。
次に、メソッドのボディの各行を取り出し(ステップ1505)、解析する(ステップ1506)。その中にある他のメソッドの呼び出しが存在した場合は(ステップ1507)、これに対応するメソッド情報をメソッド配列から引き当て、現在のメソッド領域に格納されているメソッド情報のIDを呼び出し元IDとし、ここで検索したメソッド情報のIDを呼び出し先IDとし、シーケンス番号とともにメソッド呼び出し関係情報を作成し(ステップ1508)、メソッド呼び出し配列に格納する(ステップ1509)。
図16は、図13のフローチャートにおけるアスペクトの解析処理の詳細を示すフローチャートである。
ここでは、AspectJの文法に従い、構文解析するものとする。
まず、アスペクトのプログラムコードを読み込んだら、はじめにアスペクト宣言を検索し、アスペクト名を取得する(ステップ1601)。ここで、IDを生成し、アスペクト情報を作成し、アスペクト情報配列に格納する(ステップ1602)。そのアスペクト情報をアスペクト情報領域に保持する。
次に、すべてのコードブロックを取り出し(ステップ1603)、解析する(ステップ1604)。そこにアドバイス宣言が存在した場合は(ステップ1605)、その名前、タイプ、ターゲット、実装を抽出し、IDを生成し、アスペクト情報領域に格納されているアスペクト情報のIDとともにアドバイス情報を作成し(ステップ1606)、アドバイス情報配列に格納する(ステップ1607)。そこにポイントカット宣言が存在した場合は(ステップ1608)、その名前、ポイントカット表記を抽出し、IDを生成し、アスペクト情報領域に格納されているアスペクト情報のIDとともにポイントカット情報を作成し(ステップ1609)、ポイントカット情報配列に格納する(ステップ1610)。
図17は、クラス図上であるメソッドが選択されてシーケンス図を表示する場合など、特定のメソッドが検索され、そのメソッドから始まる一連の処理のシーケンス図を表示する際の処理のフローチャートである。
最初に、選択したメソッドを特定し、メソッド配列から対応するメソッド情報を取得する(ステップ1701)。
次に、そのメソッドから呼び出されるメソッドの呼び出し木を生成する(ステップ1702)。その木が作成できたら、それを元にシーケンス図を描画する(ステップ1703)。
図18は、図17で用いるメソッドの呼び出し木を作成する処理のフローチャートである。
最初に、始点となるメソッドのメソッド情報を現在のメソッド領域に格納する(ステップ1801)。
次に、ポイントカット配列に格納されているすべてのアスペクト情報1つ1つに対して、以下の処理を実行する(ステップ1802)。
取り出したアスペクト情報に対応するポイントカット情報のポイントカット表記の値を元に現在のメソッド領域にあるメソッドとこのポイントカットのマッチングを図る(ステップ1803)。もし、マッチした場合は(ステップ1804)、それに対応するアスペクト情報を取得し(ステップ1805)、ノードのアスペクトリストに追加する(ステップ1806)。
次に、現在のメソッド領域のIDフィールドの値をキーにメソッド呼び出し配列の呼び出し元IDに検索をかける(ステップ1807)。検索によって取得したデータをシーケンス番号をキーにソートして(ステップ1808)、呼び出しリストを作成し、そのノードの呼び出しメソッドリストに格納する(ステップ1809)。
ここで作成したノードの呼び出しリストの全ての要素に対して(ステップ1810)、以上の処理を再帰的に繰り返す(ステップ1811)。
図19及び図20は、シーケンス図を表示する際の処理を表すフローチャートである。
この処理は、図8で表すメソッド呼び出し木のルートノードから処理を進めるものとする。
まず、ノードに対応するメソッドのクラスがすでに描画済みか判定する(ステップ1901)。
描画されていなかったときは、クラス名を書いた四角の箱を描画する(ステップ1902)。ルートノードを描画する際は、画面の左上に書かれるが、それ以外のノードでは、既に書かれたクラスの右隣に一定間隔を置いて描画するものとする。その四角い箱から下に向かって直線(ライフライン)を描画する(ステップ1903)。そのライフライン上にメソッドの実行を表す縦長の四角い箱を描画する(ステップ1904)。ここからはこのノードに対応するアスペクトを描画する処理に移るが、この図において複数のアスペクトがある場合は、図の上で左から右に実行されることとなる。しかし、描画は右から重ねて書いていくため、アスペクトリストにあるアスペクトを逆順にソートする(ステップ1905)。
次に、ソートしたアスペクトリストの個々の要素に対して以下の処理を実行する(ステップ1906)。
まず、そのアスペクトのアドバイスがbeforeアドバイスかどうかを判定し(ステップ1907)、そうであった場合は、メソッドの左上部に丸い四角を描画する(ステップ1908)。既に他のアドバイスが書かれているときは、そのアドバイスの半分の幅分右にずらして描画する。beforeアドバイスでなかったときは、それがaroundアドバイスであるかを判定し(ステップ1909)、そうであった場合は、メソッドの左横にメソッドの長さと同様の長さで丸い四角を描画する(ステップ1910)。
既に他のアドバイスが書かれているときは、そのアドバイスの半分の幅分右にずらして描画する。
aroundアドバイスでなかったときは、afterアドバイスであると考えられるため、メソッドの左下部に丸い四角を描画する(ステップ1911)。
既に他のアドバイスが書かれているときは、そのアドバイスの半分の幅分右にずらして描画する。
このノードがルートノードであるかを判定し(ステップ1912)、そうでない場合は、呼び出し元のメソッドから描画中のメソッド上部への矢印を描画し(ステップ1913)、描画中のメソッド下部から呼び出し元のメソッドへの矢印を描画する(ステップ1914)。これでこのノードの描画が終わったので、このノードの呼び出しメソッドの全ての要素に対して(ステップ1915)、再帰的にこの処理を実行していく(ステップ1916)。
図21及び図22は、このシーケンス図の特定のアスペクトを選択し、ダブルクリックしたときの処理のフローチャートである。
このフローは、図19及び図20で表した処理の中で、選択されたアスペクトが含まれるノードに対してのみ実行されるものである。つまり、選択されたアスペクトを含むノードに対する処理は、図19及び図20で表したフローを置き換えるものとなる。
はじめに、選択されたアスペクトを含むノードのアスペクトリストを選択されたアスペクトの前後で分割し、アスペクトリスト(前)とアスペクトリスト(後)とする(ステップ2001)。どちらのリストにも、選択されたアスペクトは含まれない。そして、このノードに対応するクラスが既に描画されているか判定し(ステップ2002)、もし描かれていない場合は、アスペクトを描画するためのスペースを空けるために、クラス1つ分のスペースを右側に開ける(ステップ2003)。そして、その右側にクラス名を表記した四角い箱(ステップ2004)、ライフライン(ステップ2005)、メソッドの実行を示す四角を描画する(ステップ2006)。
もし、既にクラスが描画されているときは、そのクラスを右側に1つ分ずらし、そのクラスのみを再描画する(ステップ2010)。そして、先ほど分割したアスペクトリスト(後)を逆順にソートして(ステップ2007)、その要素の全てに対して(ステップ2008)、アスペクトを描画する(ステップ2009)。
アスペクトを描画する処理は、図19のステップ1907〜1911と同様である。
次に、先ほど空けたスペースにアスペクト名を表記した丸四角(ステップ2011)、ライフライン(ステップ2012)、そこで実行されるアドバイスを示す丸四角を描画する(ステップ2013)。このアドバイスがbeforeアドバイスである場合は対象のメソッドの半分の縦幅で上側に、afterアドバイスである場合は対象のメソッドの半分の縦幅で下側に、aroundアドバイスである場合は対象のメソッドと同じ縦幅で描画するものとする。そして、先ほど分割したアスペクトリスト(前)を逆順にソートして(ステップ2014)、その要素の全てに対して(ステップ2015)、アスペクトを描画する(ステップ2016)。アスペクトを描画する処理は、図19の1907〜1911と同様である。
次に、呼び出し元のメソッドから描画中のアドバイス上部への矢印を描画し(ステップ2017)、描画中のアドバイス下部から呼び出し元のメソッドへの矢印を描画する(ステップ2018)。
次に、描画中のアドバイス上部から描画中のメソッド上部への矢印を描画し(ステップ2019)、描画中のメソッド下部から描画中のアドバイス下部への矢印を描画する(ステップ2020)。これでこのノードの描画が終わったので、このノードの呼び出しメソッドの全ての要素に対して(ステップ2021)、再帰的に通常のノードに対する処理を実行していく(ステップ2022)。
以上のように本実施形態のアスペクト解析装置においては、開発対象または開発済みのプログラムを構成する複数のクラスにおけるメソッドの呼び出し関係を解析し、さらに各メソッドに織り込まれるアスペクトの呼び出し関係を解析し、クラス相互間におけるメソッドとアスペクトの呼び出し関係を示すシーケンス図を作成し、表示するように構成したため、プログラム中のアスペクトの織り込み位置、呼び出し関係を容易に把握し、アスペクトの影響範囲を容易に確認することができる。そして、想定外の位置に織り込まれるようになっていた場合には必要な対策を容易に講じることが可能になる。
また、開発済みのプログラムを解析対象とした場合、バージョンアップ等の改良要求に対し、改良対象となるアスペクト及び呼び出し関係を容易に把握し、改良要求に迅速に対応することが可能になる。
本発明の実施に用いるコンピュータ装置のハードウェア構成図である。 本発明の実施の形態の一例を示すシステム構成図である。 クラスのメソッド情報のデータフォーマットを表す図である。 メソッド呼び出し情報のデータフォーマットを表す図である。 アスペクト情報のデータフォーマットを表す図である。 アドバイス情報のデータフォーマットを表す図である。 ポイントカット情報のデータフォーマットを表す図である。 メソッド呼び出し関連木のデータ構造を表す図である。 クラス解析部の構成図を表す図である。 アスペクト解析部の構成図を表す図である。 アスペクトの呼び出し関係を示すシーケンス図の一例を示す図である。 アスペクトの呼び出し関係を示すシーケンス図の他の例を示す図である。 装置起動時の処理を示すフローチャートである。 メソッド情報配列の作成処理のフローチャートである。 メソッド呼び出し配列の作成処理のフローチャートである。 アドバイス関連情報の作成処理のフローチャートである。 シーケンス図表示処理の概要を示すフローチャートである。 メソッド呼び出し木作成処理のフローチャートである。 シーケンス図描画処理のフローチャートである。 図19の続きを示すフローチャートである。 シーケンス図アスペクト展開時描画処理のフローチャートである。 図21の続きを示すフローチャートである。
符号の説明
101コンピュータ
102 CPU
103 メインメモリ
105 磁気ディスク装置
201 アスペクト解析装置
202 クラス情報解析部
203 クラス蓄積部
204 アスペクト解析部
205 アスペクト蓄積部
206 ユーザインターフェース管理部

Claims (7)

  1. 開発対象または開発済みのプログラムを構成する複数のクラスに織り込まれるアスペクトを解析する方法であって、
    クラス情報解析手段により前記複数のクラスのそれぞれに含まれるメソッドの呼び出し関係を解析する第1のステップと、アスペクト解析手段により前記メソッドに織り込まれるアスペクトの呼び出し関係を解析する第2のステップと、シーケンス図作成手段によりクラス相互間におけるメソッドとアスペクトの呼び出し関係を示すシーケンス図を作成し、表示する第3のステップとを備えることを特徴とするアスペクト解析方法。
  2. 前記第3のステップにおいて、1つのメソッドに織り込まれる複数のアスペクトを実行順に重ね表示することを特徴とする請求項1に記載のアスペクト解析方法。
  3. 前記第3のステップにおいて、表示された複数のアスペクトの1つを選択する操作に対して他のアスペクトとの呼び出し関係を詳細表示することを特徴とする請求項2に記載のアスペクト解析方法。
  4. 開発対象または開発済みのプログラムを構成する複数のクラスに織り込まれるアスペクトを解析する装置であって、
    前記複数のクラスのそれぞれに含まれるメソッドの呼び出し関係を解析するクラス情報解析手段と、前記メソッドに織り込まれたアスペクトの呼び出し関係を解析するアスペクト解析手段と、前記クラス情報解析手段及びアスペクト解析手段の解析結果に基づきクラス相互間におけるメソッドとアスペクトの呼び出し関係を示すシーケンス図を作成し、表示するシーケンス図作成手段とを備えることを特徴とするアスペクト解析装置。
  5. 前記シーケンス図作成手段は、1つのメソッドに織り込まれる複数のアスペクトを実行順に重ね表示することを特徴とする請求項4に記載のアスペクト解析装置。
  6. 前記シーケンス図作成手段は、表示された複数のアスペクトの1つを選択する操作に対して他のアスペクトとの呼び出し関係を詳細表示することを特徴とする請求項4に記載のアスペクト解析方法。
  7. 開発対象または開発済みのプログラムを構成する複数のクラスに織り込まれるアスペクトを解析するコンピュータプログラムであって、
    前記複数のクラスのそれぞれに含まれるメソッドの呼び出し関係を解析するステップと、前記メソッドに織り込まれるアスペクトの呼び出し関係を解析するステップと、前記クラス情報解析手段及びアスペクト解析手段の解析結果に基づきクラス相互間におけるメソッドとアスペクトの呼び出し関係を示すシーケンス図を作成し、表示するステップとをコンピュータに実行させることを特徴とするコンピュータプログラム。
JP2006247601A 2006-09-13 2006-09-13 アスペクト解析方法及び装置並びにコンピュータプログラム Pending JP2008071007A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006247601A JP2008071007A (ja) 2006-09-13 2006-09-13 アスペクト解析方法及び装置並びにコンピュータプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006247601A JP2008071007A (ja) 2006-09-13 2006-09-13 アスペクト解析方法及び装置並びにコンピュータプログラム

Publications (1)

Publication Number Publication Date
JP2008071007A true JP2008071007A (ja) 2008-03-27

Family

ID=39292551

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006247601A Pending JP2008071007A (ja) 2006-09-13 2006-09-13 アスペクト解析方法及び装置並びにコンピュータプログラム

Country Status (1)

Country Link
JP (1) JP2008071007A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012038029A (ja) * 2010-08-05 2012-02-23 Toshiba Corp 自動書き換えプログラムおよび自動書き換え装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012038029A (ja) * 2010-08-05 2012-02-23 Toshiba Corp 自動書き換えプログラムおよび自動書き換え装置

Similar Documents

Publication Publication Date Title
US7080350B2 (en) Method for developing Web applications, development support system and storage medium for storing programs developed according to the method
US7814463B2 (en) User interface debugger for software applications
US6968536B2 (en) Frame component container
US8156476B2 (en) Debugging support for tasks in multithreaded environments
CN109189374B (zh) 基于对象引用链的对象构造代码生成方法及系统
CN102667730A (zh) 设计时调试
US20120110560A1 (en) Data type provider for a web semantic store
US20080177525A1 (en) Integrated debugger simulator
US7519956B2 (en) Method for generating document components and managing same
US7426716B2 (en) Recovery and representation of object interaction in an object oriented program
US20050060685A1 (en) Program generator
US8776010B2 (en) Data type provider for a data store
US8949103B2 (en) Program code simulator
US9880925B1 (en) Collecting structured program code output
Arlt et al. Trends in model-based gui testing
JP2018156133A (ja) コンパイラプログラム、情報処理装置およびコンパイル方法
US20070226688A1 (en) System and method for providing class definitions in a dynamically typed array-based language
CN104778087B (zh) 一种信息处理方法以及信息处理装置
Franzke Charlie 2.0-a multi-threaded Petri net analyzer
CN109062784B (zh) 接口参数约束代码入口定位方法与系统
Fahringer et al. Teuta: Tool support for performance modeling of distributed and parallel applications
JP2008071007A (ja) アスペクト解析方法及び装置並びにコンピュータプログラム
JP2007213487A (ja) アスペクト生成方法及び装置
CN113961238A (zh) 对象转换方法、装置及电子设备和存储介质
CN109062785B (zh) 接口参数约束代码定位方法与系统