Presentation is loading. Please wait.

Presentation is loading. Please wait.

類似した振舞いのオブジェクトの グループ化による クラス動作シナリオの可視化

Similar presentations


Presentation on theme: "類似した振舞いのオブジェクトの グループ化による クラス動作シナリオの可視化"— Presentation transcript:

1 類似した振舞いのオブジェクトの グループ化による クラス動作シナリオの可視化
大阪大学 大学院情報科学研究科 〇宗像 聡・石尾 隆・井上 克郎 12秒 類似した振舞いのオブジェクトのグループ化による、クラス動作シナリオの可視化、というテーマで、大阪大学の宗像が、発表します

2 発表の概要 オブジェクト指向システムのクラスの動作理解は困難 実行履歴からクラスの代表的な動作を可視化
1つのクラスからは多数のオブジェクトが生成される オブジェクトの動作はそれぞれ異なる 実行履歴からクラスの代表的な動作を可視化 呼び出し関係が類似したオブジェクトをグループ化 各グループの代表オブジェクトの動作のみを可視化する スケジュール管理プログラムの実行履歴に対して適用 1008個のGUI オブジェクトから4つの動作例を抽出 730個のデータ管理オブジェクトから3つの動作例を抽出 GUI とデータ管理オブジェクトの2つの相互作用例を抽出 表示するデータがある場合、ない場合 86秒 オブジェクト指向システムでは、システム実行時の実際のクラスの動作を理解することは困難です。 なぜなら、実行時に、1つのクラスからは大抵、多数のオブジェクトが生成され、また、オブジェクトの動作はそれぞれに異なるため、クラスの動作の全体像を把握することが難しいからです。 本発表では、クラスの動作理解を支援するために、実行履歴から、クラスの代表的な動作を抽出し、可視化する手法を提案します。 提案手法では、まず、1つのクラスから生成された複数のオブジェクトの内、呼び出し関係が互いに類似するものをグループ化します。 そして、各グループから選択した代表オブジェクトの動作のみを可視化することで、クラスの代表的な動作を提示できると考えました。 提案手法の有用性を確かめるために、Javaで実装されたスケジュール管理プログラムから取得した実行履歴に対して適用したところ、1008個のGUIオブジェクトから4つの動作例を、730個の予定データ管理オブジェクトから3つの動作例を抽出することができました。 また、両クラスのオブジェクト間には、2通りの代表的な相互作用、表示する予定データがある場合とない場合の動作例を抽出することができました。 発表では、まず、手法を提案するにいたる背景を述べ、次に提案手法の詳細を説明します。 その後で、ケーススタディの結果を解説し、最後に考察とまとめを行います。

3 オブジェクト指向システムの動作理解 オブジェクト指向システム 実際の動作は、実行時に動的に決定
オブジェクトが相互にメッセージを交換して処理を行う 実行される処理は、受信するオブジェクトにより異なる オブジェクトは動的に生成される 実際の動作は、実行時に動的に決定 ソースコードの解析だけでは困難[1] 36秒 現在、多くのシステムがオブジェクト指向に基づいて設計されています。 このようなシステムをオブジェクト指向システムと呼び、オブジェクトが相互にメッセージを交換することで、一連の処理が行われるという特徴があります。 この時、実際に実行される処理は、メッセージを受信するオブジェクトによって異なる、また、オブジェクトは実行時に動的に生成される、という性質から、システムの実際の動作は、実行時に動的に決定します。 そのため、ソースコードの静的な解析だけではシステムの動作理解は困難であると言われています。 [1] Wild, N. and Huitt, R.: Maintenance Support Object-Oriented Programs. IEEE Transactions on Software Engineering, Vol.18, No.12, pp , 1992.

