スライド 1

オブジェクト生成の観測に基づく
プログラム実行の要約の抽出
大阪大学大学院情報科学研究科
○中野 佑紀,渡邊 結
石尾 隆,井上 克郎
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