類似した振舞いのオブジェクトの
グループ化による
クラス動作シナリオの可視化
大阪大学 大学院情報科学研究科
〇宗像 聡・石尾 隆・井上 克郎
Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
発表の概要

オブジェクト指向システムのクラスの動作理解は困難
1つのクラスからは多数のオブジェクトが生成される
 オブジェクトの動作はそれぞれ異なる


実行履歴からクラスの代表的な動作を可視化
呼び出し関係が類似したオブジェクトをグループ化
 各グループの代表オブジェクトの動作のみを可視化する


スケジュール管理プログラムの実行履歴に対して適用
1008個のGUI オブジェクトから4つの動作例を抽出
 730個のデータ管理オブジェクトから3つの動作例を抽出
 GUI とデータ管理オブジェクトの2つの相互作用例を抽出


表示するデータがある場合、ない場合
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
1
オブジェクト指向システムの動作理解

オブジェクト指向システム




オブジェクトが相互にメッセージを交換して処理を行う
実行される処理は、受信するオブジェクトにより異なる
オブジェクトは動的に生成される
実際の動作は、実行時に動的に決定
☓
ソースコードの解析だけでは困難[1]
[1] Wild, N. and Huitt, R.: Maintenance Support Object-Oriented Programs. IEEE Transactions on Software Engineering,
Vol.18, No.12, pp.1038-1044, 1992.
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2
実行履歴の可視化

実行履歴の可視化が有効
実行履歴 = システムの実行時情報の記録
1. 実行履歴として、オブジェクト間のメソッド呼び出し
情報を取得
2. UMLのシーケンス図として可視化[2]

[2]谷口考治, 石尾隆, 神谷年洋, 楠本真二, 井上克郎: プログラム実行履歴からの簡潔なシーケンス図の生成手法, コンピュー
タソフトウェア, Vol.24, No.3, pp.153-169, 2007.
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
3
クラスの動作理解

システムの保守作業では、クラスの動作理解が必要
対象クラスのインスタンスの典型的な動作例
 他のクラスのオブジェクトとの典型的な相互作用例


オブジェクトの実行時の振舞いを確認することが有効[3]
オブジェクトに関係する、メソッド呼び出し系列を取得
 オブジェクトごとのメソッド呼び出し系列を確認

クラスA
[3] Reiss, S.P., and Renieris, M.: Encoding program executions. Proceedings of the 23rd International Conference on
Software Engineering, pp.221-230, 2001.
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
4
オブジェクトの振舞いの確認における問題

解析対象クラスのオブジェクトが多数ある場合
☓それぞれの振舞いを逐一確認することは困難
クラスA
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
5
提案手法のアプローチ

互いに振舞いの類似しているオブジェクトが多数
あると期待できる
 解析対象のクラスのオブジェクトを振舞いの類似
性に基づいてグループ化
 グループごとに振舞いを可視化
 確認する振舞いの数を削減できる
クラスA
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
6
振舞いの類似性の判定

オブジェクトと呼び出し関係にあるクラスに注目
 呼び出し関係にあるオブジェクトが所属するクラス

クラスは特定の役割を持つ
 例)
FileOutputStream = ファイル出力
 異なるクラスから使用される  参加した処理が異なる
 異なるクラスを使用する  実行した処理が異なる

呼び出し関係にあるクラスとオブジェクトの振舞いには、強い対
応関係がある
 完全一致するとき、互いの振舞いは類似しているとみなす
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
7
関連クラスに基づくグループ化

オブジェクトごとの動作コンテキスト Use,Used を比較
 Use(o)
 オブジェクトoのメソッドを呼び出したクラスの集合
 Used(o)
 オブジェクトoがメソッドを呼び出したクラスの集合

オブジェクトのグループ化ルール
オブジェクトo1、o2が同じグループに所属
 Use(o1) = Use(o2) かつ Used(o1) = Used(o2)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
8
クラスの代表的な動作例の可視化
1.
2.
3.
4.
実行履歴から、オブジェクトごとのメソッド呼び出し系列
を抽出
オブジェクトを動作コンテキストに基づいてグループ化
各グループから代表オブジェクトをランダムに選択
直接呼び出し関係のあるオブジェクト群との、メソッド呼
び出しを表現するシーケンス図を生成
クラスA
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
9
クラス間の相互作用例の抽出

あるクラスの動作と、他のクラスの動作が対応することがある
GUIオブジェクトへのクリック操作処理の ある/なし と、データ管
理オブジェクトへのデータ登録処理の ある/なし
 動作の対応する組み合わせごとに、相互作用例を抽出

1.
2.
2つのクラスのグループ間で、メソッド呼び出し関係を抽出
呼び出し関係にあるグループの組を相互作用例として抽出
B1
A1
A2
B2
A3
B3
( , )
( , )
( , )
A1
B1
A1
B2
A3
B3
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
10
クラス間の相互作用例の可視化
1.
呼び出し関係にあるグループの組から、呼び出し関
係にあるオブジェクトの代表ペアをランダムに選択
2.
ペアの振舞いを表現するシーケンス図を生成


