1 / 31

クラス動作シナリオ可視化手法の プログラム理解作業に対する有効性評価

クラス動作シナリオ可視化手法の プログラム理解作業に対する有効性評価. 大阪大学 大学院情報科学研究科 コンピュータサイエンス専攻 井上研究室 博士前期課程 2 年 宗像 聡 (Munakata Satoshi). 概要. オブジェクト指向プログラムの動作理解を支援 クラスの動作理解を支援 オブジェクトの振舞いを可視化する手法が有効 オブジェクトが多数生成されるクラスの動作理解は困難 各オブジェクトの振舞いを逐一確認するのは労力が大きい 振舞いの類似性に基づきオブジェクト群を分割する手法を提案 グループごとに振舞いを図として可視化

Download Presentation

クラス動作シナリオ可視化手法の プログラム理解作業に対する有効性評価

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. クラス動作シナリオ可視化手法のプログラム理解作業に対する有効性評価クラス動作シナリオ可視化手法のプログラム理解作業に対する有効性評価 大阪大学 大学院情報科学研究科 コンピュータサイエンス専攻 井上研究室 博士前期課程2年 宗像 聡(Munakata Satoshi) 第167回ソフトウェア工学研究発表会

  2. 概要 • オブジェクト指向プログラムの動作理解を支援 • クラスの動作理解を支援 • オブジェクトの振舞いを可視化する手法が有効 • オブジェクトが多数生成されるクラスの動作理解は困難 • 各オブジェクトの振舞いを逐一確認するのは労力が大きい • 振舞いの類似性に基づきオブジェクト群を分割する手法を提案 • グループごとに振舞いを図として可視化 • 注目クラスの代表的な振舞いのみを確認できる • 6つのオープンソースソフトウェアに適用して,有効性を検証 第167回ソフトウェア工学研究発表会

  3. クラスの動作理解 • プログラムの保守にはクラスの動作理解が不可欠[1,2] • クラスの使われ方,クラスのオブジェクトの振舞い • 実行時のオブジェクトの振舞いの可視化が有効 • プログラム実行時に,動作情報を実行履歴として収集 • 注目クラスのオブジェクトごとに,関係する動作情報を抽出 • 呼び出し関係図・UMLシーケンス図,DOPG図として可視化[3,4,5] プログラム 実行履歴 クラス A 呼び出し関係図 シーケンス図 o1 o2 第167回ソフトウェア工学研究発表会

  4. 振舞いの確認における問題 • 注目クラスのオブジェクトが多数生成される場合 • オブジェクトの振舞いはそれぞれ異なる[6] • 各オブジェクトの振舞いを逐一確認することは困難 クラス A ? 第167回ソフトウェア工学研究発表会

  5. 以前に提案した手法[7] • 目的 • オブジェクトを多数生成するクラスの動作理解支援 • 代表的な振舞いの可視化 • 振舞いが類似するオブジェクト群を分割 • グループごとに振舞いをシーケンス図として可視化 • 注目クラスのオブジェクトの代表的な振舞いのみを提示 クラス A !! 第167回ソフトウェア工学研究発表会

  6. 提案手法 • 以前に提案した手法の問題点 • 分割基準が固定で,多様な調査目的を反映できない • UML シーケンス図だけでは,提示された複数の振舞いの違いを比較,確認することが困難 • 対話的な動作理解支援手法として再定義 • Step1:4つの分割基準から1つを選びオブジェクト群を分割 • Step2:3つの可視化方法から1つを選び,各グループの振舞いの違いを強調して可視化 • Step3:注目するグループについて,異なる分割基準で含まれるオブジェクト群を,さらに分割

  7. Step1:オブジェクト群の分割 • オブジェクト集合O={o1,…,on}上の同値関係を定義 • オブジェクトの振舞いの同値性に基づく同値関係 • 観点の異なる4つの同値関係 • 同値関係を1つ選び,オブジェクト群を同値分割 • 同値関係 • Euse(os,ok) ・・・ os,okの参加した機能が同じ • Emethods(os,ok) ・・・ os,okの使われ方が同じ • Eused(os,ok),Ecalled(os,ok) ・・・ 本発表では説明を省略 第167回ソフトウェア工学研究発表会

  8. Euse(os,ok) • メソッド呼び出し元のクラスが完全一致 • o1,o2 ・・・ { クラスX}, o3 ・・・ { クラスY } • クラスはそれぞれ異なる役割を持つ • 複数の役割のクラスが協調動作して,システムの機能が実現[7] • 参加した機能の違いからくる,振舞いの差を識別 クラス A o1.print() o1 クラス X o2 o2.input() クラス Y o3 o3.input() 第167回ソフトウェア工学研究発表会

  9. Emethods(os,ok) • 動作したメソッドが完全一致 • o1 ・・・ { print() }, o2,o3 ・・・ { input() } • 動作したメソッドからは,クラスの使われ方が分析できる[8] • 使われ方の違いからくる,振舞いの差を識別 クラス A o1 o1.print() クラス X o2 o2.input() クラス Y o3 o3.input() 第167回ソフトウェア工学研究発表会

  10. Step2:振舞いの可視化 • 各同値類からオブジェクトを1つランダムに選択 • 同値関係から,ある観点では振舞いの性質が同じことがわかっている • 可視化方法を選び,各オブジェクトの振舞いを可視化 • 呼び出し関係図,UMLシーケンス図,DOPG図 • 抽象度,識別できる振舞いの差が異なる クラス A Euse Euse 第167回ソフトウェア工学研究発表会

  11. Step3:再帰的な分割 • 異なる同値関係を用いて,再帰的に分割 • 複数の観点から,より詳細に振舞いの差を確認できる クラス A Euse Euse 第167回ソフトウェア工学研究発表会

  12. 実装 • Amida-OGAN • GUIベースの対話的ツール • 対話的に,分析クラス・同値類,分割基準,可視化方法を選択 • 呼び出し関係図・UMLシーケンス図・DOPG図 分割基準 可視化方法 分析クラス・同値類 第167回ソフトウェア工学研究発表会

  13. 適用実験 • 目的 • クラス動作理解に対する有効性を検証 • 調査質問 • 可視化するオブジェクトの選び方により,獲得する知識が変わるか? • オブジェクト群の同値分割により,代表的な振舞いを提示できるか? • 各クラスは同値分割により,幾つの同値類に分割されるか? • 方法 • 6つのオープンソースソフトウェアから取得した実行履歴に,提案手法を適用 • ケーススタディとして,特定クラスの動作理解を実施 • 各クラスの分割結果の調査 第167回ソフトウェア工学研究発表会

  14. 分析対象 • オブジェクトが複数存在するクラスの割合 • 約24~71%,平均で約36% 第167回ソフトウェア工学研究発表会

  15. Scheduler • Javaで実装された,予定管理用カレンダープログラム • 予定を記入したい日付に対応するセルをクリック • 登録ダイアログが開き,予定を編集できる • 実行シナリオ • 異なる日付に計3つの予定を追加 • 実行開始から終了までに1973個のオブジェクトが出現 第167回ソフトウェア工学研究発表会

  16. クラスCalendarDateの分析 • クラスCalendarDate • 日付ごとの予定データを管理する • 実行履歴中には731個のオブジェクトが出現 • 731個のオブジェクトの振舞いを確認することは困難 • Euseによる分割を適用 • 呼び出し元のクラスに基づく同値分割 • 参加した機能の違いを識別することが目的 • 3個の同値類{ s1, s2, s3 }に分割 • s1は,オブジェクト数 641 • s2は,オブジェクト数 87 • s3は,オブジェクト数 3 第167回ソフトウェア工学研究発表会

  17. {s1,s2,s3}の呼び出し関係図 s1 s2 注目オブジェクトと,他のクラスのオブジェクトとの メソッド呼び出し関係を有効グラフとして可視化 ・同じクラスは同じ色で表現 ・少数の同値類としか関係しないクラスほど,大きいノードで表現 s3 共通する呼び出し関係 同じ処理を行っていると予測できる 第167回ソフトウェア工学研究発表会

  18. s3の呼び出し関係図 s3 登録ダイアグラムと予定データ をCalendarDateが仲介 予定データ追加に関係したと予測 第167回ソフトウェア工学研究発表会

  19. s3のUMLシーケンス図の一部 • 登録ダイアログ上でユーザからのマウス操作 • 登録ダイアログから予定の追加要求を受ける • 予定データベースに予定を追加 第167回ソフトウェア工学研究発表会

  20. {s1,s2,s3}のDOPG図 s1 s2 • クラスの動作の全体像の把握 • 段階的にクラスの動作を調査 s3

  21. 分析結果 (1/2) • 同値関係 Euse による分割 • 参加した機能の違いを反映していた • s1 ・・・ 初期化   • s2 ・・・ 初期化 & 描画 • s3 ・・・ 初期化 & セル描画 & 予定追加 • オブジェクトの選び方により,獲得できる知識が変わる 第167回ソフトウェア工学研究発表会

  22. 分析結果 (2/2) • 全オブジェクトの呼び出し関係図は,3パターン • 可視化した3図で網羅されていた • 提示した以外の振舞いを図として可視化することで,新たに得られる知識は少ない • DOPG図では,6パターン • 提示していない3パターンがある • 動作したスレッド,推移的な呼び出しの違いなど • 新たに同値関係を定義して,この様な振舞いの差を識別し分割することは可能 • 注目クラスのオブジェクトの振舞いとして,どの程度の差を識別する必要があるか,今後調査が必要 第167回ソフトウェア工学研究発表会

  23. Euseに基づく分割結果 同値類が9 個以下である(1画面で図を 並べて確認できる)クラスの割合 全クラス → 約97% オブジェクト数が50 以上 → 約82% 第167回ソフトウェア工学研究発表会

  24. 多数の同値類に分割されるクラス • イベント通知,データ保持,ユーティリティの役割のクラス • MASUのクラスStateChangeEvent • 8344個のオブジェクト,45個の同値類 • JHotDrawのクラスResourceBundleUtil • 959個のオブジェクト,58個の同値類 • 多数のクラスから横断的に使用されるため 第167回ソフトウェア工学研究発表会

  25. 再帰的な分割 • 分割基準によって分割数は大きく変わることがある • 例) MASUのクラスStateChangeEvent • Euseでは,45個の同値類に分割 • Emethodsでは,3個の同値類に分割 • 分割数の少ない分割基準から適用することで,興味あるオブジェクト群を絞ることが可能 • EuseかEmethodsのどちらかが分割数9以下であるクラス • 全体で約99% • オブジェクト数が50以上のクラスで約93% 第167回ソフトウェア工学研究発表会

  26. 調査結果 • ケーススタディから,可視化するオブジェクトの選び方により,獲得できる知識が変わる場合が実際にあることを確認した. • ケーススタディでは,クラスに代表的な振舞いを提示できた. • Schedulerでは,異なる機能に対応する3つの振舞いを,網羅的に提示できた • オブジェクトが50 個以上あるクラスの内,約84~95%と大多数のクラスで,各分割数は9 以下だった • 各振舞い図を,1 画面で比較,確認できる数 第167回ソフトウェア工学研究発表会

  27. まとめ • クラスの動作理解を支援する手法 • 注目クラスの代表的な振舞いのみを可視化 • 振舞いの同値性に基づいて,オブジェクト群を同値分割 • 同値類ごとに振舞いを可視化 • 動作理解作業に対する有効性評価 • 6つのオープンソースソフトウェアから取得した実行履歴に,提案手法を適用 • 今後の課題 • 実際のメンテナンス作業に対する有効性評価 • 被験者を用いた対照実験,主観的評価など 第167回ソフトウェア工学研究発表会

  28. 第167回ソフトウェア工学研究発表会

  29. DOPG(Dynamic Object Process Graph) • 1つのオブジェクトについて注目した制御依存グラフ DOPG図 ClassB # newClassA() Javaプログラム 1 2 3 4 5 6 7 8 9 10 11 12 class ClassB { void newClassA() { ClassA a = new ClassA(); for(int i=0; i<a.max(); i++) passClassA( a ); } void passClassA( ClassA a ) { a.call(); System.out.println(); } } Create o1 ClassA # max() ClassB # passClassA( ClassA ) ClassB # passClassA( ClassA ) ClassA # call() 第167回ソフトウェア工学研究発表会

  30. Methodsに基づく分割結果 同値類が9 個以下であるクラスの割合 全クラス → 約99% オブジェクト数が50 以上 → 約87% 第167回ソフトウェア工学研究発表会

  31. UseとMethodsの分割結果の相関 第167回ソフトウェア工学研究発表会

More Related