JP2005258944A - プログラム解析装置、その解析方法及びプログラム - Google Patents

プログラム解析装置、その解析方法及びプログラム Download PDF

Info

Publication number
JP2005258944A
JP2005258944A JP2004071445A JP2004071445A JP2005258944A JP 2005258944 A JP2005258944 A JP 2005258944A JP 2004071445 A JP2004071445 A JP 2004071445A JP 2004071445 A JP2004071445 A JP 2004071445A JP 2005258944 A JP2005258944 A JP 2005258944A
Authority
JP
Japan
Prior art keywords
program
analysis
weaving
influence
display
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
JP2004071445A
Other languages
English (en)
Other versions
JP3966518B2 (ja
Inventor
Hideaki Shinomi
秀明 四野見
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2004071445A priority Critical patent/JP3966518B2/ja
Priority to US11/065,568 priority patent/US20050204344A1/en
Publication of JP2005258944A publication Critical patent/JP2005258944A/ja
Application granted granted Critical
Publication of JP3966518B2 publication Critical patent/JP3966518B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/316Aspect-oriented programming techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】 アスペクト織り込みによって元のプログラムの何処に影響があるかを解析し解析結果を提示する方法およびシステムを提供する。
【解決手段】 アスペクト指向プログラミングによるプログラムを入力し、入力したプログラムにおけるデータ依存関係および制御依存関係の情報を取得する解析処理部20と、このプログラムに対するアスペクトの織り込み箇所から解析処理部20により取得されたデータ依存関係および制御依存関係をたどってアスペクトの織り込みによる影響の波及経路を探索する影響追跡部30と、解析処理部20による構文解析の結果と影響追跡部30により得られたアスペクトの織り込みによる影響の波及経路の情報とに基づいて、このプログラムにおけるアスペクトの織り込みの影響を受ける箇所を検出し表示出力する表示制御部40とを備える。
【選択図】 図2

Description

本発明は、アスペクト指向プログラミング(AOP:Aspect-Oriented Programming)に関し、特にプログラムを解析し、その解析結果を出力するシステムおよびその方法に関する。
近年、アスペクト指向プログラミングが大変注目されつつある。アスペクト指向プログラミングとは、関心事の分離(Separation of Concerns)という概念を実現するプログラミング方式である(例えば、特許文献1参照)。
例えば、オブジェクト指向は、データと手続きとをひとかたまりとしたクラスという単位のモジュラリティを導入し、それまでの手続き型言語とは異なるオブジェクトという設計実装を実現している。しかし、クラスという単位をまたがった関心事が存在し、それをオブジェクト指向ではモジュールとして設計実装することはできない。クラスをまたがる関心事は、横断的関心事(Crosscutting Concerns)と呼ばれ、よく挙げられる例としてはロギングやセキュリティがある。
ロギングを例として、横断的関心事について説明する。
ソフトウェアの仕様書にロギングをファイルに出力する機能を付けるという記述があったとする。これがロギングに関する関心事である。Java(米国サン・マイクロシステムズ社の商標)を例に取るならば、この機能を付加するためには、ログを出力したい全てのメソッド呼び出しの前もしくは後ろに、ログを出力する出力文を付加する必要がある。すなわち、ログを出力するという関心事が実装時点では、プログラム内全体に分散されて実装されることになる。これは、ログを出力したいという関心事は、オブジェクト指向分析により導かれるクラス設計とは別の次元であり、クラス/メソッドに横断的であることを意味している。そこで、このログを出力したいという機能(横断的関心事)を、プログラム中に分散して記述するのではなく、ひとかたまりのモジュール(アスペクト)として一箇所に書くことを可能にするのがアスペクト指向プログラミングである。
このように、アスペクト指向プログラミングでは、横断的関心事相当のモジュールをアスペクトとして、クラスとは別に記述し、各クラスに織り込み(Weaving)をすることによりプログラムを生成する。
別の例として、点(Point)と線(Line)を操作する簡単な図形エディタのプログラムについて考える(例えば、非特許文献1、2参照)。
図27は、非特許文献1、2に記載された、この図形エディタのUML(Unified Modeling Language)図である。
図27に示すPointクラスおよびLineクラスにおいて、その位置を返すのみのgetX、getY、getP1、getP2メソッドは、その呼び出しの後に処理は要らない。しかし、setX、setY、moveBy、setP1、setP2、moveByに関しては、図形がその位置を変えるため、エディタの動作としては画面を更新することが必要となる。
この場合、これまで通常のJavaのプログラムでは、setX、setY、moveBy、setP1、setP2、moveByに関わる箇所に全て、画面を更新する文を書く必要があった。アスペクト指向プログラミングでは、ここでの「画面の更新」を横断的関心事ととらえ、アスペクトというモジュールとして一箇所に書くことができる。
図28は、非特許文献1、2に記載された、図27の図形エディタにおける画面更新機能を実現するアスペクトの記述の例を示す図である。図28には、Javaの多目的アスペクト指向的な拡張であるAspectJを用いて、画面更新機能を実現するDisplayUpdatingアスペクトが記述されている。
アスペクト指向プログラミングでは、織り込み(Weaving)する箇所の記述をポイントカット(pointcut)として記述する。ここでは、織り込み対象のメソッドをポイントカットとして記述し、それにmoveという名前をつけている。
ポイントカットで指定された箇所で実行されるコードを記述するために、アスペクト指向プログラミングでは、アドバイス(Advice)宣言を使う。この例では、プログラムのコンパイル時に、afterアドバイスが利用され、先にmoveとして定義されたポイントカットに相当するメソッド呼び出しの直後(after)に、 画面更新(Display.update)の文が実行されるように織り込み(Weaving)が行われたプログラムが生成されて、最終的にJavaバイトコードにコンパイルされる。
このように、従来のJavaではプログラム中に分散して記述する必要があった画面更新という横断的関心事が、アスペクト指向プログラミングではアスペクトとして一箇所に記述できることになり、プログラムの保守性も高まることになる。
なお上記ではAspectJを例として、オブジェクト指向設計/言語に対するアスペクト指向プログラミングの適用について説明したが、アスペクト指向プログラミング自体は構造化設計/手続き型言語に対しても適用可能であり、対オブジェクト指向プログラミングだけでなく、幅広い適用可能性がある。
特開2003−233499号公報 G. Kiczales、"Aspect-Oriented Programming with AspectJ"、オブジェクト指向2002シンポジウム資料集 第2分冊、2002年 大森 敏行 他、「Javaの知られざる欠陥(下)」日経バイト2002年10月号、日系BP社、2002年
上述したように、アスペクト指向プログラミングにおけるアスペクトのクラスへの織り込み(Weaving)は大変強力な機能であるが、コンパイル時にシステムが自動的にアスペクトの織り込みを行うために、次のような課題が生ずる。
1.バグの追跡支援の必要性
アスペクトの織り込み(Weaving)前のプログラムには無かったバグが、織り込み後に入ってしまった場合、プログラムの値が想定していたものと異なっていることが発見された場所から実行の流れを逆にたどり、どのアスペクトの織り込みによりバグが導入されたかを知る必要がある。
一方、プログラマが保守するのは、織り込み前のプログラムと、それとは別に記述されたアスペクトであり、織り込み前のプログラム中のある箇所で値が想定と異なることが発見されても、そこから実行順序をさかのぼってバグを含むアスペクトにたどり着くためには、プログラマが織り込み後のプログラムを意識しながら、追跡しなければならない。
2.元のプログラム中の文の実行順序や文からの出力結果に対する影響の検証
アスペクトによっては、織り込みにより、元のプログラム中の文に関して実行順序や出力結果に影響を与えず、純粋に機能を付加するのみの場合がある。例えば、ログ出力などがそのケースである。
しかしながら、プログラマがそのような「元のプログラム中の文の実行に影響を与えない」織り込みがなされることを想定してアスペクトを書いたつもりでありながら、記述ミス(バグ)により、「元のプログラム中の文の実行に影響を与える」アスペクトを書いてしまう可能性がある。ここで、「元のプログラム中の文の実行に影響を与える」とは、「元のプログラム中に存在する文の実行順序や各文による計算結果が織り込みにより変化する」ことを意味し、「元のプログラム中の文の実行に影響を与えない」とは、「織り込みにより、元のプログラム中のあらゆる文の実行順序も、各文による計算結果も変わらず、そのアスペクトの織り込みが純粋に機能を付加するのみである」ことを意味するものとする(本明細書の以下の説明においても同様)。
3.織り込み後のテストの効率化
アスペクトの織り込みによる影響の生ずる範囲が正確に分からないため、プログラムに対してテストを行う場合、元のプログラムに対して既にテストが行われていて、テストケースがそろっている場合であっても、どのテストケースについてアスペクトの織り込み後に再テストすべきかを特定することができない。そのため、全てのテストケースで再テストを行う必要があり、再テスト不要なテストケースについても重複してテストを行うこととなって、テスト工程の効率が悪くなる。
ところで、アスペクト指向プログラミングにおけるアスペクトの織り込み箇所を視覚化するツールとして、eclipseベースのAspectJ開発環境であるAJDT(AspectJ Development Tools)の中のAspect Visualizerがある。
図29は、Aspect Visualizerの出力画面の例を示す図である。
しかしながら、Aspect Visualizerの機能は、Javaファイル中のアスペクトの織り込みが行われた箇所を示すだけである。結合点におけるメソッド呼び出しのパラメータ中のオブジェクトやターゲット・オブジェクトのデータ・フィールドに対する代入の変更、戻り値に対する代入の変更がアスペクト中で行われた場合(ある種の副作用と言える)、フィールド、戻り値などを経由して、元のプログラムに対するアスペクトの織り込みの影響は波及していくが、Aspect Visualizerでこの織り込みの影響を解析することはできない。
したがって、Aspect Visualizerでは、上述した課題を解決することはできない。
そこで本発明は、アスペクト織り込みによって元のプログラムの何処に影響があるかを解析する方法を提供することを目的とする。
本発明は、上記の目的に加え、解析結果を提示することにより、アスペクトの織り込み後に生じたバグの原因となったアスペクトの追跡を支援するシステムを実現することを他の目的とする。
また本発明は、上記の目的に加え、解析結果を提示することにより、アスペクトの織り込み後のプログラムを実行することなく、「元のプログラム中の文の実行に影響を与えない」アスペクトであるか否かを検証するシステムを実現することを他の目的とする。
さらに本発明は、上記の目的に加え、解析結果に基づいて、アスペクトの織り込み後に再テストすべきテストケースを特定し、テスト工程の効率化を図ることをさらに他の目的とする。
上記の目的を達成する本発明は、コンピュータプログラムを解析する、次のように構成されたプログラム解析装置として実現される。この装置は、アスペクト指向プログラミングによるプログラムが入力され、入力されたプログラムを解析しそのプログラムにおけるデータ依存関係および制御依存関係の情報を取得する解析処理部と、このプログラムに対するアスペクトの織り込み箇所から解析処理部により取得されたデータ依存関係および制御依存関係をたどってアスペクトの織り込みによる影響の波及経路を探索する影響追跡部と、解析処理部による構文解析の結果と影響追跡部により得られたアスペクトの織り込みによる影響の波及経路の情報とに基づいて、このプログラムにおけるアスペクトの織り込みの影響を受ける箇所を検出し表示出力する表示制御部とを備えることを特徴とする。
ここで、より詳細には、解析処理部は、プログラムに対し構文解析を行ってプログラムのコントロールフローグラフを生成し、プログラムにおけるメソッド呼び出しの親子関係をアスペクトにおけるアドバイスとの関係を含めて解析し、コントロールフローグラフおよびメソッド呼び出しの親子関係の解析結果に基づいてメソッドごとのプログラム依存グラフを生成する。そして、影響追跡部は、プログラムに含まれる各アスペクトの各織り込み箇所に存在する各基点から、プログラム依存グラフにおけるデータ依存関係を表すアークおよび制御依存関係を表すアークをたどり、通ったノードおよびアークに対して、波及経路であることを示す情報を付加する。表示制御部は、プログラム依存グラフのノードおよびアークに付加された情報に基づいて、プログラムにおけるアスペクトの織り込みによる影響を受ける箇所と他の箇所との表示形式を変えて表示装置に表示させる。
さらに好ましくは、表示制御部は、プログラムを構成するモジュールの一覧を表示する第1のウィンドウと、第1のウィンドウにおいて指定されたモジュールのソースコードを表示する第2のウィンドウとを表示装置に表示させる。そして、第1のウィンドウにおいて、プログラムにおけるアスペクトの織り込みによる影響を受けるモジュールと他のモジュールとの表示形式を変え、かつ第2のウィンドウにおいて、モジュールにおけるアスペクトの織り込みによる影響を受ける箇所と他の箇所との表示形式を変えて表示装置に表示させる。また、表示制御部は、プログラムにおけるアスペクトの織り込みによる影響の波及経路に対応するデータ依存関係および制御依存関係を示す表示を行う。
ユーザ(プログラマ)は、このように表示制御された出力画面を参照することにより、任意のアスペクトの織り込みにより、プログラムのどの部分が影響を受けるかを、アスペクトの織り込み箇所からの影響の波及の様子も含めて、視覚的に認識することができる。
また、上記の目的を達成する他の本発明は、コンピュータによりコンピュータプログラムの解析を行う、次のようなプログラム解析方法としても実現される。このプログラム解析方法は、アスペクト指向プログラミングによる処理対象プログラムが入力され、入力された処理対象プログラムに対して構文解析を行い、処理対象プログラムのプログラム依存グラフを生成し、構文解析の結果とプログラム依存グラフとを記憶装置に格納する第1のステップと、このプログラム依存グラフに基づき、処理対象プログラムに対するアスペクトの織り込み箇所からデータ依存関係および制御依存関係をたどってアスペクトの織り込みによる影響の波及経路を探索し、探索結果を記憶装置に格納する第2のステップと、第1のステップで得られた構文解析の結果と第2のステップで得られたアスペクトの織り込みによる影響の波及経路の探索結果とに基づいて、処理対象プログラムにおけるアスペクトの織り込みの影響を受ける箇所を検出し表示出力する第3のステップとを含む。
さらに本発明は、コンピュータを制御して上述したプログラム解析方法における各ステップに対応する処理を実行させるプログラム、あるいは、コンピュータに上記プログラム解析装置の各機能を実現させるプログラムとしても実現される。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記憶装置に格納して配布したり、ネットワークを介して配信したりすることにより提供することができる。
以上のように構成された本発明によれば、アスペクト指向プログラミングにおいて、アスペクト織り込みによって元のプログラムの何処に影響があるかを解析し、その結果を表示出力することができる。
ユーザ(プログラマ)は、表示出力された画面を参照することにより、アスペクトの織り込み後に生じたバグの原因となったアスペクトの追跡を容易に行うことができる。また、アスペクトの織り込み後のプログラムを実行することなく、「元のプログラム中の文の実行に影響を与えない」アスペクトであるか否かを検証することができる。さらに、解析結果に基づいて、アスペクトの織り込み後に再テストすべきテストケースを特定できるため、テスト工程の効率化を図ることができる。
以下、添付図面を参照して、本発明を実施するための最良の形態(以下、実施形態)について詳細に説明する。
図1は、本実施形態によるプログラム解析及び解析結果の出力を行うのに好適なコンピュータ装置のハードウェア構成の例を模式的に示した図である。
図1に示すコンピュータ装置は、演算手段であるCPU(Central Processing Unit:中央処理装置)101と、M/B(マザーボード)チップセット102およびCPUバスを介してCPU101に接続されたメインメモリ103と、同じくM/Bチップセット102およびAGP(Accelerated Graphics Port)を介してCPU101に接続されたビデオカード104及びディスプレイ110と、PCI(Peripheral Component Interconnect)バスを介してM/Bチップセット102に接続された磁気ディスク装置(HDD)105、ネットワークインターフェイス106と、さらにこのPCIバスからブリッジ回路107およびISA(Industry Standard Architecture)バスなどの低速なバスを介してM/Bチップセット102に接続されたフレキシブルディスクドライブ108およびキーボード/マウス109とを備える。
なお、図1は本実施形態を実現するコンピュータ装置のハードウェア構成を例示するに過ぎず、本実施形態を適用可能であれば、他の種々の構成を取ることができる。例えば、ビデオカード104を設ける代わりに、ビデオメモリのみを搭載し、CPU101にてイメージデータを処理する構成としても良いし、外部記憶装置として、ATA(AT Attachment)やSCSI(Small Computer System Interface)などのインターフェイスを介してCD−R(Compact Disc Recordable)やDVD−RAM(Digital Versatile Disc Random Access Memory)のドライブを設けても良い。
図2は、本実施形態のプログラム解析システムの機能構成を示す図である。
図2を参照すると、本実施形態のプログラム解析システムは、アスペクト指向プログラミング言語で記述されたプログラムを格納したプログラム格納部10と、プログラム格納部10から処理対象のプログラムを読み出して構文解析および依存関係の解析を行う解析処理部20と、解析処理部20の解析結果に基づいてプログラム中のクラスへのアスペクトの織り込みを行った場合の影響の追跡を行う影響追跡部30と、解析処理部20および影響追跡部30の処理結果に基づいてプログラムに対する処理結果をユーザ(プログラマ)に提示するための出力画面を作成し表示出力する表示制御部40とを備える。
プログラム格納部10は、例えば図1に示したメインメモリ103や磁気ディスク装置105にて実現され、処理対象であるアスペクト指向プログラミング言語で記述されたプログラムを格納している。
解析処理部20は、例えば図1のプログラム制御されたCPU101にて実現され、プログラム格納部10から処理対象のプログラムを読み出して、構文解析を行ってプログラムの構造を反映した構文木と関数名や変数名を管理するための記号表とを生成し、この構文木から制御の流れを表すコントロールフローグラフ(Control Flow Gragh:CFG)を生成する。また、各メソッド呼び出しの関係(親子関係)を解析する。そして、生成したコントロールグラフおよびメソッド呼び出しの関係の解析結果に基づいて、メソッドごとにプログラムにおけるデータ依存関係(Data Dependence)および制御依存関係(Control Dependence)の解析を行い、これらデータ依存関係および制御依存関係の情報を持つプログラム依存グラフ(Program Dependence Graph:PDG)を生成する。生成された構文木、記号表、コントロールフローグラフ、プログラム依存グラフおよびメソッド呼び出し間の関係の解析結果は、例えば図1のメインメモリ103やCPU101のキャッシュメモリ、磁気ディスク装置105等に保持されて、次の処理において利用される。
ここで、本実施形態では、メソッド呼び出しの親子関係を解析する場合に、アスペクトで記述された部分(アドバイス)をメソッド呼び出しと同様に解釈して解析を行う。
なお、本実施形態における構文解析とは、通常のコンパイラの処理における構文解析と同様である。また、データ依存関係および制御依存関係の語は、プログラムスライシングにおけるこれらの語と同じ概念で用いている。プログラムスライシングは、プログラム内の任意の文が着目する変数に影響を与えるコードを元のプログラムから抽出する既存の技術であり、デバッグ、テスト、再利用などのソフトウェア開発や保守に有用な手法である。すなわち、データ依存関係とは、ある変数を定義した文とその変数の値が代入された文との間の関係の関係であり、制御依存関係とは、ある文が実行されるか否かを左右する条件部への依存関係である。
図3は、プログラムのソースコードにおけるデータ依存関係および制御依存関係の例を示す図、図4は、図3におけるデータ依存関係および制御依存関係をコントロールフローグラフ上で示した図である。
図3において、1行目のget(n1,n2)で代入された変数n1、n2の値が3行目のif (n1 < n2)で参照されており、ここにデータ依存関係が存在する。また、2行目のmax = n1および4行目のmax = n2で代入された変数maxの値が6行目のput(max)で参照されているので、この2行目および4行目と6行目との間にデータ依存関係が存在する。一方、3行目のif (n1 < n2)を条件として4行目のmax = n2が実行されるので、この3行目と4行目との間に制御依存関係が存在する。
図4には、以上の依存関係が、コントロールフローグラフのノード間の依存関係として表記されている。なお、図3、4において、データ依存関係は実線で、制御依存関係は一点鎖線で記載されている。また、図4では、各ノード間のコントロールフローの制御の流れを示す矢印が太実線で記載されている。
図5は、解析処理部20により生成されるプログラム依存グラフの構成を説明する図である。
図5において、左側に記載された7行のプログラムにおける各文の間の依存関係が、右側に記載されたプログラム依存グラフに表現されている。すなわち、プログラムの1、2行目で代入された変数x、yの値がそれぞれ3行目、4行目および6行目で参照されており、このデータ依存関係が実線で記載されている。また、プログラムの3行目のif文が4行目および6行目の実行条件となっており、この制御依存関係が一点鎖線で記載されている。
影響追跡部30は、例えば図1のプログラム制御されたCPU101にて実現され、解析処理部20により生成されたプログラム依存グラフに基づいて、アスペクトが元のプログラムに与える影響の波及経路の探索を実行する。
具体的には、影響追跡部30は、まず、各アスペクトから元のプログラムに与える影響の基点を発見し、リストアップする。ここで、基点とは次のような点である。すなわち、アスペクト中に、メソッド呼出のパラメータやターゲットのオブジェクトのフィールドに対する更新(代入)や、戻り値に対する値の更新がある場合、その織り込み箇所からその更新により元のプログラムに影響が与えられる。この更新時点での更新対象データを基点と呼ぶ。織り込み箇所が基点を含むか否かは、次の基準によることとする。
1.Beforeアドバイスまたはafterアドバイス(メソッド呼び出しの前または後への挿入)のソースコード中で、パラメータ中のオブジェクトおよびターゲット・オブジェクトのフィールドへの値の更新が行われる場合。
2.aroundアドバイス(メソッド自体の置き換え)のソースコード中で、次の基準に合致する更新が行われる場合。
[基点基準1]パラメータ中のオブジェクトおよびターゲット・オブジェクトのフィールドへの値の更新が行われる。
[基点基準2]proceed()(織り込み対象の本来の呼び出し)へのパラメータに渡る値の更新が行われる。
[基点基準3]proceed()からの戻り値を更新して返す。
次に、影響追跡部30は、リストアップされた各基点からプログラム依存グラフをたどって、制御依存関係およびデータ依存関係によってアスペクトの影響が波及する経路をマーキングする。すなわち、所定のアスペクトに関して、基点から順にプログラム依存グラフのデータ依存と制御依存のアークを矢印方向にたどり、訪問したノード全てにそのアスペクトから影響があるという印(情報)を付加していく。また、この工程でたどったデータ依存関係および制御依存関係のアークにも同様の印(情報)を付加していく。このノードおよびアークに付加された印(情報)は、プログラム依存グラフと共に例えば図1のメインメモリ103や磁気ディスク装置105に格納され、表示制御部40の処理で用いられる。なお、アスペクトの影響があるという印(情報)を付加されたプログラム依存グラフのデータ構造については、段落[0055]において述べる。
表示制御部40は、例えば図1のプログラム制御されたCPU101とビデオカード104とで実現され、解析処理部20により生成された構文木および記号表と影響追跡部30によりアスペクトの影響があるという印(情報)を付加されたプログラム依存グラフとに基づいて、処理結果をユーザ(プログラマ)に提示するための出力画面を生成し、ディスプレイ110に表示させる。
図6は、表示制御部40により表示出力される出力画面の構成例を示す図である。
図6に示す出力画面は、織り込み影響表示ウィンドウ610と、詳細表示ウィンドウ620の2つのウィンドウにて構成されている。
織り込み影響表示ウィンドウ610は、元のプログラムを構成するモジュール(クラス)およびアスペクトを表示しており、着目中のアスペクトとそのアスペクトの織り込みによって影響を受けるクラスを識別できるように表示を切り替えている。図示の例では、処理対象であるプログラムが、「Account.java」、「BalanceFormat.java」、「ExchangeRate.java」および「SampleMain.java」という4つのクラスと、「ForeignCurrency」と「Logging」という2つのアスペクトとからなる。そして、着目中のアスペクトの名前「ForeignCurrency」が白抜きの矢印611で示され、このForeignCurrencyアスペクトの織り込みによって影響を受けるAccount.java、BalanceFormat.javaおよびSampleMain.javaの各クラス名が太字で表示されている。また、詳細表示ウィンドウ620にソースコードが表示されているSampleMain.javaの各クラス名には、さらに下線が付されている。
なお、図6に示す表示の切り替えは例示に過ぎず、図示の手法の他、文字や矢印の表示色や文字フォントを変えるなど、影響を受けるクラスと受けないクラスとを識別するために、任意の方法をとることができる。
図7は、図6に示した表示画面の織り込み影響表示ウィンドウ610の他の表示例を示す図である。
図7の例では、着目中のアスペクトをForeignCurrencyからLoggingに切り替えているため、アスペクト名「Logging」を記述した矢印612が白抜きで手前に表示されている。また、Loggingアスペクトの織り込みによって影響を受けるクラスは存在しないので、4つのクラスはいずれも太字表記されていない。
図8は、図6に示した表示画面の詳細表示ウィンドウ620の表示内容を説明する図である。
図8に示す例では、SampleMainクラスのソースコードと、アスペクトの織り込みがSampleMainクラスに与える影響の様子が示されている。同図において、アスペクト名「ForeignCurrency」が表記された矢印621は、織り込み影響表示ウィンドウ610において指定された着目中のForeignCurrencyアスペクトがSampleMainクラス中に織り込まれる位置を示している。また、SampleMainクラスのソースコードに付加された実線の矢印はデータ依存関係を、一点鎖線の矢印は制御依存関係を示す。そして、SampleMainクラスのソースコードにおいて、ForeignCurrencyアスペクトの織り込みによって影響を受ける文が太字で表記されている。図8によれば、ForeignCurrencyアスペクトがSampleMainクラスに織り込まれることによって、直接変更される文の他、この文に対してデータ依存関係または制御依存関係を有する文にも影響を与えることが分かる。なお、データ依存関係を示す実線の矢印には、矢印の指示先で参照される変数の表記が付加されている。
図9は、詳細表示ウィンドウ620の他の表示内容を説明する図である。
図9に示す例では、図6のようにForeignCurrencyアスペクトに着目した状態で、BalanceFormatクラスのソースコードが表示されている。詳細表示ウィンドウ620に表示されるソースコードの切り替えは、例えば、織り込み影響表示ウィンドウ610上で、マウスクリック等の手段により所望のクラスを指定することによって行うことができるものとする。
図示の例では、BalanceFormatクラスには、ForeignCurrencyアスペクトは織り込まれず、アスペクト名「ForeignCurrency」が表記された矢印621は表示されていない。しかし、図8に示したように、SampleMainクラスへのForeignCurrencyアスペクトの織り込みにより変数bが影響を受けており、BalanceFormatクラス内の文中でこの変数bを代入しているので、結果として、このBalanceFormatクラスもForeignCurrencyアスペクトの織り込みによる影響を受けることとなる。そして、実線の矢印で表記されたデータ依存関係と一点鎖線の矢印で表記された制御依存関係とを介して、他の文にもForeignCurrencyアスペクトの織り込みによる影響が波及していることがわかる。
ユーザ(プログラマ)は、表示制御部40により表示出力された織り込み影響表示ウィンドウ610を、着目するアスペクトを切り替えながら参照することにより、プログラムに織り込まれるどのアスペクトがどのクラスの実行に影響を与えるかを知ることができる。そして、所望のクラスのソースコードを詳細表示ウィンドウ620に表示させて参照することにより、個々のソースコードにおけるどの文がアスペクトの織り込みによる影響を受けるのかを具体的に知ることができる。
次に、具体的なプログラムの例を挙げて、本実施形態の動作について詳細に説明する。
以下に示す動作例では、処理対象のプログラムとして、下記の4つのJavaプログラム(クラス)および2つのアスペクトを想定する。
SampleMain.java:
Javaによるメインプログラム。CustomerIDが1の顧客に対して銀行口座オブジェクトを生成し、預金(1000円)している。最後に確認した預金残高と、引き出し額(950円)を比較し、残高の方が大きければ預金の引き出しを行う。その後、その日の口座レポートを出力する。残高は、BalanceFormat.printメソッドで出力する。このプログラム自体は、日本円による預金を想定している。このクラスのソースコードを図10に示す。
Account.java:
Javaによる口座クラス。顧客番号(customerID)に基づき口座オブジェクトを作るコンストラクタ、預金メソッドdepositMoney、引出しメソッドwithdrawMoney、残高をチェックするメソッドcheckBalanceが含まれる。このクラスのソースコードを図11に示す。
BalanceFormat.java:
Javaによる残高フォーマット用のクラス。フォーマットされた残高を表示するprintメソッドが含まれる。残高がマイナスならばエラーと出力する。このクラスのソースコードを図12に示す。
ExchangeRate.java:
Javaによるその時の円/ドルの換算レートを返すメソッドupdateYenDollarを持つクラス。
ForeignCurrencyAspect.java:
AspectJによる外貨預金に変えるためのアスペクト。このアスペクトでは、2種類のアドバイスが定義されている。
1つ目は、Accountクラス中のdepositMoneyメソッドとwithdrawMoneyメソッドの呼び出しを、aroundアドバイスを用いて置き換えている。aroundアドバイス中のproceed()は、本来のdepositMoneyメソッドもしくはwithdrawMoneyメソッドの呼び出しである。ここでは、depositMoneyメソッドもしくはwithdrawMoneyメソッドのパラメータに来た数値を円/ドル換算レートで除算して、本来のメソッド呼び出しに渡す。depositMoneyメソッドとwithdrawMoneyメソッドは残高を返すので、このアドバイス中では、その残高を、換算レートを乗算して円に直してから返すこととなる。
2つ目は、Accountクラス中のcheckBalanceメソッドをaroundアドバイスにより置き換えている。すなわち、本来のcheckBalanceメソッドに相当するproceedが返す残高に、換算レートを乗算して円に直してから返す。このアスペクトのソースコードを図13に示す。
LoggingAspect.java:
AspectJによるロギングを入れるためのアスペクト。beforeアドバイスを利用して、depositMoneyメソッドとwithdrawMoneyメソッドの呼び出しの直前にログを出力する文を織り込む。このアスペクトのソースコードを図14に示す。
なお、図10〜12のソースコードには、データ依存関係を示す矢印(実線)と制御依存関係を示す矢印(一点鎖線)が記述されており、またアスペクトの織り込みによる影響の生じる箇所が太字で記述されている。これら本実施形態によって解析されるアスペクトの織り込みによる影響の波及の内容については、段落[0062]以降で述べる。4つのJavaプログラムのうち、ExchangeRate.javaについては、アスペクトの織り込みによる影響がない(他の織り込み箇所からの波及もない)ので、ソースコードの記載を省略した。
本動作例では、日本円による銀行預金口座の処理をするプログラム(上述したSampleMain.java、Account.java、BalanceFormat.java、ExchangeRate.javaの4つのクラスからなるプログラム)にForeignCurrencyアスペクトを織り込んで、入金出金は円でも、ドル立てで預金される外貨預金口座を生成するプログラムを生成する。なお、問題を単純化するために、利息は無し、織り込みにより外貨(ドル)預金化に変更した際の為替手数料は無しとする。
図15は、上述したプログラムに対する適用を例とした本実施形態の動作を説明するフローチャートである。
図15を参照すると、まず解析処理部20が、プログラム格納部10から処理対象のプログラム(上述した4つのJavaプログラムと2つのアスペクト)のソースコードを入力し(ステップ1501)、構文解析を行う(ステップ1502)。この構文解析により、構文木と記号表が生成される。
次に、解析処理部20は、生成した構文木に基づいて、各Javaプログラムにおける文の間の制御の流れを示すコントロールフローグラフを生成する(ステップ1503)。また、各Javaプログラムにおけるメソッド呼び出しの親子関係を解析する(ステップ1504)。ここでは、上述したように、アスペクトで記述されたアドバイスに対しても一般のメソッド呼び出しと同様に親子関係の解析を行う。
図16は、メソッド呼び出しの親子関係の解析例を示す図である。
図16において、矢印によりメソッド呼び出し間の親子関係が示されている(矢印の先が子供(呼び出し先))。図示のように、アスペクトで記述された部分(ForeignCurrencyAspect$1、ForeignCurrencyAspect$2)に関しても、他のメソッド呼び出しとの関係が示されている。なお、アスペクトを示す角の丸い矩形に記述された名称において、「<アスペクト名>$n」とある「n(図示の例では1および2)」は、そのアスペクト中のn番目のアドバイスであることを示している。
次に解析処理部20は、ステップ1503で解析されたメソッド呼び出し間の関係に基づいて、呼び出し先の子供のメソッド呼び出しから順番に個々のメソッド呼び出しに着目し、ステップ1502で生成された構文木に基づき、プログラムスライシングの技術を用いて、各メソッド呼び出しにおけるプログラム依存グラフを生成する(ステップ1505)。このとき、呼び出される各メソッド内部のデータフローをサマライズしたインターフェース情報も同時に生成する。インターフェース情報の内容については後述する。
図16の場合を例に取ると、まず、Account.depositMoneyとAccount.withdrawMoneyのプログラム依存グラフが生成され、各々のプログラム依存グラフに基づいて、各メソッド呼び出しのデータフローのインターフェース情報が生成される。このインターフェース情報は、ForeignCurrencyAspectの1番目のアドバイス(ForeignCurrencyAspect$1)のプログラム依存グラフを生成する際に利用される。ForeignCurrencyAspect$1のプログラム依存グラフが生成されると、これに基づいてこのアドバイスのインターフェース情報が生成される。同様の手順でForeignCurrencyAspect$2およびBalanceFormat.printのインターフェース情報が生成され、これらのインターフェース情報がSampleMain.mainのプログラム依存グラフの生成に利用される。
なお、図16において、ForeignCurrencyAspect$1が、Account.depositMoneyとAccount.withdrawMoney用に2つも受けられているのは、ソースコード上は同じForeignCurrencyAspect$1であっても、Account.depositMoneyとAccount.withdrawMoneyのどちらに織り込まれるかによって、ForeignCurrencyAspect$1自体のインターフェース情報が変わる可能性があるためである。さらにこの場合、プログラム依存グラフも別に生成する必要がある。ただし、本動作例では、以下で説明する解析の結果、インターフェース情報はAccount.depositMoneyとAccount.withdrawMoneyで同じになるので、最終的にはこれら2つのForeignCurrencyAspect$1のノードは、1つにまとめることができ、プログラム依存グラフも1つとなる。
以下、上記で説明した順番に基づき、プログラム依存グラフが生成される過程を説明する。
図17は、Account.depositMoneyメソッドのプログラム依存グラフを示す図である。
図17において、点線で示されたノードは、そのメソッドを呼び出す際のデータの入出力に相当する仮想的なノード(以下、仮想ノード)である。この仮想ノードの内容が、このメソッド呼び出しによるデータフローをサマライズしたインターフェース情報となる。入出力相当の仮想ノードに基づいて、ここではインターフェース情報を以下のように表記する。

USE(<1stParam>, this.balance)&DEF(<returnVal>, this.balance)

ここで、USE()は、そのメソッドの呼び出し箇所で使用されるデータを示し、DEF()は、代入されるデータを示す。また、<1stParam>は、そのメソッド呼び出しの第1引数であり、<returnVal>は、戻り値である。したがって図17の例では、他にクラスのフィールドthis.balanceの値が使用され、代入されることが分かる。
なお、ここではAccount.depositMoneyメソッドに対するインターフェース情報を挙げたが、Account.withdrawMoneyメソッドに関しても同様の解析を行うと、同じインターフェース情報になる。つまり、計算の中身は異なっても、呼び出し側への影響は同じということである。そのため、結果的に図16における2つのForeignCurrencyAspect$1ノードは同一となり、そのプログラム依存グラフも1つとなる。
ところで、ある程度大きいメソッドにおいて、引数やフィールドの値を受けて、お互いに干渉しないまったく別の計算が行われ、結果も別の形で返される場合、そのメソッドに相当するプログラム依存グラフは1つではなく、分離された複数のプログラム依存グラフとなる可能性がある。その場合、上記のインターフェース表記は、次に示すように複数になる場合がある。

USE(<1stParam>, this.x)&DEF(<returnVal>), USE(this.y)&DEF(this.y)

これは、本来2つの別の機能を実行するメソッドが、1つのメソッドとして実装されていることに相当する。このような場合は、このメソッドを呼び出す側でのプログラム依存グラフ生成の際も、その呼び出しに相当するプログラム依存グラフのノード(文に相当)は、内部的には2つの別のノードとしてプログラム依存グラフを生成する。
図18は、ForeignCurrencyAspect$1アドバイスのプログラム依存グラフを示す図、図19は、SampleMain.mainメソッドのプログラム依存グラフを示す図である。
上述したように、図18に示すForeignCurrencyAspect$1アドバイスのプログラム依存グラフは、Account.depositMoneyメソッドおよびAccount.withdrawMoneyメソッドのインターフェース情報に基づいて生成される。また、Proceed()は、Account.depositMoneyに相当し、インターフェースは既に次のようにサマライズされているものを利用する。
USE(<1stParam>, this.balance)&DEF(<returnVal>, this.balance)
なお既に述べたように、その2つのメソッドのインターフェース情報は同じであったので、メソッドごとに、ForeignCurrencyAspect$1アドバイスのプログラム依存グラフを生成する必要はない。
同様に、ForeignCurrencyAspect$1アドバイス、ForeignCurrencyAspect$2アドバイスおよびBalanceFormat.printメソッドのインターフェース情報を用いて、図19に示すSampleMain.mainメソッドのプログラム依存グラフが生成される。
以上のようにして、解析処理部20により、各メソッド呼び出しにおけるプログラム依存グラフが生成されたならば、次に、影響追跡部30が、1つのアスペクトを選択し(ステップ1506)、そのアスペクトが元のプログラムに影響を与える基点を検出してリストアップする(ステップ1507)。基点の検出基準は上述したとおりである。
例として、図18のForeignCurrencyAspect$1アドバイスに関して、基点を調査する。ForeignCurrencyAspect$1アドバイスはaroundアドバイスであるので、上記の段落[0026]で述べた3つの基点基準について、それぞれ考える。
まず、基点基準1については、プログラム依存グラフにおいてthis.balanceに対する更新(代入)があるように見えるが、これは本来の織り込み対象のAccount.depositMoneyメソッドもしくはAccout.withdrawMoneyメソッドの呼び出しに相当するproceed()によるものであり、その他では、this.balanceの値の更新(代入)はない。したがって、基点基準1は当てはまらない。
次に、基点基準2については、メソッド呼び出しのパラメータの値mがそのまま、proceed()のパラメータとして渡るのではなく、m/rという除算が行われてから渡っているので、かかる値が更新されるので、基点となる。このようなチェックは、proceed()のパラメータからデータ依存関係を逆にたどりながら、途中に更新操作があるかどうかをチェックすることにより実現される。
次に、基点基準3については、プログラム依存グラフで、仮想ノード「Out:」の<returnVal>からデータ依存関係を逆にたどり、ノード「6:」にたどり着くことで、proceed()からの戻り値の値に*rという乗算をしていることが分かるので、基点となる。
なお、上記の説明では、m/rや*rという操作があることが条件となるような表現を用いたが、実際には、値を変化させない単純な代入(例えば、x=yなど)以外の操作が生じた際には全て「基点」と認識する。
以上をまとめると、ForeignCurrencyAspect$1アドバイスでは、ノード「6:」のパラメータと変数xが基点として検出され、これらがリストアップされる。
着目したアスペクトに関して基点をリストアップしたならば、次に影響追跡部30は、このアスペクトの織り込み箇所の1つを選択し(ステップ1508)、選択された織り込み箇所における基点を1つ選択し、プログラム依存グラフにおけるアスペクトの影響を追跡し、マーキングする(ステップ1509)。ここで、アスペクトの影響追跡およびマーキングとは、基点から順にプログラム依存グラフのデータ依存と制御依存のアークを矢印方向にたどり、訪問したノードおよびたどったアークの全てにそのアスペクトから影響があるという印(情報)を付加していくことである。付加する情報は、例えば、各アスペクトに対して予め設定されたID情報(アスペクトID)とすることができる。
図20は、図18に示したForeignCurrencyAspect$1アドバイスのプログラム依存グラフにおいて、2つの基点(ノード「6:」のパラメータと変数x)から影響追跡としてたどった依存関係のアークとノードを太線で示した図である。
また、図21は、図17において、ノード「6:」のパラメータの基点から影響を追跡し、Account.depositMoneyメソッドの中を影響追跡してたどったノードとアークを太線で示した図である。図21と図11に示したAccountクラスのソースコードとを比較すると、図21において太線で示された、アスペクトの影響の波及する箇所は、図11において太字で記述されたアスペクトの織り込みにより影響を受ける箇所に相当している。図11によれば、ForeignCurrencyアスペクトの織り込みによる影響が表示されているが、顧客番号に関わるところは影響が無いことが分かる(ここでは、説明の便宜上、変数の参照更新が明確になるために、あえてbalance += mと書かずに、balance = balance + mと記述してある)。
さらに、図21における2つの基点からの影響追跡は、ForeignCurrencyAspect$1アドバイスの織り込みが行われている全ての箇所で行われる。その結果、SampleMain.mainメソッドにおいても、ForeignCurrencyAspect$1アドバイスの織り込みの影響が波及する。
図22は、図19において、かかるアドバイスの織り込みの影響を追跡してたどったノードとアークを太線で示した図である。SampleMain.mainメソッドにおけるForeignCurrencyAspect$1アドバイスの織り込みの影響は、最終的に図22に示したように波及し、これは、図10において太字で記述されたアスペクトの織り込みにより影響を受ける箇所に相当している。
さて、影響追跡部30は、ステップ1509のマーキング処理を、ステップ1508で選択された織り込み箇所における全ての基点に対して行う(ステップ1509、1510)。未処理の基点がなくなったならば、次に影響追跡部30は、ステップ1508に戻り、改めて同じアスペクトにおける未処理の1つの織り込み箇所を選択し、同様の処理を繰り返す(ステップ1511)。そして、ステップ1506で選択されたアスペクトにおける全ての織り込み箇所に対して処理が完了したならば、次に影響追跡部30は、ステップ1506に戻り、改めて未処理の1つのアスペクトを選択し、同様の処理を繰り返す(ステップ1512)。
以上のようにして、処理対象のプログラムに含まれる全てのアスペクトにおける全ての織り込み箇所に対し、全ての基点から、アスペクトの織り込みによる影響の波及経路をマーキングしたならば、影響追跡部30は、マーキングされたプログラム依存グラフを、図1のメインメモリ103や磁気ディスク装置105等の記憶装置に格納して処理を終了する。
図23は、影響追跡部30により生成され、所定の記憶装置に格納される、マーキングされたプログラム依存グラフのデータ構造を示す図である。
図23に示すように、プログラム依存グラフのデータは、プログラムの文に対応するノードのデータであるステートメント、ノード内に記述される変数、各ノード間の関係を表す制御依存アーク及びデータ依存アークの4種類のデータによって構成される。各ステートメントは、ステートメントID、制御依存アークのリストへの順方向のポインタである順制御依存ポインタリスト、制御依存アークのリストへの逆方向のポインタである逆制御依存ポインタ、データ依存アークのリストへの順方向のポインタである順データ依存ポインタリスト、当該ステートメントに含まれる変数のリストへのポインタである変数リスト、構文木中のステートメントへのポインタ、影響を受けるアスペクトのアスペクトIDのリストである影響アスペクトIDリストを、それぞれ含む。また、各変数は、変数ID、ステートメントへのポインタ、データ依存アークのリストへの逆方向のポインタである逆データ依存ポインタリスト、構文木中の変数へのポインタを、それぞれ含む。各制御依存アークは、ソース文へのポインタ、ターゲット文へのポインタ、影響アスペクトIDリストを、それぞれ含む。各データ依存アークは、ソース文へのポインタ、ターゲット変数へのポインタ、影響アスペクトIDリストを、それぞれ含む。
プログラムにおける制御依存関係は各文の間を「制御依存アーク」を経由してつなぐことで表され、データ依存関係は文に属する変数と文との間を「データ依存アーク」を経由してつなぐことで表される。どちらの依存関係も、図5に示したプログラム依存グラフの表記における矢印の順方向、逆方向のどちらもたどることができるようにポインタが張られる。上記のように、ステートメント、データ依存アーク、制御依存アークのデータ構造には、影響を受けるアスペクトのアスペクトIDを付加できるリストをポイントするポインタが入っている。制御依存アークとデータ依存アークのデータ構造において、「ソース」はアークの矢印の元を意味し、「ターゲット」はアークの矢印の先を意味している。
以上のようにしてアスペクトの織り込みによる影響がマーキングされたプログラム依存グラフが生成されると、表示制御部40が、このプログラム依存グラフのデータと図15のステップ1502の処理で解析処理部20により生成された構文木および記号表に基づいて、図6に示したような出力画面を生成し、表示出力する。
すなわち上述したように、アスペクトの織り込みによる影響がマーキングされたプログラム依存グラフのノードとアークには、影響を与えるアスペクトのアスペクトIDが付加されている。そこで、表示制御部40はこの情報に基づき、詳細表示ウィンドウ620に表示されるソースコードにおいて、選択されたアスペクトにより影響を受けるノードに相当する文に対して、図6に示すように太字表記したり表示色を変更したりするなどの表示制御を行い、さらにそのアスペクトIDが付加された制御依存関係およびデータ依存関係のアークを矢印として表示する。この結果、詳細表示ウィンドウ620には、選択されたクラスに応じて、図10〜12に示した様式でソースプログラムが表示されることとなる。データ依存関係の矢印にある変数名は、図23に示されたデータ依存アークのデータ構造中のターゲット変数へのポインタをたどり、変数のデータ構造中の変数IDを得、この変数IDに基づいて記号表から検索して取得し表示する。
また、表示制御部40は、処理対象のプログラムを構成する全てのJavaプログラムを表示した織り込み影響表示ウィンドウ610において、アスペクトの織り込みが影響を与える(影響の波及を含む)全てのJavaプログラムに対して、図6に示すように太字表記したり表示色を変更したりするなどの表示制御を行う。
ここで、上記動作例で用いたプログラムのSampleMainクラスを実行した出力結果を検証する。
図24は、アスペクトの織り込み無しでの実行結果を示す図である。
図24に示す実行結果によれば、日本円による入出金が行われ、Accountオブジェクト中の残高も日本円のままである。そして、SampleMainのプログラムロジック上、日本円で処理されている限り残高がマイナスになることはない。
図25は、ForeignCurrencyアスペクトを織り込んだ後の実行結果を示す図である。
図25に示す実行結果によれば、ForeignCurrencyアスペクトの織り込みによりAccountオブジェクト中の残高はドル立てに変わっている。上記のように図24の場合には残高がマイナスになることはないが、図25の例では、預金(入金)した際と、引出し(出金)した際に、円/ドルの換算レールが変わっているために、為替差損が生じ残高がマイナスになっている。そして、BalanceFormat.printメソッドは、元々マイナスの値を想定していないために、エラーを出力している。
図26は、ForeignCurrencyアスペクトに加え、Loggingアスペクトも織り込んだ場合の実行結果を示す図である。
図25に示した出力内容に加えて、AccountクラスのdepositMoneyメソッドおよびwithdrawMoneyメソッドのターゲット・オブジェクトのCustomerIDと、メソッドのパラメータの値がログとして出力されている。
円による銀行預金の処理だった元々のプログラムのSampleMainクラス(図10参照)は、最後に確認した預金残高とこれから引き出そうとしている金額を比較して、預金残高がマイナスなら引き出さないというロジックになっている。したがって、元のプログラムは、残高(balance)がマイナスには決してならない。
しかし、ForeignCurrencyアスペクト(図13)の織り込みによってドルによる外貨預金に変更され、ドル立てで預金される(Accountオブジェクトのbalanceフィールドにドルが入る)ようにプログラムが変更されると、残高がマイナスになってしまう場合が起こる。すなわち、最後に確認した時点での預金残高が為替の変動により目減りしてしまい、マイナスにならずに引き出せるはずであった金額をそのまま引き落とすことによって、実際の残高がマイナスになる場合である。これにより、BalanceFormat.print()メソッドのパラメータに想定していなかったマイナスの残高が渡されてしまい。図25の出力結果でエラーが出力された。BalanceFormatクラス自体には、ForeignCurrencyアスペクトの織り込みがなされていないが、SampleMainクラスへの織り込みの影響が波及したことにより想定外のことが起きたわけである。
さて、これをふまえて、本実施形態によるアスペクトの織り込みによる影響の波及の様子が明示された各Javaプログラム(SampleMainクラス、Accountクラス、BalanceFormatクラス)のソースコードである図10〜12を参照すると、次のことが分かる。
BalanceFormatクラス自体(より正確にはBalanceFormat.printメソッド)が、アスペクトの織り込みの影響が受けることが示されており(図12)、想定と異なる値が発生した箇所は、ForeignCurrencyアスペクトの織り込みによる影響を受けていることが示されている。また、そのForeignCurrencyアスペクトの織り込みの影響は、BalanceFormatクラスのみならず、影響を受ける全てのクラス中で示されており、矢印を逆にたどることにより、その値を決定した流れを追跡することができるようになっている。
また、BalanceFormat.printメソッドが影響を受けるということは、既存のテストケースの中で、そのBalanceFormat.printメソッドを起動するテストケースを実行する必要があるということが分かる。すなわち、アスペクトの織り込みがなされていないクラスであっても、そのクラスに含まれるメソッド呼び出しのテストを省略できるとは限らない。
一方、詳細な動作説明は省くが、本実施形態における処理対象であるSampleMain.java、Account.java、BalanceFormat.java、ExchangeRate.javaの4つのクラスに対するLoggingアスペクトの織り込みは、元のプログラム中の文の実行順序や文からの出力結果に影響を与えないことが、テストを実施することなく検証できる。したがって、Loggingアスペクトの織り込みに対しては、各クラスに対するテストを省略することができる。
さらにまた、図10、図11、図12の各ソースコード中で太字表記された文と太字表記されていない文とを参照すると、SampleMainクラス、Accountクラス、BalanceFormatクラスでも、CustomerIDに関係する部分は太字表記されていないことが分かる。つまり、このForeignCurrencyアスペクトの織り込みによっては、CustomerIDに関係する部分は影響を受けないことが分かる。
図10〜12に示したソースコードの表記は、上述したように図6に示した詳細表示ウィンドウ620の表示そのままである。したがって、ユーザ(プログラマ)は、本実施形態による解析結果として表示制御部40により表示出力される出力画面を参照することにより、プログラムの実行前の段階で、上記のようなアスペクトの織り込みによる影響の判断や追跡を行うことが可能である。
以上のように、本実施形態は、アスペクト指向プログラミングにおいて、アスペクト織り込みによって元のプログラムの何処に影響があるかを解析し、その影響の波及の様子も含めて表示出力することができる。
したがって、本実施形態をアスペクトの織り込み後にバグが生じたプログラムに対して適用すれば、ユーザ(プログラマ)は、表示出力された画面を参照することにより、そのバグの原因となったアスペクトの追跡を容易に行うことができる。
また、本実施形態をアスペクトが織り込まれたプログラムの実行前に適用すれば、ユーザ(プログラマ)は、表示出力された画面を参照することにより、このプログラムを実行することなく、当該プログラムに織り込まれたアスペクトが元のプログラム中の文の実行に影響を与えるか否か、影響を与える場合はプログラムのどの文に影響を与えるかを検証することができる。
さらに、本実施形態をアスペクトが織り込まれたプログラムのテスト実行前に適用すれば、ユーザ(プログラマ)は、表示出力された画面を参照することにより、アスペクトの織り込み前に行われたテストケースに対し、再テストの要否を判断することができ、テスト工程の効率化に寄与することができる。
本実施形態によるプログラム解析及び解析結果の出力を行うのに好適なコンピュータ装置のハードウェア構成の例を模式的に示した図である。 本実施形態のプログラム解析システムの機能構成を示す図である。 プログラムのソースコードにおけるデータ依存関係および制御依存関係の例を示す図である。 図3におけるデータ依存関係および制御依存関係をコントロールフローグラフ上で示した図である。 本実施形態の解析処理部により生成されるプログラム依存グラフの構成を説明する図である。 本実施形態の表示制御部により表示出力される出力画面の構成例を示す図である。 図6に示した表示画面の織り込み影響表示ウィンドウの他の表示例を示す図である。 図6に示した表示画面の詳細表示ウィンドウの表示内容を説明する図である。 図6に示した表示画面の詳細表示ウィンドウの他の表示内容を説明する図である。 本実施形態の処理対象であるSampleMainクラスのソースコードを示す図である。 本実施形態の処理対象であるAccountクラスのソースコードを示す図である。 本実施形態の処理対象であるBalanceFormatクラスのソースコードを示す図である。 本実施形態の処理対象であるForeignCurrencyアスペクトのソースコードを示す図である。 本実施形態の処理対象であるLoggingアスペクトのソースコードを示す図である。 本実施形態の動作を説明するフローチャートである。 本実施形態におけるメソッド呼び出しの親子関係の解析例を示す図である。 本実施形態によるAccount.depositMoneyメソッドのプログラム依存グラフを示す図である。 本実施形態によるForeignCurrencyAspect$1アドバイスのプログラム依存グラフを示す図である。 本実施形態によるSampleMain.mainメソッドのプログラム依存グラフを示す図である。 図18に示したプログラム依存グラフにおいて、2つの基点から影響追跡としてたどった依存関係のアークとノードを太線で示した図である。 図17に示したプログラム依存グラフにおいて、Account.depositMoneyメソッドの中を影響追跡してたどったノードとアークを太線で示した図である。 図19に示したプログラム依存グラフにおいて、アドバイスの織り込みの影響を追跡してたどったノードとアークを太線で示した図である。 本実施形態におけるマーキングされたプログラム依存グラフのデータ構造を示す図である。 アスペクトの織り込み無しでのSampleMainクラスの実行結果を示す図である。 ForeignCurrencyアスペクトを織り込んだ後のSampleMainクラスの実行結果を示す図である。 ForeignCurrencyアスペクトおよびLoggingアスペクトを織り込んだ場合のSampleMainクラスの実行結果を示す図である。 アスペクト指向プログラミングにより作成された図形エディタのUML図である。 図27の図形エディタにおける画面更新機能を実現するアスペクトの記述の例を示す図である。 Aspect Visualizerの出力画面の例を示す図である。
符号の説明
10…プログラム格納部、20…解析処理部、30…影響追跡部、40…表示制御部、101…CPU(Central Processing Unit:中央処理装置)、103…メインメモリ、104…ビデオカード、105…磁気ディスク装置(HDD)、110…ディスプレイ、610…織り込み影響表示ウィンドウ、620…詳細表示ウィンドウ

Claims (20)

  1. コンピュータプログラムを解析するプログラム解析装置において、
    アスペクト指向プログラミングによるプログラムが入力され、入力されたプログラムを解析しそのプログラムにおけるデータ依存関係および制御依存関係の情報を取得する解析処理部と、
    前記プログラムに対するアスペクトの織り込み箇所から前記解析処理部により取得されたデータ依存関係および制御依存関係をたどって当該アスペクトの織り込みによる影響の波及経路を探索する影響追跡部と
    を備えることを特徴とするプログラム解析装置。
  2. 前記解析処理部は、前記プログラムに対し構文解析を行って当該プログラムのコントロールフローグラフを生成し、当該プログラムにおけるメソッド呼び出しの親子関係を前記アスペクトにおけるアドバイスとの関係を含めて解析し、当該コントロールフローグラフおよび当該メソッド呼び出しの親子関係の解析結果に基づいてメソッドごとのプログラム依存グラフを生成することを特徴とする請求項1に記載のプログラム解析装置。
  3. 前記影響追跡部は、前記プログラムに含まれる各アスペクトの各織り込み箇所に存在する各基点から、前記プログラム依存グラフにおけるデータ依存関係を表すアークおよび制御依存関係を表すアークをたどり、通ったノードおよびアークに対して、前記波及経路であることを示す情報を付加することを特徴とする請求項2に記載のプログラム解析装置。
  4. 前記影響追跡部は、前記アスペクトのアドバイスがbeforeアドバイスまたはafterアドバイスである場合には、当該アドバイスのソースコード中で、パラメータ中のオブジェクトおよびターゲット・オブジェクトのフィールドへの値の更新が行われる場合に、その更新対象データを前記基点とすることを特徴とする請求項3に記載のプログラム解析装置。
  5. 前記影響追跡部は、前記アスペクトのアドバイスがaroundアドバイスである場合には、当該アドバイスのソースコード中で、下記の基準に合致する更新が行われる場合に、その更新対象データを前記基点とすることを特徴とする請求項3に記載のプログラム解析装置。
    基点基準−1:パラメータ中のオブジェクトおよびターゲット・オブジェクトのフィールドへの値の更新が行われる場合。
    基点基準−2:proceed()(織り込み対象の本来の呼び出し)へのパラメータに渡る値の更新が行われる場合。
    基点基準−3:proceed()からの戻り値を更新して返す場合。
  6. コンピュータプログラムを解析するプログラム解析装置において、
    アスペクト指向プログラミングによるプログラムが入力され、入力されたプログラムを解析しそのプログラムに対して構文解析を行い、当該プログラムのプログラム依存グラフを生成する解析処理部と、
    前記解析処理部により生成されたプログラム依存グラフに基づき、前記プログラムに対するアスペクトの織り込み箇所からデータ依存関係および制御依存関係をたどって当該アスペクトの織り込みによる影響の波及経路を探索する影響追跡部と、
    前記解析処理部による構文解析の結果と前記影響追跡部により得られたアスペクトの織り込みによる影響の波及経路の情報とに基づいて、前記プログラムにおける前記アスペクトの織り込みの影響を受ける箇所を検出し表示出力する表示制御部と
    を備えることを特徴とするプログラム解析装置。
  7. 前記表示制御部は、前記プログラムのソースコードを表示装置に表示させると共に、当該プログラムにおける前記アスペクトの織り込みによる影響を受ける箇所と他の箇所との表示形式を変えて当該表示装置に表示させることを特徴とする請求項6に記載のプログラム解析装置。
  8. 前記表示制御部は、前記プログラムのソースコードを表示装置に表示させると共に、当該プログラムにおける前記アスペクトの織り込みによる影響の波及経路に対応するデータ依存関係および制御依存関係を示す表示を行うことを特徴とする請求項6に記載のプログラム解析装置。
  9. 前記表示制御部は、前記プログラムを構成するモジュールの一覧を表示装置に表示させると共に、当該プログラムにおける前記アスペクトの織り込みによる影響を受けるモジュールと他のモジュールとの表示形式を変えて当該表示装置に表示させることを特徴とする請求項6に記載のプログラム解析装置。
  10. 前記表示制御部は、前記プログラムを構成するモジュールの一覧を表示する第1のウィンドウと、当該第1のウィンドウにおいて指定されたモジュールのソースコードを表示する第2のウィンドウとを表示装置に表示させると共に、当該第1のウィンドウにおいて、当該プログラムにおける前記アスペクトの織り込みによる影響を受けるモジュールと他のモジュールとの表示形式を変え、かつ当該第2のウィンドウにおいて、当該モジュールにおける前記アスペクトの織り込みによる影響を受ける箇所と他の箇所との表示形式を変えて当該表示装置に表示させることを特徴とする請求項6に記載のプログラム解析装置。
  11. 前記影響追跡部は、前記プログラムに含まれる各アスペクトの各織り込み箇所に存在する各基点から、前記プログラム依存グラフにおけるデータ依存関係を表すアークおよび制御依存関係を表すアークをたどり、通ったノードおよびアークに対して、前記波及経路であることを示す情報を付加し、
    前記表示制御部は、前記プログラム依存グラフのノードおよびアークに付加された前記情報に基づいて、前記表示形式の制御を行うことを特徴とする請求項7、請求項9または請求項10に記載のプログラム解析装置。
  12. コンピュータによりコンピュータプログラムの解析を行うプログラム解析方法であって、
    アスペクト指向プログラミングによる処理対象プログラムが入力され、入力された当該処理対象プログラムに対して構文解析を行い、当該処理対象プログラムのプログラム依存グラフを生成し、構文解析の結果と当該プログラム依存グラフとを記憶装置に格納する第1のステップと、
    前記プログラム依存グラフに基づき、前記処理対象プログラムに対するアスペクトの織り込み箇所からデータ依存関係および制御依存関係をたどって当該アスペクトの織り込みによる影響の波及経路を探索し、探索結果を記憶装置に格納する第2のステップと
    を含むことを特徴とするプログラム解析方法。
  13. 前記第1のステップは、
    前記処理対象プログラムに対し構文解析を行って当該処理対象プログラムのコントロールフローグラフを生成するステップと、
    前記処理対象プログラムにおけるメソッド呼び出しの親子関係を前記アスペクトにおけるアドバイスとの関係を含めて解析するステップと、
    前記コントロールフローグラフおよび前記メソッド呼び出しの親子関係の解析結果に基づいてメソッドごとのプログラム依存グラフを生成するステップと
    を含むことを特徴とする請求項12に記載のプログラム解析方法。
  14. 前記第1のステップで得られた前記構文解析の結果と前記第2のステップで得られた前記アスペクトの織り込みによる影響の波及経路の探索結果とに基づいて、前記処理対象プログラムにおける前記アスペクトの織り込みの影響を受ける箇所を検出し表示出力する第3のステップをさらに含むことを特徴とする請求項12に記載のプログラム解析方法。
  15. 前記第2のステップでは、前記処理対象プログラムに含まれる各アスペクトの各織り込み箇所に存在する各基点から、前記プログラム依存グラフにおけるデータ依存関係を表すアークおよび制御依存関係を表すアークをたどり、通ったノードおよびアークに対して、前記波及経路であることを示す情報を付加し、
    前記第3のステップでは、前記プログラム依存グラフのノードおよびアークに付加された前記情報に基づいて、前記プログラムにおける前記アスペクトの織り込みによる影響を受ける箇所と他の箇所との表示形式を変えて表示装置に表示させることを特徴とする請求項14に記載のプログラム解析方法。
  16. 前記第3のステップでは、前記プログラムのソースコードを表示装置に表示させると共に、当該プログラムにおける前記アスペクトの織り込みによる影響の波及経路に対応するデータ依存関係および制御依存関係を示す表示を行うことを特徴とする請求項14に記載のプログラム解析方法。
  17. コンピュータに、
    アスペクト指向プログラミングによる処理対象プログラムが入力され、入力された当該処理対象プログラムに対して構文解析を行い、当該処理対象プログラムのプログラム依存グラフを生成し、構文解析の結果と当該プログラム依存グラフとを記憶装置に格納する第1の処理と、
    前記プログラム依存グラフに基づき、前記処理対象プログラムに対するアスペクトの織り込み箇所からデータ依存関係および制御依存関係をたどって当該アスペクトの織り込みによる影響の波及経路を探索し、探索結果を記憶装置に格納する第2の処理と
    を実行させることを特徴とするプログラム。
  18. 前記第1の処理で得られた前記構文解析の結果と前記第2の処理で得られた前記アスペクトの織り込みによる影響の波及経路の探索結果とに基づいて、前記処理対象プログラムにおける前記アスペクトの織り込みの影響を受ける箇所を検出し表示出力する第3の処理を、前記コンピュータにさらに実行させることを特徴とする請求項17に記載のプログラム。
  19. 前記第2の処理では、前記処理対象プログラムに含まれる各アスペクトの各織り込み箇所に存在する各基点から、前記プログラム依存グラフにおけるデータ依存関係を表すアークおよび制御依存関係を表すアークをたどり、通ったノードおよびアークに対して、前記波及経路であることを示す情報を付加する処理を前記コンピュータに実行させ、
    前記第3の処理では、前記プログラム依存グラフのノードおよびアークに付加された前記情報に基づいて、前記処理対象プログラムにおける前記アスペクトの織り込みによる影響を受ける箇所と他の箇所との表示形式を変えて表示装置に表示させる表示制御を前記コンピュータに実行させることを特徴とする請求項17に記載のプログラム。
  20. 前記第3の処理では、前記処理対象プログラムのソースコードを表示装置に表示させると共に、当該処理対象プログラムにおける前記アスペクトの織り込みによる影響の波及経路に対応するデータ依存関係および制御依存関係を示す表示を行う表示制御を前記コンピュータに実行させることを特徴とする請求項17に記載のプログラム。
JP2004071445A 2004-03-12 2004-03-12 プログラム解析装置、その解析方法及びプログラム Expired - Fee Related JP3966518B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2004071445A JP3966518B2 (ja) 2004-03-12 2004-03-12 プログラム解析装置、その解析方法及びプログラム
US11/065,568 US20050204344A1 (en) 2004-03-12 2005-02-24 Program analysis device, analysis method and program of same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004071445A JP3966518B2 (ja) 2004-03-12 2004-03-12 プログラム解析装置、その解析方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2005258944A true JP2005258944A (ja) 2005-09-22
JP3966518B2 JP3966518B2 (ja) 2007-08-29

Family

ID=34918584

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004071445A Expired - Fee Related JP3966518B2 (ja) 2004-03-12 2004-03-12 プログラム解析装置、その解析方法及びプログラム

Country Status (2)

Country Link
US (1) US20050204344A1 (ja)
JP (1) JP3966518B2 (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007213498A (ja) * 2006-02-13 2007-08-23 Hitachi Software Eng Co Ltd アスペクト表示システム
JP2009042951A (ja) * 2007-08-08 2009-02-26 Hitachi Consulting Co Ltd プログラム中のデータ抽出方法及び装置
JP5403362B2 (ja) * 2007-08-02 2014-01-29 日本電気株式会社 パターン検査システム、パターン検査装置、方法およびパターン検査用プログラム
US9129006B2 (en) 2012-08-22 2015-09-08 Fujitsu Limited Creation device, creation method, and recording medium
JP2017004282A (ja) * 2015-06-11 2017-01-05 日本電気通信システム株式会社 プログラム表示装置、プログラム表示システム、プログラム表示方法、及びプログラム表示プログラム
KR20190140495A (ko) * 2018-05-23 2019-12-20 서울대학교산학협력단 의존성 그래프를 이용한 데이터 처리 시스템 및 방법
JP2020149297A (ja) * 2019-03-13 2020-09-17 オムロン株式会社 解析装置、解析方法、及び解析プログラム

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7765525B1 (en) * 2004-09-01 2010-07-27 Intuit Inc. Operations manager infrastructure for dynamically updating software operational policy
US7506320B2 (en) * 2004-09-09 2009-03-17 International Business Machines Corporation Generating sequence diagrams using call trees
US7984422B2 (en) * 2004-09-30 2011-07-19 Graham Kevin P Repository relationship programming
US7703144B2 (en) * 2005-04-12 2010-04-20 International Business Machines Corporation Method, apparatus, and program to post process applications encrypting sensitive objects that are logged
US20070234308A1 (en) * 2006-03-07 2007-10-04 Feigenbaum Barry A Non-invasive automated accessibility validation
JP5042315B2 (ja) 2006-10-19 2012-10-03 チェックマークス リミテッド ソースコード内のセキュリティ脆弱性の検出
US7890939B2 (en) * 2007-02-13 2011-02-15 Microsoft Corporation Partial methods
US9009699B2 (en) * 2007-05-31 2015-04-14 Red Hat, Inc. Providing a POJO-based microcontainer for an application server
US8640146B2 (en) 2007-05-31 2014-01-28 Red Hat, Inc. Providing extensive ability for describing a management interface
US8327341B2 (en) * 2007-05-31 2012-12-04 Red Hat, Inc. Integrating aspect oriented programming into the application server
US8881112B2 (en) * 2007-12-19 2014-11-04 International Business Machines Corporation Quality measure tool for a composite application
US20100029374A1 (en) * 2008-08-04 2010-02-04 Glory Ltd., A Corporation Of Japan Automatic dealing machine and automatic dealing system
FR2942056B1 (fr) * 2009-02-11 2011-06-03 Compagnie Ind Et Financiere Dingenierie Ingenico Procede d'affichage, dispositif et produit programme d'ordinateur correspondant
US8443343B2 (en) * 2009-10-28 2013-05-14 Intel Corporation Context-sensitive slicing for dynamically parallelizing binary programs
JP5613255B2 (ja) * 2009-11-25 2014-10-22 テレフオンアクチーボラゲット エル エム エリクソン(パブル) サービスを管理するためのアプリケーションサーバ及び方法
US8863094B2 (en) 2010-05-18 2014-10-14 International Business Machines Corporation Framework for a software error inject tool
JP5303795B2 (ja) * 2010-06-02 2013-10-02 株式会社日立製作所 アプリケーションの解析方法、解析システム及び解析プログラム
JP5516736B2 (ja) * 2010-07-20 2014-06-11 株式会社日立製作所 ソフトウェア保守支援装置及びそれにより検証した電子制御装置
US9141806B2 (en) 2010-08-24 2015-09-22 Checkmarx Ltd. Mining source code for violations of programming rules
US8666999B2 (en) * 2011-08-02 2014-03-04 Rockwell Automation Technologies, Inc. Search utility program for software developers
US8417609B2 (en) * 2011-08-19 2013-04-09 Bank Of America Corporation Methods and systems for modeling deposits' data
CN102693147B (zh) * 2012-06-13 2015-10-28 上海第二工业大学 计算机汇编语言的辅助分析装置及分析方法
US9122490B2 (en) * 2012-10-17 2015-09-01 Microsoft Technology Licensing, Llc Code dependency calculation
CN103257859A (zh) * 2013-03-22 2013-08-21 南京信通科技有限责任公司 高性能缓存和nutz的aop技术在教育网站群的应用
US9734040B2 (en) * 2013-05-21 2017-08-15 Microsoft Technology Licensing, Llc Animated highlights in a graph representing an application
US8990777B2 (en) 2013-05-21 2015-03-24 Concurix Corporation Interactive graph for navigating and monitoring execution of application code
US9280841B2 (en) 2013-07-24 2016-03-08 Microsoft Technology Licensing, Llc Event chain visualization of performance data
US9292415B2 (en) 2013-09-04 2016-03-22 Microsoft Technology Licensing, Llc Module specific tracing in a shared module environment
US9569187B2 (en) * 2013-10-08 2017-02-14 International Business Machines Corporation Irreducible modules
CN105765560B (zh) 2013-11-13 2019-11-05 微软技术许可有限责任公司 基于多次跟踪执行的软件组件推荐
US9594591B2 (en) 2014-09-26 2017-03-14 International Business Machines Corporation Dynamic relocation of applications in a cloud application service model
US10073764B1 (en) * 2015-03-05 2018-09-11 National Technology & Engineering Solutions Of Sandia, Llc Method for instruction sequence execution analysis and visualization
CN105893016A (zh) * 2015-12-11 2016-08-24 乐视网信息技术(北京)股份有限公司 基于mvc架构的日志记录系统及方法
US10203947B2 (en) * 2016-08-03 2019-02-12 Toyota Infotechnology Center Usa, Inc. Efficient over-the-air software update for a connected vehicle
US11087002B2 (en) 2017-05-10 2021-08-10 Checkmarx Ltd. Using the same query language for static and dynamic application security testing tools
CN108983710B (zh) * 2017-06-02 2021-05-18 欧姆龙株式会社 工序分析装置、工序分析方法以及存储介质
JP6933012B2 (ja) * 2017-06-14 2021-09-08 富士通株式会社 解析装置、解析プログラムおよび解析方法
CN108536606B (zh) * 2018-04-22 2021-01-19 北京化工大学 一种基于复合依赖关系覆盖准则的efsm测试方法
US11836258B2 (en) 2020-07-28 2023-12-05 Checkmarx Ltd. Detecting exploitable paths in application software that uses third-party libraries
US11487645B2 (en) 2020-12-14 2022-11-01 Sap Se Predictive test case coverage
US11379198B1 (en) * 2020-12-14 2022-07-05 Sap Se Call graph enhancement using stitching algorithm

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7140007B2 (en) * 2002-01-16 2006-11-21 Xerox Corporation Aspect-oriented programming with multiple semantic levels
US7137104B2 (en) * 2002-05-21 2006-11-14 International Business Machines Corporation Semantics-based composition of class hierarchies
US7484202B2 (en) * 2004-10-12 2009-01-27 International Business Machines Corporation Method, system and program product for retrofitting collaborative components into existing software applications

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007213498A (ja) * 2006-02-13 2007-08-23 Hitachi Software Eng Co Ltd アスペクト表示システム
JP5403362B2 (ja) * 2007-08-02 2014-01-29 日本電気株式会社 パターン検査システム、パターン検査装置、方法およびパターン検査用プログラム
JP2009042951A (ja) * 2007-08-08 2009-02-26 Hitachi Consulting Co Ltd プログラム中のデータ抽出方法及び装置
US9129006B2 (en) 2012-08-22 2015-09-08 Fujitsu Limited Creation device, creation method, and recording medium
JP2017004282A (ja) * 2015-06-11 2017-01-05 日本電気通信システム株式会社 プログラム表示装置、プログラム表示システム、プログラム表示方法、及びプログラム表示プログラム
KR20190140495A (ko) * 2018-05-23 2019-12-20 서울대학교산학협력단 의존성 그래프를 이용한 데이터 처리 시스템 및 방법
KR102063123B1 (ko) * 2018-05-23 2020-01-07 서울대학교산학협력단 의존성 그래프를 이용한 데이터 처리 시스템 및 방법
JP2020149297A (ja) * 2019-03-13 2020-09-17 オムロン株式会社 解析装置、解析方法、及び解析プログラム
JP7063291B2 (ja) 2019-03-13 2022-05-09 オムロン株式会社 解析装置、解析方法、及び解析プログラム

Also Published As

Publication number Publication date
JP3966518B2 (ja) 2007-08-29
US20050204344A1 (en) 2005-09-15

Similar Documents

Publication Publication Date Title
JP3966518B2 (ja) プログラム解析装置、その解析方法及びプログラム
JP4195479B2 (ja) インクリメンタル生成システム
Grönninger et al. Textbased modeling
US9639332B2 (en) Applying coding standards in graphical programming environments
US6539390B1 (en) Integrated development environment for aspect-oriented programming
US8935673B1 (en) System and method for debugging computer program based on execution history
US8091075B2 (en) Method and apparatus for breakpoint analysis of computer programming code using unexpected code path conditions
US7509632B2 (en) Method and apparatus for analyzing call history data derived from execution of a computer program
Voelter et al. Lessons learned from developing mbeddr: a case study in language engineering with MPS
US20090287958A1 (en) Method and apparatus for test generation from hybrid diagrams with combined data flow and statechart notation
US7530056B1 (en) Method and system for detecting runtime defects in a program by comparing correct and incorrect runs
US20110271258A1 (en) Software Development Tool
US20110271250A1 (en) Software Development Tool
US10915302B2 (en) Identification and visualization of associations among code generated from a model and sources that affect code generation
EP2141587A1 (en) Method and system for generating of a control flow graph for representing a program code
US8327323B2 (en) Automatic copying by ancestor in object-oriented languages
US10379821B1 (en) Optimization tracing
US8798971B2 (en) System and method for using a truth table graphical function in a statechart
Liuying et al. Test selection from UML statecharts
Gerlitz et al. Flow sensitive slicing for matlab/simulink models
Kessler et al. Analyzing interactions of structural aspects
De Ruvo et al. An eclipse-based editor to support lotos newcomers
US9361119B1 (en) Active code component identification and manipulation for preprocessor variants
JP2008282174A (ja) 情報処理装置、情報処理方法、および情報処理プログラム
Binkley et al. Characterising, explaining, and exploiting the approximate nature of static analysis through animation

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070206

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070427

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

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20070524

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070525

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees