オブジェクト生成の観測に基づく プログラム実行の要約の抽出 大阪大学大学院情報科学研究科 ○中野 佑紀,渡邊 結 石尾 隆,井上 克郎 1 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 背景 • デバッグ,保守作業ではプログラムの動作理解が重要 • プログラムはデータを加工していくことで処理を実現 – データを追跡すれば,動作の理解が可能 ある予定管理プログラムでの例 予定データ ファイル 予定データ 暦データ 表示用 データ 更新後の 予定データ 予定データ ファイル 更新後の 表示用データ • デバッガとブレイクポイントを用いてデータを追跡 – すべての命令をステップ実行することは非現実的 – 一気に実行するとその間のデータの様子が分からない 2 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 提案手法 • プログラムの実行時情報からデータの加工 プロセスをオブジェクトの生成関係として抽出 – 指定された実行区間を対象 • 多くのオブジェクトが生成 • 出力となるオブジェクトは少数 Register Dialog 生成 利用 – 生成関係を要約 • 入出力に無関係なものを排除 • 生成関係を簡潔にする • 区間における動作理解を支援 Date Time Schedule 生成 利用 String Content 3 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 詳細 入力 : 実行履歴,区間,省略するクラス集合 実行履歴 : プログラムの実行時情報を記録したもの メソッド呼び出し,フィールドアクセス等の情報を含む 1. オブジェクトの分類 2. 生成関係の特定 3. 生成関係の要約 3-1.オブジェクトの省略 3-2.オブジェクトの集約 出力 : 入出力オブジェクト一覧,要約した生成関係 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 4 1. オブジェクトの分類(1/2) • 入力オブジェクト – 指定区間より前で生成 : 生成 – 区間内で利用 • 内部オブジェクト 5 出力 : 利用 • 出力オブジェクト – 区間内で生成 – 区間終了後も利用 内部 6 4 3 入力 2 1 区間開始 – 区間内で生成 – 区間終了後は利用されない 区間終了 時間 5 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1. オブジェクトの分類(2/2) 実行履歴中のオブジェクトをチェック • 区間より前 – 区間より前に生成されたオブジェクトを求める • 区間内 – 区間より前に生成されたオブジェクトに • 含まれる → 入力オブジェクトに分類 • 含まれない → 区間内で生成されたオブジェクトとする • 区間終了後 – 区間内で生成されたオブジェクトが • 利用される → 出力オブジェクトに分類 • 利用されない → 内部オブジェクトに分類 6 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2. 生成関係の特定(1/2) • オブジェクト間の生成関係 – TRIGGER : オブジェクト生成を行ったオブジェクト – BASE : オブジェクト生成に利用されたオブジェクト class RegisterDialog { … newSchedule = new Schedule (date, time, memo); Register TRIGGER Schedule Dialog … BASE } Date BASE BASE String Time class Schedule { … Schedule (Date date, Time time, String memo){ … } … } Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 7 2. 生成関係の特定(2/2) • 実行履歴の情報から特定 – コンストラクタ呼び出しイベントの発生時に生成 Event Server TRIGGER Receiver 生成 Value BASE ConstructorCall RegisterDialog(10) Schedule(20) Date(17),Time(18), String(19) ConstructorCall Schedule(20) String(19) Content(21) Register TRIGGER TRIGGER Schedule(20) Content(21) Dialog(10) BASE Date(17) BASE Time(18) BASE BASE String(19) 8 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 生成を観測できない場合(1/3) • 生成を観測できないオブジェクト – 配列,ソースコード上で記述された文字列 – ライブラリ内で生成されたオブジェクト • 初めて登場した時に生成されたと見なす – 基本的に利用したオブジェクトをTRIGGER – TRIGGERが特定不能の場合,UNKNOWNを利用 9 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 生成を観測できない場合(2/3) class RegisterDialog { … class Scheduler { ScheduleList[] schedules = new ScheduleList[12]; DateFormat format; … … } date = format.parse(“2010/03/04”); … void buttonAction (ActionEvent e){ … } … } 生成 Event Server TRIGGER Receiver Value FieldWrite Scheduler(3) Scheduler(3) ScheduleList[](4) MethodCall RegisterDialog(10) DateFormat(11) String(12) MethodCall RegisterDialog(10) DateFormat(11) String(12) MethodEntry UNKNOWN RegisterDialog(10) ActionEvent(15) 10 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 生成を観測できない場合(3/3) • メソッドの戻り値が未知のオブジェクト – メソッドをコンストラクタと見なす – メソッドを持つオブジェクトはBASE class RegisterDialog { … String input, target, replacement; … String memo = input. replace (target, replacement); … } Event Server TRIGGER MethodCall RegisterDialog(10) String(16) String(7), String(8) Receiver Value BASE MethodReturn RegisterDialog(10) String(16) String(19) 生成 11 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 3-1. オブジェクトの省略 内部オブジェクトのうち,条件を満たすものを省略 • 入出力オブジェクトと無関係 – 生成関係をたどり,入出力オブジェクトに到達不可能 • • • • • コンストラクタ内のみで利用 コールスタックの深い部分のみで利用 内部クラス ユーザが指定したクラス 中間データ – 自身の生成にBASEを持つ – 他のオブジェクトの生成において,BASEにしかならない – 最後にオブジェクトの生成に利用された後,利用されない12 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 3-2. オブジェクトの集約 • 同じ生成関係を持つオブジェクト集合を集約 – 対応するオブジェクトのクラス,分類が等しい – 対応するオブジェクト間の関係が等しい TRIGGER B(1) : 内部 TRIGGER B,Cの TRIGGER BASE C(1) : 出力 オブジェクト集合 を集約 A : 入力 TRIGGER A : 入力 B(2) : 内部 BASE BASE TRIGGER B : 内部 2 objects TRIGGER C : 出力 2 objects C(2) : 出力 13 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University ケーススタディ • 対象 : 予定管理プログラム – 実行履歴のシナリオ • 起動,日付の選択,予定の入力,予定の登録,終了 – 指定区間 : 日付の選択前から予定の登録後 – 省略クラス : 指定なし 14 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 入出力オブジェクトの一覧 入出力オブジェクトの情報を出力 I/O I I O O O ID 6 399 2358 2359 2360 Name scheduler.domain.Scheduler java.sql.Date java.sql.Time java.lang.String scheduler.domain.Schedule Value 2010-03-04 16:30:00 meeting 15 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 生成関係の出力例 : 入力 : 出力 36464 : TRIGGER scheduler.util DateTimeUtils(STATIC) : 内部 : STATIC TRIGGER java.lang String 1 object : “16” 1 object : “30” java.sql Time(2358) “16:30:00” 36471 : BASE2 36471 : TRIGGER scheduler.gui RegisterDialog(2248) 36305 : TRIGGER javax.swing JComboBox 2 objects 36471 : BASE1 scheduler.domain Schedule(2360) 36469 : TRIGGER TRIGGER java.sql Date(399) “2010-03-04” 36479 : TRIGGER java.lang String(2359) “meeting” 36469 : BASE0 36471 : BASE3 36479 : BASE1 javax.swing JTextField(2348) Department of Computer Science, Graduate School of Information Science and Technology, Osaka University scheduler.domain Content(2361) 16 考察と今後の課題 要約結果の検証 • 要約によりサイズが十分に小さくなったか? – 適用例におけるノード数(153→19) • 任意の実行履歴,区間に適用可能か? – 様々な実行履歴,区間に適用 • 重要な情報が省略されないか? – 要約結果を開発者に見てもらう • 指定区間の動作理解を支援可能か? – ツールを用いて動作理解を行ってもらう 17 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University まとめ • 実行履歴上の指定区間におけるオブジェクト の生成関係の要約を提示する手法を提案 – オブジェクト(入力,出力,内部)の分類 – 生成関係(TRIGGER,BASE)の特定 – 生成関係の要約 • 省略 : 内部オブジェクトのうち条件を満たすもの • 集約 : 同じパターンのオブジェクト群 • Javaプログラムを対象としたツールを試作 – ケーススタディを実施 18 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 生成を観測できない場合 • フィールド読み出しで未知のオブジェクトを読み出す – フィールドを持つオブジェクトをTRIGGER • 未知のオブジェクトからメッセージが届く – UNKNOWN をTRIGGER class CalendarDate { Boolean hasSchedules; … hasSchedules = Boolean. TRUE; … } Event Server Receiver TRIGGER Value 生成 FieldRead CalendarDate(5) Boolean(STATIC) MethodCall DateCell(14) Boolean(6) UNKNOWN Date(17) 19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
© Copyright 2025 ExpyDoc