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

15
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka Univ コココココココココココココココ Java コココ コココココココ コココココココココココココ コココココ ココココココ 2 コ ココ コ

Upload: hop

Post on 16-Jan-2016

40 views

Category:

Documents


0 download

DESCRIPTION

コンポーネントランク法を用いた Java クラス分類手法の提案. コンピュータサイエンス専攻 井上研究室 博士前期課程 2 年 中塚 剛. ソフトウェア・クラスタリング. ソフトウェア理解が必要になる場面 ソフトウェア保守 ソフトウェア部品の再利用 ⇒ ソフトウェア・クラスタリング システム内の各モジュール(クラス・ファイル)を分類して,サブシステムへ分解 システム構造に注目 依存関係が密な部分をまとめる [1] サブシステムが高凝集・低結合になるように⇒サブシステムごとに理解しやすい. 依存関係グラフ. モジュール. 依存関係. サブシステム - PowerPoint PPT Presentation

TRANSCRIPT

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

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

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

コンピュータサイエンス専攻井上研究室 博士前期課程 2 年

中塚 剛

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

2007/2/19 修士論文発表会 2Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

ソフトウェア・クラスタリングソフトウェア理解が必要になる場面

ソフトウェア保守ソフトウェア部品の再利用

⇒ ソフトウェア・クラスタリングシステム内の各モジュール(クラス・ファイル)を分類して,サブシステムへ分解システム構造に注目

