remviewer : 複数回実行 された java メソッド の実行 経路可視化ツール
DESCRIPTION
REMViewer : 複数回実行 された Java メソッド の実行 経路可視化ツール. 松村俊徳 , 石尾隆 , 鹿島悠,井上克郎. 大阪大学. プログラム理解. ソフトウェア開発の保守工程において,プログラム理解は重要である 機能の追加 バグの修正 プログラムの理解には実行時情報が利用される 変数の値,命令 の 実行順序など. Omniscient Debugger. Capture and Replay Tool と呼ばれる技術の一種 プログラム 実行の全ての実行時情報を記録し ,任意 の時点の状態を計算機上で 再現 - PowerPoint PPT PresentationTRANSCRIPT
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
REMViewer: 複数回実行されたJava メソッドの実行経路可視化ツー
ル
大阪大学
1
松村俊徳 , 石尾隆 , 鹿島悠,井上克郎
2Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
プログラム理解ソフトウェア開発の保守工程において,プログラム理解は重要である
機能の追加バグの修正
プログラムの理解には実行時情報が利用される
変数の値,命令の実行順序など
3Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
Omniscient Debugger
Capture and Replay Tool と呼ばれる技術の一種
プログラム実行の全ての実行時情報を記録し,任意の時点の状態を計算機上で再現デバッガと同様のインタフェースを提供
プログラムの動作を理解する上で有望な技術とされている
4Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
Omniscient Debugger
Step Back
Step Next
http://www.lambdacs.com/debugger/
5Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
Omniscient Debugger における問題点
Omniscient Debugger により閲覧できるのは ,
ある 1 時点の実行時情報である
メソッドが複数回実行されていた場合,個々の制御パスについて順に分析を行わなければならない
100 回呼び出されているメソッドのある 1 回に興味がある
6Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
REMViewer
Capture and Replay Tool
Java プログラムの実行を記録Omniscient Debugger と同様に実行をすべて記録する
ユーザーの指定したメソッドの実行経路を可視化
複数回のメソッドの実行は一覧表示
7Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
REMViewer
REMViewer はそれぞれの実行経路を一覧表示
開発者はそれぞれの実行・変数の状態を比較することが可能
8Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
ツールの実行手順
実行トレース
プログラム P Bytecode InstrumentationTool
プログラム P’
REMViewer
Execute P’on a JVM
メソッドの選択
9Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
実行トレースの記録実行トレースとしてメソッド間のすべての制御フローとデータフローをイベントの列として記録する
制御フローを表すイベントメソッドの開始,メソッドの終了,メソッドの呼び出し,例外の送出と捕捉
データフローを表すイベントメソッドの引数と返り値の受け渡し,フィールドと配列へのアクセス
10Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
メソッド実行の再現実行トレース ( イベント列 ) をもとにメソッド内の命令列を再度実行するまず実行トレースのメソッド開始イベントの位置から引数の情報を読み出し,ローカル変数の初期状態を構築イベントを1つ読み出し,そのイベントに紐付けられた命令 ID までのバイトコード命令を順に解釈し,スタックやローカル変数の状態を更新する.
フィールドの読み出し結果などは,イベントから取得する
11Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
表示内容
Line coverage数字は各行の実行回数
実行経路
12Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
表示内容
カーソル位置の変数の値
カーソル
13Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
表示内容
行を指定
指定した行における変数の状態の一覧
14Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
Example method (GCD)
Test casesgcd(3,3)
gcd(6,-2)
gcd(5,5)
gcd(2,6)
gcd(10,7)
public static int gcd(int a,int b){ if(a < 1 || b < 1){ return 0; }
int d = b; int r = a % b;
while(r > 0){ int n = d; d = r; r = n % d; } return d;}
15Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
Tool demonstration
16Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
分類機能メソッドの複数回の実行を,グループに分類する
Line-based による分類実行した行の集合が等しい実行を同じグループとする
Path-based による分類実行経路が等しい実行を同じグループとする
17Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
Line-based
18Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
Path-based
19Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
ツールの評価実行時間と可視化の適応可能性という 2 つの観点でツールの評価を行った
実験対象: DaCapo benchmark に収録されている batik と fop という 2 つのアプリケーション
実行環境:CPU : Intel Xeon 2.90GHz
メモリ: 256GB
20Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
実行トレースの取得Benchmark batik fop
通常の実行時間 4.44 sec 2.80 sec
トレース記録の実行時間
33.67 sec 36.91 sec
履歴サイズ 717 MB 860 MB
メソッド数 3131 3611
メソッド実行数 17,319,055 26,551,919
21Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
再現時間
22Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
可視化の適用可能性
( 表示に使用されるビューの数 )
23Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
ツールの制限分類数が膨大なメソッド
line based による分類では, 30 個のグループとなる
実行トレースを記録できないメソッドも存在ログ出力用命令を埋め込むと,メソッドの長さが JVM の制限を超えるような長いメソッドオブジェクトの情報が欠落
メソッド内からアクセスしていないフィールドに関する情報が欠落している
24Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
関連研究Selective Capture and Replay[1]
指定されたメソッドの実行の再現を行うメモリ使用量,実行トレースの解析時間が少ない
Relative Debugging[2]バージョンの異なる 2 つのプログラムの実行を比較する[1] Shrinivas Joshi and Alessandro Orso. SCARPE:A technique and tool for selective capture and replay of
program executions. In Proceedings of International Conference on Software Maintenance, pp.234-243, 2007.[2] David Abramson, Clement Chu, Donny Kurniawan, and Aaron Searle. Relative debugging in an integrated development environment. Software Practice and Experience, Vol. 39, No. 14, pp. 1157-1183, 2009.
25Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
まとめと今後の課題実行経路および変数の状態を可視化するツール REMViewer を提案
メソッドのテストケースを効率よく理解できることを期待している
今後の課題実際の作業における有用性の評価ツールの機能の改善実行経路の分類の改善