• 検索結果がありません。

オブジェクト指向プログラムの動作の可視化

N/A
N/A
Protected

Academic year: 2021

シェア "オブジェクト指向プログラムの動作の可視化"

Copied!
8
0
0

読み込み中.... (全文を見る)

全文

(1)Vol.2010-SE-167 No.9 2010/3/18. 情報処理学会研究報告 IPSJ SIG Technical Report. 1. はじめに *. オブジェクト指向プログラムの動作の可視化 中原. 進. †. 紫 合 治. 近年ソフトウェアの開発が活発になって来ている.プログラムの大規模・複雑化, プログラミングの普及により,プログラムの動作の不可視性から開発やデバッグ,教 育が難しいという問題が出てきた.プログラムの動作が入力(引数)と結果(戻り値) との間で不可視である事はデバッグや教育にとって障害となる.プログラムの動作を 可視化するために一般的に用いられるやり方として,ソースコード中に過程を出力す るコードを挿入する方法があるが,導入及び解除のコストが膨大となり,またコード の可読性が低下するので現実的では無い.特にオブジェクト指向ではオブジェクトや その関係等の複雑な概念がありよりプログラムへの理解を妨げている.これによりオ ブジェクトの生成やオブジェクト間の関係,オブジェクトの状態の遷移を的確に把握 することは困難となり,デバッギングやオブジェクト指向の教育が難しくなっている. そこで,デバッグツールやプログラム可視化ツールの研究・開発が活発に行われて きた.可視化には静的・動的の 2 種類がある.静的なものとして UML[1]がある.UM L はプログラムの設計や構築に用いられている.反対に,構築後に実行時情報を取得 するプログラムの分析ツールとして動的なものが研究されている.ミクロな範囲では 変数の変化を監視するツール[2]が,マクロな範囲では実行時情報からシーケンス図の 自動生成[3]ツールや,プロファイラー[4]等がある. しかし,既存の動的な可視化システムではオブジェクトに注目したものは無く,オ ブジェクト指向プログラムの可視化にはあまり向いていない.オブジェクト指向の本 質はオブジェクト同士の関係である.オブジェクト指向プログラムの振る舞いはオブ ジェクト同士の関係とオブジェクトの状態が変化する事により成り立っており,その 変化を可視化するにはオブジェクト図を用いる事が最適であると考えられる. そこで本論文ではプログラム実行時のオブジェクト同士の関係及びオブジェクト の状態の変化を解りやすくするためにオブジェクト図をベースに拡張した図(拡張オ ブジェクト図)を定め,プログラム実行過程に伴うオブジェクトの変化の様子を拡張 オブジェクト図を用い可視化する事によりデバッグやプログラミング教育を支援する システムについて述べる.このシステムの概念を図 1 に示す.オブジェクト指向プロ グラムの実行開始から終了までの間の任意の時点のオブジェクトの様子を拡張オブジ ェクト図により可視化することができる. 以下,第 2 節では考案したシステムの概要を,第 3 節では実行時情報の履歴取得方 法について,第 4・5 節では第 3 節で取得した実行履歴を元に拡張オブジェクト図を生 成する方法について述べる.第 5 節で今後の課題を示し,最後に第 6 節でまとめを述 べる.. †. 本論文では,オブジェクト指向プログラムの動作を可視化するために,従来のオ ブジェクト図にメソッド呼出しやスタティック属性等の情報を追加した" 拡張オ ブジェクト図" を規定し,プログラムの実行が進むに従ってオブジェクト全体の 状態が変化していく様子を,拡張オブジェクト図の変化( スライド描画) によって 分かりやすく示す方式と,それを実装したシステムについて述べる.システムは, JPDA(Java Plat form Debugger Architecture) を用いてプログラム実行時のメソ ッド呼出しや属性への代入等のイベントを捕らえ,オブジェクトの状態について の情報を抽出する.さらに,配列やコレクションの要素の値や,ローカル変数の 値の変化情報等も抽出している.これらの抽出情報をもとに,プログラム実行の 各動作時点でのオブジェクト全体の様子を,拡張オブジェクト図の描画によって 分かりやすく可視化することが出来る.. Visualization of Object-Oriented Program Execution SUSUMU NAKAHARA†. OSAMU SHIGO†. This p aper p resents ou r p roposed method and th e support s ystem for object o riented program visualization by drawing extended object diagrams at each step in the program execution. The extended object diagra m sho ws a whole objects s tates and relations among the objects by U ML object diagram with additional information, such as method calls and s tatic f ield va lues. The s ystem obtains ob ject s tate d ata b y catching p rogram execution ev ents, lik e method inv ocations and f ield as signments, u sing J PDA (Java Platform Debugg er Architecture). I t also obtains v alue ch anges of arr ay and collection elements and method lo cal v ariables. After obtaining the execution data, the s ystem draws th e extended object d iagram for each p rogram ex ecution step, wh ich shows an instance of whole object status in understandable diagram.. * † 東京電機大学. T okyo Denki University. 1. ⓒ2010 Information Processing Society of Japan.

