JP2005258944A - プログラム解析装置、その解析方法及びプログラム - Google Patents
プログラム解析装置、その解析方法及びプログラム Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/316—Aspect-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
例えば、オブジェクト指向は、データと手続きとをひとかたまりとしたクラスという単位のモジュラリティを導入し、それまでの手続き型言語とは異なるオブジェクトという設計実装を実現している。しかし、クラスという単位をまたがった関心事が存在し、それをオブジェクト指向ではモジュールとして設計実装することはできない。クラスをまたがる関心事は、横断的関心事(Crosscutting Concerns)と呼ばれ、よく挙げられる例としてはロギングやセキュリティがある。
ソフトウェアの仕様書にロギングをファイルに出力する機能を付けるという記述があったとする。これがロギングに関する関心事である。Java(米国サン・マイクロシステムズ社の商標)を例に取るならば、この機能を付加するためには、ログを出力したい全てのメソッド呼び出しの前もしくは後ろに、ログを出力する出力文を付加する必要がある。すなわち、ログを出力するという関心事が実装時点では、プログラム内全体に分散されて実装されることになる。これは、ログを出力したいという関心事は、オブジェクト指向分析により導かれるクラス設計とは別の次元であり、クラス/メソッドに横断的であることを意味している。そこで、このログを出力したいという機能(横断的関心事)を、プログラム中に分散して記述するのではなく、ひとかたまりのモジュール(アスペクト)として一箇所に書くことを可能にするのがアスペクト指向プログラミングである。
このように、アスペクト指向プログラミングでは、横断的関心事相当のモジュールをアスペクトとして、クラスとは別に記述し、各クラスに織り込み(Weaving)をすることによりプログラムを生成する。
図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に関わる箇所に全て、画面を更新する文を書く必要があった。アスペクト指向プログラミングでは、ここでの「画面の更新」を横断的関心事ととらえ、アスペクトというモジュールとして一箇所に書くことができる。
アスペクト指向プログラミングでは、織り込み(Weaving)する箇所の記述をポイントカット(pointcut)として記述する。ここでは、織り込み対象のメソッドをポイントカットとして記述し、それにmoveという名前をつけている。
ポイントカットで指定された箇所で実行されるコードを記述するために、アスペクト指向プログラミングでは、アドバイス(Advice)宣言を使う。この例では、プログラムのコンパイル時に、afterアドバイスが利用され、先にmoveとして定義されたポイントカットに相当するメソッド呼び出しの直後(after)に、 画面更新(Display.update)の文が実行されるように織り込み(Weaving)が行われたプログラムが生成されて、最終的にJavaバイトコードにコンパイルされる。
なお上記ではAspectJを例として、オブジェクト指向設計/言語に対するアスペクト指向プログラミングの適用について説明したが、アスペクト指向プログラミング自体は構造化設計/手続き型言語に対しても適用可能であり、対オブジェクト指向プログラミングだけでなく、幅広い適用可能性がある。
1.バグの追跡支援の必要性
アスペクトの織り込み(Weaving)前のプログラムには無かったバグが、織り込み後に入ってしまった場合、プログラムの値が想定していたものと異なっていることが発見された場所から実行の流れを逆にたどり、どのアスペクトの織り込みによりバグが導入されたかを知る必要がある。
一方、プログラマが保守するのは、織り込み前のプログラムと、それとは別に記述されたアスペクトであり、織り込み前のプログラム中のある箇所で値が想定と異なることが発見されても、そこから実行順序をさかのぼってバグを含むアスペクトにたどり着くためには、プログラマが織り込み後のプログラムを意識しながら、追跡しなければならない。
アスペクトによっては、織り込みにより、元のプログラム中の文に関して実行順序や出力結果に影響を与えず、純粋に機能を付加するのみの場合がある。例えば、ログ出力などがそのケースである。
しかしながら、プログラマがそのような「元のプログラム中の文の実行に影響を与えない」織り込みがなされることを想定してアスペクトを書いたつもりでありながら、記述ミス(バグ)により、「元のプログラム中の文の実行に影響を与える」アスペクトを書いてしまう可能性がある。ここで、「元のプログラム中の文の実行に影響を与える」とは、「元のプログラム中に存在する文の実行順序や各文による計算結果が織り込みにより変化する」ことを意味し、「元のプログラム中の文の実行に影響を与えない」とは、「織り込みにより、元のプログラム中のあらゆる文の実行順序も、各文による計算結果も変わらず、そのアスペクトの織り込みが純粋に機能を付加するのみである」ことを意味するものとする(本明細書の以下の説明においても同様)。
アスペクトの織り込みによる影響の生ずる範囲が正確に分からないため、プログラムに対してテストを行う場合、元のプログラムに対して既にテストが行われていて、テストケースがそろっている場合であっても、どのテストケースについてアスペクトの織り込み後に再テストすべきかを特定することができない。そのため、全てのテストケースで再テストを行う必要があり、再テスト不要なテストケースについても重複してテストを行うこととなって、テスト工程の効率が悪くなる。
図29は、Aspect Visualizerの出力画面の例を示す図である。
しかしながら、Aspect Visualizerの機能は、Javaファイル中のアスペクトの織り込みが行われた箇所を示すだけである。結合点におけるメソッド呼び出しのパラメータ中のオブジェクトやターゲット・オブジェクトのデータ・フィールドに対する代入の変更、戻り値に対する代入の変更がアスペクト中で行われた場合(ある種の副作用と言える)、フィールド、戻り値などを経由して、元のプログラムに対するアスペクトの織り込みの影響は波及していくが、Aspect Visualizerでこの織り込みの影響を解析することはできない。
したがって、Aspect Visualizerでは、上述した課題を解決することはできない。
本発明は、上記の目的に加え、解析結果を提示することにより、アスペクトの織り込み後に生じたバグの原因となったアスペクトの追跡を支援するシステムを実現することを他の目的とする。
また本発明は、上記の目的に加え、解析結果を提示することにより、アスペクトの織り込み後のプログラムを実行することなく、「元のプログラム中の文の実行に影響を与えない」アスペクトであるか否かを検証するシステムを実現することを他の目的とする。
さらに本発明は、上記の目的に加え、解析結果に基づいて、アスペクトの織り込み後に再テストすべきテストケースを特定し、テスト工程の効率化を図ることをさらに他の目的とする。
ユーザ(プログラマ)は、このように表示制御された出力画面を参照することにより、任意のアスペクトの織り込みにより、プログラムのどの部分が影響を受けるかを、アスペクトの織り込み箇所からの影響の波及の様子も含めて、視覚的に認識することができる。
ユーザ(プログラマ)は、表示出力された画面を参照することにより、アスペクトの織り込み後に生じたバグの原因となったアスペクトの追跡を容易に行うことができる。また、アスペクトの織り込み後のプログラムを実行することなく、「元のプログラム中の文の実行に影響を与えない」アスペクトであるか否かを検証することができる。さらに、解析結果に基づいて、アスペクトの織り込み後に再テストすべきテストケースを特定できるため、テスト工程の効率化を図ることができる。
図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とを備える。
図2を参照すると、本実施形態のプログラム解析システムは、アスペクト指向プログラミング言語で記述されたプログラムを格納したプログラム格納部10と、プログラム格納部10から処理対象のプログラムを読み出して構文解析および依存関係の解析を行う解析処理部20と、解析処理部20の解析結果に基づいてプログラム中のクラスへのアスペクトの織り込みを行った場合の影響の追跡を行う影響追跡部30と、解析処理部20および影響追跡部30の処理結果に基づいてプログラムに対する処理結果をユーザ(プログラマ)に提示するための出力画面を作成し表示出力する表示制御部40とを備える。
プログラム格納部10は、例えば図1に示したメインメモリ103や磁気ディスク装置105にて実現され、処理対象であるアスペクト指向プログラミング言語で記述されたプログラムを格納している。
ここで、本実施形態では、メソッド呼び出しの親子関係を解析する場合に、アスペクトで記述された部分(アドバイス)をメソッド呼び出しと同様に解釈して解析を行う。
図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において、左側に記載された7行のプログラムにおける各文の間の依存関係が、右側に記載されたプログラム依存グラフに表現されている。すなわち、プログラムの1、2行目で代入された変数x、yの値がそれぞれ3行目、4行目および6行目で参照されており、このデータ依存関係が実線で記載されている。また、プログラムの3行目のif文が4行目および6行目の実行条件となっており、この制御依存関係が一点鎖線で記載されている。
具体的には、影響追跡部30は、まず、各アスペクトから元のプログラムに与える影響の基点を発見し、リストアップする。ここで、基点とは次のような点である。すなわち、アスペクト中に、メソッド呼出のパラメータやターゲットのオブジェクトのフィールドに対する更新(代入)や、戻り値に対する値の更新がある場合、その織り込み箇所からその更新により元のプログラムに影響が与えられる。この更新時点での更新対象データを基点と呼ぶ。織り込み箇所が基点を含むか否かは、次の基準によることとする。
1.Beforeアドバイスまたはafterアドバイス(メソッド呼び出しの前または後への挿入)のソースコード中で、パラメータ中のオブジェクトおよびターゲット・オブジェクトのフィールドへの値の更新が行われる場合。
2.aroundアドバイス(メソッド自体の置き換え)のソースコード中で、次の基準に合致する更新が行われる場合。
[基点基準1]パラメータ中のオブジェクトおよびターゲット・オブジェクトのフィールドへの値の更新が行われる。
[基点基準2]proceed()(織り込み対象の本来の呼び出し)へのパラメータに渡る値の更新が行われる。
[基点基準3]proceed()からの戻り値を更新して返す。
図6は、表示制御部40により表示出力される出力画面の構成例を示す図である。
図6に示す出力画面は、織り込み影響表示ウィンドウ610と、詳細表示ウィンドウ620の2つのウィンドウにて構成されている。
なお、図6に示す表示の切り替えは例示に過ぎず、図示の手法の他、文字や矢印の表示色や文字フォントを変えるなど、影響を受けるクラスと受けないクラスとを識別するために、任意の方法をとることができる。
図7の例では、着目中のアスペクトをForeignCurrencyからLoggingに切り替えているため、アスペクト名「Logging」を記述した矢印612が白抜きで手前に表示されている。また、Loggingアスペクトの織り込みによって影響を受けるクラスは存在しないので、4つのクラスはいずれも太字表記されていない。
図8に示す例では、SampleMainクラスのソースコードと、アスペクトの織り込みがSampleMainクラスに与える影響の様子が示されている。同図において、アスペクト名「ForeignCurrency」が表記された矢印621は、織り込み影響表示ウィンドウ610において指定された着目中のForeignCurrencyアスペクトがSampleMainクラス中に織り込まれる位置を示している。また、SampleMainクラスのソースコードに付加された実線の矢印はデータ依存関係を、一点鎖線の矢印は制御依存関係を示す。そして、SampleMainクラスのソースコードにおいて、ForeignCurrencyアスペクトの織り込みによって影響を受ける文が太字で表記されている。図8によれば、ForeignCurrencyアスペクトがSampleMainクラスに織り込まれることによって、直接変更される文の他、この文に対してデータ依存関係または制御依存関係を有する文にも影響を与えることが分かる。なお、データ依存関係を示す実線の矢印には、矢印の指示先で参照される変数の表記が付加されている。
図9に示す例では、図6のようにForeignCurrencyアスペクトに着目した状態で、BalanceFormatクラスのソースコードが表示されている。詳細表示ウィンドウ620に表示されるソースコードの切り替えは、例えば、織り込み影響表示ウィンドウ610上で、マウスクリック等の手段により所望のクラスを指定することによって行うことができるものとする。
以下に示す動作例では、処理対象のプログラムとして、下記の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を持つクラス。
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については、アスペクトの織り込みによる影響がない(他の織り込み箇所からの波及もない)ので、ソースコードの記載を省略した。
図15を参照すると、まず解析処理部20が、プログラム格納部10から処理対象のプログラム(上述した4つのJavaプログラムと2つのアスペクト)のソースコードを入力し(ステップ1501)、構文解析を行う(ステップ1502)。この構文解析により、構文木と記号表が生成される。
図16は、メソッド呼び出しの親子関係の解析例を示す図である。
図16において、矢印によりメソッド呼び出し間の親子関係が示されている(矢印の先が子供(呼び出し先))。図示のように、アスペクトで記述された部分(ForeignCurrencyAspect$1、ForeignCurrencyAspect$2)に関しても、他のメソッド呼び出しとの関係が示されている。なお、アスペクトを示す角の丸い矩形に記述された名称において、「<アスペクト名>$n」とある「n(図示の例では1および2)」は、そのアスペクト中のn番目のアドバイスであることを示している。
図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つとなる。
USE(<1stParam>, this.x)&DEF(<returnVal>), USE(this.y)&DEF(this.y)
これは、本来2つの別の機能を実行するメソッドが、1つのメソッドとして実装されていることに相当する。このような場合は、このメソッドを呼び出す側でのプログラム依存グラフ生成の際も、その呼び出しに相当するプログラム依存グラフのノード(文に相当)は、内部的には2つの別のノードとしてプログラム依存グラフを生成する。
上述したように、図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メソッドのプログラム依存グラフが生成される。
例として、図18のForeignCurrencyAspect$1アドバイスに関して、基点を調査する。ForeignCurrencyAspect$1アドバイスはaroundアドバイスであるので、上記の段落[0026]で述べた3つの基点基準について、それぞれ考える。
以上をまとめると、ForeignCurrencyAspect$1アドバイスでは、ノード「6:」のパラメータと変数xが基点として検出され、これらがリストアップされる。
また、図21は、図17において、ノード「6:」のパラメータの基点から影響を追跡し、Account.depositMoneyメソッドの中を影響追跡してたどったノードとアークを太線で示した図である。図21と図11に示したAccountクラスのソースコードとを比較すると、図21において太線で示された、アスペクトの影響の波及する箇所は、図11において太字で記述されたアスペクトの織り込みにより影響を受ける箇所に相当している。図11によれば、ForeignCurrencyアスペクトの織り込みによる影響が表示されているが、顧客番号に関わるところは影響が無いことが分かる(ここでは、説明の便宜上、変数の参照更新が明確になるために、あえてbalance += mと書かずに、balance = balance + mと記述してある)。
図22は、図19において、かかるアドバイスの織り込みの影響を追跡してたどったノードとアークを太線で示した図である。SampleMain.mainメソッドにおけるForeignCurrencyAspect$1アドバイスの織り込みの影響は、最終的に図22に示したように波及し、これは、図10において太字で記述されたアスペクトの織り込みにより影響を受ける箇所に相当している。
以上のようにして、処理対象のプログラムに含まれる全てのアスペクトにおける全ての織り込み箇所に対し、全ての基点から、アスペクトの織り込みによる影響の波及経路をマーキングしたならば、影響追跡部30は、マーキングされたプログラム依存グラフを、図1のメインメモリ103や磁気ディスク装置105等の記憶装置に格納して処理を終了する。
図23に示すように、プログラム依存グラフのデータは、プログラムの文に対応するノードのデータであるステートメント、ノード内に記述される変数、各ノード間の関係を表す制御依存アーク及びデータ依存アークの4種類のデータによって構成される。各ステートメントは、ステートメントID、制御依存アークのリストへの順方向のポインタである順制御依存ポインタリスト、制御依存アークのリストへの逆方向のポインタである逆制御依存ポインタ、データ依存アークのリストへの順方向のポインタである順データ依存ポインタリスト、当該ステートメントに含まれる変数のリストへのポインタである変数リスト、構文木中のステートメントへのポインタ、影響を受けるアスペクトのアスペクトIDのリストである影響アスペクトIDリストを、それぞれ含む。また、各変数は、変数ID、ステートメントへのポインタ、データ依存アークのリストへの逆方向のポインタである逆データ依存ポインタリスト、構文木中の変数へのポインタを、それぞれ含む。各制御依存アークは、ソース文へのポインタ、ターゲット文へのポインタ、影響アスペクトIDリストを、それぞれ含む。各データ依存アークは、ソース文へのポインタ、ターゲット変数へのポインタ、影響アスペクトIDリストを、それぞれ含む。
すなわち上述したように、アスペクトの織り込みによる影響がマーキングされたプログラム依存グラフのノードとアークには、影響を与えるアスペクトのアスペクトIDが付加されている。そこで、表示制御部40はこの情報に基づき、詳細表示ウィンドウ620に表示されるソースコードにおいて、選択されたアスペクトにより影響を受けるノードに相当する文に対して、図6に示すように太字表記したり表示色を変更したりするなどの表示制御を行い、さらにそのアスペクトIDが付加された制御依存関係およびデータ依存関係のアークを矢印として表示する。この結果、詳細表示ウィンドウ620には、選択されたクラスに応じて、図10〜12に示した様式でソースプログラムが表示されることとなる。データ依存関係の矢印にある変数名は、図23に示されたデータ依存アークのデータ構造中のターゲット変数へのポインタをたどり、変数のデータ構造中の変数IDを得、この変数IDに基づいて記号表から検索して取得し表示する。
また、表示制御部40は、処理対象のプログラムを構成する全てのJavaプログラムを表示した織り込み影響表示ウィンドウ610において、アスペクトの織り込みが影響を与える(影響の波及を含む)全てのJavaプログラムに対して、図6に示すように太字表記したり表示色を変更したりするなどの表示制御を行う。
図24は、アスペクトの織り込み無しでの実行結果を示す図である。
図24に示す実行結果によれば、日本円による入出金が行われ、Accountオブジェクト中の残高も日本円のままである。そして、SampleMainのプログラムロジック上、日本円で処理されている限り残高がマイナスになることはない。
図25に示す実行結果によれば、ForeignCurrencyアスペクトの織り込みによりAccountオブジェクト中の残高はドル立てに変わっている。上記のように図24の場合には残高がマイナスになることはないが、図25の例では、預金(入金)した際と、引出し(出金)した際に、円/ドルの換算レールが変わっているために、為替差損が生じ残高がマイナスになっている。そして、BalanceFormat.printメソッドは、元々マイナスの値を想定していないために、エラーを出力している。
図25に示した出力内容に加えて、AccountクラスのdepositMoneyメソッドおよびwithdrawMoneyメソッドのターゲット・オブジェクトのCustomerIDと、メソッドのパラメータの値がログとして出力されている。
しかし、ForeignCurrencyアスペクト(図13)の織り込みによってドルによる外貨預金に変更され、ドル立てで預金される(Accountオブジェクトのbalanceフィールドにドルが入る)ようにプログラムが変更されると、残高がマイナスになってしまう場合が起こる。すなわち、最後に確認した時点での預金残高が為替の変動により目減りしてしまい、マイナスにならずに引き出せるはずであった金額をそのまま引き落とすことによって、実際の残高がマイナスになる場合である。これにより、BalanceFormat.print()メソッドのパラメータに想定していなかったマイナスの残高が渡されてしまい。図25の出力結果でエラーが出力された。BalanceFormatクラス自体には、ForeignCurrencyアスペクトの織り込みがなされていないが、SampleMainクラスへの織り込みの影響が波及したことにより想定外のことが起きたわけである。
BalanceFormatクラス自体(より正確にはBalanceFormat.printメソッド)が、アスペクトの織り込みの影響が受けることが示されており(図12)、想定と異なる値が発生した箇所は、ForeignCurrencyアスペクトの織り込みによる影響を受けていることが示されている。また、そのForeignCurrencyアスペクトの織り込みの影響は、BalanceFormatクラスのみならず、影響を受ける全てのクラス中で示されており、矢印を逆にたどることにより、その値を決定した流れを追跡することができるようになっている。
一方、詳細な動作説明は省くが、本実施形態における処理対象であるSampleMain.java、Account.java、BalanceFormat.java、ExchangeRate.javaの4つのクラスに対するLoggingアスペクトの織り込みは、元のプログラム中の文の実行順序や文からの出力結果に影響を与えないことが、テストを実施することなく検証できる。したがって、Loggingアスペクトの織り込みに対しては、各クラスに対するテストを省略することができる。
したがって、本実施形態をアスペクトの織り込み後にバグが生じたプログラムに対して適用すれば、ユーザ(プログラマ)は、表示出力された画面を参照することにより、そのバグの原因となったアスペクトの追跡を容易に行うことができる。
Claims (20)
- コンピュータプログラムを解析するプログラム解析装置において、
アスペクト指向プログラミングによるプログラムが入力され、入力されたプログラムを解析しそのプログラムにおけるデータ依存関係および制御依存関係の情報を取得する解析処理部と、
前記プログラムに対するアスペクトの織り込み箇所から前記解析処理部により取得されたデータ依存関係および制御依存関係をたどって当該アスペクトの織り込みによる影響の波及経路を探索する影響追跡部と
を備えることを特徴とするプログラム解析装置。 - 前記解析処理部は、前記プログラムに対し構文解析を行って当該プログラムのコントロールフローグラフを生成し、当該プログラムにおけるメソッド呼び出しの親子関係を前記アスペクトにおけるアドバイスとの関係を含めて解析し、当該コントロールフローグラフおよび当該メソッド呼び出しの親子関係の解析結果に基づいてメソッドごとのプログラム依存グラフを生成することを特徴とする請求項1に記載のプログラム解析装置。
- 前記影響追跡部は、前記プログラムに含まれる各アスペクトの各織り込み箇所に存在する各基点から、前記プログラム依存グラフにおけるデータ依存関係を表すアークおよび制御依存関係を表すアークをたどり、通ったノードおよびアークに対して、前記波及経路であることを示す情報を付加することを特徴とする請求項2に記載のプログラム解析装置。
- 前記影響追跡部は、前記アスペクトのアドバイスがbeforeアドバイスまたはafterアドバイスである場合には、当該アドバイスのソースコード中で、パラメータ中のオブジェクトおよびターゲット・オブジェクトのフィールドへの値の更新が行われる場合に、その更新対象データを前記基点とすることを特徴とする請求項3に記載のプログラム解析装置。
- 前記影響追跡部は、前記アスペクトのアドバイスがaroundアドバイスである場合には、当該アドバイスのソースコード中で、下記の基準に合致する更新が行われる場合に、その更新対象データを前記基点とすることを特徴とする請求項3に記載のプログラム解析装置。
基点基準−1:パラメータ中のオブジェクトおよびターゲット・オブジェクトのフィールドへの値の更新が行われる場合。
基点基準−2:proceed()(織り込み対象の本来の呼び出し)へのパラメータに渡る値の更新が行われる場合。
基点基準−3:proceed()からの戻り値を更新して返す場合。 - コンピュータプログラムを解析するプログラム解析装置において、
アスペクト指向プログラミングによるプログラムが入力され、入力されたプログラムを解析しそのプログラムに対して構文解析を行い、当該プログラムのプログラム依存グラフを生成する解析処理部と、
前記解析処理部により生成されたプログラム依存グラフに基づき、前記プログラムに対するアスペクトの織り込み箇所からデータ依存関係および制御依存関係をたどって当該アスペクトの織り込みによる影響の波及経路を探索する影響追跡部と、
前記解析処理部による構文解析の結果と前記影響追跡部により得られたアスペクトの織り込みによる影響の波及経路の情報とに基づいて、前記プログラムにおける前記アスペクトの織り込みの影響を受ける箇所を検出し表示出力する表示制御部と
を備えることを特徴とするプログラム解析装置。 - 前記表示制御部は、前記プログラムのソースコードを表示装置に表示させると共に、当該プログラムにおける前記アスペクトの織り込みによる影響を受ける箇所と他の箇所との表示形式を変えて当該表示装置に表示させることを特徴とする請求項6に記載のプログラム解析装置。
- 前記表示制御部は、前記プログラムのソースコードを表示装置に表示させると共に、当該プログラムにおける前記アスペクトの織り込みによる影響の波及経路に対応するデータ依存関係および制御依存関係を示す表示を行うことを特徴とする請求項6に記載のプログラム解析装置。
- 前記表示制御部は、前記プログラムを構成するモジュールの一覧を表示装置に表示させると共に、当該プログラムにおける前記アスペクトの織り込みによる影響を受けるモジュールと他のモジュールとの表示形式を変えて当該表示装置に表示させることを特徴とする請求項6に記載のプログラム解析装置。
- 前記表示制御部は、前記プログラムを構成するモジュールの一覧を表示する第1のウィンドウと、当該第1のウィンドウにおいて指定されたモジュールのソースコードを表示する第2のウィンドウとを表示装置に表示させると共に、当該第1のウィンドウにおいて、当該プログラムにおける前記アスペクトの織り込みによる影響を受けるモジュールと他のモジュールとの表示形式を変え、かつ当該第2のウィンドウにおいて、当該モジュールにおける前記アスペクトの織り込みによる影響を受ける箇所と他の箇所との表示形式を変えて当該表示装置に表示させることを特徴とする請求項6に記載のプログラム解析装置。
- 前記影響追跡部は、前記プログラムに含まれる各アスペクトの各織り込み箇所に存在する各基点から、前記プログラム依存グラフにおけるデータ依存関係を表すアークおよび制御依存関係を表すアークをたどり、通ったノードおよびアークに対して、前記波及経路であることを示す情報を付加し、
前記表示制御部は、前記プログラム依存グラフのノードおよびアークに付加された前記情報に基づいて、前記表示形式の制御を行うことを特徴とする請求項7、請求項9または請求項10に記載のプログラム解析装置。 - コンピュータによりコンピュータプログラムの解析を行うプログラム解析方法であって、
アスペクト指向プログラミングによる処理対象プログラムが入力され、入力された当該処理対象プログラムに対して構文解析を行い、当該処理対象プログラムのプログラム依存グラフを生成し、構文解析の結果と当該プログラム依存グラフとを記憶装置に格納する第1のステップと、
前記プログラム依存グラフに基づき、前記処理対象プログラムに対するアスペクトの織り込み箇所からデータ依存関係および制御依存関係をたどって当該アスペクトの織り込みによる影響の波及経路を探索し、探索結果を記憶装置に格納する第2のステップと
を含むことを特徴とするプログラム解析方法。 - 前記第1のステップは、
前記処理対象プログラムに対し構文解析を行って当該処理対象プログラムのコントロールフローグラフを生成するステップと、
前記処理対象プログラムにおけるメソッド呼び出しの親子関係を前記アスペクトにおけるアドバイスとの関係を含めて解析するステップと、
前記コントロールフローグラフおよび前記メソッド呼び出しの親子関係の解析結果に基づいてメソッドごとのプログラム依存グラフを生成するステップと
を含むことを特徴とする請求項12に記載のプログラム解析方法。 - 前記第1のステップで得られた前記構文解析の結果と前記第2のステップで得られた前記アスペクトの織り込みによる影響の波及経路の探索結果とに基づいて、前記処理対象プログラムにおける前記アスペクトの織り込みの影響を受ける箇所を検出し表示出力する第3のステップをさらに含むことを特徴とする請求項12に記載のプログラム解析方法。
- 前記第2のステップでは、前記処理対象プログラムに含まれる各アスペクトの各織り込み箇所に存在する各基点から、前記プログラム依存グラフにおけるデータ依存関係を表すアークおよび制御依存関係を表すアークをたどり、通ったノードおよびアークに対して、前記波及経路であることを示す情報を付加し、
前記第3のステップでは、前記プログラム依存グラフのノードおよびアークに付加された前記情報に基づいて、前記プログラムにおける前記アスペクトの織り込みによる影響を受ける箇所と他の箇所との表示形式を変えて表示装置に表示させることを特徴とする請求項14に記載のプログラム解析方法。 - 前記第3のステップでは、前記プログラムのソースコードを表示装置に表示させると共に、当該プログラムにおける前記アスペクトの織り込みによる影響の波及経路に対応するデータ依存関係および制御依存関係を示す表示を行うことを特徴とする請求項14に記載のプログラム解析方法。
- コンピュータに、
アスペクト指向プログラミングによる処理対象プログラムが入力され、入力された当該処理対象プログラムに対して構文解析を行い、当該処理対象プログラムのプログラム依存グラフを生成し、構文解析の結果と当該プログラム依存グラフとを記憶装置に格納する第1の処理と、
前記プログラム依存グラフに基づき、前記処理対象プログラムに対するアスペクトの織り込み箇所からデータ依存関係および制御依存関係をたどって当該アスペクトの織り込みによる影響の波及経路を探索し、探索結果を記憶装置に格納する第2の処理と
を実行させることを特徴とするプログラム。 - 前記第1の処理で得られた前記構文解析の結果と前記第2の処理で得られた前記アスペクトの織り込みによる影響の波及経路の探索結果とに基づいて、前記処理対象プログラムにおける前記アスペクトの織り込みの影響を受ける箇所を検出し表示出力する第3の処理を、前記コンピュータにさらに実行させることを特徴とする請求項17に記載のプログラム。
- 前記第2の処理では、前記処理対象プログラムに含まれる各アスペクトの各織り込み箇所に存在する各基点から、前記プログラム依存グラフにおけるデータ依存関係を表すアークおよび制御依存関係を表すアークをたどり、通ったノードおよびアークに対して、前記波及経路であることを示す情報を付加する処理を前記コンピュータに実行させ、
前記第3の処理では、前記プログラム依存グラフのノードおよびアークに付加された前記情報に基づいて、前記処理対象プログラムにおける前記アスペクトの織り込みによる影響を受ける箇所と他の箇所との表示形式を変えて表示装置に表示させる表示制御を前記コンピュータに実行させることを特徴とする請求項17に記載のプログラム。 - 前記第3の処理では、前記処理対象プログラムのソースコードを表示装置に表示させると共に、当該処理対象プログラムにおける前記アスペクトの織り込みによる影響の波及経路に対応するデータ依存関係および制御依存関係を示す表示を行う表示制御を前記コンピュータに実行させることを特徴とする請求項17に記載のプログラム。
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)
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)
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)
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 |
-
2004
- 2004-03-12 JP JP2004071445A patent/JP3966518B2/ja not_active Expired - Fee Related
-
2005
- 2005-02-24 US US11/065,568 patent/US20050204344A1/en not_active Abandoned
Cited By (9)
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 |