Document

名前の重複を考慮した
Javaソフトウェア部品間の
利用関係解析手法の提案
○市井 誠†,横森 励士‡ ,井上 克郎†
†大阪大学 大学院情報科学研究科
‡南山大学 数理情報学部 情報通信学科
Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
2008/3/4
SS2007-75
1
ソフトウェア部品検索システム

ソフトウェア部品の再利用・理解を支援

ソフトウェア部品: ソフトウェアの構成単位(クラスなど)
データベース化
検索
オープンソース
ソフトウェア
ライブラリ部品の
再利用
開発現場の
ソフトウェア
実装例による
理解支援
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
2
ソフトウェア部品の利用関係

ソフトウェア部品は互いに利用関係(依存関係)をもつ



宣言,メソッド呼び出し,継承,…
部品を再利用するためには,利用関係の把握が必要
利用関係解析による支援
実装例となる部品群
依存する部品群
インスタンス生成
メソッド呼び出し
フィールド参照
メソッド呼び出し
変数宣言
継承
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
3
利用関係解析における問題 [1/2]

部品は名前により参照される


ソフトウェアのビルド単位にて一意な識別子
データベース中では,部品の名前は一意では無い




同じ部品の異なるバージョン
同じインターフェースの異なる実装
複製・改変された部品
偶然同じ名前
?
?
class A {
... foong() {
...
B b = new B();
...
} ...
}
?
class B {
...
}
class B {
...
}
class B {
...
}
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
4
利用関係解析における問題 [2/2]

既存の解析手法では,ユーザの要求を満たせない


候補が1つに絞られてしまっている,もしくは
複数の候補を適切に絞り込む手段が無い


利用関係の区別が無い
条件付きの利用関係を取得できない

メソッドのカスケード呼び出しなど
B
...
B b = new B();
...
...
b.foo().bar();
...
...
B foo() {
}
void bar() {
}
...
B1
B
A
A
B2
C
...
C foo() {
}
...
B
...
void bar() {
}
...
部品B1は使えない.
他に無いのか?
どれを使えば良いのか
分からない!
(部品A, B2を見ながら)
部品Cは使われていな
い様に見えるが…?
C
B3
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
5
目的

名前の重複を考慮した,部品間の利用関係解析


対象: Java
方針


候補全てへ利用関係を引く
利用関係に属性として優先度と条件を与え,候補の絞り込みを補助する
B
部品B1は優先度が高い
が,使えない.
B1
部品B2を使おう.
B
A
優先度1番目, …
A
必要なのは,部品AとB2
だけだな
B2
C
優先度2番目, …
B
優先度3番目, …
優先度1番目, B3
利用時のみ, ...
B3
C
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
6
準備: 基本となるモデル

ソフトウェア部品検索システム SPARS-J でのモデル


に,説明のための変更を加えたもの
参照に対してインディケーションを求めていくことで,エンティティ間の利
用関係を構築する
利用関係の単位
参照が指し示す
エンティティ
class A {
void foo() {
B b = null;
}
}
A
class B {
void bar() {
}
}
B
foo
bar
“B”
2008/3/4
エンティティをSS2007-75
7
Department of Computer
Science, Graduate School of Information Science & Technology, Osaka University
利用する識別子
提案するモデル

利用関係に属性 (確信度,優先度,条件) を追加する

条件: (名前,部品,確信度,優先度)の集合.
利用関係が求められたときに用いた,名前の重複しない部品集合
インディケーションから求める
 確信度: {DEF, ALT}





優先度: 0以上の整数



同じ名前をもつ部品の中での優先度
0が優先度最大
確信度



名前と部品の対応が確かであるという根拠が存在するかどうか
存在するときDEF
利用関係が確かであるという根拠が存在するかどうか.
条件にALTが含まれなければDEF,さもなくばALT
優先度
同じ名前を持つエンティティに対する利用関係の集合の中での優先度
 条件に含まれる,もっとも低い確信度

SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
8
利用関係の属性

インディケーションの属性に,条件を追加


参照が指し示すエンティティを特定するときの,名前と部品の対応
利用関係の属性のうちの条件は,対応するインディケーション
の条件の要素の積集合
(DEF, 0, {(“B”, B, DEF, 0)})
A (A)
B (B)
foo
bar
“B”
(DEF, 0, {(“B”, B, DEF, 0)})
{(“B”, B, DEF, 0)}
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
9
確信度と優先度

確信度が DEF となる条件