(2) Vol.2010-SE-167 No.9 2010/3/18. 情報処理学会研究報告 IPSJ SIG Technical Report. 図 1. 属性の変化及びメソッド実行情報を実行履歴として記録し,実行履歴一件に付き一 枚の拡張オブジェクト図生成に必要な情報を作成,これを元にオブジェクト図を作成 する. 2.1 システム構成 本システムは対象を java 言語[5]とする.属性の変化及びメソッド実行情報を取得す るために実行時情報抽出手段として Java Platform D ebugger Ar chitecture(JPDA)[6] のインターフェイスの一つである Java Debuggin g I nterface(JDI)を使用した.JDI を 使用する事により対象プログラムのソースコードを変更することなく Java V irtual M achine(JVM)内部の情報を閲覧・制御できる.システムの構成を図 2 に示す. 2.2 拡張オブジェクト図 UML に規定されているオブジェクト図をベースに拡張した.UML に規定されてい るオブジェクト図は構成要素としてオブジェクト及びその関連を示すリンクがあるが, Map オブジェクトやコレクションオブジェクト,配列オブジェクトでは key(又は in dex)と value の対応が重要だがオブジェクト図では考慮されていない.また,ローカ ル変数及びスタティック属性・スタティックメソッドについても同様に考慮 されておらず,メソッド実行情報も無く,本システムにそのまま用いるのには不十分 である. そこで通常のオブジェクトに加え,スタティックメソッドオブジェクト,スタティ ック属性ブジェクト,配列・コレクション・Map オブジェクトを新たに創り,オブジ ェクト及びスタティックメソッドにメソッド実行情報を付加した拡張オブジェクト図 を規定した.本システムで用いる拡張オブジェクト図の構成要素について以下に述べ る. 2.2.1 メソッド実行情報 従来のオブジェクト図のオブジェクトにメソッド実行情報を付加する.メソッド実 行情報はローカル変数情報と,そのメソッドを呼び出したメソッド及びそのメソッド が呼び出したメソッド情報を持っている.メソッド実行情報は同一オブジェクト内で 複数のメソッドが実行された場合は下に継ぎ足していく.オブジェクト名は〔オブジ ェクト ID〕とする.図 3 にメソッド実行情報付のオブジェクトの描画を示す. 2.2.2 スタティックメソッド スタティックメソッドはインスタンスに属さずクラスから呼び出されるため,独立 したオブジェクトとして描画する.オブジェクトと区別するために,角を丸くした長 方形を用いている.オブジェクトと同様にメソッド実行情報を持つが,インスタンス. 変数を持たない.オブジェクトと同様に複数のメソッド実行時には継ぎ足していくま た,オブジェクト名は[メソッド名:クラス名]とする.図 4 にスタティックメソッド の描画を示す.. オブジェクト指向プログラムの実行過程の可視化. 2. オブジェクト指向プログラムの実行可視化システム オブジェクト指向プログラムにおいて,オブジェクト同士の関係及びオブジェクト の状態は,それぞれのオブジェクトの属性値で示され操作(メソッド)によって管理 されている.メソッドによって属性が変化しオブジェクトが造られる.よって,対象 プログラム内の属性の変化およびメソッドの実行を監視する事により,オブジェクト 指向プログラムの動作について情報を得ることができる.. 情報抽出. hoge.class. 実行履歴 情報抽出 実行. JDI. イベント 通知. 実行履歴 毎にオブ ジェクト図 を生成. JVMTI JVM. 図 2. システムの構成図. 2. ⓒ2010 Information Processing Society of Japan.

