メソッド間の依存関係を利用した
再利用支援システムの実装
小堀一雄† 山本哲男‡ 松下誠† 井上克郎†
†大阪大学
大学院情報科学研究科
‡立命館大学 情報理工学部
電子情報通信学会
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
© Copyright 2026 ExpyDoc