修士論文中間報告

メソッド間の依存関係を利用した
再利用支援システムの実装
小堀一雄† 山本哲男‡ 松下誠† 井上克郎†
†大阪大学
大学院情報科学研究科
‡立命館大学 情報理工学部
電子情報通信学会
1
発表の流れ

背景






現状の問題点
研究の目的
再利用支援手法の提案
再利用支援システム“E-Zone”
適用実験
まとめと今後の課題
電子情報通信学会
2
背景


Javaソフトウェア部品検索システム
SPARS-J
目的


プログラム理解や再利用の支援
特徴
大規模資産からの高速な検索
 利用実績と,キーワード出現頻度を考慮した検索
結果の順位付け
 検索結果の部品詳細情報を提供

電子情報通信学会
3
部品詳細表示
パッケージブラウザ
サブパッケージ一覧
クラス一覧
メソッド一覧
メソッド定義行へ移動
詳細情報を読んで
再利用するか判断
・プログラム理解
電子情報通信学会
4
システムと利用者のギャップ

既存の検索システムは、検索結果として、単
一の部品に関する情報しか提示しない。
ギャップが発生

一方、機能が単独の部品で実現されているこ
とは稀であり、多くの場合は複数の部品に
渡って実現されている
電子情報通信学会
5
ギャップの例
検索
検索
検索
public void class A{
public int x;
public int a ( int p ){
B b = new B();
x = b.b(p);
return x;
}
public void aa(){
x = x +1
}
public void class B{
public int B (){
}
public void b(int p){
C c = new C();
return p +c.c();
}
電子情報通信学会
public void class C{
public int age;
public int c(){
return age
}
6
問題点

開発者は,検索結果のメソッドを起点とする
一連の処理が新しい部品を呼び出さなくなる
まで繰り返し検索しないと,以下の2点を知る
ことができない。
どこまで繋がっているか?(総規模)
 どこを見るべきか?(重要な処理)

開発者にとって大きな作業コスト
電子情報通信学会
7
研究の目的

メソッドの静的な依存関係を利用して、あるメ
ソッドが依存,被依存している全部品を自動
的に解析して表示する

システムの支援単位を依存部品群とする

開発者が繰り返し検索していた情報をあらかじめ
表示する
ギャップを埋める
電子情報通信学会
8
提案する手法

メソッド間の依存関係を利用した再利用支援
手法

あらかじめ登録しておいた大量の部品に対して,
選択された部品と依存関係を持つ部品を収集,
分析して提示する

依存部品群


メトリクスを用いて分析し、重要部品を判定


どこまで繋がっているか?
どこを見るべきか?
被依存部品(=利用部品)群

再利用の例として表示
電子情報通信学会
9
手法の流れ
4
部品解析
依存関係抽出
Javaファイル
依存グラフ作成
ユーザ
依存関係探索
メトリクス計算
重要部品判定
電子情報通信学会
対象メソッド
結果表示
10
部品解析・依存関係抽出
A.java
ファイル
public void class A{
public int x;
1
public int a ( int p ){
B b = new B();
x = b.b(p);
return x;
}
*
クラス
1
*
メソッド
public void aa(){
x = x +1
}
電子情報通信学会
クラス
依存関係
メソッド
依存関係
11
手法の流れ
4
部品解析
依存関係抽出
Javaファイル
依存グラフ作成
依存関係探索
メトリクス計算
重要部品判定
電子情報通信学会
対象メソッド
ユー
ザ
データ表示
12
依存部品グラフ作成
:メソッド
:呼び出し関係
電子情報通信学会
13
手法の流れ
4
部品解析
依存関係抽出
Javaファイル
依存グラフ作成
ユーザ
入力
依存部品探索
メトリクス計算
重要部品判定
電子情報通信学会
対象メソッド
結果表示
14
依存部品探索
:メソッド
:起点メソッド
:依存メソッド
:利用メソッド
電子情報通信学会
15
手法の流れ
4
部品解析
依存関係抽出
Javaファイル
依存グラフ作成
ユーザ
依存部品探索
メトリクス計算
重要部品判定
電子情報通信学会
対象メソッド
結果表示
16
メトリクス計算

各部品ごとに以下の3つのメトリクスを求める

LOC(行数)


CYC(サイクロマチック数)


規模を表すメトリクス
複雑さを表すメトリクス
CR(Component Rank)

呼び出し頻度に関する重要度


多くの部品に呼び出されている部品は重要
重要な部品に呼び出されている部品も重要
電子情報通信学会
17
メトリクス計算による“重要部品”判定

“重要部品”

繰り返し呼ばれ、処理が複雑な部品は、主要な機能に強
く関連している可能性が高い

高CR


高LOC/CYC



繰り返し呼ばれている
処理が複雑
赤色でハイライト
閾値


高CR:CRが上位30%以内
高LOC/CYC:CYCが3以上で,1CYC当りのLOCが3以上
電子情報通信学会
18
手法の流れ
4
部品解析
依存関係抽出
Javaファイル
依存グラフ作成
ユーザ
依存部品探索
メトリクス計算
重要部品判定
電子情報通信学会
対象メソッド
結果表示
19
E-Zone

メソッドと依存関係を持つ部品群を収集,分
析する再利用支援システム“E-Zone”


入力
 メソッド
出力
 依存部品群



総規模に関するメトリクス表示,依存関係ツリー表示
 “どこまで繋がっているか?”
メトリクス計算により、自動的に重要部品を表示
 “どこを見るべきか?”
利用部品群

一覧表示
電子情報通信学会
20
システムの処理
4
登録時の流れ
検索時の流れ
部品登録部
部品解析
依存関係解析
ユーザ
Javaファイル
データベース
依存部品探索部
対象メソッド
SPARS-J
メトリクス計算部
データ表示部
電子情報通信学会
21
システムの処理
4
登録時の流れ
検索時の流れ
部品登録部
部品解析
依存関係解析
ユーザ
Javaファイル
データベース
依存部品探索
入力
依存部品探索部
対象メソッド
SPARS-J
メトリクス計算部
データ表示部
電子情報通信学会
22
システムの処理
4
登録時の流れ
検索時の流れ
部品登録部
部品解析
依存関係解析
ユーザ
Javaファイル
データベース
依存部品探索
入力
依存部品探索部
対象メソッド
メトリクス計算
重要部品判定
メトリクス計算部
SPARS-J
データ表示部
電子情報通信学会
23
システムの処理
4
登録時の流れ
検索時の流れ
部品登録部
部品解析
依存関係解析
ユーザ
Javaファイル
データベース
依存部品探索
入力
依存部品探索部
対象メソッド
メトリクス計算
重要部品判定
メトリクス計算部
SPARS-J
データ表示部
電子情報通信学会
24
データ表示部
利用部品群
依存部品群
総規模
依存ツリー
メトリクス
ソースコード
ダウンロード
電子情報通信学会
25
適用実験

ケーススタディ

1 “どこまで繋がっているか?”


2 “どこを見るべきか?”


総規模や依存ツリーを用いて支援する
重要部品の表示によって支援する
評価

“重要部品”の適合率
電子情報通信学会
26
ケーススタディ1

“どこまで繋がっているか?”

総規模や依存ツリーを用いて支援する

ソートを行うプログラムを作成するために,
SPARS-Jに“quicksort”という検索クエリを与えて、
再利用部品候補として2つのメソッドを得た。この
とき、どちらが理解し易いか判断したいとする
電子情報通信学会
27
再利用部品候補

部品1
org.apache.turbine.util.QuickSort.quickSort(O
bject, int, int, Comparable)
 LOC 74,CYC 11


部品2
cz.dhl.io.CoSort.QuickSort(CoFile, int, int)
 LOC 47,CYC 12

電子情報通信学会
28
部品群全体の規模
部品1
単 [ loc:74, cyc:11 ]
全 [ loc:76, cyc:12 ]
部品2
単 [ loc:47, cyc:12 ]
全 [ loc:94, cyc:31 ]
シンプルなquicksort
独自のデータ構造が
再利用部品として理解し易いのは部品1
入り込んでいる
電子情報通信学会
29
ケーススタディ2

“どこを見るべきか?”

重要部品の表示によって支援する

C++,C,Java等のソースコードを整形,再構成す
るソフトウェア“AStyle”のmainメソッドを起点メ
ソッドとして、本システムに適用した。
電子情報通信学会
30
判定された重要部品
左のような長いツリーが得られた
“どこをみればいいのか?”
→ 重要部品
重要メソッド名
機能
LOC
CY
C
CR
ASBeautifire.beautify
ソースを整形する
918
292
20
AStyle.parseOption
プログラム言語を設定
163
41
14
ASFormatter.
isOneLineBlockReached
ブロックが1行に収まる
か判定する
52
14
16
ASBeautifier.
getNextProgramCharDistnce
次の文字までの空白数
を調べる
32
8
27
ASFormatter.
peekNextChar
次の文字を読み込む
18
5
26
電子情報通信学会
31
ツリー構造を用いた機能理解
重要部品周りのツリー構造を読みとることで
重要処理の流れを理解することができる



beautifyはmainメソッドから直接見えていない
AStyle.main → ASFormatter.nextLine → ASBeautifier.beautify
1行ずつbeautifyを繰り返し呼び出して整形している
電子情報通信学会
32
評価実験

メトリクス評価によってシステムが自動的に判定した
“重要部品”(高CR&高LOC/CYC)が、本当にソフト
ウェアの重要な機能を実装しているかどうかを評価
する

対象


無作為に選んだ10個のソフトウェアのmainメソッド
本当に重要かどうかの判断

ソースコードやドキュメントコメントを読んで判断
電子情報通信学会
33
ソフトウェア名
依存部品数
重要部品数
(システム)
重要部品数
(人間)
適合率
1
2
3
4
JEdit
JeditLogger
JGraph
Astyle
237
7
49
92
16
1
1
5
10
1
1
4
0.625
1.000
1.000
0.800
5
Tidy
35
2
2
1.000
6
7
8
VncViewer
102
GanttProject 163
FontChooser 3
11
12
1
7
11
0
0.636
0.917
0.000
9
10
Parser
ClassFinder
94
8
14
1
11
1
0.786
1.000
790
64
48
0.750
計
電子情報通信学会
34
考察

適合率は0.750と高い数値を示した


規模の小さなソフトウェアにおいては低い適合率に
なった



プログラムの機能を大まかに理解するには、本システム
が提示する重要メソッドを見れば良い
単純な構造下では、CRが意味を持たないため
小規模の場合は,別の判断基準を用いるのが良いと考え
られる
再現率は評価中


約100個の依存部品に関して調べたところ約7割
漏れた重要部品=1回しか呼ばないが重要な部品
電子情報通信学会
35
まとめと今後の課題


まとめ

メソッド間の依存関係を利用した再利用支援シス
テム“E-Zone”を提案し,SPARS-Jの一部として
実現した

適用実験を通じて,本システムのケーススタ
ディーを行うとともに、その有効性を検証した
今後の課題

より多くのデータを用いた有効性の検証
電子情報通信学会
36