(3) Vol.2010-SE-167 No.9 2010/3/18. 情報処理学会研究報告 IPSJ SIG Technical Report 2.2.3 スタティック属性. 図 3. インスタンスに属さないスタティック属性も,拡張オブジェクト図ではオブジェク トとして扱う.図 5 にスタティック属性の描画を示す. オブジェクトと区別するため,楕円形にしている.メソッド実行情報は持たない. オブジェクト名は[属性名:クラス名]とする. 2.2.4 配列・コレクション・Map オブジェクト オブジェクトのように属性記述欄を設けず,key(又は index)と value を記述する 欄を設けた.上を key(または index),下を value とする.オブジェクト名は[オブジ ェクト ID:クラス名]とする.図 6 に,配列・コレクション・Map オブジェクトの描 画を示す. 2.3 拡張オブジェクト図の描画例 図 7 は拡張オブジェクト図の描画例を示す.メソッド実行欄にあるそのメソッドを 呼び出したメソッド及びそのメソッドが呼び出したメソッド情報を元にし,main メソ ッドからその時点で呼び出しているメソッドまでをメソッド実行線で結んでいる.ま た,リンクをオブジェクトからではなく,属性欄の右端を始点として伸ばすことによ り,どの属性がどのオブジェクトを参照しているかを判り易くした.また,終点をオ ブジェクト名の左端に統一している.. メソッド実行情報付のオブジェクト. 図 4. 図5. スタティックメソッド. スタティック属性. 図 7 図 6. 拡張オブジェクト図の例. 配列・コレクション・Map オブジェクト 3. ⓒ2010 Information Processing Society of Japan.

