更新履歴情報と静的情報を用いて 同一機能を実装しているクラス群を 抽出する手法の提案 檜皮 祐希 松下 誠 井上 克郎 大阪大学 大学院情報科学研究科 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 背景 • ソフトウェア開発・保守において、特定の機能を実装 している箇所を知る必要がある – ソフトウェア理解 • 理解する範囲の特定 – ソフトウェア部品の再利用 • 再利用に必要な部分の特定 • ソフトウェアが巨大になるとソースコードを見て抽出 するということが困難になる Feature Location 2 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 既存手法とその問題点 • ソースコードから得られる静的情報を解析する – 呼び出し関係を解析する • オブジェクト指向への適用が困難 • ほとんどの手法で完全に自動化されない • 動的な実行履歴を解析する – それぞれの手法にはそれぞれ欠点がある テストケースを実行し、その実行履歴を解析する 組み合わせる • テストケースを作成するコストが大きい • 外部から実行しにくい機能は抽出が困難 • 開発履歴を解析する – 版管理システムに蓄えられた開発履歴を解析する • 版管理システムの使用状況によって抽出が困難 • プログラムの中身を全く見ていない 3 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 研究の概要 • 目的 – あるクラスと同一の機能を実装しているクラス群 を抽出する • 提案手法 – 開発履歴情報に静的情報を組み合わせる • 更新傾向グラフ(開発履歴情報) – クラス間で同時更新される頻度を表したグラフ • コールグラフ(静的情報) – クラス間の呼び出し関係を表したグラフ 4 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 提案手法(概要) 更新傾向グラフ 手順1 開始クラス の決定 A 手順2 更新傾向グラフ コールグラフ の作成 開始クラス 版管理システム のリポジトリ {A, B, C ,F,G} 同一機能を 実装している クラス群のリスト コールグラフ 手順4 抽出クラスと コールグラフ の比較 {A, B, D,F,G} 手順3 更新傾向グラフ でのクラス群の 抽出 抽出クラス リスト 5 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 手順1 開始クラスの決定 • 抽出する機能の中の1つのクラスを決定する – 開始クラスを元にクラス群の抽出を行う • 決定方法の例 – 機能を表す単語を用いてのキーワード検索 – ソースコード部品検索システムを用いての検索 6 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 手順2.1 更新傾向グラフの作成 同時更新された クラス群のリスト • 更新傾向グラフ – 同時更新情報を元に作成したグラフ – 頂点はクラス – 頂点間の辺は同時更新傾向の強さ (confidence)を保持 {A,B,C} {A,B} {C,D} {A,B} {A,C,D} {C,D} Aと Bが同時に更新された回 数 confidenceA, B Aが更新された回数 • 版管理システムのリポジトリから同時 更新情報を抽出 • クラス間の同時更新傾向の強さ (confidence)を計算 confidence 3 0.75 4 0.75 A 0.5 1.0 B 0.5 0.33 0.25 C Department of Computer Science, Graduate School of Information Science and Technology, Osaka University A, B 0.25 0.33 0.75 1.0 D 7 2006/12/15 手順2.2 コールグラフの作成 • コールグラフ – クラス間の呼び出し関係を表現 – 頂点はクラス • ソースコードを解析し、呼び出し関係を抽出すること でコールグラフを作成する class A { a1() { ・・・ B.b1(); ・・・ C.c2(); ・・・ } } class B { b1() { ・・・ C.c1(); ・・・ } } Class C { c1() { ・・・ } c2() { ・・・ } } A B C 8 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 手順3 更新傾向グラフでの クラス群の抽出 • 開始クラスとの同時更新が強い ものを抽出していく • 更新傾向グラフからconfidence が閾値Eth以下の辺を削除する • 開始クラスから到達可能な頂点 集合C1を求める • 開始クラス、及びC1のいずれか の頂点へ到達可能な頂点集合 C2を求める • 開始クラス、C1、C2の和集合を 抽出クラスとする 開始クラス C1 C2 9 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 手順4 コールグラフとの比較 誤って抽出したクラスの除去 • 更新傾向グラフで誤って 抽出したクラスを除去 • 抽出クラス距離を用いる 3 3 1 1 1 – 2つのクラス間のパスで の抽出されていないクラ スの数の最小値 • 開始クラスとの抽出クラ ス距離が2以上のクラス を誤って抽出したクラス として除去する 開始クラス 抽出クラス 10 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 手順4コールグラフとの比較 抽出できなかったクラスの補完 • 以下の条件のいづれかを満 たすクラスを抽出する – 呼び出しているクラスのうち3つ 以上が抽出されている – 呼ばれているクラスのうち3つ 以上が抽出されている – 呼び出しているクラスのうちい づれかが抽出されており、呼ば れているクラスのうちいづれか が抽出されている • 呼び出しているクラスと呼ば れているクラスのすべてが抽 出されているクラスを抽出す る 開始クラス 抽出クラス 11 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 適用実験 • 実験対象 – XBrowser • Javaで書かれたオープンソースウェブブラウザ • クラス数171クラス、行数28,881行、総更新回数165回、総リビジョン数 1,388個 • 実験内容 – 履歴情報のみ、静的情報のみ、提案手法の3つについて機能抽出 • ブックマーク機能の抽出 – 開始クラス:xbrowser.bookmark.BookmarkFinder – 閾値Eth=0.95 • ヒストリ機能の抽出 – 開始クラス:xbrowser.history.HistoryFinder – 閾値Eth=0.95 – それぞれ適合率、再現率を用いて評価 • 正解クラスはソースコードから判定 12 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 ブックマーク機能 正解 抽出 該当 クラス クラス クラス 適合率 再現率 更新履歴情 報のみ 34 10 10 1.00 0.29 静的情報の み 34 32 16 0.50 0.47 提案手法 34 29 25 0.86 0.74 更新傾向グラ フでの抽出 10 10 1.00 コールグラフ での除去 0 0 0.00 コールグラフ での補完 19 15 0.79 適合率、再現率 ともに提案手法 は高く、 再現率は最大 更新傾向グラフ で抽出できな かった多くのクラ スを抽出できた 13 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 ヒストリ機能 正解 抽出 該当 クラス クラス クラス 適合率 再現率 更新履歴情 報のみ 30 15 6 静的情報の み 30 31 13 0.42 0.43 提案手法 30 27 14 0.52 0.47 0.40 0.20 更新傾向グラ フでの抽出 15 6 0.40 コールグラフ での除去 2 0 0.00 コールグラフ での補完 14 8 0.57 適合率、再現率と もに提案手法が 最大 誤って抽出して しまったクラスを 除去しきれな かった 14 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 まとめと今後の課題 • まとめ – あるクラスと同一の機能を実装しているクラス群 を抽出する手法の提案 • 更新傾向グラフを用いて抽出 • コールグラフを用いて誤りの除去と抽出漏れの補完 • 今後の課題 – 誤って抽出したクラスの除去の精度の向上 – 抽出精度の向上 15 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15 16 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2006/12/15
© Copyright 2024 ExpyDoc