類似した振舞いのオブジェクトの グループ化による...

35
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 類類類類類類類類類類類類類類類 類類類類類類類類 類類類類類類類類類類類類類 大大大大 大大大大大大大大大大 大大 大 大大 大 大大 大大

Upload: dawn-price

Post on 03-Jan-2016

29 views

Category:

Documents


8 download

DESCRIPTION

類似した振舞いのオブジェクトの グループ化による クラス動作シナリオの可視化. 大阪大学 大学院情報科学研究科 〇宗像 聡・石尾 隆・井上 克郎. 発表の概要. オブジェクト指向システムのクラスの動作理解は困難 1つのクラスからは多数のオブジェクトが生成される オブジェクトの動作はそれぞれ異なる 実行履歴からクラスの代表的な動作を可視化 呼び出し関係が類似したオブジェクトをグループ化 各グループの代表オブジェクトの動作のみを可視化する スケジュール管理プログラムの実行履歴に対して適用 1008 個の GUI オブジェクトから4つの動作例を抽出 - PowerPoint PPT Presentation

TRANSCRIPT

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

Department of Computer Science, Graduate School of Information Science & Technology,Osaka University

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

大阪大学 大学院情報科学研究科〇宗像 聡・石尾 隆・井上 克郎

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

2

発表の概要 オブジェクト指向システムのクラスの動作理解は困難

1つのクラスからは多数のオブジェクトが生成される オブジェクトの動作はそれぞれ異なる

実行履歴からクラスの代表的な動作を可視化 呼び出し関係が類似したオブジェクトをグループ化 各グループの代表オブジェクトの動作のみを可視化する

スケジュール管理プログラムの実行履歴に対して適用 1008 個の GUI オブジェクトから4つの動作例を抽出 730 個のデータ管理オブジェクトから3つの動作例を抽出 GUI とデータ管理オブジェクトの2つの相互作用例を抽出

表示するデータがある場合、ない場合

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

3

オブジェクト指向システムの動作理解

[1] Wild, N. and Huitt, R.: Maintenance Support Object-Oriented Programs. IEEE Transactions on Software Engineering, Vol.18, No.12, pp.1038-1044, 1992.

オブジェクト指向システム オブジェクトが相互にメッセージを交換して処理

を行う 実行される処理は、受信するオブジェクトにより

異なる オブジェクトは動的に生成される

実際の動作は、実行時に動的に決定☓ ソースコードの解析だけでは困難 [1]

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

4

実行履歴の可視化

[2] 谷口考治 , 石尾隆 , 神谷年洋 , 楠本真二 , 井上克郎 : プログラム実行履歴からの簡潔なシーケンス図の生成手法 , コンピュー タソフトウェア , Vol.24, No.3, pp.153-169, 2007.

実行履歴の可視化が有効 実行履歴 = システムの実行時情報の記録1. 実行履歴として、オブジェクト間のメソッド

呼び出し情報を取得2. UML のシーケンス図として可視化 [2]

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

5

クラスの動作理解 システムの保守作業では、クラスの動作理解が必要

対象クラスのインスタンスの典型的な動作例 他のクラスのオブジェクトとの典型的な相互作用例

オブジェクトの実行時の振舞いを確認することが有効 [3] オブジェクトに関係する、メソッド呼び出し系列を取得 オブジェクトごとのメソッド呼び出し系列を確認

[3] Reiss, S.P., and Renieris, M.: Encoding program executions. Proceedings of the 23rd International Conference on Software Engineering, pp.221-230, 2001.

クラス A

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

6

オブジェクトの振舞いの確認における問題

解析対象クラスのオブジェクトが多数ある場合☓ それぞれの振舞いを逐一確認することは困難

クラス A

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

7

提案手法のアプローチ 互いに振舞いの類似しているオブジェクトが多

数あると期待できる解析対象のクラスのオブジェクトを振舞いの類