(4) Vol.2010-SE-167 No.9 2010/3/18. 情報処理学会研究報告 IPSJ SIG Technical Report. z メソッド開始イベント z コンストラクタ開始イベント z (メソッド終了イベント時に出力するイベント) z メソッド終了イベント z コンストラクタ終了イベント z 属性値変更イベント z (ブレークポイントイベント処理で発生するイベント) z 配列オブジェクト生成イベント z 配列要素変更イベント z コレクション・Map オブジェクト生成イベント z コレクション・Map 要素変更イベント z ローカル変数変更イベント 3.1 クラス情報の抽出 JVM がクラスをロードした際に監視対象となるプログラムのクラスの場合,そのク ラスに含まれるメソッド実行情報および値変更の監視設定を行う.また,3.4 で述べ るコレクションなどの要素の値変更を抽出するために、クラス内全ての行にブレーク ポイントイベントを設定し通知要求をする.以下にクラス情報抽出時に抽出する情報 を記述する. z クラス番号 z クラス名 z スーパークラス名 z 実装インターフェイス名 z (スーパークラスを含めた)実装インターフェイス名 z サブクラス名 z 属性(属性番号・属性名・属性の型・スタティックの肯否) z メソッド(メソッド番号・名前・引数の型・引数名・スタティックの肯否) z アクセス制御子 3.2 属性値変更情報の抽出 オブジェクトの属性の変化を捉える.その際に以下の情報を抽出する.また,配列・ コレクション・Map の型を持つ属性に対し変化があった場合,そのオブジェクトのオ ブジェクト番号と要素を変化検出用リストに記録しておく.記録に無いオブジェクト 番号があった場合,その配列・コレクション・Map オブジェクトが生成されたものと 判断し配列オブジェクト生成イベント/コレクション・Map オブジェクト生成イベント を出力する.また,記録にあるオブジェクト番号がありかつ要素が変更されていた場 合配列要素変更イベント/コレクション・Map 変更イベントを出力する.出力する情報 については 3.4.1 節を参照のこと.. 3. 実行時情報の抽出 JDI には監視対象の JVM 内で発生した特定の動作(イベント)発生時にこれを検知 し JDI を利用するデバッガに通知する機能がある.これを利用し,対象プログラム(を 含む JVM)内でイベントが発生したときに情報を取得する事で実行時情報を抽出する. JDI を使用することによって、アスペクト指向(例えば javassist[7])等他の手法で は取得できない JVM 内のオブジェクト番号 等の必要とする実行時情報が取得できる. JDI によって監視対象であるプログラムのオブジェクトが変更するイベントを監視 し,その時点の JVM 内部の情報及びイベント情報を抽出し一件の実行履歴を作成する. これをプログラムの任意の時点あるいは終了時点まで行う.JDI ではイベント通知を 要求しなければ通知を受けられない.あるイベントが発生した場合,発生したスレッ ドあるいは全てのスレッドを停止させることが出来る.イベント発生時に,JVM 内の 情報を正確に取得するため,すべてのスレッドを停止させ,情報を抽出した後でスレ ッドの動作を再開させる.また,イベント通知自体にそのイベントに関する情報が含 まれているので,それらの情報を抽出していく. 以下に取得するイベント及びイベントが発生した時に抽出する情報を記述する.な お,抽出した全ての情報に通し番号であるイベントナンバー,ソースファイル名,そ のイベントが発生したソースコード上の行番号をつける.本システム起動時にプログ ラム引数として対象プログラムのパスを含むクラスファイル名を入力する.また,こ れらのイベントの収集期間は対象プログラムの main メソッド開始から終了までの間 である.対象プログラムが動作する JVM 内では,対象プログラムの main メソッド開 始前よりイベントが発生しているが,これらについては情報を抽出しない. なお,実行時情報をより詳しく抽出するために,デバッグ情報を付加する”-g”オプ ションをつけコンパイルしたクラスファイルを用いる.これにより,ローカル変数・ 行番号・ソースファイル名がクラスファイルに付加される. 対象プログラム内で監視し通知を受けるイベントと,実行履歴として出力するイベ ントを以下に記述する. z JDI により対象プログラム内で補足するイベント z クラス読み込みイベント z メソッド開始イベント z メソッド終了イベント z 属性値変更イベント z ブレークポイントイベント z 本システムが実行履歴として出力するイベント z クラス読み込みイベント z (メソッド開始イベント時に出力するイベント) 4. ⓒ2010 Information Processing Society of Japan.