ペアの一方と、直接呼び出し関係のあるオブジェクト群と
の相互作用
ペアの一方からもう一方へ推移的に到達するメソッド呼び
出し系列
B1
A1
B2
( , )
( , )
A1
B1
A1
B2
A1
B1
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
11
ケーススタディ

適用対象 = ‘Scheduler’
 Javaで実装された、予定管理用カレンダープログラム
 予定を記入したい日付に対応するセルをクリックすると、新
たにダイアログが開き、予定を編集できる
 セルの役割を担う、クラスDateCellの動作理解を行う

実行履歴の取得
 実行シナリオ
異なる日付に計3つの予定を追加
 1975個のオブジェクト、7523個のメソッド呼び出し情報

java,javax,sun,com.sun パッケージに含まれるクラスのイベント
は除外
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
12
DateCellのグループ化

クラスDateCell
 カレンダーの各日付を表現するセル
 実行履歴中には1008個のオブジェクトが出現

関連クラスに基づいて{ s1, s2, s3, s4 }に分類
#Ins
Use(o)
Used(o)
s1
882
MonthTableModel
s2
33
MonthTableModel, DateCellRenderer
s3
90
MonthTableModel, DateCellRenderer
CalendarDate
3
MonthTableModel, DateCellRenderer
CalendarFrame
CalendarDate
s4
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
13
DateCellのグループs2の振舞い

DateCellRendererからの描画情報の要求に応答
 日付の無いセルの振舞いに対応
DateCell
テキスト表現を返す
繰り返しの回数
セルの色情報を返す
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
14
繰り返し構造の展開後
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
15
DateCellのグループs3の振舞い

更に、CalendarDateに予定データを問い合わせ
 予定が追加されていない、日付の有るセルの振舞いに対応
テキスト表現を生成するために
日付情報を問い合わせ
CalendarDate
予定データを管理
セルの色情報を生成するために
予定の有無を問い合わせ
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
16
DateCellのグループs4の振舞い

応答に加えて、マウス操作に関する処理
 予定が追加された、日付の有るセルの振舞いに対応
CalendarFrame
GUIのオーナー
ユーザのマウスクリック検出
CalendarDateを渡す
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
17
DateCellとCalendarDateの相互作用の抽出
 クラス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)
s4(3)
90組(1対1)
3組(1対1)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
18
s4とt3の相互作用
RegisterDialog
予定編集用ダイアログ
マウスクリック操作検出後、DateCellは
CalendarFrameにCalendarDateを渡す
RegisterDialogはCalendarDateを受け取り、
日付情報を問い合わせ
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
19
s4とt3の相互作用
テキスト表現の再生成のため
日付情報を問い合わせ
セルがマウスクリックされてから、対応する日付に
予定データが追加されるまでの相互作用に対応
RegisterDialogがCalendarDateに
予定データの追加を依頼
セルの色情報の再生成のため
予定の有無の問い合わせ
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
20
考察:グループ化の妥当性

DateCellの関連クラスに基づくグループ化
 グループ内の振舞いの違いは、繰り返しの回数だけ

他のケーススタディでは、明らかに互いに振舞いの異
なるオブジェクトがあった
☓ 関連クラスでは認識できない振舞いの違いが存在
 グループ化の妥当性を評価する方法が必要
 適切な代表オブジェクトを選択する方法が必要
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
21
考察:相互作用するグループの組み合わせ

2つのクラスのグループ間で相互作用するオブ
ジェクトのペアは、限られた組み合わせで出現
?
オブジェクトは限られた振舞いのオブジェクトとのみ、
相互作用する傾向があるのかもしれない
一般にこの傾向があるのか調査が必要
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
22
まとめ

実行履歴からクラスの代表的な動作を可視化する手法
オブジェクトを呼び出し関係にあるクラスの集合に基づいてグ
ループ化
2. グループの代表オブジェクトの振舞いのみを可視化
3. 2つのクラスのグループ間の代表的な相互作用例のみを可視化
1.

1つのクラスから生成された多数のオブジェクトから、代表的
な動作例を抽出できた

DateCellの1008のオブジェクトから、4つの動作例を抽出
 CalendarDateの730のオブジェクトから、3つの動作例を抽出
 両クラスのオブジェクトから、2つの相互作用例を抽出

今後の計画