出自は同一であり,版管理されていない.
出自が同一のリポジトリ・同一のブランチであり,
かつ,それぞれの存在期間が重複する.
優先度の決定方法


確信度 DEF の部品は, 確信度 ALT の部品より高い
ファイルパスが近いほど高い
Software1:
/src/B.java
B1
DEF / 0
Software2:
/src/B.java
A
Software1:
/src/A.java
B2
ALT / 1
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
10
提案するモデル (図)
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
11
例
B (B1)
class A {
void main() {
B b = …;
b.foo().bar();
}
}
class B {
B foo() {
}
void bar() {
}
}
foo
bar
“B”
{(“B”, B1, DEF, 0)}
A (A)
{(“B”, B1, DEF, 0)}
main
{(“B”, B1, DEF, 0)}
“B”
{(“B”, B2, ALT, 1),
(“C”, C, ALT, 0)}
bar
“foo”
依存
C (C)
“bar”
B (B2)
{(“B”, B2, ALT, 1)}
{(“B”, B2, ALT, 1)}
foo
class B {
C foo() {
}
}
“C”
class C {
void bar() {
}
}
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
12
例
B (B1)
class A {
void main() {
B b = …;
b.foo().bar();
}
}
A (A)
class B {
B foo() {
}
void bar() {
}
}
foo
bar
“B”
(DEF, 0, {(“B”, B1, DEF, 0)})
main
C (C)
“B”
bar
“foo”
依存
“bar”
B (B2)
foo
(ALT, 1, {(“B”, B2, ALT, 1),
(“C”, C, ALT, 0)})
class B {
C foo() {
}
}
“C”
(ALT, 1, {(“B”, B2, ALT, 1)})
class C {
void bar() {
}
}
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
13
実装

システム構成
Javaソースコード集合
• Javaソースコードを解析し,部品・
エンティティ・参照を抽出
• MASU*のパーサを利用
パーサ
部品
データベース
• 提案手法を用いて,部品に含まれ
る参照のインディケーションを求める
利用関係
解析部
• ユーザのクエリを受け付け,利用
関係を出力する
•クラス単位
• Webアプリケーションとして実装
UI
ユーザ
SS2007-75
2008/3/4
*谷口,”多言語対応メトリクス計測ツールMASUの開発,''
14
Department of Computer Science, Graduate School
of Information Science & Technology, Osaka
University
ウィンターワークショップ2007・イン・那覇
論文集,pp.29-30,2007.
適用実験

対象

JDK1.2.2, JDK 1.4.2, 91個のOSS

Tomcat, Commons, Eclipse, NetBeans, JBoss, …
部品
エンティティ
127,903

1,396,487
参照
11,539,473
インディケーション
すべて
10,543,794
優先度: 0
5,534,129
紹介する例



java.net.URL (JDK 1.2.2)
org.apache.commons.collections.FastArrayList (Commons
collections 3.1)
org.jboss.test.util.web.HttpUtils (JBoss 3.2.5)
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
15
URL (JDK 1.2.2)
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
16
FastArrayList (Commons collections 3.1)
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
17
HttpUtils (JBoss 3.2.5)
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
18
考察

不正確な利用関係が存在


一部の部品だけに存在するメンバへの参照
必ずしも不要とは言い切れない



再利用する機能に無関係なら,対応する参照を削除すれば良い
利用関係の優先度を下げる
UIにて,メンバ単位で利用関係を閲覧出来るようにする
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
19
まとめ

名前の重複を考慮した利用関係の構築手法を提案
解析システムを試作

今後の課題


不正確な利用関係への対処
優先度への反映
 UIでの対応


ソフトウェア部品検索システムとしての実装
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
20
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
21
Backward relation
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
25
準備: 基本となるモデル

用語
class A {
void foo() {
 部品から参照される要素
B b = null;
 クラス(インターフェース等を含む),メンバ
(メソッド,フィールド)
}
 参照 (Reference)
}

エンティティ (Entity)





エンティティに含まれる,エンティティを利
用する記述
変数宣言の型,メソッド呼び出し等
インディケーション (Indication)

A
参照とエンティティのペア
参照が指し示すエンティティを表現
エンティティとエンティティのペア
bar
“B”

参照に対応するインディケーションを求め
ることで,部品間の利用関係を求める

簡単の為に


B
foo
利用関係 (use relation)

class B {
void bar() {
}
}
A
B
参照の名前は,完全限定名
メソッドは引数を持たない
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
27
基本となるモデル: クラス図風表記
SS2007-75
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2008/3/4
28