(5) Vol.2010-SE-167 No.9 2010/3/18. 情報処理学会研究報告 IPSJ SIG Technical Report. の値の変化を検出し,その時点での情報を抽出し実行履歴に出力する.JDI に配列・ コレクション・Map オブジェクトの要素値変化及びローカル変数の変化を検出する機 能は無い.以下にそれぞれについて変化を検出及び情報抽出する方法について述べる. 配列・コレクション・Map オブジェクトについては属性値変更イベント時に取得し た情報及びブレークポイント時に検出し,ローカル変数変化情報についてはメソッド 開始情報から生成されたローカル変数情報及びその値とブレークポイント時に検出す る. 3.4.1 配列・コレクション・Map オブジェクトの要素値変更情報の検出 配列・コレクション・Map オブジェクトの生成及び属性の変化を検出するフローを 図 8 に示す.配列については JDI の要素に対し取得・操作できる機能を用いる.コレ クション・Map オブジェクトについては,JDI の対象オブジェクトの要素を取得する メソッドを実行しその戻り値を得る機能を利用し,戻り値から要素を取得する. コレクションオブジェクト(Collection インターフェイスを実装しているクラス由来 のオブジェクト)はその要素を配列で返す toArray メソッドを実行することにより, その戻り値として要素を含んだ配列オブジェクトを得ることができる. Map オブジェクト(Map インターフェイスを実装しているクラス由来のオブジェク ト)はその要素を戻り値として key と value を含む Entry オブジェクトの配列オブジェ クトを返す EntrySet メソッドを用いる.この配列オブジェクトより要素である Entry オブジェクトを取り出し,そのオブジェクトに対し getKey メソッド及び getValue メソ ッドを実行させる事で Map オブジェクトより要素(key 及び value)を得ることができ る. それぞれのオブジェクト番号とそれらの要素(key 又は index と value)を記録して 置き,ブレークポイント毎に記録されたオブジェクト番号に相当するオブジェクトに 対しその要素が変更されていないか検査している.変更があった場合,また,記録に 無い配列・コレクション・Map オブジェクトが検査中にあった場合これを変化検出用 リストに記録する.また,要素値変更があった場合は配列要素変更イベント/コレクシ ョン・Map 要素変更イベントを,記録に無いオブジェクトがあった場合にはコレクシ ョン生成イベント/Map 生成イベントを実行履歴へ出力する. 図 8 の変化検出用リストは,属性値変更イベント時に配列・コレクション,Map オ ブジェクト型の属性だった場合その値及び要素を上書きされる. 以下に配列オブジェクト生成イベント,配列要素変更イベント,コレクション・Ma p オブジェクト生成イベント,コレクション・Map 要素変更イベント発生時に出力す るイベント情報を記述する. 以下に属性値変更情報抽出時に抽出する情報を記述する. z 属性番号 z 属性名 z 属性の型 z 属性値 z アクセス制御子 z final 修飾子の有無 3.3 メソッド実行情報の抽出 対象プログラムのクラスに含まれる,コンストラクタを含むメソッドの開始及び終 了を捕える.なお,メソッド開始時にはローカル変数情報(変数番号・変数名・変数 の型)及びその値を,ローカル変数の変化を捉えるためにローカル変数スタックに抽 出し記録しておく. (例えばメソッドの引数のように)既に値があった場合ローカル変 数変更イベントを出力する.出力する情報については 3.4.2 節を参照のこと. 以下にメソッド実行情報抽出時に抽出する情報を記述する. z 開始時 z メソッド番号 z 実行されたメソッドを含むクラス番号 z 実行されたメソッドを持つオブジェクト番号 z 引数 z クラス初期子の肯否 z メインメソッドの肯否 z 終了時 z メソッド番号 z 戻り値の値 z スタティック初期化子の肯否 z メインメソッドの肯否 また,メソッドがコンストラクタの場合以下の情報を抽出する. z 開始時 z メソッド番号 z 作成されたオブジェクト番号 z 作成されたオブジェクトのクラス番号 z コンストラクタの引数 z 終了時 z メソッド番号 3.4 コレクション等の要素値変更及びローカル変数値変更情報の抽出 配列・コレクション・Map オブジェクトの生成及び要素の値の変化,ローカル変数 5. ⓒ2010 Information Processing Society of Japan.

