名前の重複を考慮した java ソフトウェア部品間の 利用関係解析手法の提案
DESCRIPTION
名前の重複を考慮した Java ソフトウェア部品間の 利用関係解析手法の提案. ○ 市井 誠 † , 横森 励士 ‡ , 井上 克郎 † † 大阪大学 大学院情報科学研究科 ‡ 南山大学 数理情報学部 情報通信学科. ソフトウェア部品検索システム. ソフトウェア部品の再利用・理解を支援 ソフトウェア部品 : ソフトウェアの構成単位(クラスなど). データベース化. 検索. オープンソース ソフトウェア. ライブラリ部品の 再利用. 開発現場の ソフトウェア. 実装例による 理解支援. ソフトウェア部品の利用関係. - PowerPoint PPT PresentationTRANSCRIPT
Department of Computer Science, Graduate School of Information Science & Technology,Osaka University
2008/3/4 SS2007-75 1
名前の重複を考慮したJava ソフトウェア部品間の利用関係解析手法の提案
○ 市井 誠†,横森 励士‡ ,井上 克郎†
† 大阪大学 大学院情報科学研究科‡南山大学 数理情報学部 情報通信学科
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
SS2007-75 2008/3/4
2
ソフトウェア部品検索システム
ソフトウェア部品の再利用・理解を支援 ソフトウェア部品 : ソフトウェアの構成単位(クラスなど)
検索
ライブラリ部品の再利用
実装例による理解支援
オープンソースソフトウェア
開発現場のソフトウェア
データベース化
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
SS2007-75 2008/3/4
3
ソフトウェア部品の利用関係 ソフトウェア部品は互いに利用関係(依存関係)をもつ
宣言,メソッド呼び出し,継承,…
部品を再利用するためには,利用関係の把握が必要 利用関係解析による支援
メソッド呼び出し
フィールド参照
変数宣言
インスタンス生成
継承
依存する部品群実装例となる部品群
メソッド呼び出し
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 { ...}
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();...
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
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”
利用関係の単位
エンティティを利用する識別子
参照が指し示すエンティティ
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
優先度 同じ名前を持つエンティティに対する利用関係の集合の中での優先度 条件に含まれる,もっとも低い確信度
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)})
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
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
SS2007-75 2008/3/4
11
提案するモデル ( 図 )
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)}
依存
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
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.
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
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
SS2007-75 2008/3/4
16
URL (JDK 1.2.2)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
SS2007-75 2008/3/4
17
FastArrayList (Commons collections 3.1)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
SS2007-75 2008/3/4
18
HttpUtils (JBoss 3.2.5)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
SS2007-75 2008/3/4
19
考察
不正確な利用関係が存在 一部の部品だけに存在するメンバへの参照 必ずしも不要とは言い切れない
再利用する機能に無関係なら,対応する参照を削除すれば良い 利用関係の優先度を下げる UI にて,メンバ単位で利用関係を閲覧出来るようにする
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
SS2007-75 2008/3/4
20
まとめ
名前の重複を考慮した利用関係の構築手法を提案 解析システムを試作
今後の課題 不正確な利用関係への対処
優先度への反映 UI での対応
ソフトウェア部品検索システムとしての実装
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
SS2007-75 2008/3/4
21
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
SS2007-75 2008/3/4
25
Backward relation
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
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
SS2007-75 2008/3/4
28
基本となるモデル : クラス図風表記