似性に基づいてグループ化グループごとに振舞いを可視化確認する振舞いの数を削減できる

クラス A

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

8

振舞いの類似性の判定

オブジェクトと呼び出し関係にあるクラスに注目 呼び出し関係にあるオブジェクトが所属するクラス

クラスは特定の役割を持つ 例)  FileOutputStream = ファイル出力 異なるクラスから使用される 参加した処理が異なる 異なるクラスを使用する 実行した処理が異なる

呼び出し関係にあるクラスとオブジェクトの振舞いには、強い対応関係がある 完全一致するとき、互いの振舞いは類似しているとみな

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

9

関連クラスに基づくグループ化

オブジェクトごとの動作コンテキスト Use,Used を比較Use(o)

オブジェクト o のメソッドを呼び出したクラスの集合Used(o)

オブジェクト o がメソッドを呼び出したクラスの集合

オブジェクトのグループ化ルールオブジェクト o1 、 o2 が同じグループに所属

Use(o1) = Use(o2) かつ Used(o1) = Used(o2)

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

10

クラスの代表的な動作例の可視化

1. 実行履歴から、オブジェクトごとのメソッド呼び出し系列を抽出

2. オブジェクトを動作コンテキストに基づいてグループ化3. 各グループから代表オブジェクトをランダムに選択4. 直接呼び出し関係のあるオブジェクト群との、メソッド

呼び出しを表現するシーケンス図を生成

クラス A

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

11

クラス間の相互作用例の抽出 あるクラスの動作と、他のクラスの動作が対応することがある

GUI オブジェクトへのクリック操作処理の ある/なし と、データ管理オブジェクトへのデータ登録処理の ある/なし

動作の対応する組み合わせごとに、相互作用例を抽出

1. 2つのクラスのグループ間で、メソッド呼び出し関係を抽出2. 呼び出し関係にあるグループの組を相互作用例として抽出

A1

B1

B2 (  , )

(  , )A1

A1

B1

B2

A2 A3 B3 (  , )

B3A3

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

12

1. 呼び出し関係にあるグループの組から、呼び出し関係にあるオブジェクトの代表ペアをランダムに選択

2. ペアの振舞いを表現するシーケンス図を生成 ペアの一方と、直接呼び出し関係のあるオブジェクト

群との相互作用 ペアの一方からもう一方へ推移的に到達するメソッド

呼び出し系列

クラス間の相互作用例の可視化

(  , )(  , )

A1B1

B2

A1

A1

B1

B2

B1A1

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

13

ケーススタディ

適用対象 = ‘ Scheduler’ Java で実装された、予定管理用カレンダープログラム 予定を記入したい日付に対応するセルをクリックすると、

新たにダイアログが開き、予定を編集できる セルの役割を担う、クラス DateCell の動作理解を行う

実行履歴の取得 実行シナリオ

異なる日付に計 3 つの予定を追加 1975 個のオブジェクト、 7523 個のメソッド呼び出し

情報 java , javax , sun , com.sun パッケージに含まれるクラスの

イベントは除外

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

14

DateCell のグループ化

クラス DateCell カレンダーの各日付を表現するセル 実行履歴中には 1008 個のオブジェクトが出現

関連クラスに基づいて { s1, s2, s3, s4 } に分類#Ins Use(o) Used(o)

s1 882 MonthTableModel

s2 33 MonthTableModel, DateCellRenderer

s3 90 MonthTableModel, DateCellRenderer CalendarDate

s4 3MonthTableModel, DateCellRendererCalendarFrame

CalendarDate

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

15

DateCell のグループ s2 の振舞い

DateCellRenderer からの描画情報の要求に応答 日付の無いセルの振舞いに対応

DateCell

テキスト表現を返す

セルの色情報を返す繰り返しの回数

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

16

繰り返し構造の展開後

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

17

DateCell のグループ s3 の振舞い

更に、 CalendarDate に予定データを問い合わせ 予定が追加されていない、日付の有るセルの振舞いに対応