(6) Vol.2010-SE-167 No.9 2010/3/18. 情報処理学会研究報告 IPSJ SIG Technical Report. 図8. コレクション情報取り出しのために対象プログラム内のメソッドを実行するには, そのメソッドを持つスレッドを動かさなくてはならない.その時にイベントが発生す ると,イベント発生時にスレッドを停止させるためデッドロックが発生する.これを 回避するために,対象メソッドを呼び出す前に全てのイベント発生を止め,呼び出し た後にイベント発生を再開させている. 3.4.2 ローカル変数の値変更情報の検出 JDI ではローカル変数にアクセスする機能が提供されているため,これを用いロー カル変数の値の変化を検知する.検知にはメソッド開始時に記録した変数情報を用い, メソッド開始時及びブレークポイント時に検査する.ここで言うローカル変数とはメ ソッドの引数及びそのメソッド内で宣言されたメソッドスコープの変数である. ローカル変数を管理するためにスタックを用意し,メソッド開始時にローカル変数 情報群を一つにしスタックにプッシュし,メソッド終了時にポップする.一番上のロ ーカル変数情報群が常にその時に実行されているメソッドのローカル変数情報が収め られている.ブレークポイントの度に peek(一番上のオブジェクトを取り出すが削除 しない)し,そこに収められているローカル変数について検査する.JVM 内(のその ローカル変数を持つメソッドが含まれるスレッド)からローカル変数番号を用い最新 の値を抽出し,記録されているローカル変数番号と値と照合,変更があった場合ロー カル変数値変更イベントとして出力する.以上の動作を図 9 に示す.. 配列・コレクション・Map オブジェクトの生成及び要素値変化の検出. z 配列オブジェクト生成イベント時 z オブジェクト番号 z 配列の型 z 配列のサイズ z 要素リスト z 配列要素値変更イベント z オブジェクト番号 z 変更後の要素リスト z コレクション・Map オブジェクト生成イベント z オブジェクト番号 z クラス名 z コレクションか Map かのフラグ z 要素(key(又は index)と value)のリスト z コレクション・Map 要素変更イベント z オブジェクト番号 z 変更後の要素(key(又は index)と value)のリスト. 図 9 6. ローカル変数の値変更情報の検出フロー ⓒ2010 Information Processing Society of Japan.

(7) Vol.2010-SE-167 No.9 2010/3/18. 情報処理学会研究報告 IPSJ SIG Technical Report. 4. オブジェクト図の生成 4.1 オブジェクト情報の生成. 実行履歴を元に,一件の実行イベントに対して一枚のオブジェクト図を描画できる ようにオブジェクト情報を作成する.オブジェクト情報作成の概要を図 10 に示す.オ ブジェクト情報の生成により,オブジェクト図を検索あるいはフィルタリングにかけ ることができる.ある一件の実行イベントに対応するオブジェクト情報を作成すると き,それまでの実行履歴を全て考慮して作成する.オブジェクト情報は以下の情報を 含んでいる. z イベントナンバー z イベントが起きたクラスファイル名 z イベントが起きた行番号 z イベントが起きたオブジェクト番号(またはメソッド番号) z クラス情報 z オブジェクト情報 z オブジェクト番号 z クラス番号 z 属性情報(属性番号・値) z 実行メソッド情報(メソッド番号・ローカル変数情報・戻り値・呼び 出しメソッドの番号・呼び出しメソッドを持つオブジェクト番号・呼び 出されているメソッド番号・呼び出しているオブジェクト番号) z スタティックメソッドオブジェクト情報 z メソッド番号 z クラス番号 z 実行メソッド情報(オブジェクト情報のものと同一) z スタティック属性ブジェクト情報 z 属性番号 z クラス番号 z 属性情報(属性番号・値) z 配列・コレクション・Map オブジェクト情報 z オブジェクト番号 z クラス名 z 要素 まず main メソッドのメソッド実行イベントよりオブジェクト情報を生成し,これ に次のイベントを適用し,そのイベントのオブジェクト情報を生成する.これを任意 の時点でのイベントまで行う.このように,実行履歴内のイベント一つに付オブジェ. 図 10. オブジェクト情報の生成. クト情報を一つ生成していく. 4.2 オブジェクト図の描画. オブジェクト情報を元にオブジェクト図を描画する.図 11 に本システムの描画結果 を示す.左ペインは実行履歴を用い,main メソッド実行を根ノード,メソッド実行/ コンストラクタ実行を内部ノード,その他イベントを葉ノードのツリー構造でプログ ラムの実行過程を表している.これを用い,プログラムの任意の時点を指定し,その 時点でのオブジェクトの状態を右ペインに表示させる.これは,デザインパターンの サンプルプログラム[8]のうち,コンポジットパターンのプログラムに適用した結果を 示す.この場合,実行ステップは 427 件であった.. 5. 今後の課題 5.1 コレクション及び Map オブジェクトからの要素取得方法の改良. コレクション及び Map オブジェクトから要素を取得する際に対象オブジェクトの メソッドを実行しているが,これにはイベント発生に伴い停止していた対象オブジェ クトを含むスレッドを動かさなければならない.スレッド動作最中になんらかのイベ ントが発生しスレッドが止まる場合,本システムは対象オブジェクトからメソッドの 帰りを待ち対象スレッドは本システムによる再動作を待つデッドロックがかかってし まう問題があるためイベント通知要求を全て解除しなければならない欠点がある.そ. 7. ⓒ2010 Information Processing Society of Japan.