4 実行履歴の可視化 実行履歴の可視化が有効 実行履歴 = システムの実行時情報の記録
実行履歴 = システムの実行時情報の記録 実行履歴として、オブジェクト間のメソッド呼び出し情報を取得 UMLのシーケンス図として可視化[2] 23秒 そこで、システムの動的解析により取得した、実行履歴の可視化が有効であると言われています。 実行履歴とは、システムの実行時情報を記録したもので、実行履歴として、オブジェクト間のメソッド呼び出し情報を取得し、UMLのシーケンス図として可視化するという手法が既に提案されています。 [2]谷口考治, 石尾隆, 神谷年洋, 楠本真二, 井上克郎: プログラム実行履歴からの簡潔なシーケンス図の生成手法, コンピュー タソフトウェア, Vol.24, No.3, pp , 2007.

5 クラスの動作理解 ! システムの保守作業では、クラスの動作理解が必要 オブジェクトの実行時の振舞いを確認することが有効[3] クラスA
対象クラスのインスタンスの典型的な動作例 他のクラスのオブジェクトとの典型的な相互作用例 オブジェクトの実行時の振舞いを確認することが有効[3] オブジェクトに関係する、メソッド呼び出し系列を取得 オブジェクトごとのメソッド呼び出し系列を確認 クラスA 39秒 更に、システムの保守作業では、作業に必要なクラスの動作理解、例えば、実行時に、対象のクラスのインスタンスはどのような動作を行うのか、また、他のクラスのオブジェクトとどのような相互作用を行うのか、というような理解が必要になります。 これには、解析対象のクラスから生成されたオブジェクトの実行時の振舞いを、確認することが有効である、と言われています。 オブジェクトに関係する、メソッド呼び出し系列を実行履歴から取得し、オブジェクトごとにまとめたメソッド呼び出し系列を可視化することで、1つのオブジェクトの振舞いを確認することができます。 [3] Reiss, S.P., and Renieris, M.: Encoding program executions. Proceedings of the 23rd International Conference on Software Engineering, pp , 2001.

6 ? オブジェクトの振舞いの確認における問題 解析対象クラスのオブジェクトが多数ある場合 それぞれの振舞いを逐一確認することは困難 クラスA
13秒 しかし、実用的なシステムでは、1つのクラスからオブジェクトが、それぞれの振舞いを逐一確認することが困難なほど、多数生成されることがしばしばあります。

7 提案手法のアプローチ !! 互いに振舞いの類似しているオブジェクトが多数あると期待できる
解析対象のクラスのオブジェクトを振舞いの類似性に基づいてグループ化 グループごとに振舞いを可視化 確認する振舞いの数を削減できる クラスA !! 36秒 1つのクラスから生成された多数のオブジェクトの中には、互いに振舞いの類似しているものが多く存在することが期待できます。 そこで提案手法では、解析対象のオブジェクトを、振舞いの類似しているものが同じグループになるように分類し、グループごとに代表的な振舞いを可視化する、というアプローチをとります。 これにより、確認する振舞いの数を、なるべく実行履歴にある実行時情報を潰すことなく減らすことができ、クラスの動作の全体像を容易に把握できるようになると考えました。

8 振舞いの類似性の判定 オブジェクトと呼び出し関係にあるクラスに注目 クラスは特定の役割を持つ 呼び出し関係にあるオブジェクトが所属するクラス
例) FileOutputStream = ファイル出力 異なるクラスから使用される  参加した処理が異なる 異なるクラスを使用する  実行した処理が異なる 呼び出し関係にあるクラスとオブジェクトの振舞いには、強い対応関係がある 完全一致するとき、互いの振舞いは類似しているとみなす 提案手法では、オブジェクトの振舞いの類似性を判定する必要があります。 私達はオブジェクトの呼び出し関係、特に、呼び出し関係にあるクラスに注目しました。 クラスはそれぞれに特定の役割を持っています。 例えば、FileOutputStreamクラスは、ファイル出力の役割を持っています。

9 関連クラスに基づくグループ化 オブジェクトごとの動作コンテキスト Use,Used を比較 Use(o) Used(o)
オブジェクトのグループ化ルール オブジェクトo1、o2が同じグループに所属 Use(o1) = Use(o2) かつ Used(o1) = Used(o2)

10 クラスの代表的な動作例の可視化 実行履歴から、オブジェクトごとのメソッド呼び出し系列を抽出
オブジェクトを動作コンテキストに基づいてグループ化 各グループから代表オブジェクトをランダムに選択 直接呼び出し関係のあるオブジェクト群との、メソッド呼び出しを表現するシーケンス図を生成 クラスA 40秒

