ソフトウェア部品分類手法への コンポーネントランク法の応用

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
ラベル付き区間グラフを列挙するBDDとその応用
利用実績に基づくソフトウェア部品検索システムSPARS-J
PlanetLab における 効率的な近隣サーバ選択法
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
ソフトウェアリポジトリにおける コードクローン作成者・利用者関係分析手法とその適用
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
Fuzzy c-Means法による クラスター分析に関する研究
オブジェクト指向プログラムのための 動的結合メトリクスの評価
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
類似度を用いたプログラムの再利用性尺度の提案と実現
ソフトウェアを取り巻く環境の変化がメトリクスに及ぼす影響について
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
プログラムスライシングを用いた 機能的関心事の抽出手法の 提案と実装
WWW上の効率的な ハブ探索法の提案と実装
Javaプログラムの変更を支援する 影響波及解析システム
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
利用実績に基づくソフトウェア部品検索システムSPARS-J
コンポーネントランク法を用いたJavaクラス分類手法の提案
Javaを対象としたソフトウェア部品 検索システムSPARS-Jの実験的評価
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Data Clustering: A Review
連続領域におけるファジィ制約充足問題の 反復改善アルゴリズムによる解法 Solving by heuristic repair Algorithm of the Fuzzy Constraint Satisfaction Problems with Continuous Domains 北海道大学.
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
アスペクト指向言語のための 独立性の高いパッケージシステム
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
適応的近傍を持つ シミュレーテッドアニーリングの性能
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
類似度メトリクスを用いた Javaソースコード間類似度測定ツールの試作
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
P2P ネットワーク上で 実時間ストリーミングを実現するための 分散制御プロトコルの提案
Peer-to-Peerシステムにおける動的な木構造の生成による検索の高速化
コーディングパターンの あいまい検索の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
Data Clustering: A Review
Q3 On the value of user preferences in search-based software engineering: a case study in software product lines Abdel Salam Sayyad (West Virginia University,
秘匿リストマッチングプロトコルとその応用
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
パターン認識 ークラスタリングとEMアルゴリズムー 担当:和田 俊和 部屋 A513
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
保守請負時を対象とした 労力見積のためのメトリクスの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
Jan 2015 Speaker: Kazuhiro Inaba
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
識別子の読解を目的とした名詞辞書の作成方法の一試案
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Detecting Software Modularity Violations
Presentation transcript:

ソフトウェア部品分類手法への コンポーネントランク法の応用 大阪大学 大学院情報科学研究科 中塚 剛 松下 誠 井上 克郎

ソフトウェアクラスタリング ソフトウェア理解が必要になる場面 ⇒ソフトウェアクラスタリング ソフトウェア保守 ソフトウェア部品の再利用 システム内の各モジュール(クラス・ファイル)を分類して,サブシステムへ分解 システム構造に注目 依存関係が密な部分をまとめる[1] サブシステムが高凝集・低結合になるように⇒サブシステムごとに理解しやすい 依存関係グラフ モジュール 依存関係 ソフトウェア理解の必要性→ソフトウェア・クラスタリング サブシステム (クラスタ) [1] B. S. Mitchell and S. Mancoridis: “On the Automatic Modularization of Software Systems Using the Bunch Tool”, IEEE Transaction on Software Engineering, vol. 32, no. 3, pp. 193-208, 2006

ソフトウェアクラスタリングの問題点 遍在モジュール(omnipresent module)[2] 従来の遍在モジュール特定法 多くのモジュールと依存関係のあるモジュール いわゆるライブラリ・ユーティリティ java.awt.Componentなどの抽象クラス クラスタリング対象から除去する必要がある 特定のサブシステムだけで使われているわけではない サブシステムが巨大化する可能性がある 従来の遍在モジュール特定法 次数がある閾値より高いもの 単純すぎる 十分な考察が行われていない 遍在モジュール [2] H. A. Müller et al.: “A Reverse Engineering Approach To Subsystem Structure Identification”, Journal of Software Maintenance: Research and Practice, Vol. 5, No. 4, pp. 181–204, 1993.

コンポーネントランク法 Javaソフトウェア部品検索システムSPARS-Jで使用 ソフトウェア部品再利用のために,過去に作成されたクラス・インターフェースを検索 検索結果のランク付けに使われる 相互利用関係に基づいて部品の重要度を表すコンポーネントランク値(CRV)を測定 多くの部品に利用されている部品は重要 重要な部品に利用されている部品は重要 CRV=0.4 a 0.2 0.2 c CRV=0.2 0.2 0.4 b CRV=0.4 CRVが高い部品は遍在モジュールの候補ではないか

研究の目的 コンポーネントランク法を利用した新たな遍在モジュール特定手法の提案 遍在モジュールを適切に特定することによって,従来のソフトウェアクラスタリング手法の解を改良 ソフトウェアクラスタリングシステムとしてBunchを使用 実験によって,適切な遍在モジュールを特定できているか調査

ソフトウェアクラスタリングシステム Bunch 高凝集・低結合に基づくソフトウェアクラスタリングを実装したシステム[1] 最適なクラスタリング結果を探す探索問題として実装 目的関数を定義して,目的関数値が最も高い結果を探す 局所探索法である山登り法(hill climbing)を用いて近似解を求める クラスタリング結果の数はO(n!) (n:頂点数) →NP困難 4種類の遍在モジュールを定義 supplier: 入次数が平均次数の3倍以上 client: 出次数が平均次数の3倍以上 central: supplierかつclient library: 出次数が0 APIを公開 [1] B. S. Mitchell and S. Mancoridis: “On the Automatic Modularization of Software Systems Using the Bunch Tool”, IEEE Transaction on Software Engineering, vol. 32, no. 3, pp. 193-208, 2006

Bunchの目的関数MQ 凝集度と結合度のトレードオフを関数化 各クラスタでのトレードオフ: CF (Cluster Factor) あるクラスタ i において (1≦ i ≦k) (k:クラスタ数)   : クラスタ i 内の辺の数 : クラスタ i からクラスタ j への辺の数 CFの合計値:MQ (Modularization Quality) クラスタに関連する辺のうち,クラスタ内に存在する辺の割合

Bunch APIを用いたクラスタリング・システム ソースコードファイル ------------ ----------- ソースコードを分析 依存関係グラフを作成 モジュール・依存関係の定義はAnalyzerに依存 改良 出力 依存関係グラフ Bunch API Analyzer 改良 ・依存関係グラフを受け取る ・遍在モジュールを受け取る ・アルゴリズム中のパラメータの決定 ⇒解の出力 Omnipresent Modules Detector 遍在モジュール ・遍在モジュールを決定 どのように遍在モジュールを特定すればよいか ⇒実験によって決定

遍在モジュール特定手法決定のための実験 2種類の実験によって比較 遍在モジュール特定条件を40個作成 Bunchオリジナル条件 遍在モジュールを考慮しないもの Bunchオリジナル条件での閾値を2, 2.5, 3.5に変えたもの library(Bunchにおいて非常に多い)を考慮しないもの CRVを使用したもの supplier client central library 入次数 出次数 平均3倍以上 2種類の実験によって比較 ・CRVは平均以上で固定 (CRV平均以上のモジュールは全モジュールの約20%) ・入次数条件を厳しくしていくことで,supplierを減らしていく supplier 入次数 CRV 平均以上 平均1.5倍以上 平均2倍以上 平均2.5倍以上 平均3倍以上 library 入次数 出次数 CRV 平均以上 ・supplierとclientの条件両方満たしているもの ・オリジナル条件にCRVを足したもの オリジナル条件 libraryを減らすために library無し 入次数・CRV条件を追加 client 出次数 平均3倍以上 central 入次数 出次数 CRV supplierかつclient 平均3倍以上 平均以上 CRVは使えないのでオリジナル条件で固定 × × ×

実験における依存関係グラフの定義 モジュール:クラス,インターフェース 依存関係:インスタンス参照,メンバ参照,継承,インターフェース実装 内部クラスも1つのモジュールとする 依存関係:インスタンス参照,メンバ参照,継承,インターフェース実装 重み付けは行わない CRV測定も同様の依存関係グラフ上で行う

実験1:方針 クラスタリング結果の理解しやすさを評価 平均CF値が高く,遍在モジュール数が少ない(多すぎない)条件が優れている 平均CF値:全てのクラスタのCFの平均値 CF:各クラスタにおいての,凝集度と結合度のトレードオフ 平均CF値が高ければ,クラスタ間に辺が少なくなり,結果が見やすくなる 遍在モジュール数 遍在モジュール数が多いほど,平均CF値が上がりやすくなる 遍在モジュールはサブシステムに属さないため理解しにくい 従来手法では若干多すぎる(約40%) library(出次数0のモジュール)が多すぎる

実験1:結果と考察 Javaで書かれたオープン・ソース・システム15個での平均値 CRVを使うと,クラスタリング対象モジュール数,平均CF値共に改善している条件が存在 supplierの条件を厳しくしていくにつれて,クラスタリング対象モジュール数が増加,平均CF値は減少 ただし,調和平均値が改善されている Javaで書かれたオープン・ソース・システム15個での平均値 遍在モジュールが減ったが平均CF値が悪化している (トレードオフの関係) クラスタリング対象モジュール数と平均CF値のどちらを優先するか ⇒クラスタリング対象モジュール数を優先 理由:遍在モジュールとして除去されるより,少し見づらくてもクラスタに分類されたほうが理解しやすい Bunchオリジナル条件 C27~C29が良い supplier client central library 入次数 出次数 平均3倍以上 supplier client central library 入次数 出次数 平均3.5倍以上 supplier client central library 条件 入次数 CRV 出次数 C27 平均2倍以上 平均以上 平均3倍以上 supplierかつclient C28 C29 遍在モジュールに特定されなかったモジュールの割合 supplier条件 CRV無し CRV:1 CRV:1, in:1 CRV:1, in:1.5 CRV:1, in:2 CRV:1, in:2.5 CRV:1, in:3

実験2:方針 クラスタリング結果の中身の評価 ベンチマーク(適当と思われる解)を作成 どのくらい一致しているかを測定 2つの分割されたグラフの類似度を計る2種類のメトリクス EdgeSim (Edge Similarity) 辺の類似度を測定 MeCl (Merge Clusters) 一方のグラフを分割・マージすることで他方に一致させるためのコストを測定 共にパーセント尺度で,数値が高いほど類似度が高い 遍在モジュールを考慮できないため,問題あり 目視評価

実験2:結果と考察(1/3) GNUJpdf(25モジュール)でベンチマークを作成 EdgeSim, MeClが遍在モジュールを考慮できないため,評価が正しくない (実際の結果はベンチマークとほど遠い) Bunchオリジナル条件 類似度が非常に高くなっている Bunch APIにバグが存在 (遍在モジュールの選び方によってあるモジュールが結果に現れなくなる) ⇒結果を改変して測定 相関係数:0.88 CRV:1 CRV:1, in:1 CRV:1, in:1.5 CRV:1, in:2 CRV:1, in:2.5 CRV:1, in:3 実験1で良い結果

実験2:結果と考察(2/3) libraryが非常に多い クラスタ間の辺が多い ベンチマーク PDFPageの種類が違うだけ C29 PDFPage$procsetが存在しない libraryが非常に多い PDFPageの種類が違うだけ クラスタ間の辺が多い C27,C28 ベンチマークと一致 C1(Bunchオリジナル)

実験2:結果と考察(3/3) Bunch APIのバグが明らかに ⇒C28, C29はこのバグを起こし得る 遍在モジュールの選び方によって,特定のモジュールが結果に現れなくなる centralの条件が「supplierかつclient」になっていない場合のみ起こり得る ⇒C28, C29はこのバグを起こし得る supplier client central library 条件 入次数 CRV 出次数 C27 平均2倍以上 平均以上 平均3倍以上 supplierかつclient C28 C29 C27 平均2倍以上 平均以上 平均3倍以上 supplierかつclient

実験のまとめ CRVを利用すると,従来手法より良い結果を得られる 実験1,実験2を通して評価が良かった条件:C27 supplier: 入次数が平均次数の2倍以上,CRV平均以上 client: 出次数が平均次数の3倍以上 central: supplierかつclient library: 出次数が0,入次数平均以上,CRV平均以上

まとめと今後の課題 コンポーネントランク法を用いて遍在モジュールを特定することによって,より優れたクラスタリング・システムを構築可能 遍在モジュールが多すぎず,高凝集・低結合 今後の課題 さらなる条件の追加(CRVを変動させる) 遍在モジュールを考慮した距離測定メトリクスの提案 より大規模なシステムでのベンチマーク評価