(8) Vol.2010-SE-167 No.9 2010/3/18. 情報処理学会研究報告 IPSJ SIG Technical Report. でプログラムを止め,その時点での拡張オブジェクト図を通し属性の書き換えを行う 事により,実行時の値を書き換えられるツールとして改良できると構想している. 5.4 必要な情報のみを抽出 本論文では全てのイベント(及びそれに付随する情報)を抽出し,全てのイベント についてオブジェクト図を作成している.しかし,それらの情報は膨大となり本当に 見たい情報が埋もれてしまう可能性がある.あまり重要で無いイベント(例えば if 文 ループを制御するカウンタの増減イベントやオブジェクト同士の関係及びオブジェク トの状態変化を起こさないメソッドの実行イベントなど)を排除し,必要な情報を抽 出できる様,特定のクラス名や属性名をキーとしてオブジェクト図を検索或いはフィ ルタリングする機能を実装したい. 5.5 描画レイアウト方法 現在は main メソッドを頂点とする,オブジェクトの関係について左から右へのツ リー構造としてオブジェクト図を自動配置しているが,これがオブジェクト図の表現 方法として適切かどうか議論する余地がある.オブジェクト図の自動配置については 研究されている[9]ため,これを参考にし,更に見やすいオブジェクト図の自動配置を していきたい.. 6. おわりに. 図 11. 本論文ではオブジェクト指向プログラムの動作をオブジェクト図を用い可視化する 手法の提案・実装を行った.このシステムを用いることで,オブジェクト指向プログ ラムの動作が解りやすく可視化ができ,デバッグやプログラミング教育を行いやすく なると考える.今後の予定としては,統合開発環境への組み込みや,実際にユーザに 使っていただきアンケートをとりたいと思っている.. オブジェクト図の描画. 参考文献. のため,いくつかのイベント(及び其処で検知されるはずだった変化)を見逃す可能 性がある.また,ブレークポイントの設定及び解除に対象プログラムの起動からオブ ジェクト図の生成まで時間の90% 以上を占めるオーバーヘッドが確認された.新た なコレクション及び Map オブジェクトからの要素取得を研究したい. 5.2 例外への対応 本システムでは例外処理を考慮していない.例外処理はしばしばプログラムの働き において重要な役割を果たしているし,また実行時エラーを明示的に表している.こ のためデバッガとしての機能を高めるために必要であると考える.JDI では例外発生 イベントを検知する機能があるため,今後は例外への対応をしていきたい. 5.3 実行時値書き換えへの補助ツールとしての活用 JDI ではプログラム実行中の属性の書き換えをサポートしている.プログラムの破 壊が可能になるものの,デバックやテストに強力な機能となると考える.任意の時点. 1) UML, http://www.uml.org/ 2) insight,http://sources.redhat.com/insight/ 3) 谷口孝治他,プログラム実行履歴からの簡潔なシーケンス図の生成手法,コンピュータソフ トウェア Vol.24, No.3, pp153-169, 2007 4) eclipse,TPTP http://www.eclipse.org/tptp/ 5) java ,http://java.com/ja/ 6) jpda ,http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/jpda/index.html 7) javassist, http://www.csg.is.titech.ac.jp/~chiba/javassist/ 8) 結城浩,Java 言語で学ぶデザインパターン入門,ソフトバンクパブリッシング,2004. 9) 中島 哲, 田中 二郎, オブジェクト指向方法論に基づくオブジェクト図の自動レイアウト,情 報処理学会論文誌 39 (12), 3282-3293,1998.. 8. ⓒ2010 Information Processing Society of Japan.

