名前の重複を考慮した java ソフトウェア部品間の 利用関係解析手法の提案

24
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 2008/3/4 SS2007-75 1 名名名名名名名名名名 Java 名名名名名名名名名名 名名名名名名名名名名名 ○ 市市 市市 市市 市市 市市 市市市市 市市市市市市市市市市 市市市市 市市市市市市 市市市市市市

Upload: pomona

Post on 09-Jan-2016

42 views

Category:

Documents


6 download

DESCRIPTION

名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案. ○ 市井 誠 † , 横森 励士 ‡ , 井上 克郎 † † 大阪大学 大学院情報科学研究科 ‡ 南山大学 数理情報学部 情報通信学科. ソフトウェア部品検索システム. ソフトウェア部品の再利用・理解を支援 ソフトウェア部品 : ソフトウェアの構成単位(クラスなど). データベース化. 検索. オープンソース ソフトウェア. ライブラリ部品の 再利用. 開発現場の ソフトウェア. 実装例による 理解支援. ソフトウェア部品の利用関係. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology,Osaka University

2008/3/4 SS2007-75 1

名前の重複を考慮したJava ソフトウェア部品間の利用関係解析手法の提案

○ 市井 誠†,横森 励士‡ ,井上 克郎†

† 大阪大学 大学院情報科学研究科‡南山大学 数理情報学部 情報通信学科

Page 2: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

2

ソフトウェア部品検索システム

ソフトウェア部品の再利用・理解を支援 ソフトウェア部品 : ソフトウェアの構成単位(クラスなど)

検索

ライブラリ部品の再利用

実装例による理解支援

オープンソースソフトウェア

開発現場のソフトウェア

データベース化

Page 3: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

3

ソフトウェア部品の利用関係 ソフトウェア部品は互いに利用関係(依存関係)をもつ

宣言,メソッド呼び出し,継承,…

部品を再利用するためには,利用関係の把握が必要 利用関係解析による支援

メソッド呼び出し

フィールド参照

変数宣言

インスタンス生成

継承

依存する部品群実装例となる部品群

メソッド呼び出し

Page 4: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

4

利用関係解析における問題 [1/2]

部品は名前により参照される ソフトウェアのビルド単位にて一意な識別子

データベース中では,部品の名前は一意では無い 同じ部品の異なるバージョン 同じインターフェースの異なる実装 複製・改変された部品 偶然同じ名前

class A { ... foong() { ... B b = new B(); ... } ...}

class B { ...}

?

?

?

class B { ...}

class B { ...}

Page 5: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

5

...void bar() {}...

利用関係解析における問題 [2/2]

既存の解析手法では,ユーザの要求を満たせない 候補が 1 つに絞られてしまっている,もしくは 複数の候補を適切に絞り込む手段が無い

利用関係の区別が無い 条件付きの利用関係を取得できない

メソッドのカスケード呼び出しなど 部品 B1 は使えない.他に無いのか ?

どれを使えば良いのか分からない!

A

B...B b = new B();...

B

B

B1

B2

B3

...B foo() {}void bar() {}...

...C foo() {}...

C

...B foo() {}void bar() {}... ( 部品 A, B2 を見なが

ら )部品 Cは使われていない様に見えるが… ?A

C

...b.foo().bar();...

Page 6: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

6

目的 名前の重複を考慮した,部品間の利用関係解析

対象 : Java

方針 候補全てへ利用関係を引く 利用関係に属性として優先度と条件を与え,候補の絞り込みを補助す

B1

B2

B3

A

B

B

B優先度 2 番目 , …優先度 3 番目 , …

C

優先度 1 番目 , B3 利用時のみ , ...

部品 B1 は優先度が高いが,使えない.部品 B2 を使おう.

必要なのは,部品 Aと B2 だけだなA優先度 1 番目 ,

C

Page 7: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

7

準備 : 基本となるモデル ソフトウェア部品検索システム SPARS-J でのモデル

に,説明のための変更を加えたもの 参照に対してインディケーションを求めていくことで,エンティテ

ィ間の利用関係を構築する

class A { void foo() { B b = null; }}

class B { void bar() { }}

A

foo

B

bar

“B”

利用関係の単位

エンティティを利用する識別子

参照が指し示すエンティティ

Page 8: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

8

提案するモデル 利用関係に属性 ( 確信度,優先度,条件 ) を追加する

条件 : ( 名前,部品,確信度,優先度)の集合. 利用関係が求められたときに用いた,名前の重複しない部品集合 インディケーションから求める 確信度 : {DEF, ALT}

名前と部品の対応が確かであるという根拠が存在するかどうか 存在するとき DEF

優先度 : 0 以上の整数 同じ名前をもつ部品の中での優先度 0 が優先度最大

確信度 利用関係が確かであるという根拠が存在するかどうか. 条件に ALT が含まれなければ DEF ,さもなくば ALT

優先度 同じ名前を持つエンティティに対する利用関係の集合の中での優先度 条件に含まれる,もっとも低い確信度

