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

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

シーケンス図の生成のための実行履歴圧縮手法
背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
プログラムの変更前後での 実行履歴の差分検出手法
情報伝播によるオブジェクト指向プログラム理解支援の提案
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
プログラムの動作を理解するための技術として
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
クラス動作シナリオ可視化手法の プログラム理解作業に対する有効性評価
UMLとは           032234 田邊祐司.
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
静的情報と動的情報を用いた プログラムスライス計算法
オブジェクト指向プログラムのための 動的結合メトリクスの評価
類似するコーディングパターンの 利用状況調査ツールの提案
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
ソードコードの編集に基づいた コードクローンの分類とその分析システム
暗黙的に型付けされる構造体の Java言語への導入
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
Javaプログラムの変更を支援する 影響波及解析システム
社会シミュレーションのための モデル作成環境
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
UMLモデルを対象とした リファクタリング候補検出の試み
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
プログラム理解におけるThin sliceの 統計的調査による有用性評価
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
シナリオを用いたレビュー手法PBRの追証実験 - UMLで記述された設計仕様書を対象として -
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
UMLの概要とオブジェクト指向の基本概念
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
静的情報と動的情報を用いた Javaプログラムスライス計算法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
オブジェクトの動的支配関係解析を 用いたシーケンス図の縮約
オブジェクトの動的支配関係解析を用いた シーケンス図の縮約手法の提案
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
木構造の比較に基づく メソッド呼び出し履歴の変化の可視化手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
プログラム理解のための 付加注釈 DocumentTag の提案
オブジェクト生成の観測に基づく プログラム実行の要約の抽出
オブジェクト生成の観測に基づく プログラム実行の要約の抽出
Presentation transcript:

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

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

オブジェクト指向システムの動作理解 オブジェクト指向システム 実際の動作は、実行時に動的に決定 オブジェクトが相互にメッセージを交換して処理を行う 実行される処理は、受信するオブジェクトにより異なる オブジェクトは動的に生成される 実際の動作は、実行時に動的に決定 ソースコードの解析だけでは困難[1] 36秒 現在、多くのシステムがオブジェクト指向に基づいて設計されています。 このようなシステムをオブジェクト指向システムと呼び、オブジェクトが相互にメッセージを交換することで、一連の処理が行われるという特徴があります。 この時、実際に実行される処理は、メッセージを受信するオブジェクトによって異なる、また、オブジェクトは実行時に動的に生成される、という性質から、システムの実際の動作は、実行時に動的に決定します。 そのため、ソースコードの静的な解析だけではシステムの動作理解は困難であると言われています。 [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] 23秒 そこで、システムの動的解析により取得した、実行履歴の可視化が有効であると言われています。 実行履歴とは、システムの実行時情報を記録したもので、実行履歴として、オブジェクト間のメソッド呼び出し情報を取得し、UMLのシーケンス図として可視化するという手法が既に提案されています。 [2]谷口考治, 石尾隆, 神谷年洋, 楠本真二, 井上克郎: プログラム実行履歴からの簡潔なシーケンス図の生成手法, コンピュー タソフトウェア, Vol.24, No.3, pp.153-169, 2007.

クラスの動作理解 ! システムの保守作業では、クラスの動作理解が必要 オブジェクトの実行時の振舞いを確認することが有効[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.221-230, 2001.

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

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

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

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

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

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

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

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

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秒

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

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

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

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

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秒

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

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

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

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

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

付録:‘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

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

付録:‘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』は『-』で省略

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

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

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

付録: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は明らかに振舞いが異なる

付録: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秒

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

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