(9)

図  1  オブジェクト指向プログラムの実行過程の可視化  2.  オブジェクト指向プログラムの実行可視化システム  オブジェクト指向プログラムにおいて,オブジェクト同士の関係及びオブジェクト の状態は,それぞれのオブジェクトの属性値で示され操作(メソッド)によって管理 されている.メソッドによって属性が変化しオブジェクトが造られる.よって,対象 プログラム内の属性の変化およびメソッドの実行を監視する事により,オブジェクト 指向プログラムの動作について情報を得ることができる.  hoge.class JVM
図  3  メソッド実行情報付のオブジェクト  図  4  スタティックメソッド  図 5  スタティック属性  図  6  配列・コレクション・Map オブジェクト  2.2.3 スタティック属性  インスタンスに属さないスタティック属性も,拡張オブジェクト図ではオブジェクトとして扱う.図5にスタティック属性の描画を示す.  オブジェクトと区別するため,楕円形にしている.メソッド実行情報は持たない.オブジェクト名は[属性名:クラス名]とする. 2.2.4 配列・コレクション・Mapオブジェクト
図 8  配列・コレクション・Map オブジェクトの生成及び要素値変化の検出  z  配列オブジェクト生成イベント時  z  オブジェクト番号  z  配列の型  z  配列のサイズ  z  要素リスト  z  配列要素値変更イベント  z  オブジェクト番号  z  変更後の要素リスト  z  コレクション・Map オブジェクト生成イベント  z  オブジェクト番号  z  クラス名  z  コレクションか Map かのフラグ
図 11  オブジェクト図の描画  のため,いくつかのイベント(及び其処で検知されるはずだった変化)を見逃す可能 性がある.また,ブレークポイントの設定及び解除に対象プログラムの起動からオブ ジェクト図の生成まで時間の90%  以上を占めるオーバーヘッドが確認された.新た なコレクション及び Map オブジェクトからの要素取得を研究したい.  5.2  例外への対応  本システムでは例外処理を考慮していない.例外処理はしばしばプログラムの働き において重要な役割を果たしているし,また実行時エラーを明示的に表

参照

関連したドキュメント

全国の宿泊旅行実施者を抽出することに加え、性・年代別の宿泊旅行実施率を知るために実施した。

b)工場 シミュ レータ との 連携 工場シ ミュ レータ は、工場 内のモ ノの流 れや 人の動き をモ デル化 してシ ミュレ ーシ ョンを 実 行し、工程を 最適 化する 手法で

ピンクシャツの男性も、 「一人暮らしがしたい」 「海 外旅行に行きたい」という話が出てきたときに、

① Google Chromeを開き,画面右上の「Google Chromeの設定」ボタンから,「その他のツール」→ 「閲覧履歴を消去」の順に選択してください。.

技術士のCPD 活動の実績に関しては、これまでもAPEC

「社会福祉法の一部改正」の中身を確認し、H29年度の法施行に向けた準備の一環として新

その限りで同時に︑安全配慮義務の履行としては単に使

発生という事実を媒介としてはじめて結びつきうるものであ