履歴情報を用いた同一ユースケース 実装クラス群抽出法の提案 楠田泰三, 川口真司, 松下誠, 井上克郎 大阪大学大学院情報科学研究科 井上研究室 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェアの可視化 ソフトウェア可視化技術 ソフトウェアの構造や振る舞いを、図やグラフを用いて表現することで、 ソフトウェア理解を支援 例) UMLのクラス図 オブジェクト指向ソフトウェアの構造理解を支援 クラスの継承、依存などの関係を記述できる StateSetter setState() State printMsg() MsgPrinter state : State StateA StateB setState() printMsg() printMsg() printMsg() Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2 ソフトウェア可視化技術の問題点 オブジェクト指向開発では、開発が進むにつれクラス数が増加する 大規模なオブジェクト指向ソフトウェアは、その全てのクラスを 可視化しても、出力された図も大規模になり理解が難しい クラス数100余りのソフトウェアのクラス図 同じユースケースを実装しているクラス群のみを抽出して、可視化する ⇒ 要素数の少ない図を出力 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 3 既存研究の問題点 ユースケース抽出の既存手法[1] 静的にコールグラフを解析する 動的な側面を考慮せず、呼ばれる可能性がある全てのメソッドに呼び出し辺を つけたコールグラフを作成 入力があるメソッドから出力があるメソッドまでの経路を一つのユースケースとする ⇒実際には存在しないメソッドの実行系列が抽出され、多くのユースケースが抽出 される ソースコードを静的に解析するだけではユースケースを実装している クラス群を抽出するのは難しい [1] Lucca et al. Recovering Use Case models from Object-Oriented Code: a Thread-based Approach. WCRE2000 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 5 提案手法概要 {A , B , C , D} {A , B , C} {A , C}手順6.1 閾値を再設定 手順6.2 {B , D} 版管理システムの 同時更新傾向の強い 手順4 リポジトリ 手順5 クラス群を抽出 手順1 閾値を設定して 閾値を設定して 手順3手順2 メトリクス値の計算 フィルタリング 同時更新情報の抽出 クラスタリング 更新傾向グラフの作成 : ( 1, 0.67 ) {A , C} A B A B A B {B , D} ( 3, 1.0 ) C D C D C Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University D 6 手順1 - 同時更新情報の抽出 {A , B , C , D} {A , B , C} {A , C} 版管理システムのリポジトリ {B , D} 同時更新されたクラス群のリスト 同じコミット作業により更新されたクラス群を同時に更新されたクラス群 と考える 以下の情報を用いて同じコミット作業により更新されたことを特定 更新者 更新時のコメント 更新時間 同時更新されたクラス群のリストを作成 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 7 手順2 - 同時更新の強さを表すメトリクスの計算 {A , B , C , D} {A , B , C} {A , C} {B , D} : メトリクス値 同時更新されたクラス群のリスト 同時更新の強さ = どの程度同時に更新される傾向があるかを数値で表現 Zimmermann らが提案したメトリクス[2]を用いる support - 同時に更新された回数 クラス と が同時に更新された回数 confidence - 同時に更新された頻度 が更新されたとき、 も同時に更新される割合 [2] Zimmermann et al. How History Justifies System Architecture ( or not ) . IWPSE2003 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 8 手順3 - 更新傾向グラフの作成 ( 2, 0.67 ) A B ( 3, 1.0 ) : メトリクス値 C D 更新傾向グラフ 頂点はクラス 頂点間の辺は始点と終点のクラスの同時更新の強 さを保持 始点をクラス A 、終点をクラス B とした時 A → B の辺は と を保持 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 9 手順4 - support を用いてフィルタリング 複数の関係の無い作業によって偶然同時に更新された 場合を考慮しないようにするため support 値として閾値 以下の値を持っている辺を更新 傾向グラフから除去 A ( 2, 0.67 ) ( 2, 0.67 ) B A ( 2, 0.67 ) B ( 2, 0.67 ) ( 3, 1.0 ) ( 3, 1.0 ) ( 3, 1.0 ) ( 2, 1.0 ) ( 2, 0.67 ) ( 2, 0.67 ) ( 3, 1.0 ) ( 2, 1.0 ) C ( 1, 0.33 ) ( 1, 0.5 ) 更新傾向グラフ D C D フィルタリングした更新傾向グラフ Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 10 手順5 - confidence を用いてクラスタリング 群平均法を用いる 初期状態の頂点の一つずつをクラスタする クラスタ間の近さの値が最大の2つのクラスタを一つのクラスタに統合 1. 2. クラスタ間の近さの値は、各クラスタに含まれる頂点間のすべての組み合わせの近さの値の平均 終了条件が満たされるまで統合を繰り返す 頂点A,B間近さは ただし、フィルタリングによりA,B間に辺が無い場合は近さは0 終了条件は「全てのクラスタ間の近さが閾値 A ( 2, 0.67 ) より小さい」 B A ( 2, 0.67 ) ( 3, 1.0 ) ( 2, 0.67 ) ( 3, 1.0 ) 1.0 ( 2, 1.0 ) C C D フィルタリングした更新傾向グラフ 0.67 0.67 0.67 0.330 0 0 B 0.83 D クラスタ化更新傾向グラフ Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 11 手順6 - 同時更新傾向の強いクラス群の 抽出 閾値を変化させ、一つのクラスタに含まれるクラス群が適切な数にな るように、フィルタリングとクラスタリングを繰り返す クラスタ化更新傾向グラフ中の各クラスタに含まれるクラス群を同時 更新傾向の強いクラス群として抽出を行う 1. 2. 閾値を再設定 A B A B {A , C} {B , D} フィルタリング、 C D 更新傾向グラフ クラスタリング C D 同時更新傾向の 強いクラス群 クラスタ化更新傾向グラフ Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 12 検証実験 対象とするソフトウェアに対し本手法を適用し、抽出されるク ラス群が同一ユースケース実装クラス群となっているかどうか を調べる 実験対象 CREBASS ( Cvs REpository Browse and Search System ) CVS リポジトリ閲覧・検索システム 規模 – クラス数 70クラス – 行数 7513行 – 総更新回数 140回 実装されている主なユースケース – プロジェクトデータの変遷の折れ線グラフによる表示 – リビジョン情報の検索 – プロジェクト内のファイルのログの表示 など Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 13 実験結果 の時のクラスタ化更新傾向グラフ ユースケース 実装クラス の時のクラスタ化更新傾向グラフ 抽出クラス 適合クラス 抽出クラス 適合クラス 折れ線グラフによる表示 4 4 4 20 4 リビジョン検索 7 0 0 7 7 ファイルのログの表示 4 4 4 3 3 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 14 実験結果の考察 ユースケース 実装クラス 抽出クラス 該当クラス 抽出クラス 該当クラス 折れ線グラフによる表示 4 4 4 20 4 リビジョン検索 7 0 0 7 7 ファイルのログの表示 4 4 4 3 3 support の閾値 複数の関係の無い作業によって偶然同時に更新されたクラス間の support は1, 2程度 [2] フィルタリングは有効 クラスの更新回数が少ない時には用いるべきではない ユースケース「リビジョン検索」を実装しているクラス群は更新回数が高々2回 適切に閾値を設定する必要がある [2] Zimmermann et al. How History Justifies System Architecture ( or not ) . IWPSE2003 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 15 まとめ ソフトウェアの開発履歴を用いて同一のユースケースを 実装しているクラス群を抽出する手法を提案 可視化に用いることで、一部を詳細に理解することを支援 手法の妥当性を評価するための実験 ユースケース実装クラス群を抽出することは可能 適切に閾値を設定する必要がある 今後の研究 手法の改良 手法の定量的な評価 可視化の方法について考案 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 16
© Copyright 2024 ExpyDoc