11 ( , ) ( , ) クラス間の相互作用例の抽出 あるクラスの動作と、他のクラスの動作が対応することがある
GUIオブジェクトへのクリック操作処理の ある/なし と、データ管理オブジェクトへのデータ登録処理の ある/なし 動作の対応する組み合わせごとに、相互作用例を抽出 2つのクラスのグループ間で、メソッド呼び出し関係を抽出 呼び出し関係にあるグループの組を相互作用例として抽出 ( , ) A1 B1 B2 B1 60秒 A1 B2 ( , ) B3 A3 A3 A2 B3

12 クラス間の相互作用例の可視化 呼び出し関係にあるグループの組から、呼び出し関係にあるオブジェクトの代表ペアをランダムに選択 ペアの振舞いを表現するシーケンス図を生成 ペアの一方と、直接呼び出し関係のあるオブジェクト群との相互作用 ペアの一方からもう一方へ推移的に到達するメソッド呼び出し系列 40秒 ( , ) B1 A1 B1 A1 B1 A1 ( , ) B2 A1 B2

13 ケーススタディ 適用対象 = ‘Scheduler’ 実行履歴の取得 Javaで実装された、予定管理用カレンダープログラム
予定を記入したい日付に対応するセルをクリックすると、新たにダイアログが開き、予定を編集できる セルの役割を担う、クラスDateCellの動作理解を行う 実行履歴の取得 実行シナリオ 異なる日付に計3つの予定を追加 1975個のオブジェクト、7523個のメソッド呼び出し情報 java,javax,sun,com.sun パッケージに含まれるクラスのイベントは除外 60秒

14 DateCellのグループ化 クラスDateCell 関連クラスに基づいて{ s1, s2, s3, s4 }に分類
カレンダーの各日付を表現するセル 実行履歴中には1008個のオブジェクトが出現 関連クラスに基づいて{ s1, s2, s3, s4 }に分類 #Ins Use(o) Used(o) s1 882 MonthTableModel s2 33 MonthTableModel, DateCellRenderer s3 90 CalendarDate s4 3 CalendarFrame 40秒

15 DateCellのグループs2の振舞い DateCellRendererからの描画情報の要求に応答 DateCell テキスト表現を返す
日付の無いセルの振舞いに対応 DateCell テキスト表現を返す 20秒 DateCell クラスのグループs2 に属するオブジェクトの振る舞いを可視化したシーケンス図.DateCellRenderer からの描画情報の要求に応じている. 「繰り返し」はobject difference loop による圧縮基準に基づくもの セルの色情報を返す 繰り返しの回数

16 繰り返し構造の展開後 5秒

17 DateCellのグループs3の振舞い 更に、CalendarDateに予定データを問い合わせ CalendarDate 予定データを管理
予定が追加されていない、日付の有るセルの振舞いに対応 CalendarDate 予定データを管理 テキスト表現を生成するために 日付情報を問い合わせ 20秒 DateCell クラスのグループs3 に属するオブジェクトの振る舞い.DateCellRenderer からの要求に対して,CalendarDate に予定データの有無を問い合わせている. セルの色情報を生成するために 予定の有無を問い合わせ

18 DateCellのグループs4の振舞い 応答に加えて、マウス操作に関する処理 CalendarFrame GUIのオーナー
予定が追加された、日付の有るセルの振舞いに対応 CalendarFrame GUIのオーナー ユーザのマウスクリック検出 30秒 DateCell クラスのグループs4 に属するオブジェクトの振る舞い.ユーザのマウス操作に関するメソッドtable mouseClicked(MouseEvent)が呼び出されている. CalendarDateを渡す

19 DateCellとCalendarDateの相互作用の抽出
実行履歴中には730個のオブジェクトが出現 関連クラスに基づいて{ t1, t2, t3 } に分類 2つの組み合わせで、相互作用するオブジェクトのペアが出現 組み合わせは最大で 4×3=12 通り考えられる DateCellのグループ{ s1, s2, s3 , s4 }、CalendarDateのグループ{ t1, t2, t3 } t1(637) t2(90) t3(3)   s1(882)   s2(33)   s3(90) 90組(1対1)   s4(3) 3組(1対1) 60秒