より大規模なシステムでの有用性の調査
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
23
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
24
付録:‘Scheduler’への適用結果
Package
scheduler.gui
scheduler.domain
scheduler.domain
scheduler.domain
scheduler.gui
scheduler.gui
scheduler.gui
scheduler.gui
scheduler.domain
scheduler.domain
Class
DateCell
CalendarDate
ScheduleList
CalendarMonth
CalendarFrame$2
DateCellRenderer
MonthTable
MonthTableModel
Content
FixedSchedule
#Ins クラス メソッド
1008
4
4
730
3
3
100
1
3
24
2
2
24
2
2
24
2
2
24
1
1
24
2
2
3
1
1
3
1
1
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
25
付録:DateCellのグループ内の振舞い
メソッド呼び出し系列
s1 a
s3
※『文字』とメソッドの対応
882
abdbdbd
s2
#Ins
1
abdbd
32
abcdebcde
69
abcdebcdebcde
abcdebcdebcdefbcdebcde
宣言クラス
メソッド
a
DateCell
<init>(CalendarDate)
b
DateCell
toString()
c
CalendarDate getDay()
d
DateCell
e
CalendarDate hasSchedules()
f
DateCell
21
1
s4 abcdebcdefbcdebcdebcde
1
abcdebcdefbcdebcde
1
getColor()
getCalendarDate()
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
26
付録:‘JHotDraw’への適用結果
Package
-.util
Class
ResourceBundleUtil
#Ins
ク
メ
919
62
17
-.draw.action AbstractSelectedAction$1
734
32
2
-.draw.action AbstractSelectedAction$EventHandler
734
36
5
-.util
713
2
2
-.draw.action AttributeAction
541
2
2
-.draw
334
7
3
-.draw.action ColorIcon
279
3
3
-.draw.action PaletteMenuItemUI
166
1
1
ReversedList
FigureEvent
-.geom
BezierPath$Node
80
2
2
-.draw
AttributeKey
36
13
15
※『org.jhotdraw』は『-』で省略
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
27
付録:呼び出し関係グラフ
※
DateCellのグループ{ s1, s2, s3, s4 },CalendarDateのグループ{ t1, t2, t3 }
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
28
付録:関連メソッドに基づくグループ化

相互作用に利用されるメソッド群の違いを識別

オブジェクトごとに、動作コンテクストMethods, Called
を抽出
 Methods(o)
 オブジェクトoの呼び出されたメソッドの集合
 Called(o)
 オブジェクトoが呼び出したメソッドの集合

オブジェクトo1、o2が同じグループに所属
Methods(o1) = Methods(o2)
かつ Called(o1) = Called(o2)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
29
付録:グループ間の呼び出し関係の可視化

呼び出し関係グラフによる可視化



頂点は、グループと、他のクラスを表現
ある頂点に属するオブジェクトのどれか1つでも、
ある別の頂点に属するオブジェクトにメソッド呼び出しする場合、
その頂点間に有向辺を作成
例) クラスBのグループ s1 = { B10, B11 }, s2 = { B12, B13 }


Bのオブジェクトは、クラスAのオブジェクトからメソッド呼び出しされる
オブジェクトB12は、クラスCのオブジェクトにメソッド呼び出しする
s1
A
s2
C
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
30
付録:ScheduleListのグループ化
 クラスScheduleList
 予定データを保持するリスト
 実行履歴中には100個のオブジェクトが出現
 関連クラスに基づくと、1つのグループに分類された

関連メソッドに基づいて{ u1, u2, u3 }に分類

u1,u2 と u3 では、明らかに振舞いが異なっていた
#Ins
u1
90
u2
3
u3
7
Methods(o)
<init>(), iterator(), hasValids()
<init>(), iterator(), hasValids()
<init>(), iterator(), hasValids()
Called(o)
add(Scheduler)
clear()
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
31
付録:CalendarDateとScheduleListの相互作用の抽出

相互作用のあるオブジェクトのペアの関係性が異なる
 同じクラスの組み合わせであっても、相互作用の関係性が
異なる場合がある
 グループu1,u2は、日付ごとの予定データのリストに対応
 グループu3は、曜日ごとの予定データのリストに対応
※CalendarDateのグループ{ t1, t2, t3
u1(90)
}、ScheduleListのグループ{ u1, u2, u3 }
u2(3)
u3(7)
t1(637)
t2(90)
t3(3)
90組(1対1)
90組(多対1)
3組(1対1)
3組(多対1)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
32
付録:提案手法の手順(1/2)
1.
実行履歴から、オブジェクトごとのメソッド呼び
出し系列を抽出
2.
オブジェクトの動作コンテキストに基づくグ
ループ化
3.
グループごとに代表的な振舞いを可視化
各グループから代表オブジェクトを1つ選択
 代表オブジェクトの振舞いを、シーケンス図として
可視化

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
33
付録:提案手法の概要(2/2)
特定クラスとの相互作用に注目

どうような相互作用を行うのか
どのような振舞いのオブジェクトと相互作用するのか
?
?
4.
クラス間の相互作用の抽出


5.
他のクラスのオブジェクトをグループ化
グループ間で相互作用するオブジェクトのペア集合を抽出
クラス間の相互作用の可視化


ペア集合から代表ペアを選択
代表ペアの振舞いを、シーケンス図として可視化
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
34
ダウンロード

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