履歴情報を用いた同一ユースケー ス実装クラス群の抽出法の提案 大阪大学大学院 情報科学研究科井上研究室 M1 楠田泰三 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 ソフトウェア可視化技術の問題点の解決策の 提案 図が大規模すぎて全体を把握するには要素数が多すぎる ⇒ 要素数の少ない図を出力する 処理の流れにおいて使われる時期が離れているクラス群を 同時に可視化しても意味がない ⇒同じユースケースを実装しているクラス群のみを抽出して、 可視化する 同じユースケースを実装しているクラス群 ⇒ 「関連クラス群」 同じ関連クラス群に属する各クラスには「関連がある」 例) ユースケース「入力ファイル解析する」を実装しているクラス群 関連クラス群を抽出して、可視化する Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 4 関連クラス群の見つけ方 バージョン管理システムの保持している開発履歴情報を 用いて関連クラス群を見つける 同時更新傾向が強いクラス群を関連クラス群とする 関連クラス群は同時に更新されることが多いと考えられるため 手順 1. バージョン管理システムから同時更新情報を抽出 2. 同時更新傾向の強いクラス順序対を求める 3. 同時更新傾向の強いクラス群を求め、関連クラス群とする Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 5 バージョン管理システム バージョン管理システムを用いた開発 オープンソースソフトウェア開発ではよく用いられる コピー 開発者 更新を反映 リポジトリ 開発のプロセス 1. リポジトリとよばれるデータベースから必要なリソースをコピー 2. コピーしたリソースを更新する 3. 行った更新をリポジトリに反映させる(コミット) コミットによって複数のリソースが同時に更新され、 その履歴がリポジトリに存在する Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 6 手順1 - 同時更新情報の抽出 バージョン管理システムCVS ではどのファイルが同時 に更新されたかは記録していない 同時に行われた更新を特定 同じ開発者 同じコミットログ 3分以内 の更新を同時に行われた更新とする Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 7 手順2 - 同時更新傾向の強いクラス順序対を求める Zimmermann らが提案したメトリクス[1] support confidence クラス順序対の同時更新の support、confidence が 閾値以上である場合、そのクラス順序対を「同時更 新傾向の強いクラス順序対」とする [1] 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 support メトリクス S(A,B) = AとBが同時に更新された回数 support が高い方が同時更新傾向が強い 3 2 2 Class A 3 Class D 5 Class C 2 Class B S(A,B) = 5 S(A,D) = 3 3 A と B は AとD より 同時更新傾向が強い Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 9 confidenceメトリクス C(A,B) = Aが変更された時にBも同時に変更される頻度 confidence が高いほど同時更新傾向が強い Class A 5 Class C 100 5 Class B 10 Class D 5 200 C(A,B) = 1 C(B,A) = 0.5 C(C,D) = 0.05 C(D,C) = 0.025 クラス順序対(A,B) は クラス順序対(C,D) より 同時更新傾 向が強い Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 10 同時更新傾向の強いクラス順序対の求め方の例 support の閾値を 13 , confidence の閾値を 0 0.6 とし と した場合の同時更新傾向の強いクラス順序対 た場合の同時更新傾向の強いクラス順序対 (B,A) , (A,C) (A,B) (C,A) , (B,A) , (C,A) S(A,B) = 5 C(A,B) = 0.5 (B,C) , (C,A) , (C,B) C(B,A) = 1 Class A Class B S(A,C) = 4 S(B,C) = 2 C(A,C) = 0.2 C(C,A) = 0.8 C(B,C) = 0.2 Class C C(C,B) = 0.4 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 11 手順 3 関連クラス群の決定 ( 1 / 2 ) 1. クラスをノードとし、同時更新傾向が強いクラス順序対(A,B)に有効辺 A → B を引いたグラフ(更新傾向グラフ)を作成 Class A Class B 同時更新傾向の強いクラス順序対 ( A, B, A B ) ,,((A, A, C, C A C))),,((B, B,AA)),,( C, A ) Class C ( B, C ) , ( C, A ) , ( C, B ) 更新傾向グラフ Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 12 手順 3 関連クラス群の決定 ( 2 / 2 ) Fruchterman らによって提案されたFR レイアウト[2]を用いて更新傾 向グラフを描画 2. • エッジが多く存在するノード群は近くに、エッジが少ないノード群は遠くに配置さ れる 近くに配置されるクラス群を同時更新傾向の強いクラス群とし、関連 クラス群とする Class A 3. Class A Class B Class F Class B Class C Class C Class D Class F Class E Class G Class G 関連クラス群 Class D Class E [2] Fruchtermann et al. Graph drawing force-directed placement. Software, Practice and Experience 21 ( 1998 ) 1129-1164 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 13 関連クラス群を用いた可視化 着目したクラスの属する関連クラス群のみを抽出して クラス図として表現する クラス「XMIParser」の 関連クラス群の抽出 全てのクラス ユースケース「引数で与えられた XMIファイルを解析する」を実装し ているクラス群 この部分はまだ実装されていない Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 14 実験 実験方法 閾値を変化させて、その時導出される同時更新傾向 の強いクラス群は関連クラス群かどうかを調べる 閾値が低すぎると実際は関連していないクラスを導出させて しまう 閾値が高すぎると関連しているクラスを導出できない 実験対象のソフトウェアの開発者と協力して行う 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 実験対象 コードクローン分析ツール Aries の解析部 クラス数 107 個 行数 36717行 開発期間 2004年4月から 更新回数 262 回 処理概要 コードクローン検出ツールCCFinderにより発見されたコードク ローンの情報を分析し、メトリクスを計算してXMLファイルに出 力する Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 17 実験結果 ( 1 / 3 ) プログラムに与えられた引数を処理 する 構文解析結果からデータを変換して 一時的に保持するためのクラス群 support ≧ 1 , confidence ≧ 0 の更新傾向グラフ 一度でも同時に更新されたクラス間にはエッジが引かれる 関連していないクラスを含むクラス群があるので 閾値を上げる Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 18 実験結果 ( 2 / 3 ) 中心にあったクラス群がいくつかのまとまりにわかれる メトリクスを計算して、XMLファイル に出力するために使われるクラス群 コードクローンを構文解析する際に使 用されるクラス群 入力ファイルを処理するために使わ れるクラス群 support ≧ 3 , confidence ≧ 0.5 の更新傾向グラフ さらにまとまりをはっきりさせるために、閾値を上げる Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 19 実験結果 ( 3 / 3 ) 既に関連があると判断されたクラス 群の一部 いくつかのクラスは関連していないと 判断されてしまう support ≧ 3 , confidence ≧ 0.8 の更新傾向グラフ 6割のクラスは同時更新傾向が強いクラスがないと判断される Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 20 実験結果の考察 更新の傾向 変更によって、特定のクラス群を更新することが多い 必ず特定のクラス群だけで更新を行うというわけではない いくつかの変更を同時に行ってからコミットをする場合がある 同時更新傾向の強いクラス群のクラス間にはほぼ関 連がある 着目するクラスによってsupport , confidence の閾値を 変更する必要がある Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 21 まとめ 履歴情報を用いた同一ユースケース実装クラス群の 抽出法の提案 同時更新傾向の強いクラス群を同一ユースケースを実 装しているクラス群とする ソフトウェアの可視化に利用 同時更新傾向の強いクラス群と関連クラス群との関 係を調べるための実験 同時更新傾向の強いクラス群は関連がある 適切な閾値を設定する必要がある Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 22 今後の研究方針 さらなる実験 同時更新傾向は見られなかったが関連があるクラスはど の程度存在するか 同時更新傾向の強いクラス群の構造的な関係 継承、依存などはあるか 同時更新傾向の強いクラス群抽出の自動化 現在は描画されたグラフを閲覧して人が判断している グラフのクラスタリングアルゴリズムの適用 適切な閾値を見つける方法 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 23 終わり Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 24 参考 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 25 実験結果 1. support ≧ 1 , confidence ≧ 0 Import文処理部 main メソッドを含むクラス プログラムに与えられた引数を処理 する 構文解析結果からデータを取ってくる ための一時的に使用されるクラス群 Class, Interface , Declaration コードクローン間の構文的な距離 を計算するためのもの Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 26 実験結果 2. support ≧ 3 , confidence ≧ 0.5 メトリクスを計算して、XMLファイル に出力するために使われるクラス群 コードクローンを構文解析する際に使 われるクラス群 入力ファイルを処理するために使わ れるクラス群 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 27 実験結果 3. support ≧ 3 , confidence ≧ 0.8 既にまとまりになっていたクラス群の 一部 2 / 3 のノードが孤立している Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 28
© Copyright 2025 ExpyDoc