20 s4とt3の相互作用 RegisterDialog 予定編集用ダイアログ マウスクリック操作検出後、DateCellは
CalendarFrameにCalendarDateを渡す RegisterDialogはCalendarDateを受け取り、 日付情報を問い合わせ 40秒 DateCell クラスのグループs4 とCalendarDate クラスのグループt3 の相互作用例を可視化したシーケンス図.ユーザのマウス操作に関するメソッド呼び出し後,DateCell からCalendarFrame を経てRegisterDialog にCalendarDate が渡されたのち,RegisterDialog により予定データが追加されている.

21 RegisterDialogがCalendarDateに
テキスト表現の再生成のため 日付情報を問い合わせ セルがマウスクリックされてから、対応する日付に 予定データが追加されるまでの相互作用に対応 RegisterDialogがCalendarDateに 予定データの追加を依頼 40秒 DateCell クラスのグループs4 とCalendarDate クラスのグループt3 の相互作用例を可視化したシーケンス図.ユーザのマウス操作に関するメソッド呼び出し後,DateCell からCalendarFrame を経てRegisterDialog にCalendarDate が渡されたのち,RegisterDialog により予定データが追加されている. セルの色情報の再生成のため 予定の有無の問い合わせ

22 考察:グループ化の妥当性 ? DateCellの関連クラスに基づくグループ化
グループ内の振舞いの違いは、繰り返しの回数だけ 他のケーススタディでは、明らかに互いに振舞いの異なるオブジェクトがあった 関連クラスでは認識できない振舞いの違いが存在 グループ化の妥当性を評価する方法が必要 適切な代表オブジェクトを選択する方法が必要 60秒 「繰り返し」はobject difference loop による圧縮基準に基づくもの

23 考察:相互作用するグループの組み合わせ 2つのクラスのグループ間で相互作用するオブジェクトのペアは、限られた組み合わせで出現
オブジェクトは限られた振舞いのオブジェクトとのみ、相互作用する傾向があるのかもしれない 一般にこの傾向があるのか調査が必要

24 まとめ 実行履歴からクラスの代表的な動作を可視化する手法 1つのクラスから生成された多数のオブジェクトから、代表的な動作例を抽出できた
オブジェクトを呼び出し関係にあるクラスの集合に基づいてグループ化 グループの代表オブジェクトの振舞いのみを可視化 2つのクラスのグループ間の代表的な相互作用例のみを可視化 1つのクラスから生成された多数のオブジェクトから、代表的な動作例を抽出できた DateCellの1008のオブジェクトから、4つの動作例を抽出 CalendarDateの730のオブジェクトから、3つの動作例を抽出 両クラスのオブジェクトから、2つの相互作用例を抽出 今後の計画 より大規模なシステムでの有用性の調査 60秒 最後にまとめを行います。 本発表では、クラスの動作理解のために、クラスの代表的な振舞いを可視化する新たな手法を提案しました。 まず、解析対象のクラスが生成したオブジェクトを、その呼び出し関係にあるクラスの集合に基づいてグループ化します。

25

26 付録:‘Scheduler’への適用結果
Package Class #Ins クラス メソッド scheduler.gui DateCell 1008 4 scheduler.domain CalendarDate 730 3 ScheduleList 100 1 CalendarMonth 24 2 CalendarFrame$2 DateCellRenderer MonthTable MonthTableModel Content FixedSchedule

27 付録:DateCellのグループ内の振舞い
メソッド呼び出し系列 #Ins s1 a 882 s2 abdbdbd 1 abdbd 32 s3 abcdebcde 69 abcdebcdebcde 21 s4 abcdebcdebcdefbcdebcde abcdebcdefbcdebcdebcde abcdebcdefbcdebcde 『文字』とメソッドの対応 宣言クラス メソッド a DateCell <init>(CalendarDate) b toString() c CalendarDate getDay() d getColor() e hasSchedules() f getCalendarDate()

