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