Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
ソースコードの静的解析による
ソフトウェア保守支援に関する研
究
大阪大学大学院情報科学研究科
コンピュータサイエンス専攻 井上研究
室
小堀 一雄
1
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
ソフトウェア保守とは
ソフトウェア保守とは
納入後,ソフトウェアに対して加えられる,欠陥の修正,
性能などの改善,変更された環境に適合させるための修正
. [IEEE Std 1219]
保守に関するコスト
全ライフサイクルの 3 分の2を占める
20
年以上も保守を続けているシステムも存在する
2ソフトウェア保守を支援した
い
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
ソフトウェア保守の課題
課題
保守担当者に以下を理解させるのが重要である
1.
どのように修正すべきか?
2.
どこを(どこまで)修正すべきか?
保守を難しくする要因
社会基盤を担う重要なソフトウェアは、大規模化
・複雑化・ライフサイクルの長期化が進む
保守期間中にドキュメント最新化が成されず、実
際の動作と乖離が発生
保守のアウトソーシングやオフショアが進み、仕
様決定時の情報を持たない人が保守を担当
3Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
ソフトウェア保守を支援する方法
保守支援に関する様々な手段
リバースエンジニアリング
ソースコードから設計情報を抽出する
回帰テスト
修正することでデグレードした箇所を特定する
ソースコード動的分析
ソースコードの実行結果から振る舞いや特徴を分析
動作環境とテストケースが必要
ソースコード静的解析
ソースコードの記述を分析して振る舞いや特徴を分
析
動作環境やテストケースは不要
4Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 5
ソースコード静的解析を用いたソフトウェア保守支
援
ソースコード静的解析
ソースコード静的解析技術を利用してプログラムから抽出され
た情報をもとに,プログラム保守の支援を目的として様々な
解析が行われている.代表的な例を以下に示す.
デバッグ支援
プログラムスライスを用いることで,デバッグ対象を限定する
影響波及解析
再テストすべきテストケースを限定することで,テスト工程を効率化する
ソフトウェア部品の評価
メトリクス値化された部品の性質から再利用性や品質を評価
コピー部品の把握
メトリクス計測された情報を配列化し,解析効率を上げる
理解支援
解析結果情報を選別の基準とし,大量の部品からの選別作業を支援する
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
研究の目的
プログラム保守支援を目的としたソースコ
ード解析手法の提案
アクセス修飾子過剰性の解析手法
ソフトウェア類似部品の高速な解析手法
手法を実現したツールの評価
6本論文では、下記の 2 つのソースコード解析技術に着目し、保守や再利用に
おける支援を目的とした以下の解析手法の提案、提案手法を実現したツール
の評価を行う.
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
研究対象とする課題①
「アクセス修飾子過剰性の解析
」
public class X {
private String str = null;
private void setString( ) { // ①
str = "hello";
}
public int getLength() { // ②
return str.length();
}
public int getCorrectLength() {
this.setString();
return this.getLength();
}
}
<
開発者の想定する正しい手順 >
外部から①を飛ばして②を直接実行可
能
NullPointerException
の発生
外部からの呼び出しを想定したメ
ソッドに①→②の呼び出し順序を実
装
public
getLength()
のアクセス修飾子
が private ではなく public
① 初期値が null である変数 str に
String
オブジェクトを代入
② 変数 str の文字列長を取得
7保守の課題1:「どのように修正すべきか?」
課題の具体例
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 8
研究対象とする課題①
「アクセス修飾子過剰性
の解析」
既存研究の問題
アクセス修飾子の過剰性に関しての詳細な研究はあまり無い
アクセス修飾子のチェックのみ行い、適切さについて議論していない
アクセス修飾子の修正に関する支援が無い
private
にすべきメソッドやフィールドに関する警告を提示する
private
のみでなく、全アクセス修飾子について過剰性を解析
・修正を支援する必要がある
アクセス修飾子過剰性の解析・修正
を支援する手法を提案する
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
研究対象とする課題②
「類似部品の高
速な解析」
保守の課題2:「どこを ( どこまで ) 修正すればよいか?」
課題の具体例
想定シナリオ 「類似部品に存在する類似バグを修正した
い」
1.
生産性を上げたい!
2.
ネットやリポジトリに過去の部品が大量に蓄積されている
3.
再利用して素早く実装した(コピー&ペーストによる類似部品作
成).
~ しばらくして ~
4.
ある類似部品に修正・デバッグを行った.
5.
他の類似部品にも同じ修正・デバッグを行う必要がある.
6.
大量の既存部品から、いますぐ類似部品見つけたい!
9Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 10
研究対象とする課題②
「類似部品の高
速な解析」
既存研究の課題
文字列比較による類似測定手法が多い
解析に時間がかかるため、解析対象が大規模化する場合、
バッチ処理的な運用が想定される。
しかし、類似部品の検索対象は随時作成されていくため、
現在のリポジトリに対して即時に類似部品を発見したい。
ソースコード部品類似性の高速な
解析手法を提案する
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
博士論文構成と業績一覧の関連
博士論文構成 第1章 はじめに 第2章 アクセス修飾子過剰性に関する研究 [1-1], [1-2], [2-1], [2-2] 第3章 ソフトウェア部品類似性に関する研究 [1-3], [1-4], [2-4] 第4章 むすび 業績一覧 主要論文 [1-1] 小堀 一雄, 石居 達也, 松下 誠, 井上 克郎: “Javaプログラムのアクセス修飾子過剰性分析ツールModiCheckerの機能拡張と その応用例”. SEC journal, Vol.33, 2013. (学術論文,採録決定)[1-2] D. Quoc, K. Kobori, N. Yoshida, Y. Higo and K. Inoue,: ModiChecker: Accessibility Excessiveness Analysis Tool for Java Program, コンピュータソフトウェア, Vol.29, No.3, pp.212-218, 2012. (学術論文)
[1-3] 小堀 一雄, 山本 哲男, 松下 誠, 井上 克郎: “コードの静的特性を利用したJavaソフトウェア部品類似判定手法” ,電子情報通信学会 論文誌D,Vol.J90-D(4) , pp.1158-1160, 2007.(学術論文)
[1-4] Kazuo Kobori, Tetsuo Yamamoto, Makoto Matsushita, Katsuro Inoue: “Classification of Java Programs in SPARS-J”, International Workshop on Community-Driven Evolution of Knowledge Artifact, Session 4-3, Irvine, CA, 2003.(国際会議録) 関連論文
[2-1] 石居 達也, 小堀 一雄, 松下 誠, 井上 克郎: “ アクセス修飾子過剰性の変遷に着目したJavaプログラム部品の分析”, 情報処理学会研究報告 Vol.2013-SE-180, No.1, pp.1-8, 2013. (国内会議録)
[2-2] Dotri Quoc,Kazuo Kobori,Norihiro Yoshida ,Yoshiki Higo,Katsuro Inoue: “Modi Checker : Accessibility Excessiveness Analysis Tool for Java Program” 日本ソフトウェア科学会大会講演, Vol28, 6C-2, pp.1-7 ,2011. ( 国内会議録) [2-3] 小堀 一雄,山本 哲男,松下 誠,井上 克郎: “ メソッド間の依存関係を利用した再利用支援システムの実装”, 電子情報通信学会技術研究報告, SS2004-58, Vol.104, No.722, pp.13-18, 2005.(国内会議録)
[2-4] 小堀 一雄,山本 哲男,松下 誠,井上 克郎: “ 類似度メトリクスを用いたJavaソースコード間類似度計測ツールの試作”, 電子情報通信学会技術研究報告, SS2003-2, Vol.103, No.102, pp.7-12, 2003. ( 国内会議録)
Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
アクセス修飾子過剰性に関する研
究
12
博士論文 第2章
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
背景:アクセス修飾子
アクセス修飾子
フィールド / メソッドへのアクセスを制限する修
飾子
( )
※
public, protected, default(
宣言なし ),private が存
在
過剰に設定すると不具合の原因となりうる
過剰:アクセス可能な範囲 > 実際のアクセス範囲
13アクセス修飾子
アクセス可能な範囲
public
あらゆる部品
protected
自身と同じパッケージに属する部品
及び自身のサブクラス
default(
宣言なし )
自身と同じパッケージに所属する部
品
private
自身と同じクラス
※ 本研究ではクラスのアク
セス
修飾子については考慮しない
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
アクセス修飾子過剰性を表すメトリクス
AE(
Accessibility Excessiveness
)
フィールド / メソッドのアクセス修飾子を以下の3つ
に分類
1.
適切:
実際の被アクセス状況通りのアクセス修飾子が宣言されてい
る(表中緑色)
2.
AE
:
実際の被アクセス状況に比べて過剰に広いアクセス修飾子が
宣言されている状態(表中オレンジ色)
3.
NA(NoAccess)
:
どこからもアクセスされていない状態(表中
黄色)
14Public
Protected Default
Private
NoAccess
Public
pub-pub
pub-pro
pub-def
pub-pri
pub-na
Protected x
pro-pro
pro-def
pro-pri
pro-na
Default
x
x
def-def
def-pri
def-na
Private
x
x
x
pri-pri
pri-na
実際の被アクセス範囲に対応するアクセス修飾子
現在宣言してい
る
アクセス修飾子
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
アクセス修飾子過剰性の解析・自動修正ツー
ル ModiChecker
フィールド / メソッドに宣言し
ている
アクセス修飾子を抽出
フィールド / メソッドの
呼び出される範囲を抽出
ModiChecker
ソースコードの内容・
呼び出し関係を解析する
AST(
抽象構文木
)
データベース
MASU
(既存の Java 解析ツー
ル
アクセス修飾子の過剰性( AE )を
抽出
入
力:
解析対象の
ソースコード群
必要なライブラ
リ (.jar など )
各フィールド / メソッドの
AE
種別
出
力:
15MASU - http://sourceforge.net/projects/masu/
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
ModiChecker
の適用実験
目的
複数のオープンソースにおける各 AE の分布状況を
確認する
考察事項
AE
の原因別の数を確認する
将来的な利用を想定したことによる AE
自動生成による AE
設定ミスによる AE
対象ソフトウェア
MASU(519 files, 10200 LOC)
Ant 1.8.2 (1141 files, 127235 LOC)
jEdit 4.4.1(546 files, 109479 LOC)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
MASU
に対する結果 ~各 AE の割合~
JSSST11 21/07/10
17
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
AE
であるフィールド
総数(割合) : 280(35.7%)
1.
将来的な利用を想定 : 20
2.
自動生成 : 255
3.
設定ミス : 5
自動生成ツールによって、一律 public と設定されたフィール
ドが多かった
AE
であるメソッド
1.
総数(割合) : 253(14.3%)
1.
将来的な利用を想定 : 181
2.
自動生成 : 6
3.
設定ミス : 66
2.
Java Bean
の使用上機械的に public と設定されたメソッド
(setter/getter)
が多かった
JSSST11 21/07/10
18
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
応用実験(1) 概要
19
目的:
•
先の実験で、ソフトウェアのある時点における AE の解析
をおこなうことができた
•
次に、応用として、ソフトウェアの開発履歴を追って AE
の状態がどのように遷移するか分析することで、 AE を解
析すべき契機に関する情報を開発者に提案したい
実験内容:
•
バージョンアップ時に、アクセス修飾子が適切・ AE ・
NA
のうち、どの状態に遷移していくのか可視化する
計測事項:全バージョンにおける状態遷移総数における、
状態遷移の種別ごとの割合を調査する
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
応用実験(1) 実験対象
実験対象: 7 つの Java プロジェクト(バージョン数があ
り、最近まで開発が行われていて、世の中で利用されてい
るソフトウェア)
20番号 プロジェクト
名
バージョン番号
バージョン
数
開発期間
(
年 )
1
Apache Ant
1.1
~ 1.8.4
23
2003
~ 2012
2
Areca Backup
5.0
~ 7.2.17
66
2007
~ 2012
3
ArgoUML
0.10.1
~ 0.34
19
2002
~ 2011
4
FreeMind
0.0.2
~ 0.9.0
16
2000
~ 2011
5
JDT_Core
2.0.1
~ 3.7
16
2002
~ 2012
6
jEdit
3.0
~ 4.5.2
21
2000
~ 2012
7
Apache Struts
1.0.2
~ 2.3.7
34
2002
~ 2012
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
バージョン間における状態遷移
2
バージョン間におけるフィールド / メソッドの状態遷移
は以下を状態遷移図で表現する
状態数:4
適切、 AE 、 NA 、なし(フィールド / メソッドが削除された状態
)
状態遷移数: 18
a ~ r
21適切
NA
AE
なし
a,p
b
c
d
e,q
f
g
h
i,r
o
l
j
m
k
n
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
結果考察 - メソッド状態遷移 ( 単位 :%)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
応用実験(1) 結果考察
フィールド / メソッドに共通して得られた知見
一度、アクセス修飾子が設定されると、その後アクセス修
飾子が変更されるケースは少ない
用途が変わる場合は、フィールド / メソッド自体を変更す
る傾向にある
フィールドについて得られた知見
アクセス範囲を明確にして作成されるものが大半
メソッドについて得られた知見
作成時点ではアクセス範囲が定まっていないもの (NA) が
多い
23Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
応用実験(2) 概要
24
目的:
•
先の応用実験(1)で、ソフトウェアの開発履歴を追って
アクセス修飾子の状態がどのように遷移するか分析できた
•
次に、さらなる応用として、どのようなバージョンアップ
の際に AE の変化が大きくなるのか分析することで、 AE
解析を行うべきタイミングを提案したい
仮説
• Major version up
時に AE が大きく変化する
•
過剰なアクセス修飾子を設定されたフィールド・メソッ
ドが追加される
• Minor version up
時には AE はほとんど変化しない
•
一度作成された AE は修正されることはない
(先の応用実
験結果)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
Ant
の 22 バージョンにおける AE 変
化量
仮説に合致しそうな結果を得たので検定を行う
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
応用実験(2) 結果考察
フィールド:全 AE ・ NA で MajorVU 時と MinorVU 時
の間で有意差(有意水準 0.05 )がみられた
メソッド: pub-pri,def-pri,def-na 以外の AE ・ NA につ
い MajorVU 時と MinorVU 時の間で有意差(有意水準
0.05
)がみられた
上記の AE は他の AE ・ NA に比べて各バージョン間の値の変
化量が小さく,順位がタイとなる値が多かったためマン・ホ
イットニーの U 検定では誤差が出やすい状況下にあった.
26下記仮説を裏付ける結果が得られた
•Major version up
時に AE が大きく変化する
•Minor version up
時には AE はほとんど変化しない
Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
ソフトウェア類似部品に関する研究
27
博士論文 第3章
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
研究対象とする課題②
「類似部品( Java クラス)の高
速な解析」
解決したい課題(その2)
「どこまで修正すればよいか?」
課題の具体例
想定シナリオ 「類似部品に存在する類似バグを修正した
い」
1.
生産性を上げたい!
2.
ネットやリポジトリに過去の部品が大量に蓄積されている
3.
再利用して素早く実装した(コピー&ペーストによる類似部品作
成).
~ しばらくして ~
4.
ある類似部品に修正・デバッグを行った.
5.
他の類似部品にも同じ修正・デバッグを行う必要がある.
6.
大量の既存部品から、いますぐ類似部品見つけたい!
28Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 29
研究対象とする課題②
「類似部品の高
速な解析」
既存研究の課題
文字列比較による類似測定手法が多い
解析に時間がかかるため、解析対象が大規模化する場合、
バッチ処理的な運用が想定される。
しかし、類似部品の検索対象は随時作成されていくため、
現在のリポジトリに対して即時に類似部品を発見したい。
ソースコード部品類似性の高速な
解析手法を提案する
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 30
類似度メトリクス
2
つの視点から類似度メトリクスを計測する
トークン構成
メトリクス : ソースコードにおける各トークンの出現数
トークン = 予約語 + 記号 + 演算子 + 識別子
( 96 種) ( 49 種) ( 9 種) ( 37 種) (1種
)
※
jdk1.3
の場合
意味:ソフトウェア部品の表層的特徴を表す
複雑度
メトリクス :クラス内のメソッド数 , サイクロマチック数(分岐
の数)など
意味:ソフトウェア部品の構造的特徴を表す
数値比較のため、文字列比較に比べて解析コストの
低下が期待できる
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 31
類似判定法
トークン構成に関するメトリクスと複雑度に関するメトリクスの全てにおいて
部品 A と B のメトリクス値差分があらかじめ設定した閾値以内になった場合
類似部品と判定する
分類
メトリクス
閾値
※
トークン構
成
各トークンの出現数差分の和
/小さいほうの部品のトーク
ン総数
0.03
複雑度
サイクロマチック数
0
メソッドの宣言数
1
メソッド呼び出し数
2
ネストの深さ
0
“class”
トークン数
0
“interface”
トークン数
(
0
※
今回の実験で経験的に設定した値)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 32
類似判定の効率化
1.
メトリクス計測時に、いくつかのメト
リクスでハッシュキーを作成する
2.
部品と、部品の持つメトリクス値
から作成したハッシュキーを対応
させた表を構築しておく
[ 0. 0. 0]= null
[ 10. 62.124]=
部品 A
[ 10. 62.125]=
部品 B ,部品
C
[ 10. 62.126]= null
[255.255.255]=
部品 Z
・
・
・
・
・
・
8bit
8bit
8bit
メトリクス
A
ハッシュ
キー
(24bit)
=
3.
新しく類似測定をしたい部品 P が追加
される
部品 P のハッシュキー=
[10.62.125]
メトリクス [A,B,C] の閾値=
[0.0.1]
最終結果を変えずに解析コスト
を下げることが可能
4.
残りの全メトリクスを用いた類似判
定の計算を行うのは、左下図の部品 A
, B , C の 3 つのみに限定する
メトリクス
B
メトリクス C
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
適用実験の概要
実験目的
今回提案したメトリクス値比較による類似判定手法が、
従来の文字列比較による類似判定手法より解析コス
トが低くなることを確かめる
実験内容
同じソースコード群に対して、各手法を実装した2ツー
ルによる類似判定を行った際の解析コストを比較する
比較するツール
既存の文字列比較を用いた類似度測定ツール SMMT
今回提案したメトリクス比較を用いた類似度測定ツール Luigi
実験対象のソースコード
JDK1.3
に属する 431 個のクラス
33Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
ハッシュキーを構成
するメトリクス
事前分類
クラスタ
数
計算コス
ト
(sec)
未使用
1
05.02
[ C ]
21
00.56
[ C,M ]
85
00.29
[ C,M,T ]
232
00.16
考察(解析コスト)
C
:サイクロマチック数
M
:宣言メソッド数
T :
トークン構成メトリクス
文字列比較を用いた類似度測定ツール SMMT の計算コスト: 24.35 ( sec )
メトリクス値比較だけで 1/5 に低下
ハッシュキーにより、さらに 1/30 に
低下
対象 : JDK1.3
431 クラス
34メトリクス値比較を用いた類似度測定ツール Luigi の計算コスト
解析コストは 1/150 に
なった
Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
むすび
35
博士論文 第4章
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
まとめ
下記のソースコード静的解析技術を提案・評価した
1.
アクセス修飾子の解析手法
AE
メトリクスを用いたアクセス修飾子解析手法を提案した
上記手法をツール ModiChecker に実装した
ModiChecker
の適用実験により、以下を示した
AE
・ NA の解析・可視化を実現した
AE
は一度作り込まれると、 version up しても修正されず残る傾向にある
多くの AE ・ NA において、 major version up の方が minor version up よ
り多くの AE が発生する傾向にある
2.
高速なソースコード類似度判定手法
メトリクス比較を用いた類似判定手法を提案した
上記手法をツール Luigi に実装した
Luigi
の適用実験により、以下を示した
既存の文字列比較を用いた類似度測定ツール SMMT と比べて 150 倍の速
度をもつことを示した
36Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
今後の研究方針
アクセス修飾子解析手法
AE
が発生した原因をインタビューなどで調査する
AE
の発生を防ぐ開発環境を提供する
外部からの利用を想定した AE を自動判別する
テストケースも合わせて ModiChecker で解析する
品質(バグ)と AE の関連性を分析する
類似判定手法
現在、類似判定エンジンのみなので、単独のツール
として利用しやすいようにする
各メトリクスの閾値の設定を簡単にできるようにす
る
Java
以外の言語への対応
37Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
発表おわり
ご清聴ありがとうございました.
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
以下、補足資料
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
業績一覧
主要論文
[1-1]
小堀 一雄 , 石居 達也 , 松下 誠 , 井上 克郎 : “Java プログラムのアクセス修飾子過剰性分析ツール
ModiChecker
の機能拡張とその応用例” . SEC journal, Vol.33, pp.151-158, 2013. (学術論文)
[1-2] D. Quoc, K. Kobori, N. Yoshida, Y. Higo and K. Inoue,: ModiChecker: Accessibility Excessiveness
Analysis Tool for Java Program,
コンピュータソフトウェア , Vol.29, No.3, pp.212-218, 2012. (学術論文)
[1-3]
小堀 一雄 , 山本 哲男 , 松下 誠 , 井上 克郎 : “ コードの静的特性を利用した Java ソフトウェア部品類
似判定手法” ,電子情報通信学会論文誌 D , Vol.J90-D(4) , pp.1158-1160, 2007. (学術論文)
[1-4] Kazuo Kobori, Tetsuo Yamamoto, Makoto Matsushita, Katsuro Inoue: “Classification of Java Programs in
SPARS-J”, International Workshop on Community-Driven Evolution of Knowledge Artifact, Session 4-3, Irvine,
CA, 2003.
(国際会議録)
関連論文
[2-1]
石居 達也 , 小堀 一雄 , 松下 誠 , 井上 克郎 : “ アクセス修飾子過剰性の変遷に着目した Java プログラ
ム部品の分析” , 情報処理学会研究報告 Vol.2013-SE-180, No.1, pp.1-8, 2013. ( 国内会議録 )
[2-2] Dotri Quoc
, Kazuo Kobori , Norihiro Yoshida , Yoshiki Higo , Katsuro Inoue: “Modi Checker :
Accessibility Excessiveness Analysis Tool for Java Program”
日本ソフトウェア科学会大会講演 , Vol28, 6C-2,
pp.1-7
, 2011. ( 国内会議録 )
[2-3]
小堀 一雄,山本 哲男,松下 誠,井上 克郎 : “ メソッド間の依存関係を利用した再利用支援システムの
実装” , 電子情報通信学会技術研究報告 , SS2004-58, Vol.104, No.722, pp.13-18, 2005. (国内会議録)
[2-4]
小堀 一雄,山本 哲男,松下 誠,井上 克郎 : “ 類似度メトリクスを用いた Java ソースコード間類似度
計測ツールの試作” , 電子情報通信学会技術研究報告 , SS2003-2, Vol.103, No.102, pp.7-12, 2003. ( 国内会議
録 )
40Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 41
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
ソフトウェア保守とは
ソフトウェア保守とは
納入後,ソフトウェアに対して加えられる,欠陥の修正,性能など
の改善,変更された環境に適合させるための修正. [IEEE Std 1219]
「修正」と「ソフトウェア保守」の分類 [JISX0161:2008]
42訂正
改良
是正保守
予防保守
適応保守
完全化保守
緊急保守
分類名
定義
是正保守 ソフトウェア製品の引渡し後に発見された問題
を訂正するために行う受身の修正
緊急保守 是正保守の内,実施までシステム運用を確保す
るための,計画外で一時的な修正
予防保守 引渡し後のソフトウェア製品の潜在的な障害が
運用障害になる前に発見し,是正を行うための
修正
適応保守 引渡し後,変化した又は変化している環境にお
いて,ソフトウェア製品を使用できるように保
ち続けるために実施するソフトウェア製品の修
正
完全化
保守
引渡し後のソフトウェア製品の潜在的な障害が
故障として現れる前に,検出し訂正するための
修正
修正の
分類
ソフトウェア保守の
分類
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 43
ソースコード解析
ソースコード解析の分類
ソースコード静的解析
ソースコードを実際に動作することなく解析を行うことで,性質や振
る舞い情報を抽出する技術
ソースコードの中身を扱うため,網羅性の高い解析をすることが可能
ソースコード動的解析
ソースコードを動作環境上で実際に動作させ,その動作結果や動作中
のログなどを解析することで性質や振る舞い情報を抽出する技術
マルチスレッド処理など,ソースコード静的解析では発見が難しい
振る舞いを解析することが可能
網羅的な振る舞いを調べるには多くのテストケースが必要となる.
動作環境やテストケースの準備が不要であるため、
現場への適用が容易な「ソースコード静的解析」に
注目する。
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 44
研究対象とする課題①
「アクセス修飾子過剰性
の解析」
解決したい課題(その1)
「過剰に広いアクセス修飾子をもつフィールド,メ
ソッドに関する理解支援」
課題の具体例
想定シナリオ:設計時に意図しなかった不正なメソッド呼び出し
対策の考察:
対策1:ドキュメントにプログラム内部構造を詳細に書く
→作成コスト、メンテナンスコストが大きすぎる
→膨大な資料を説明・理解するコストが大きすぎる
対策2:不正な呼び出しができないようにリファクタリングする
→不正な呼び出しの可能性がある箇所の特定が難しい
→設計時に想定した範囲より過剰に広い範囲からアクセスされる
フィールド・メソッドの解析・修正を支援したい
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
適用実験
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
ModiChecker
適用実験の概要
実験の目的
Validation of our approach
Quantitative analysis of AE Id in some software
systems
Reasons for excessive/unused fields/methods
(found by interviewing developers)
1.
Reason 1 : Set for future use
2.
Reason 2 : Created by other program(automatic code
generators or refactoring tools…) or accessed by other
programs(Java bean)
3.
Reason 3 : Carelessness and immaturity
実験対象のソフトウェア
Industrial Software(
341 Java files/ 64455 LOC
)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
適用実験結果(フィールド)
実際の
被アクセス
宣言
Public
Protected
Default
Private
NoAccess
Public
207
0
59
936
33
Protected
x
0
9
18
0
Default
x
x
4
5
2
Private
x
x
x
1123
5
47AE
であるフィールドの数
NA
であるフィールドの数
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
適用実験結果(メソッド)
実際の被
アクセス
宣言
Public
Protected
Default
Private
NoAccess
Public
816
14
23
190
1005
Protected
x
13
36
48
9
Default
x
x
0
3
0
Private
x
x
x
488
4
48AE
であるメソッドの数
NA
であるメソッドの数
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
適用結果の考察
AE
もしくは NA のフィールド / メソッドの数は以下のとおり
AE
であるフィールド : 1027
AE
であるメソッド : 512
NA
であるフィールド : 40
NA
であるメソッド : 1018
NA(NoAccess)
であるフィールド( 40 個)について内容を確認した
結果
将来的な利用を想定したもの: 8
外部からの利用を想定したもの: 5
serialVersionUID (直列化
ランタイムからの使用を想定)
実際に未使用だったもの: 27
その内、潜在バグを伴っていたもの: 5
49Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
Discussion
Validation of ModiChecker output
Changed all of the excessive access modifier
and deleted some unused fields/methods
Modified programs were compiled and executed
without any error
Developer should look for the detailed result
and make decision to change/delete the
unused/excessive fields/methods
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
Ant
に対する結果 ~各 AE の割合~
51
18.9%
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
AE
フィールド
総数(割合) : 611
(18.9%)
1.
将来的な利用を想定 : unknown
2.
自動生成 : 0
3.
設定ミス : unknown
AE
メソッド
総数(割合) : 1520
(35.5%)
1.
将来的な利用を想定 : unknown
2.
自動生成 : 0
3.
設定ミス : unknown
1.
AE
メソッドの割合 > AE フィールドの割合
1.
java bean
の制約上、実際のアクセス範囲に関わらず、 getter, setter メソッ
ドには機械的に public が設定されていた
21/07/10 52
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
jEdit
に対する結果 ~各 AE の割合~
53
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
AE
フィールド
総数(割合) : 604
(24.1%)
1.
将来的な利用を想定 : unknown
2.
自動生成 : 0
3.
設定ミス : unknown
AE
メソッド
総数(割合) : 981
(30.4%)
1.
将来的な利用を想定 : unknown
2.
自動生成 : 0
3.
設定ミス : unknown
AE
メソッドの割合 > AE フィールドの割合
54jEdit
に対する結果 ~考察~
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
応用実験①
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
応用実験②
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
バージョン毎のフィールド / メソッド分類
AE
以外の状態を 2 つにグループ化し,
計 3 つの状態を定義
57
Public
Protected Default
Private
NoAccess
Public
pub-pub
pub-pro
pub-def
pub-pri
pub-na
Protected x
pro-pro
pro-def
pro-pri
pro-na
Default
x
x
def-def
def-pri
def-na
Private
x
x
x
pri-pri
pri-na
③NA
宣言されてはいるが
どこからもアクセスされていな
い
①AE
アクセス可能な範囲が
実際のアクセス範囲より広い
② 適切
アクセス可能な範囲と
実際のアクセス範囲が一致
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
応用実験 概要
58分析1:プロジェクト開発履歴における各状態遷移の出現頻度
分析
分析 2 :プロジェクト開発履歴における各 AE の修正状
況分析
•
目的:バージョンアップの際に AE であるアクセス修飾子
の修正
がどれ程の頻度で行われているのかを明確にする
•
計測データ:
全バージョン間での ( 各種状態遷移総数 ÷ 全状態遷移
総数 )
•
目的: AE の種類ごとに,修正頻度に差異がみられるかど
うかを
明確にする
•
計測データ: 修正された AE 数 ÷ 全バージョン内の AE 総数
データの取得にはアクセス修飾子過剰性検出ツー
ル ModiChecker を利用
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
バージョン間での状態遷移の分類
(2/2)
59グループ 対応する記号 性質
AE
修正
a,b,c
アクセス修飾子の変化により AE 修正
適切→適切はアクセス修飾子が変化したものの
み
AE
発生
d,e,f
アクセス修飾子の変化により AE 発生
AE→AE
はアクセス修飾子が変化したもののみ
アクセス消失
g,h,i
アクセス修飾子の変化によりアクセスが消失
NA→NA
はアクセス修飾子が変化したもののみ
フィールド / メ
ソッド作成
j,k,l
バージョンアップにより新たに作成
フィールド / メ
ソッド削除
m,n,o
バージョンアップにより削除
変化なし
p,q,r
バージョンアップ前後で変化がない
適切, AE , NA それぞれ 1 状態ずつ
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
バージョン間での状態遷移の分類
(2/2)
60グループ 対応する記号 性質
AE
修正
a,b,c
アクセス修飾子の変化により AE 修正
適切→適切はアクセス修飾子が変化したものの
み
AE
発生
d,e,f
アクセス修飾子の変化により AE 発生
AE→AE
はアクセス修飾子が変化したもののみ
アクセス消失
g,h,i
アクセス修飾子の変化によりアクセスが消失
NA→NA
はアクセス修飾子が変化したもののみ
フィールド / メ
ソッド作成
j,k,l
バージョンアップにより新たに作成
フィールド / メ
ソッド削除
m,n,o
バージョンアップにより削除
変化なし
p,q,r
バージョンアップ前後で変化がない
適切, AE , NA それぞれ 1 状態ずつ
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
分析 1 結果 -Ant におけるフィールド状態
遷移
61適切
NA
AE
なし
0.02,71.42
0.16
0.02
0.04
0.07,15.28
0.00
0.03
0.03
0.00,2.28
0.13
0.21
6.41
2.03
1.41
0.46
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
分析1結果 - フィールド状態遷移 ( 単位 :
%)
68変化なし (p,q,r)→ 全体の約 53 ~
97%
変化なし ( 適切 )→ 全体の約 36 ~
71%
<
フィールド作成 >
「適切」で作成される場合が最も多い
<AE
修正, AE 発生,アクセス消失 >
アクセス修飾子の修正を伴う遷移は全体の 1% に満た
ない
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
分析1結果 - メソッド状態遷移 ( 単位 :
%)
69<AE
修正, AE 発生,アクセス消失 >
アクセス修飾子の修正を伴う遷移は全体の 1% に満た
ない
<
メソッド作成 >
比較的「 NA 」で作成される場合が多
い
変化なし (p,q,r)→ 全体の約 51 ~
96%
変化なし (NA)→ 全体の約 25 ~ 55%
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
結果考察 - フィールド状態遷移 ( 単位 :
%)
70変化なし (p,q,r)→ 全体の約 53 ~
97%
変化なし ( 適切 )→ 全体の約 36 ~
71%
<
フィールド作成 >
「適切」で作成される場合が最も多い
<AE
修正, AE 発生,アクセス消失 >
アクセス修飾子の修正を伴う遷移は全体の 1% に満た
ない
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
結果考察 - メソッド状態遷移 ( 単位 :%)
71<AE
修正, AE 発生,アクセス消失 >
アクセス修飾子の修正を伴う遷移は全体の 1% に満た
ない
<
メソッド作成 >
比較的「 NA 」で作成される場合が多
い
変化なし (p,q,r)→ 全体の約 51 ~
96%
変化なし (NA)→ 全体の約 25 ~ 55%
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
分析2結果 - フィールド AE 修正状況 (
単位 :%)
72pub-def,pub-pri →
全 7 プロジェクトにて修正作業が行われている
pro-def,pro-pri,def-pri →
6
プロジェクトにて修正作業が行われて
いる
AE
が修正される割合は AE の種類に関わらず 0.2% に満たない
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
分析2結果 - メソッド AE 修正状況 ( 単
位 :%)
73pub-def,pub-pri →
全 7 プロジェクトにて修正作業が行われて
いる
pub-pro,pro-pri →
6
プロジェクトにて修正作業が行われている
AE
が修正される割合は AE に関わらず高々 0.2% に満た
ない
注: × ・・・ 全バージョンにて一度も出現しなかったことを表す
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
結果考察 - フィールド状態遷移 ( 単位 :
%)
74変化なし (p,q,r)→ 全体の約 53 ~
97%
変化なし ( 適切 )→ 全体の約 36 ~
71%
<
フィールド作成 >
「適切」で作成される場合が最も多い
<AE
修正, AE 発生,アクセス消失 >
アクセス修飾子の修正を伴う遷移は全体の 1% に満た
ない
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
結果考察 - メソッド状態遷移 ( 単位 :%)
75<AE
修正, AE 発生,アクセス消失 >
アクセス修飾子の修正を伴う遷移は全体の 1% に満た
ない
<
メソッド作成 >
比較的「 NA 」で作成される場合が多
い
変化なし (p,q,r)→ 全体の約 51 ~
96%
変化なし (NA)→ 全体の約 25 ~ 55%
Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
76
ソースコードの静的特性を用いた
Java
プログラム間類似度測定ツール
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 77
背景
これらのソースコードは,開発者に
とって
有益な再利用部品である可能性があ
る
再利用を活用するためには,過去に
開発された類似なソフトウェア部品
に関する情報を入手することが必要
インターネットの普及により
大量のソースコードが比較的
容易に入手可能となった
ソフトウェアを収集して
再利用部品検索システムを構築
ソフトウェア開発効率を飛躍
的に向上するための手法とし
て、再利用が注目されている
再利用とは既存の類似ソフト
ウェア部品を参照し,一部手
直しをして用いること
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 78
背景
これらのソースコードは,開発者に
とって
有益な再利用部品である可能性があ
る
再利用を活用するためには,過去に
開発された類似なソフトウェア部品
に関する情報を入手することが必要
インターネットの普及により
大量のソースコードが比較的
容易に入手可能となった
ソフトウェアを収集して
再利用部品検索システムを構築
ソフトウェア開発効率を飛躍
的に向上するための手法とし
て、再利用が注目されている
再利用とは既存の類似ソフト
ウェア部品を参照し,一部手
直しをして用いること
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 79
背景
これらのソースコードは,開発者に
とって
有益な再利用部品である可能性があ
る
再利用を活用するためには,過去に
開発された類似なソフトウェア部品
に関する情報を入手することが必要
インターネットの普及により
大量のソースコードが比較的
容易に入手可能となった
ソフトウェアを収集して
再利用部品検索システムを構築
ソフトウェア開発効率を飛躍
的に向上するための手法とし
て、再利用が注目されている
再利用とは既存の類似ソフト
ウェア部品を参照し,一部手
直しをして用いること
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 80
背景
これらのソースコードは,開発者に
とって
有益な再利用部品である可能性があ
る
再利用を活用するためには,過去に
開発された類似なソフトウェア部品
に関する情報を入手することが必要
インターネットの普及により
大量のソースコードが比較的
容易に入手可能となった
ソフトウェアを収集して
再利用部品検索システムを構築
ソフトウェア開発効率を飛躍
的に向上するための手法とし
て、再利用が注目されている
再利用とは既存の類似ソフト
ウェア部品を参照し,一部手
直しをして用いること
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 81
SPARS-J
( 1/2 )
利用実績に基づくソフトウェア部品検索システム
SPARS-J
( Software Product Archiving, analyzing ,and Retrieving System for Java )
システムの特徴
対象: Java プログラムソースコード
利用実績に基づいた評価値 (Component Rank
*)
を計算し,利用実績による
ランク付けを行う事で,利用実績の高い部品を,ユーザに提供可能
* Katsuro Inoue, Reishi Yokomori, Hikaru Fujiwara, Tetsuo Yamamoto, Makoto Matsushita, Shinji Kusumoto:
"Component Rank: Relative Significance Rank for Software Component Search", to be appeared in Proceedings
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 82
SPARS-J
( 2/2 )
Component Rank
の計算では,部品間のコピー関係を把握す
るために類似度を測定している
類似部品を一つの部品群として扱い,利用関係を合成する
評価値にコピー関係を反映させることが可能
これまでは,ソースコードの文字列比較を行う事で,類似部品を判定していた
B
E
部品 A
C
F
D
部品 A´
F
C
部品群 A
B
D
+
類似
E
合成
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 83
ハッシュ関数を用いた解決法
ハッシュ関数 h(
T
total
)
を用いた加工
| h(
T
total
)
- h(
T
total
×0.97
)
|≦ 1
| h(
T
total
×1.03
)
- h(
T
total
)
|≦ 1
log
1.04
( T
total
)
h(
T
total)
T
total2
1
3
4
6
5
T
totalDepartment of Computer Science, Graduate School of Information Science & Technology, Osaka University 84
ハッシュ関数を用いた解決法
ハッシュ関数 h(
T
total
)
を用いた加工
| h(
T
total
)
- h(
T
total
×0.97
)
|≦ 1
| h(
T
total
×1.03
)
- h(
T
total
)
|≦ 1
h(
T
total)
T
total2
1
3
4
6
5
T
total×0.97
T
total×1.03
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 85