28 付録:‘JHotDraw’への適用結果 Package Class #Ins ク メ -.util ResourceBundleUtil
919 62 17 -.draw.action AbstractSelectedAction$1 734 32 2 AbstractSelectedAction$EventHandler 36 5 ReversedList 713 AttributeAction 541 -.draw FigureEvent 334 7 3 ColorIcon 279 PaletteMenuItemUI 166 1 -.geom BezierPath$Node 80 AttributeKey 13 15 『org.jhotdraw』は『-』で省略

29 付録:呼び出し関係グラフ DateCellのグループ{ s1, s2, s3, s4 },CalendarDateのグループ{ t1, t2, t3 } 30秒

30 付録:関連メソッドに基づくグループ化 相互作用に利用されるメソッド群の違いを識別
オブジェクトごとに、動作コンテクストMethods, Calledを抽出 Methods(o) オブジェクトoの呼び出されたメソッドの集合 Called(o) オブジェクトoが呼び出したメソッドの集合 オブジェクトo1、o2が同じグループに所属 Methods(o1) = Methods(o2) かつ Called(o1) = Called(o2) 40秒

31 付録:グループ間の呼び出し関係の可視化 C s1 A s2 呼び出し関係グラフによる可視化
頂点は、グループと、他のクラスを表現 ある頂点に属するオブジェクトのどれか1つでも、 ある別の頂点に属するオブジェクトにメソッド呼び出しする場合、 その頂点間に有向辺を作成 例) クラスBのグループ s1 = { B10, B11 }, s2 = { B12, B13 } Bのオブジェクトは、クラスAのオブジェクトからメソッド呼び出しされる オブジェクトB12は、クラスCのオブジェクトにメソッド呼び出しする 60秒 C s1 A s2

32 付録:ScheduleListのグループ化
予定データを保持するリスト 実行履歴中には100個のオブジェクトが出現 関連クラスに基づくと、1つのグループに分類された 関連メソッドに基づいて{ u1, u2, u3 }に分類 u1,u2 と u3 では、明らかに振舞いが異なっていた #Ins Methods(o) Called(o) u1 90 <init>(), iterator(), hasValids() u2 3 add(Scheduler) u3 7 clear() 30秒 続いて,CalendarDate クラスから呼び出されるScheduleList クラスを分析した。 u1,u2とu3は明らかに振舞いが異なる

33 付録:CalendarDateとScheduleListの相互作用の抽出
相互作用のあるオブジェクトのペアの関係性が異なる 同じクラスの組み合わせであっても、相互作用の関係性が異なる場合がある グループu1,u2は、日付ごとの予定データのリストに対応 グループu3は、曜日ごとの予定データのリストに対応 CalendarDateのグループ{ t1, t2, t3 }、ScheduleListのグループ{ u1, u2, u3 } u1(90) u2(3) u3(7)   t1(637)   t2(90) 90組(1対1) 90組(多対1)   t3(3) 3組(1対1) 3組(多対1) 30秒

34 付録:提案手法の手順(1/2) 実行履歴から、オブジェクトごとのメソッド呼び出し系列を抽出 オブジェクトの動作コンテキストに基づくグループ化
グループごとに代表的な振舞いを可視化 各グループから代表オブジェクトを1つ選択 代表オブジェクトの振舞いを、シーケンス図として可視化 30秒

35 付録:提案手法の概要(2/2) 特定クラスとの相互作用に注目 クラス間の相互作用の抽出 クラス間の相互作用の可視化
どうような相互作用を行うのか どのような振舞いのオブジェクトと相互作用するのか クラス間の相互作用の抽出 他のクラスのオブジェクトをグループ化 グループ間で相互作用するオブジェクトのペア集合を抽出 クラス間の相互作用の可視化 ペア集合から代表ペアを選択 代表ペアの振舞いを、シーケンス図として可視化 30秒


Download ppt "類似した振舞いのオブジェクトの グループ化による クラス動作シナリオの可視化"

Similar presentations


Ads by Google