Download - 木構造の比較に基づく メソッド呼び出し履歴の変化の可視化手法
2010/02/15 1Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
木構造の比較に基づくメソッド呼び出し履歴の変化の可視化手
法
井上研究室伊藤芳朗
2010/02/15 2Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
概要背景
►オブジェクト指向プログラムの解析►メソッド呼び出し履歴の比較
提案手法►木構造の比較に基づくメソッド呼び出し履歴の変
化の可視化手法実験
►ソースコードの変更による影響を確認まとめ
2010/02/15 3Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
背景オブジェクト指向プログラム
►オブジェクト同士の相互作用としてシステムの振る舞いを捉える考え方
►実行時の動作を理解するのは難しい クラスの継承 多態性(ポリモーフィズム)
オブジェクト指向プログラムの動作理解►メソッド呼び出し履歴等の動的情報の解析が有効
オブジェクト間のメソッド呼び出し関係を可視化
2010/02/15 4Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
シーケンス図生成システム Amida
Java プログラムのメソッド呼び出し履歴を取得し,シーケンス図を生成するシステム►メソッド呼び出し履歴はメソッド名,オブジェク
ト ID ,スレッド ID などの情報の系列►メソッドの呼び出し関係をシーケ
ンス図で表示►ループや再帰呼び出しを
圧縮する機能を持つ シーケンス図が巨大になるのを防ぐ
谷口, 石尾, 神谷, 楠本, 井上 : “ プログラム実行履歴からの簡潔なシーケンス図の作成手法” , コンピュータソフトウェア, Vol.24 , No.3 (2007) , pp.153-169 .
2010/02/15 5Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
シーケンス図オブジェクト間のメッセージ通信を時系列に沿って
表現するシステムの設計時に作成されるプログラムの動作の理解に有効
B C D EA F G H I
2010/02/15 6Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
プログラムの振る舞いの比較の必要性
ソースコードを変更すると実行時の動作が変わる►デバッグ作業でのソースコードの変更
ソースコードの変更が正しいかの確認したい 予想していない動作の変化を発見したい
実行時の動作はメソッド呼び出し履歴に記録される
メソッド呼び出し履歴を比較すれば動作の変化がわかる►ソースコードの変更前後で同じシナリオを実行する►ソースコードの変更による動作の変化が表れる
2010/02/15 7Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
メソッド呼び出し履歴の比較の問題点
メソッド呼び出し履歴は巨大►人間が比較すると時間がかかってしまう
予想していない変更点の発見が困難メソッド呼び出し履歴ごとに生成したオブジ
ェクトの ID が異なる►オブジェクト ID は生成順序やメモリ上の配置な
どを元に実行ごとに決定するため►同じ役割のオブジェクトの対応が取れない
2010/02/15 8Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
提案手法2 つのメソッド呼び出し履歴を比較し,動作
の変化を検出する►ソースコードの変更前後で同じシナリオを実行
したメソッド呼び出し履歴を取得►メソッドの呼び出し関係を木構造にして比較
動作の変化を可視化する►可視化には Amida を利用し,シーケンス図を生
成するメソッド呼び出し履歴全体のシーケンス図を生成動作の変化である部分を強調表示
2010/02/15 9Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
木構造への変換メソッド呼び出し履歴を木構造に変換する
►1 つのメソッド呼び出しを 1 つのノードにする►メソッドの実行中に呼ばれたメソッドを子ノード
として親子関係を作る►これをメソッド呼び出し関係木と呼ぶ
2 3
4
1 5
0
666
B C D EA F G
0 23
41
5 6
2010/02/15 10Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
メソッド呼び出し関係木の比較一方のメソッド呼び出し関係木の中から部分
木を取り出し,一致する部分木があるか判定する►トップダウン方式で比較していく►部分木が一致したら,ノードにマークをつける
マークのついた部分木は変化していない部分である►全ての部分木で探索が終わったら比較が終わる
最終的にマークのないノードが変化した部分だとわかる
2010/02/15 11Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
部分木の一致条件部分木 T1 と T2 が以下の全てを満たすと一致する
►T1 の根 r 1 と T2 の根 r 2 が一致する
►r 1 と r 2 の子ノードの数が一致する
►r 1 の i 番目の子ノード r 1i を根とする部分木 T1i と r 2
の i 番目の子ノード r 2i を根とする部分木 T2i が一致する
ノード r 1 と r 2 が以下の全てを満たすと一致する►メソッド呼び出し名が等しい►引数の型が等しい►返り値の型が等しい►呼び出し元オブジェクトのクラス名が等しい►呼び出し先オブジェクトのクラス名が等しい
2010/02/15 12Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
メソッド呼び出し関係木の比較の例
2 3
4
1
2 3
4
1 5
0
66
0
7
6
左側の木の部分木に一致する部分木を探す1. ノード 1 と一致するノードを探す2. ノード 1 の子ノードが一致するか調べる3. ノード 3 の子ノードが一致するか調べる
一致する部分のないノードは変化した部分とする
2010/02/15 13Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
シーケンス図へ可視化メソッド呼び出し履歴全体をシーケンス図に
する►変化した部分を強調して表示►変化した部分を自動で探索
シーケンス図が巨大になると探すのが困難 変化した部分に関係する一連のメソッド呼び出しを抜
き出す1 2 3 40 5 6 3 5 6
抽出
2010/02/15 14Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
適用実験実験の目的
►提案手法で実際にソースコードの変更による影響を確認する
実験対象►画像編集ソフト JHotDraw のメソッド呼び出し履
歴バージョン 7.3 と 7.3.1 で同じシナリオを実行
– プログラムを起動し,三角形を 1 つ描き保存せずに終了する
評価方法►バージョン間の変更点を発見できるかバージョン イベント数 ファイルサイズ
(KB)
7.3 55789 5580
7.3.1 49127 4858
2010/02/15 15Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
実験結果実際にソースコードの変更を動作の変化と
して表示できた►3 つのクラスで変更点を発見
新しいメソッドの追加 (DefaultDrawingEditor クラス )メソッドの処理の変更 (AbstractTool クラス )コンストラクタの処理の変更 (DefaultDrawingView ク
ラス )
ソースコードが変更されていないのに動作の変化があると判定された►実行時に派生クラスが変わっていたため
2010/02/15 16Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
スクリーンショット
2010/02/15 17Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
考察提案手法のメリット
►全体の流れが追える メソッドを追加したときにどのような影響が出たのか
が分かる►ソースコードの変更以外での変化を捉えられる
設定ファイルや入力データの変更による動作の変化– 入力による振る舞いの変化の理解– バグ検出に応用
2010/02/15 18Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
まとめまとめ
►木構造の比較に基づくメソッド呼び出し履歴の変化の可視化手法を提案したプログラムの変更による動作の変化を検出検出した動作の変化をシーケンス図に視覚化
►実験を行い,動作の変化からソースコードの変更点を発見した
今後の課題►比較計算にかかる時間の削減
アルゴリズムの改良Amida のループ圧縮処理と組み合わせる