Page 9: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

9

利用関係の属性

インディケーションの属性に,条件を追加 参照が指し示すエンティティを特定するときの,名前と部品の対応

利用関係の属性のうちの条件は,対応するインディケーションの条件の要素の積集合

A (A)

foo

B (B)

bar

“B”

{(“B”, B, DEF, 0)}

(DEF, 0, {(“B”, B, DEF, 0)})

(DEF, 0, {(“B”, B, DEF, 0)})

Page 10: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

10

確信度と優先度

確信度が DEF となる条件 出自は同一であり,版管理されていない. 出自が同一のリポジトリ・同一のブランチであり,

かつ,それぞれの存在期間が重複する.

優先度の決定方法 確信度 DEF の部品は, 確信度 ALT の部品より高い ファイルパスが近いほど高い

A

B1

B2Software1: /src/A.java

Software1: /src/B.java

Software2: /src/B.java

DEF / 0

ALT / 1

Page 11: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

11

提案するモデル ( 図 )

Page 12: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

12

A (A)

main

“B”

class A { void main() { B b = …; b.foo().bar(); }}

class B { B foo() { } void bar() { }}

class B { C foo() { }}

class C { void bar() { }}

B (B1)

foo

bar

“foo”

“bar”

“B”

B (B2)

foo

“C”

C (C)

bar

{(“B”, B2, ALT, 1)}

{(“B”, B1, DEF, 0)}

{(“B”, B2, ALT, 1)}

{(“B”, B2, ALT, 1),(“C”, C, ALT, 0)}

{(“B”, B1, DEF, 0)}

{(“B”, B1, DEF, 0)}

依存

Page 13: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

13

A (A)

main

“B”

class A { void main() { B b = …; b.foo().bar(); }}

B (B1)

foo

bar

“foo”

“bar”

“B”

B (B2)

foo

“C”

依存

(DEF, 0, {(“B”, B1, DEF, 0)})

(ALT, 1, {(“B”, B2, ALT, 1),(“C”, C, ALT, 0)})

(ALT, 1, {(“B”, B2, ALT, 1)})

class B { B foo() { } void bar() { }}

class B { C foo() { }}

class C { void bar() { }}

C (C)

bar

Page 14: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

14

実装

システム構成

部品データベー

パーサ

利用関係解析部

UI

•Java ソースコードを解析し,部品・エンティティ・参照を抽出

•MASU* のパーサを利用

•提案手法を用いて,部品に含まれる参照のインディケーションを求める

•ユーザのクエリを受け付け,利用関係を出力する

•クラス単位•Web アプリケーションとして

実装

Java ソースコード集合

ユーザ* 谷口,”多言語対応メトリクス計測ツール MASU の開発, ''ウィンターワークショップ 2007 ・イン・那覇 論文集, pp.29-30 , 2007.

Page 15: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

15

適用実験 対象

JDK1.2.2, JDK 1.4.2, 91 個の OSS Tomcat, Commons, Eclipse, NetBeans, JBoss, …

紹介する例 java.net.URL (JDK 1.2.2) org.apache.commons.collections.FastArrayList (Commons collecti

ons 3.1) org.jboss.test.util.web.HttpUtils (JBoss 3.2.5)

部品 エンティティ 参照インディケーション

すべて 優先度 : 0

127,903 1,396,487 11,539,473 10,543,794 5,534,129

Page 16: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

16

URL (JDK 1.2.2)

Page 17: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

17

FastArrayList (Commons collections 3.1)

Page 18: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

18

HttpUtils (JBoss 3.2.5)

Page 19: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

19

考察

不正確な利用関係が存在 一部の部品だけに存在するメンバへの参照 必ずしも不要とは言い切れない

再利用する機能に無関係なら,対応する参照を削除すれば良い 利用関係の優先度を下げる UI にて,メンバ単位で利用関係を閲覧出来るようにする

Page 20: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

20

まとめ

名前の重複を考慮した利用関係の構築手法を提案 解析システムを試作

今後の課題 不正確な利用関係への対処

優先度への反映 UI での対応

ソフトウェア部品検索システムとしての実装

Page 21: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

21

Page 22: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

25

Backward relation

Page 23: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

27

準備 : 基本となるモデル 用語

エンティティ (Entity) 部品から参照される要素 クラス(インターフェース等を含む),

メンバ(メソッド,フィールド) 参照 (Reference)

エンティティに含まれる,エンティティを利用する記述

変数宣言の型,メソッド呼び出し等 インディケーション (Indication)

参照とエンティティのペア 参照が指し示すエンティティを表現

利用関係 (use relation) エンティティとエンティティのペア

参照に対応するインディケーションを求めることで,部品間の利用関係を求める

簡単の為に 参照の名前は,完全限定名 メソッドは引数を持たない

class A { void foo() { B b = null; }}

class B { void bar() { }}

A

foo

B

bar

“B”

A B

Page 24: 名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University

SS2007-75 2008/3/4

28

基本となるモデル : クラス図風表記