350 likes | 417 Views
類似した振舞いのオブジェクトの グループ化による クラス動作シナリオの可視化. 大阪大学 大学院情報科学研究科 〇宗像 聡・石尾 隆・井上 克郎. 発表の概要. オブジェクト指向システムのクラスの動作理解は困難 1つのクラスからは多数のオブジェクトが生成される オブジェクトの動作はそれぞれ異なる 実行履歴からクラスの代表的な動作を可視化 呼び出し関係が類似したオブジェクトをグループ化 各グループの代表オブジェクトの動作のみを可視化する スケジュール管理プログラムの実行履歴に対して適用 1008 個の GUI オブジェクトから4つの動作例を抽出
E N D
類似した振舞いのオブジェクトのグループ化によるクラス動作シナリオの可視化類似した振舞いのオブジェクトのグループ化によるクラス動作シナリオの可視化 大阪大学 大学院情報科学研究科 〇宗像 聡・石尾 隆・井上 克郎
発表の概要 • オブジェクト指向システムのクラスの動作理解は困難 • 1つのクラスからは多数のオブジェクトが生成される • オブジェクトの動作はそれぞれ異なる • 実行履歴からクラスの代表的な動作を可視化 • 呼び出し関係が類似したオブジェクトをグループ化 • 各グループの代表オブジェクトの動作のみを可視化する • スケジュール管理プログラムの実行履歴に対して適用 • 1008個のGUI オブジェクトから4つの動作例を抽出 • 730個のデータ管理オブジェクトから3つの動作例を抽出 • GUI とデータ管理オブジェクトの2つの相互作用例を抽出 • 表示するデータがある場合、ない場合
オブジェクト指向システムの動作理解 • オブジェクト指向システム • オブジェクトが相互にメッセージを交換して処理を行う • 実行される処理は、受信するオブジェクトにより異なる • オブジェクトは動的に生成される • 実際の動作は、実行時に動的に決定 • ソースコードの解析だけでは困難[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.
実行履歴の可視化 • 実行履歴の可視化が有効 • 実行履歴 = システムの実行時情報の記録 • 実行履歴として、オブジェクト間のメソッド呼び出し情報を取得 • UMLのシーケンス図として可視化[2] [2]谷口考治, 石尾隆, 神谷年洋, 楠本真二, 井上克郎: プログラム実行履歴からの簡潔なシーケンス図の生成手法, コンピュー タソフトウェア, Vol.24, No.3, pp.153-169, 2007.
クラスの動作理解 • システムの保守作業では、クラスの動作理解が必要 • 対象クラスのインスタンスの典型的な動作例 • 他のクラスのオブジェクトとの典型的な相互作用例 • オブジェクトの実行時の振舞いを確認することが有効[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.
オブジェクトの振舞いの確認における問題 • 解析対象クラスのオブジェクトが多数ある場合 • それぞれの振舞いを逐一確認することは困難 クラスA ?
クラスA 提案手法のアプローチ • 互いに振舞いの類似しているオブジェクトが多数あると期待できる • 解析対象のクラスのオブジェクトを振舞いの類似性に基づいてグループ化 • グループごとに振舞いを可視化 • 確認する振舞いの数を削減できる !!
振舞いの類似性の判定 • オブジェクトと呼び出し関係にあるクラスに注目 • 呼び出し関係にあるオブジェクトが所属するクラス • クラスは特定の役割を持つ • 例) FileOutputStream = ファイル出力 • 異なるクラスから使用される 参加した処理が異なる • 異なるクラスを使用する 実行した処理が異なる • 呼び出し関係にあるクラスとオブジェクトの振舞いには、強い対応関係がある • 完全一致するとき、互いの振舞いは類似しているとみなす
関連クラスに基づくグループ化 • オブジェクトごとの動作コンテキスト Use,Used を比較 • Use(o) • オブジェクトoのメソッドを呼び出したクラスの集合 • Used(o) • オブジェクトoがメソッドを呼び出したクラスの集合 • オブジェクトのグループ化ルール オブジェクトo1、o2が同じグループに所属 • Use(o1) = Use(o2) かつ Used(o1) = Used(o2)
クラスの代表的な動作例の可視化 • 実行履歴から、オブジェクトごとのメソッド呼び出し系列を抽出 • オブジェクトを動作コンテキストに基づいてグループ化 • 各グループから代表オブジェクトをランダムに選択 • 直接呼び出し関係のあるオブジェクト群との、メソッド呼び出しを表現するシーケンス図を生成 クラスA
( , ) A1 B1 ( , ) A1 B2 ( , ) A3 B3 クラス間の相互作用例の抽出 • あるクラスの動作と、他のクラスの動作が対応することがある • GUIオブジェクトへのクリック操作処理の ある/なし と、データ管理オブジェクトへのデータ登録処理の ある/なし • 動作の対応する組み合わせごとに、相互作用例を抽出 • 2つのクラスのグループ間で、メソッド呼び出し関係を抽出 • 呼び出し関係にあるグループの組を相互作用例として抽出 B1 A1 B2 A3 A2 B3
A1 B1 クラス間の相互作用例の可視化 • 呼び出し関係にあるグループの組から、呼び出し関係にあるオブジェクトの代表ペアをランダムに選択 • ペアの振舞いを表現するシーケンス図を生成 • ペアの一方と、直接呼び出し関係のあるオブジェクト群との相互作用 • ペアの一方からもう一方へ推移的に到達するメソッド呼び出し系列 ( , ) B1 A1 B1 A1 ( , ) B2 A1 B2
ケーススタディ • 適用対象 = ‘Scheduler’ • Javaで実装された、予定管理用カレンダープログラム • 予定を記入したい日付に対応するセルをクリックすると、新たにダイアログが開き、予定を編集できる • セルの役割を担う、クラスDateCellの動作理解を行う • 実行履歴の取得 • 実行シナリオ 異なる日付に計3つの予定を追加 • 1975個のオブジェクト、7523個のメソッド呼び出し情報 • java,javax,sun,com.sun パッケージに含まれるクラスのイベントは除外
DateCellのグループ化 • クラスDateCell • カレンダーの各日付を表現するセル • 実行履歴中には1008個のオブジェクトが出現 • 関連クラスに基づいて{ s1, s2, s3, s4 }に分類
DateCellのグループs2の振舞い • DateCellRendererからの描画情報の要求に応答 • 日付の無いセルの振舞いに対応 DateCell テキスト表現を返す セルの色情報を返す 繰り返しの回数
DateCellのグループs3の振舞い • 更に、CalendarDateに予定データを問い合わせ • 予定が追加されていない、日付の有るセルの振舞いに対応 CalendarDate 予定データを管理 テキスト表現を生成するために 日付情報を問い合わせ セルの色情報を生成するために 予定の有無を問い合わせ
DateCellのグループs4の振舞い • 応答に加えて、マウス操作に関する処理 • 予定が追加された、日付の有るセルの振舞いに対応 CalendarFrame GUIのオーナー ユーザのマウスクリック検出 CalendarDateを渡す
DateCellとCalendarDateの相互作用の抽出 • クラスCalendarDate • 実行履歴中には730個のオブジェクトが出現 • 関連クラスに基づいて{ t1, t2, t3 } に分類 • 2つの組み合わせで、相互作用するオブジェクトのペアが出現 • 組み合わせは最大で 4×3=12 通り考えられる • DateCellのグループ{ s1, s2, s3, s4 }、CalendarDateのグループ{ t1, t2, t3 }
s4とt3の相互作用 RegisterDialog 予定編集用ダイアログ マウスクリック操作検出後、DateCellは CalendarFrameにCalendarDateを渡す RegisterDialogはCalendarDateを受け取り、 日付情報を問い合わせ
s4とt3の相互作用 テキスト表現の再生成のため 日付情報を問い合わせ セルがマウスクリックされてから、対応する日付に 予定データが追加されるまでの相互作用に対応 RegisterDialogがCalendarDateに 予定データの追加を依頼 セルの色情報の再生成のため 予定の有無の問い合わせ
考察:グループ化の妥当性 • DateCellの関連クラスに基づくグループ化 • グループ内の振舞いの違いは、繰り返しの回数だけ • 他のケーススタディでは、明らかに互いに振舞いの異なるオブジェクトがあった • 関連クラスでは認識できない振舞いの違いが存在 • グループ化の妥当性を評価する方法が必要 • 適切な代表オブジェクトを選択する方法が必要 ?
考察:相互作用するグループの組み合わせ • 2つのクラスのグループ間で相互作用するオブジェクトのペアは、限られた組み合わせで出現 • オブジェクトは限られた振舞いのオブジェクトとのみ、相互作用する傾向があるのかもしれない • 一般にこの傾向があるのか調査が必要
まとめ • 実行履歴からクラスの代表的な動作を可視化する手法 • オブジェクトを呼び出し関係にあるクラスの集合に基づいてグループ化 • グループの代表オブジェクトの振舞いのみを可視化 • 2つのクラスのグループ間の代表的な相互作用例のみを可視化 • 1つのクラスから生成された多数のオブジェクトから、代表的な動作例を抽出できた • DateCellの1008のオブジェクトから、4つの動作例を抽出 • CalendarDateの730のオブジェクトから、3つの動作例を抽出 • 両クラスのオブジェクトから、2つの相互作用例を抽出 • 今後の計画 • より大規模なシステムでの有用性の調査
付録:DateCellのグループ内の振舞い • 『文字』とメソッドの対応
付録:‘JHotDraw’への適用結果 • 『org.jhotdraw』は『-』で省略
付録:呼び出し関係グラフ • DateCellのグループ{ s1, s2, s3, s4 },CalendarDateのグループ{ t1, t2, t3 }
付録:関連メソッドに基づくグループ化 • 相互作用に利用されるメソッド群の違いを識別 • オブジェクトごとに、動作コンテクストMethods, Calledを抽出 • Methods(o) • オブジェクトoの呼び出されたメソッドの集合 • Called(o) • オブジェクトoが呼び出したメソッドの集合 • オブジェクトo1、o2が同じグループに所属 • Methods(o1) = Methods(o2) かつ Called(o1) = Called(o2)
付録:グループ間の呼び出し関係の可視化 • 呼び出し関係グラフによる可視化 • 頂点は、グループと、他のクラスを表現 • ある頂点に属するオブジェクトのどれか1つでも、 ある別の頂点に属するオブジェクトにメソッド呼び出しする場合、 その頂点間に有向辺を作成 • 例) クラスBのグループ s1= { B10, B11 }, s2={ B12, B13 } • Bのオブジェクトは、クラスAのオブジェクトからメソッド呼び出しされる • オブジェクトB12は、クラスCのオブジェクトにメソッド呼び出しする C s1 A s2
付録:ScheduleListのグループ化 • クラスScheduleList • 予定データを保持するリスト • 実行履歴中には100個のオブジェクトが出現 • 関連クラスに基づくと、1つのグループに分類された • 関連メソッドに基づいて{ u1, u2, u3 }に分類 • u1,u2と u3では、明らかに振舞いが異なっていた
付録:CalendarDateとScheduleListの相互作用の抽出 • 相互作用のあるオブジェクトのペアの関係性が異なる • 同じクラスの組み合わせであっても、相互作用の関係性が異なる場合がある • グループu1,u2は、日付ごとの予定データのリストに対応 • グループu3は、曜日ごとの予定データのリストに対応 • CalendarDateのグループ{ t1, t2, t3 }、ScheduleListのグループ{ u1, u2, u3 }
付録:提案手法の手順(1/2) • 実行履歴から、オブジェクトごとのメソッド呼び出し系列を抽出 • オブジェクトの動作コンテキストに基づくグループ化 • グループごとに代表的な振舞いを可視化 • 各グループから代表オブジェクトを1つ選択 • 代表オブジェクトの振舞いを、シーケンス図として可視化
付録:提案手法の概要(2/2) • 特定クラスとの相互作用に注目 • どうような相互作用を行うのか • どのような振舞いのオブジェクトと相互作用するのか • クラス間の相互作用の抽出 • 他のクラスのオブジェクトをグループ化 • グループ間で相互作用するオブジェクトのペア集合を抽出 • クラス間の相互作用の可視化 • ペア集合から代表ペアを選択 • 代表ペアの振舞いを、シーケンス図として可視化