Java実行履歴からの シーケンス図生成ツール 谷口考治†,石尾隆†,神谷年洋‡, 楠本真二†,井上克郎† †大阪大学大学院情報科学研究科 ‡科学技術振興機構さきがけ 2004/1014 ESS2004 1 発表の流れ 背景と動機 シーケンス図生成手法 オブジェクト指向プログラムの動作理解 実行履歴の圧縮 圧縮結果からのシーケンス図の作成 ツールの適用実験 まとめ 2004/1014 ESS2004 2 組み込みソフトウェアとオブジェクト 指向 組み込みソフトウェアの開発においても、オブ ジェクト指向技術が用いられるようになってきて いる Unified Modeling Language (UML) Java オブジェクト指向プログラム用の支援環境が必 要になってきている 2004/1014 本ツールはオブジェクト指向プログラムの理解支援を 行う ESS2004 3 オブジェクト指向プログラムの動作 概要 オブジェクト指向プログラム 複数のオブジェクト間で相互にメッセージをやり取 りすることによってプログラムが動作する クラスB B-1 C-1 クラスA A-1 オブジェクト メッセージ クラスC C-2 D-1 クラスD 2004/1014 ESS2004 4 オブジェクト指向プログラムの理解 オブジェクト指向プログラムの動作理解の問題 点 1つの機能を実現するために、複数のオブジェクトが 協調して動作する 動的に決定する要素が多い 実際にメソッドを実行するオブジェクトが動的に決まる等 メッセージ通信が複雑になる 2004/1014 複数のオブジェクトの動作を追いながら全体を理解しなけれ ばない オブジェクト数が増加するにつれて、メッセージ通信の回数 が増え、より複雑になる ESS2004 5 シーケンス図による動作理解 UMLのシーケンス図 A-1 B-1 C-1 C-2 D-1 通常は設計時に作成される オブジェクト間の関係を時系 列にそって表現 オブジェクト指向プログラムの 理解に非常に有用 プログラムの動的解析から シーケンス図を自動作成 シーケンス図 プログラムの動作理解を支援 2004/1014 ESS2004 6 シーケンス図作成手順 解析対象となる機能に対応した入力を決定 実行履歴の取得 1. 2. プログラムを動作させメソッド呼び出しの実行履 歴を取得 実行履歴を解析 3. 繰り返し構造を圧縮 4. シーケンス図生成 2004/1014 ESS2004 7 Step2:実行履歴の取得 実行履歴 「メソッドの開始」と「メソッドの終了」の2つのイベント系列 「メソッドの開始」イベントでは以下の情報を記録 メソッドの呼び出しを受けたオブジェクトのID パッケージ名・クラス名 メソッド名 引数の型 返り値の型 メソッドの終了イベントでは終了記号を記録 実装ではJVMPIを用いて実行履歴を取得 2004/1014 ESS2004 8 Step3:実行履歴の解析 実行履歴中の繰り返しや再帰的な構造になって いる部分を発見し、圧縮を行う 展開して元の実行履歴も参照できるようにする 2004/1014 圧縮結果から任意の部分を展開することで、一部分 についての詳細な実行情報を得られる ESS2004 9 提案する圧縮ルール 2004/1014 R1 : 同一系列の繰り返し R2 : 同一クラスの異なるオブジェクトに対しての繰り 返し R3 : 欠損を含む系列の繰り返し R4 : 再帰構造 ESS2004 10 R1:同一部分系列の繰り返し 実行履歴中の完全に同一な繰り返しを圧縮 B(2).b(){ C(3).c(){ } } D(4).d(){ } B(2).b(){ C(3).c(){ } } D(4).d(){ } ・・・ 2004/1014 B(2).b(){ C(3).c(){ } } D(4).d(){ } ESS2004 n 11 R2:オブジェクトが異なる系列の 繰り返し オブジェクトのみが異なる繰り返しを圧縮 B(2).b(){ C(3).c(){ } } D(4).d(){ } B(5).b(){ C(6).c(){ } } D(7).d(){ } ・・・ 2004/1014 B(2,5).b(){ C(3,6).c(){ } } D(4,7).d(){ } ESS2004 n 12 R3:欠損を含む系列の繰り返し 呼び出し構造の一部が欠けている繰り返しを圧縮 B(2).b(){ C(3).c(){ } } D(4).d(){ } B(2).b(){ } D(4).d(){ } ・・・ 2004/1014 B(2).b(){ ? C(3).c(){ } } D(4).d(){ } ESS2004 n 13 R4:再帰構造 再帰構造を圧縮 再帰構造全体を簡潔に表現できるように組み替える A(1).a(){ A(2).a(){ A(3).a(){ B(4).b(){ } } B(5).b(){ } } B(6).b(){ } } 2004/1014 A(1,2,3).a(){ recursive A(1,2,3).a(){ } B(4,5,6).b(){ } } ESS2004 14 Step4:シーケンス図の作成 圧縮した実行履歴を元にシーケンス図を 作成 圧縮により、付加された情報をシーケンス図 中に表示 2004/1014 繰り返しになっている部分やその回数など ESS2004 15 A(1).a(){ B(2).b(){ } B(2).b(){ } } A(1).a(){ B(2).b(){ } } A[1] 2 B[2] a() b() 2 2004/1014 ESS2004 16 A(1).a(){ B(2).b(){ } B(3).b(){ } } A(1).a(){ B(2,3).b(){ 2 } } A[1] B[2,3] a() b() 2 2004/1014 ESS2004 17 A(1).a(){ B(2).b(){ C(4).c(){ } } B(3).b(){ } } A(1).a(){ B(2,3).b(){ ? C(4).c(){ 2 } } } A[1] B[2,3] C[4] a() b() ? c() 2 2004/1014 ESS2004 18 A(1).a(){ A(1).a(){ B(2).b(){ } } B(2).b(){ } } A(1).a(){ recursive A(1).a(){ } B(2).b(){ } } A[1] B[2] a() rec a() rec a() 2004/1014 b() ESS2004 19 ツールの適用実験 実験内容 次の4つのプログラムの各機能から実行履歴を取得 jEdit:テキストエディタ Gemini:コードクローン分析ツール 2004/1014 実行履歴の読み込み、表示、R2の実行 各実行履歴に対してR4→R1→R2→R3の順序で圧縮ルールを適用 日にち指定、スケジュール記述 LogCompactor:本ツールの実行履歴圧縮部 ファイル指定、クローン解析、クローン情報表示 Scheduler:スケジュール管理ツール テキストファイルの読み込み それぞれのルールを適用して、実行系列の圧縮率を評価 圧縮結果からシーケンス図を作成 ESS2004 20 圧縮結果 jEdit 250,000 228,764 Gemini 250,000 217,351 200,000 208,360 150,000 150,000 100,000 100,000 50,000 50,000 57,365 16,889 16,510 0 圧縮前 R4 R1 R2 0 R3 圧縮前 Scheduler 5,000 4,500 4,000 3,500 3,000 2,500 2,000 1,500 1,000 500 0 205,483 200,000 178,128 4,398 R4 R1 1,954 1,762 R2 R3 208 105 R2 R3 LogCompactor 14,000 4,398 3,995 12,000 11,994 10,000 8,874 8,426 8,000 6,000 4,000 238 147 2,000 0 圧縮前 2004/1014 R4 R1 R2 圧縮前 R3 ESS2004 R4 R1 21 Schedulerの実行履歴から作成したシーケンス図 2004/1014 ESS2004 22 まとめ オブジェクト指向プログラムの理解支援として、 動的解析情報からシーケンス図を作成する手 法を提案し、ツールの作成を行った 2004/1014 提案した実行履歴圧縮手法により実行履歴の大 部分を圧縮 圧縮後の実行履歴からシーケンス図を作成 ESS2004 23 終わり 2004/1014 ESS2004 24 2004/1014 ESS2004 25 設計時にはない部分 設計時にはあったが 実装したツールでは 表示されなかった部分 2004/1014 ESS2004 26 private Date date; シーケンス図の比較 public Date getDate() { return date; } 単純なgetterメソッド 設計時のシーケンス図と生成したシーケンス図との比較 ほぼ同様のシーケンスが描画できている 設計時には書かれていないが、実装時に付け足されたメソッド呼 び出しも描画した メンバ変数をreturnするのみの単純なgetterメソッドが描画でき なかった 2004/1014 メソッド呼び出しイベントがプロファイラに通知されない VMかJVMPIの問題 ESS2004 27
© Copyright 2024 ExpyDoc