依存関係が密な部分をまとめる [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

依存関係グラフ

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

2007/2/19 修士論文発表会 3Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

ソフトウェア・クラスタリングの問題点

遍在モジュール( 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.

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

2007/2/19 修士論文発表会 4Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

コンポーネントランク法Java ソフトウェア部品検索システム SPARS-J で使用

ソフトウェア部品再利用のために,過去に作成されたクラス・インターフェースを検索検索結果のランク付けに使われる

相互利用関係に基づいて部品の重要度を表すコンポーネントランク値( CRV )を測定

多くの部品に利用されている部品は重要重要な部品に利用されている部品は重要

CRV が高い部品は遍在モジュールの候補ではないか

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

2007/2/19 修士論文発表会 5Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

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

クラスタリング・アルゴリズムは Bunch の実装を利用

新たな遍在モジュール特定手法を利用したソフトウェア・クラスタリング手法を提案

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

2007/2/19 修士論文発表会 6Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

ソフトウェア・クラスタリング・システム 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

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

2007/2/19 修士論文発表会 7Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

Bunch の目的関数 MQ

凝集度と結合度のトレードオフを関数化各クラスタでのトレードオフ: CF (Cluster Factor)

あるクラスタ i において ( 1 i k≦ ≦ ) ( k: クラスタ数)

  : クラスタ i 内の辺の数 : クラスタ i からクラスタ j への辺の数

CF の合計値: MQ (Modularization Quality)

)()(5.0

)0(0

1,,

otherwiseCF k

jii

ijjii

i

i

i

k

iiCFMQ

1

i

ji ,

クラスタに関連する辺のうち,クラスタ内に存在する辺の割合

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

2007/2/19 修士論文発表会 8Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

Bunch API を用いたクラスタリング・システム

----------------------------------------------------------------------

ソースコードファイル

AnalyzerBunch API

Omnipresent Modules Detector

依存関係グラフ

出力

遍在モジュール

・ソースコードを分析・依存関係グラフを作成

・遍在モジュールを決定

・依存関係グラフを受け取る・遍在モジュールを受け取る・アルゴリズム中のパラメータの決定⇒ 解の出力

どのように遍在モジュールを特定すればよいか ⇒実験によって決定

改良

改良

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

2007/2/19 修士論文発表会 9Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

遍在モジュール特定手法決定のための実験

遍在モジュール特定条件を 47 個作成Bunch オリジナル条件

遍在モジュールを考慮しないものBunch オリジナル条件での閾値を 2, 2.5, 3.5 に変えたものCRV を使用したものsupplier

入次数 CRV

  平均以上

平均以上 平均以上

平均 1.5 倍以上 平均以上

平均 2 倍以上 平均以上

平均 2.5 倍以上 平均以上

平均 3 倍以上 平均以上

central

入次数 出次数 CRV

supplier かつ client

平均 3 倍以上

平均 3 倍以上 平均以上

library

入次数 出次数 CRV

  0  

  0 平均以上

平均以上 0 平均以上

× × ×

・ CRV は平均以上で固定( CRV 平均以上のモジュールは全モジュールの約20% )・入次数条件を厳しくしていくことで, supplier を減らしていく

CRV は使えないのでオリジナル条件で固定

supplier client central library

入次数 出次数 入次数 出次数 出次数

平均 3 倍以上 平均 3 倍以上

平均 3 倍以上

平均 3 倍以上 0

2 種類の実験によって比較

client

出次数

平均 3 倍以上

・ supplier と client の条件両方満たしているもの・オリジナル条件に CRVを足したもの

・オリジナル条件・出次数 0 でも,ある程度使用されていないと library とはいいにくい⇒CRV と入次数の条件を追加

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

2007/2/19 修士論文発表会 10Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

実験の概要実験 1

クラスタリング結果の見易さ・理解し易さをメトリクスによって評価後述

実験 2クラスタリング結果の実際の構造に対する評価適当と思われる解(ベンチマーク)を作成して比較割愛

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

2007/2/19 修士論文発表会 11Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

実験 1 :方針クラスタリング結果の理解しやすさを評価

平均 CF 値が高く,遍在モジュール数が少ない(多すぎない)条件が優れている

平均 CF 値:全てのクラスタの CF の平均値– CF :各クラスタにおいての,凝集度と結合度のトレードオフ– 平均 CF 値が高ければ,クラスタ間に辺が少なくなり,結果が

見やすくなる遍在モジュール数

– 遍在モジュール数が多いほど,平均 CF 値が上がりやすくなる» 遍在モジュールはサブシステムに属さないため理解しにく

い– 従来手法では若干多すぎる(約 40% )

» library (出次数 0 のモジュール)が多すぎる

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

2007/2/19 修士論文発表会 12Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

0

0.2

0.4

0.6

0.8

1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

クラスタリング対象モジュール数(割合) CF平均 値 調和平均値

実験 1 :結果と考察オープン・ソース・システム 15 個での平均値

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無し

Bunch オリジナル条件 supplier client central library

入次数 出次数 入次数 出次数 出次数

平均 3 倍以上 平均 3 倍以上

平均 3 倍以上

平均 3 倍以上 0

遍在モジュールに特定されなかったモジュールの割合

遍在モジュールが減ったが平均 CF 値が悪化している(トレードオフの関係)

supplier client central library

入次数 出次数 入次数 出次数 出次数

平均 3.5 倍以上

平均 3.5 倍以上

平均 3.5 倍以上

平均 3.5 倍以上 0

•CRV を使うと,クラスタリング対象モジュール数,平均 CF 値共に改善している条件が存在•supplier の条件を厳しくしていくにつれて,クラスタリング対象モジュール数が増加,平均 CF値は減少•ただし,調和平均値が改善されている

supplier 条件

クラスタリング対象モジュール数と平均 CF 値のどちらを優先するか

⇒ クラスタリング対象モジュール数を優先

理由:遍在モジュールとして除去されるより,少し見づらくてもクラスタに分類されたほうが理解しやすい

C32 が最も良い•central は, supplier かつ client でないと, Bunch API にモジュールが除去されるバグが生じる( C33 , C34 は不適切)

supplier client central library

入次数 CRV 出次数 入次数 出次数 CRV 入次数 出次数 CRV

平均 2 倍以上 平均以上 平均 3 倍以上 supplier かつ client 平均以上 0 平均以上

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

2007/2/19 修士論文発表会 13Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

実験のまとめCRV を利用すると,従来手法より良い結果を得られる実験 1 ,実験 2 を通して評価が良かった条件:C32

supplier: 入次数が平均次数の 2 倍以上, CRV 平均以上client: 出次数が平均次数の 3 倍以上central: supplier かつ client

library: 出次数が 0 ,入次数平均以上, CRV 平均以上

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

2007/2/19 修士論文発表会 14Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

クラスタリング結果の例GNUJpdf( 25モジュール)に適用した例

libraries

suppliers

centrals PDFTest

PDFGraphics

PDFImage

BoundingBox PDFJob PDFOutline

PDFAnnot

PDFOutput

PDFStringHelper

PDFPage PDFObject

PDFDocumentPDFPage$procset

TestPanel HelpFrame TestMenuBar

PDFTest

StringTooLongException

BoundingBox PDFJob

PDFFont

PDFGraphics

PDFStream

PDFImage

PDFJob$graphic PDFInfo PDFOutlinePDFAnnot

PDFCatalog

PDFPageList

PDFBorder

PDFXref

PDFOutput

libraries suppliers

clients PDFTest

PDFGraphics

PDFImage

PDFPage

PDFJob PDFPageList

PDFAnnot

TestMenuBarHelpFrameTestPanelPDFStringHelperStringTooLongExceptionPDFXref PDFObject

PDFDocumentPDFOutput PDFTest

BoundingBox PDFJob

PDFFont

PDFGraphics

PDFStream

PDFImage

PDFPage

PDFOutline

PDFPage$procset PDFAnnot

PDFJob$graphic PDFInfo

PDFCatalog

PDFPageList

PDFBorder

提案手法

Bunch オリジナル

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

2007/2/19 修士論文発表会 15Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

まとめと今後の課題コンポーネントランク法を用いて遍在モジュールを特定することによって,より優れたクラスタリング・システムを構築可能

遍在モジュールが多すぎず,高凝集・低結合今後の課題

さらなる条件の追加( CRV を変動させる)遍在モジュールを考慮した距離測定メトリクスの提案より大規模なシステムでのベンチマーク評価