オブジェクトの動作の比較を用いた 実行履歴 削減

オブジェクトの動作の比較による
実行履歴削減手法の提案
大阪大学大学院情報科学研究科
博士前期課程2年
井上研究室 脇阪 大輝
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
目次
バグ再現のための実行履歴とその量の問題について
提案する実行履歴削減手法の詳細
評価実験の計画
今後
2
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
背景
プログラムに障害が発生したとき
障害の生じた実行についての情報を実行履歴から確認
障害を招いたバグをデバッグ環境で再現し,バグを修正
修正
実行履歴
3
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
実行履歴の収集
デバッグのためには詳細な情報がある方が望ましい
単純なスタックトレースだけでは再現が難しいこともある
プログラムの実行履歴はロガーツールによって収集
プログラムの実行時に記録
プログラムが動く間,記録し続けたい
いつ障害が生じても良いように
実行履歴
4
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
問題点
プログラムの動作の詳細な情報の量は膨大
規模の小さな実行でも詳細な情報の量は多い
実行が続く限り情報は増え続け,上限がない
長期間,動作を常に記録し続けることは困難
表:ベンチマークソフトのプログラムの実行履歴サイズの例
(メソッド呼出し・実行,変数読書きの発生を記録したもの)
プログラム名
実行履歴のサイズ
avrora
146 GB
batik
4.19 GB
h2
261GB
luindex
1.86 GB
pmd
539 MB
実行履歴
5
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
アプローチ
障害に備えて常に動作を記録していると
実行履歴には障害に関係ない履歴が大量に含まれる
障害に関係しそうにない実行を
実行中に判定できれば,
その部分の記録をやめることで
実行履歴のサイズを減らすことができる
6
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
プログラムの動作の種類
過去の研究により,オブジェクトの動作はいくつかの種類に分類することができ,
その種類はあまり多くないことがわかっている
プログラムの動作は,それに関わるオブジェクトの動作の種類に影響を受ける
オブジェクトの動作が既知の種類に当てはまる限り
プログラムも似た動作をすると考えることができる
クラスA
function(A a){
....
....
//
function(A a){
....
....
//
function(A a){
....
....
//
}
}
}
7
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
提案手法
既知の実行と同じ動作すると考えられる箇所を記録
の対象から除外
繰り返しによる同じ動作を表す履歴が多い
過去と同じ動作なら障害は発生しない
未知の動作のみを記録し実行履歴の量を削減する
8
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手法概要
1. 先にプログラムを実行し,オブジェクトの動作を蓄積
2. 次のプログラムの実行ではメソッドの実行ごとに既知
の動作をしそうかを蓄積した記録を用いて判定する
3. 先の実行にない動作をしているオブジェクトが入力
となるメソッドの実行のみを詳細に記録する
先の実行
オブジェクトごとの動作
比較
後の実行
プログラム
未知の動作と
考えられる
実行の履歴
9
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
オブジェクトの動作
オブジェクトの動作はオートマトンとして抽出する
入力はオブジェクトに対するメソッドの呼出し位置
同じメソッド呼出し位置を入力した後は全て同じ状態
1:Stack s;
2:while(i = read()){
3: s.push(i);
4:}
5:
6:while(!s.isEmpty()){
7: sum += s.pop();
8:}
push#3
始めのループで
pushが2回呼出されたとき
isEmpty#6
push#3
pop#7
isEmpty#6
同じメソッド呼出し位置の繰り返しは
ループとして表現される
10
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
記録の対象
メソッドの実行開始時に以下のオブジェクトの動作を
比較する
比較
先の実行でそのメソッドの入力となった
オブジェクトの動作
後の実行でメソッドの入力となっている
オブジェクトの動作
メソッドの入力のオブジェクトとは
• メソッドを実行されたオブジェクト
• メソッドの引数となったオブジェクト
obj1.method(obj2, obj3);
そのうちの1つでも未知の動作があればそのメソッドの
実行を記録対象とする
11
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
オブジェクトの動作の比較
プログラム実行中に出現したオブジェクトへのメソッド
呼出しを比較対象のオートマトンへ入力する
状態遷移が可能な間はそのオブジェクトの動作を既知と
みなす
状態遷移ができなかった場合,その動作を未知とみなす
push#3
isEmpty#6
push#3
pop#7
1. push#3
2. push#3
3. isEmpty#6
既知の動作
1. isEmpty#6
isEmpty#6
先の実行で得られたオブジェクトの動作を表すオートマトン
未知の動作
12
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
実行履歴の削減例(1/3)
1:String exp = argv[0];
2:Stack stack = new Stack();
3:for(int i=0;i<exp.length();i++){
4: char c = exp.charAt(i);
5: if(c==‘+’){
6: add(stack);
7: }else{
8: stack.push(Character.digit(c, 10));
9: }
10:}
11:System.out.println(stack.pop);
14:static private void add(Stack stack){
15: int a = stack.pop();
16: int b = stack.pop();
17: stack.push(b+a);
18:}
19:
逆ポーランド記法で与えられた数式を,スタックを用いて計算するプログラムを例に用いる
13
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
実行履歴の削減例(2/3)
1:String exp = argv[0];
2:Stack stack = new Stack();
3:for(int i=0;i<exp.length();i++){
4: char c = exp.charAt(i);
5: if(c==‘+’){
6: add(stack);
7: }else{
8: stack.push(Character.digit(c, 10));
9: }
10:}
11:System.out.println(stack.pop);
14:static private void add(Stack stack){
15: int a = stack.pop();
16: int b = stack.pop();
17: stack.push(b+a);
18:}
19:
push#8
pop#15
pop#16
push#17
push#8
pop#11
先の実行では数式として”12+”が与えられるとする
そのときのStackの動作は次のオートマトンとなる
14
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
実行履歴の削減例(3/3)
1:String exp = argv[0];
2:Stack stack = new Stack();
3:for(int i=0;i<exp.length();i++){
4: char c = exp.charAt(i);
5: if(c==‘+’){
6: add(stack);
7: }else{
8: stack.push(Character.digit(c, 10));
9: }
10:}
11:System.out.println(stack.pop);
14:static private void add(Stack stack){
15: int a = stack.pop();
16: int b = stack.pop();
17: stack.push(b+a);
18:}
19:
push#8
pop#15
pop#16
push#17
push#8
後の実行では数式に”12+3+”が与えられるとする
“12+”までの部分の計算では,
Stackについて先の実行と同じ動作が観測されるので,
それまでのStackのメソッドやaddメソッドの実行は記録されない
“3+”の計算から,状態遷移できず,2度目のaddが記録対象に
pop#11
15
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
評価実験計画
目的
手法により実行履歴を削減できるかどうかを調査
対象
DaCapoベンチマーク
– 様々なアプリケーションを実行できるベンチマークソフト
– オプションで実行の規模を選択でき,規模の違いとは,たとえば画像処
理アプリケーションのbatikでは処理する画像の数の違い
手段
DaCapoベンチマークの小規模な実行でオブジェクトの動作を
蓄積し,規模の大きい実行の履歴の量を,提案手法を用いた
場合と用いない場合で比較する
16
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
研究の今後
評価実験を行いその結果を調査する
メソッドの入力となるオブジェクトの振舞いと,メソッド
実行のパスの関係を調査
17
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University