オブジェクトの動作の比較による 実行履歴削減手法の提案 大阪大学大学院情報科学研究科 博士前期課程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
© Copyright 2024 ExpyDoc