コンポーネントランク法を用いたJavaクラス分類手法の提案

Slides:



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

背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
ラベル付き区間グラフを列挙するBDDとその応用
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
利用実績に基づくソフトウェア部品検索システムSPARS-J
「データ学習アルゴリズム」 第3章 複雑な学習モデル 3.1 関数近似モデル ….. … 3層パーセプトロン
プログラムの動作を理解するための技術として
PlanetLab における 効率的な近隣サーバ選択法
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
プログラム静的解析手法の効率化と 解析フレームワークの構築に関する研究
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
ソフトウェアリポジトリにおける コードクローン作成者・利用者関係分析手法とその適用
プログラム実行履歴を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
Fuzzy c-Means法による クラスター分析に関する研究
オブジェクト指向プログラムのための 動的結合メトリクスの評価
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
ソードコードの編集に基づいた コードクローンの分類とその分析システム
ソフトウェアを取り巻く環境の変化がメトリクスに及ぼす影響について
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
ソフトウェア部品分類手法への コンポーネントランク法の応用
プログラムスライシングを用いた 機能的関心事の抽出手法の 提案と実装
WWW上の効率的な ハブ探索法の提案と実装
Javaプログラムの変更を支援する 影響波及解析システム
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
利用実績に基づくソフトウェア部品検索システムSPARS-J
ランダムグラフ エルデシュとレーニイによって研究された.→ER-model p:辺連結確率 N:ノード総数 分布:
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
連続領域におけるファジィ制約充足問題の 反復改善アルゴリズムによる解法 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 清水 洋志.
プログラム理解におけるThin sliceの 統計的調査による有用性評価
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
顔特徴点移動量・点間距離変化量の組み合わせに基づく顔表情認識
適応的近傍を持つ シミュレーテッドアニーリングの性能
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
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
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
保守請負時を対象とした 労力見積のためのメトリクスの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
ヒープソート.
Webページタイプによるクラスタ リングを用いた検索支援システム
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
Jan 2015 Speaker: Kazuhiro Inaba
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
プログラム依存グラフを用いた ソースコードのパターン違反検出法
グラフの帯域幅連続多重彩色 を求めるアルゴリズム (Bandwidth Consective Multicolorings of Graphs) 西関研究室 西川和秀.
Detecting Software Modularity Violations
Presentation transcript:

コンポーネントランク法を用いたJavaクラス分類手法の提案 コンピュータサイエンス専攻 井上研究室 博士前期課程2年 中塚 剛

ソフトウェア・クラスタリング ソフトウェア理解が必要になる場面 ⇒ソフトウェア・クラスタリング ソフトウェア保守 ソフトウェア部品の再利用 システム内の各モジュール(クラス・ファイル)を分類して,サブシステムへ分解 システム構造に注目 依存関係が密な部分をまとめる[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] 従来の遍在モジュール特定法 多くのモジュールと依存関係のあるモジュール いわゆるライブラリ・ユーティリティなど 特定のサブシステムに入れたくない 全てのサブシステムに入れたい→「遍在」 クラスタリング対象から外す必要がある 従来の遍在モジュール特定法 次数がある閾値より高いもの 単純すぎる 十分な考察が行われていない 遍在モジュール [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が高い部品は遍在モジュールの候補ではないか

研究の目的 従来のソフトウェア・クラスタリング・アルゴリズムの解を改良するための,コンポーネントランク法を利用した遍在モジュール特定手法の提案 クラスタリング・アルゴリズムはBunchの実装を利用 新たな遍在モジュール特定手法を利用したソフトウェア・クラスタリング手法を提案

ソフトウェア・クラスタリング・システム Bunch 高凝集・低結合に基づくソフトウェア・クラスタリングを実装したシステム[1] 最適なクラスタリング結果を探す探索問題として実装 目的関数を定義して,目的関数値が最も高い結果を探す クラスタリング結果の数はO(n!) (n:頂点数) →NP困難 局所探索法である山登り法(hill climbing)を用いて近似解を求める 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) クラスタに関連する辺のうち,クラスタ内に存在する辺の割合 CFの式の説明はしない.簡単な説明で済ます.

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

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

実験の概要 実験1 実験2 クラスタリング結果の見易さ・理解し易さをメトリクスによって評価 後述 クラスタリング結果の実際の構造に対する評価 適当と思われる解(ベンチマーク)を作成して比較 割愛

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

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

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

クラスタリング結果の例 GNUJpdf(25モジュール)に適用した例 Bunchオリジナル 提案手法

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