CalendarDate予定データを管

理テキスト表現を生成するため

に日付情報を問い合わせ

セルの色情報を生成するために

予定の有無を問い合わせ

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

18

DateCell のグループ s4 の振舞い

応答に加えて、マウス操作に関する処理 予定が追加された、日付の有るセルの振舞いに対応

CalendarFrameGUI のオーナー

ユーザのマウスクリック検出

CalendarDate を渡す

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

19

DateCell と CalendarDate の相互作用の抽出

クラス CalendarDate 実行履歴中には 730 個のオブジェクトが出現 関連クラスに基づいて { t1, t2, t3 } に分類

2 つの組み合わせで、相互作用するオブジェクトのペアが出現 組み合わせは最大で 4×3 = 12 通り考えられる

t1(637) t2(90) t3(3)

   s1(882)

   s2(33)

   s3(90) 90 組( 1 対1 )

   s4(3) 3 組( 1 対 1 )

※DateCell のグループ { s1, s2, s3 , s4 } 、 CalendarDate のグループ { t1, t2, t3 }

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

20

s4 と t3 の相互作用

マウスクリック操作検出後、 DateCell はCalendarFrame に CalendarDate を渡す

RegisterDialog は CalendarDate を受け取り、

日付情報を問い合わせ

RegisterDialog予定編集用ダイアロ

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

21

s4 と t3 の相互作用

RegisterDialog が CalendarDateに

予定データの追加を依頼

テキスト表現の再生成のため日付情報を問い合わせ

セルの色情報の再生成のため予定の有無の問い合わせ

セルがマウスクリックされてから、対応する日付に

予定データが追加されるまでの相互作用に対応

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

22

考察:グループ化の妥当性 DateCell の関連クラスに基づくグループ化

グループ内の振舞いの違いは、繰り返しの回数だけ 他のケーススタディでは、明らかに互いに振舞い

の異なるオブジェクトがあった☓ 関連クラスでは認識できない振舞いの違いが存在

グループ化の妥当性を評価する方法が必要 適切な代表オブジェクトを選択する方法が必要

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

23

考察:相互作用するグループの組み合わせ 2つのクラスのグループ間で相互作用するオ

ブジェクトのペアは、限られた組み合わせで出現? オブジェクトは限られた振舞いのオブジェクトと

のみ、相互作用する傾向があるのかもしれない一般にこの傾向があるのか調査が必要

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

24

まとめ 実行履歴からクラスの代表的な動作を可視化する手法

1. オブジェクトを呼び出し関係にあるクラスの集合に基づいてグループ化

2. グループの代表オブジェクトの振舞いのみを可視化3. 2 つのクラスのグループ間の代表的な相互作用例のみを可視

1 つのクラスから生成された多数のオブジェクトから、代表的な動作例を抽出できた DateCell の 1008 のオブジェクトから、 4 つの動作例を抽出 CalendarDate の 730 のオブジェクトから、 3 つの動作例を

抽出 両クラスのオブジェクトから、 2 つの相互作用例を抽出

今後の計画 より大規模なシステムでの有用性の調査

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

25

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

26

付録:‘ Scheduler’ への適用結果

Package Class#Insクラス メソッ

scheduler.gui DateCell 1008

4 4

scheduler.domain CalendarDate 730 3 3

scheduler.domain ScheduleList 100 1 3

scheduler.domain CalendarMonth 24 2 2

scheduler.gui CalendarFrame$2

24 2 2

scheduler.gui DateCellRenderer 24 2 2

scheduler.gui MonthTable 24 1 1

scheduler.gui MonthTableModel 24 2 2

scheduler.domain Content 3 1 1

scheduler.domain FixedSchedule 3 1 1

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

27

付録: DateCell のグループ内の振舞いメソッド呼び出し系列 #Ins

s1 a 882

s2abdbdbd 1

abdbd 32

s3abcdebcde 69

abcdebcdebcde 21

s4

abcdebcdebcdefbcdebcde 1

abcdebcdefbcdebcdebcde 1

abcdebcdefbcdebcde 1

宣言クラス メソッド

a DateCell <init>(CalendarDate)

b DateCell toString()

c CalendarDate getDay()

d DateCell getColor()

e CalendarDate hasSchedules()

f DateCell getCalendarDate()

※『文字』とメソッドの対応

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

28

付録:‘ JHotDraw’ への適用結果

Package Class#Insク メ

-.util ResourceBundleUtil 919 62 17

-.draw.action AbstractSelectedAction$1 734 32 2

-.draw.action

AbstractSelectedAction$EventHandler 734 36 5

-.util ReversedList 713 2 2

-.draw.action AttributeAction 541 2 2

-.draw FigureEvent 334 7 3

-.draw.action ColorIcon 279 3 3

-.draw.action PaletteMenuItemUI 166 1 1

-.geom BezierPath$Node 80 2 2

-.draw AttributeKey 36 13 15

※『 org.jhotdraw 』は『 - 』で省略

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

29

付録:呼び出し関係グラフ※ DateCell のグループ { s1, s2, s3, s4 } , CalendarDate のグループ { t1, t

2, t3 }

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

30

付録:関連メソッドに基づくグループ化 相互作用に利用されるメソッド群の違いを識別

オブジェクトごとに、動作コンテクスト Methods, Called を抽出 Methods(o)

オブジェクト o の呼び出されたメソッドの集合 Called(o)

オブジェクト o が呼び出したメソッドの集合

オブジェクト o1 、 o2 が同じグループに所属Methods(o1) = Methods(o2) かつ Called(o1) = Called(o2)

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

31

付録:グループ間の呼び出し関係の可視化 呼び出し関係グラフによる可視化

頂点は、グループと、他のクラスを表現 ある頂点に属するオブジェクトのどれか 1 つでも、 ある別の頂点に属するオブジェクトにメソッド呼び出しする場

合、 その頂点間に有向辺を作成

例 ) クラス B のグループ s1 = { B10, B11 }, s2 = { B12, B13 } B のオブジェクトは、クラス A のオブジェクトからメソッド呼び出

しされる オブジェクト B12 は、クラス C のオブジェクトにメソッド呼び出し

する

As1 s2C

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

32

付録: ScheduleList のグループ化

クラス ScheduleList 予定データを保持するリスト 実行履歴中には 100 個のオブジェクトが出現 関連クラスに基づくと、 1 つのグループに分類された

関連メソッドに基づいて { u1, u2, u3 } に分類 u1,u2 と u3 では、明らかに振舞いが異なっていた#Ins Methods(o) Called(o)

u1 90 <init>(), iterator(), hasValids()

u2 3 <init>(), iterator(), hasValids() add(Scheduler)

u3 7 <init>(), iterator(), hasValids() clear()

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

33

付録: CalendarDate と 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 )

※CalendarDate のグループ { t1, t2, t3 } 、 ScheduleList のグループ { u1, u2, u3 }

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

34

付録:提案手法の手順( 1/2 )

1. 実行履歴から、オブジェクトごとのメソッド呼び出し系列を抽出

2. オブジェクトの動作コンテキストに基づくグループ化

3. グループごとに代表的な振舞いを可視化 各グループから代表オブジェクトを1つ選択 代表オブジェクトの振舞いを、シーケンス図

として可視化

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

35

付録:提案手法の概要 (2/2)

特定クラスとの相互作用に注目? どうような相互作用を行うのか? どのような振舞いのオブジェクトと相互作用するのか

4. クラス間の相互作用の抽出 他のクラスのオブジェクトをグループ化 グループ間で相互作用するオブジェクトのペア集合を

抽出

5. クラス間の相互作用の可視化 ペア集合から代表ペアを選択 代表ペアの振舞いを、シーケンス図として可視化