PowerPoint Presentation - Software Engineering Laboratory

メトリクス値の変遷に基づく
ソフトウェアの特性分析手法の
提案と実装
大阪大学大学院 情報科学研究科
○村尾 憲治 ・ 肥後 芳樹 ・ 井上 克郎
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
概要
ソフトウェアに関する知識の獲得
→ 多大な労力が必要
ソースコードに対する
ソフトウェアメトリクス値の変遷
効率的なソフトウェアの開発や保守に
役立つ情報(ソフトウェアの特性)を提供
2
ソフトウェアに関する知識
対象ソフトウェアに関する深い知識は,
その開発や保守を行うにあたり有益
• 問題を発生しやすいモジュール
→ 効率的な開発や保守
• ソフトウェアの開発されてきた過程
→ 今後の開発の見通し
開発者が知識を得るのは困難
3
ソフトウェアに関する知識の提供
• ソフトウェアの開発履歴から知識を提供
バージョン管理システム
• ソフトウェアのソースコードから知識を提供
ソフトウェアメトリクス
4
バージョン管理システム
開発者
開発者
ソフトウェアの開発履歴を
保存・提供するシステム
全ての変更の内容が
システムに蓄積される
バージョン
管理システム
チェック
アウト
ソースコードがどのように
変更されてきたか分かる
5
チェック
イン
変更
作業用
コピー
開発者
ソフトウェアメトリクス
ソフトウェアの複雑さや信頼性などの指標
CKメトリクス
継承
DIT (depth of inheritance tree)
NOC (number of children)
結合
RFC (response for a class)
CBO (coupling between object-class)
クラスの
内部複雑度
WMC (weighted methods per class)
LCOM (lack of cohesion in method)
※値が大きいほどモジュール(クラス)が複雑であることを示す
問題の発生しやすいモジュールの特定[1]
[1] V. R. Basili, et al. A Validation of Object-Oriented Design Metrics as Quality Indicators.
TSE, Vol.22, No.10, pp.751-761, 1994
6
目的
対象ソフトウェアにおける何らかの
傾向や性質(ソフトウェアの特性)
に関する情報を提供
•
•
•
•
メトリクス値の安定しないモジュール
対象ソフトウェアにおいて値の安定しないメトリクス
各変更がソフトウェアに与えた影響の程度
各開発者がソフトウェアに与えた影響の程度
7
ソフトウェアの特性
• メトリクス値の安定しないモジュール
利用例) 将来バグが頻繁に発生するモジュールの特定
• 対象ソフトウェアにおいて値の安定しないメトリクス
利用例) 設計上の欠陥の把握
• 各変更がソフトウェアに与えた影響の程度
利用例) 開発過程の理解
• 各開発者がソフトウェアに与えた影響の程度
利用例) 開発者の評価
8
提案手法:概要
バージョン管理システムと
ソフトウェアメトリクスを利用
→ 変更毎のメトリクス値を取得
メトリクス値の変動の激しさを表す
指標(変動度)をユーザに提示
→ 変動度からソフトウェアの特性を把握
9
変動度
開発過程を通じたメトリクス値の
変動の激しさを表す指標
•
•
•
•
•
•
モジュールの変動度
メトリクスの変動度
変更の変動度
(モジュール,メトリクス)の変動度
(モジュール,変更)の変動度
(モジュール,メトリクス,変更)の
変動度
10
•
•
•
•
•
•
•
•
エントロピー H
正規化エントロピー H 
四分位偏差 Q
四分位分散係数 Q 
ハミング距離 DH
ユークリッド距離 DE
マハラノビス距離 DM
メトリクス値の変化量 CV
エントロピー
メトリクス値が同じ回数と変更回数から導出
計測対象の粒度(次元): (モジュール,メトリクス)
4
m3
H   pi log pi
3
m2
m1 変更回数:5,値2:4回,値3:1回
2
m1
メトリクス値
H  ( 4 5 log 4 5  1 5 log 15 ) ≒0.72
m2 変更回数:5,値1,2,3:1回,値4:2回
H  (3  15 log
1
c1
c2
c3
c4
c5
変更
1
5
 2 5 log 2 5 ) ≒1.9
m3 変更回数:3,値1,3,4:1回
H  (3  1 3 log 1 3 ) ≒1.6
エントロピーが大きいほど変動が激しい
11
マハラノビス距離
変更間の各メトリクス値の変化の量,および対象
ソフトウェアにおける各メトリクス間の共分散から
導出
計測対象の粒度(次元): (モジュール,変更)

   1   x :ある変更後のメトリクス値
DM  ( x  y )  ( x  y ) y
:ある変更前のメトリクス値
共分散行列
マハラノビス距離が大きいほど変動が激しい
12
モジュールの変動度(1/2)
モジュールの変動度 FMD (fluctuation of module)
例)エントロピーによるモジュールの変動度
対象のモジュールおけるエントロピーの総和
FMD( H )   H
MT
メトリクス
正規化エントロピー,四分位分散係数による
モジュールの変動度 FMD(H ), FMD (Q) も同様
13
モジュールの変動度(2/2)
モジュールの変動度 FMD (fluctuation of module)
例)マハラノビス距離によるモジュールの変動度
対象のモジュールにおけるマハラノビス距離の総和
FMD( DM )   DM
CT
変更時刻
ハミング距離,ユークリッド距離による
モジュールの変動度 FMD(DH ), FMD (DE )も同様
14
変更の変動度
変更の変動度 FCT
(fluctuation of change time)
例)マハラノビス距離による変更の変動度
対象の変更におけるマハラノビス距離の総和
FCT ( DM )   DM
MD
モジュール
ハミング距離,ユークリッド距離による
変更の変動度 FCT (DH ), FCT (DE ) も同様
15
提案手法:手順
メトリクス値
バージョン
管理システム
手順1:メトリクス値の変遷を
取得
• モジュールの変動度
4
m3
3
m2
2
m1
1
• メトリクスの変動度
手順2:変動度の
計測
• 変更の変動度
c1
c2
c3
c4
c5 変更
• (モジュール,メトリクス)の変動度
• (モジュール,変更)の変動度
• (モジュール,メトリクス,変更)の変動度

手順3:ソフトウェア
の特性分析
グラフによる変動度の可視化など
16
ユーザ
提案手法:手順1
メトリクス値の変遷を取得
入力: バージョン管理システム
出力: 全ての変更時におけるそれぞれの
モジュールに対する各メトリクス値
1. バージョン管理システムから全ての変更とその変更
時におけるソースコードを取得
2. 全ての変更時におけるソースコードに対してソフト
ウェアメトリクスを適用し,モジュール毎にそれぞれ
のメトリクス値を取得
17
提案手法:手順2
変動度の計測
入力: 全ての変更時におけるそれぞれの
モジュールに対する各メトリクス値
出力: 6種類の変動度
1. 入力のメトリクス値からエントロピーやマハラノビス
距離などを計測
2. エントロピーやマハラノビス距離などからモジュール
の変動度や変更の変動度など計6種類の変動度を
導出
18
提案手法:手順3
ソフトウェアの特性分析
入力: 6種類の変動度
出力: 対象ソフトウェアの特性
1. 各種変動度をグラフなどを用いて可視化
2. 可視化された変動度から対象ソフトウェアの特性を
読み取る
例)
• モジュールの変動度から将来問題の発生しやすい
モジュールを特定
• 変更の変動度から対象ソフトウェアの開発過程を把握
19
提案手法の実装
手法の手順1~2を自動で行うツールを作成
ツールの対象
プログラミング言語
Java
バージョン管理システム
CVS
モジュールの粒度
クラス
使用可能なメトリクス
CKメトリクス,
対象クラスの行数など
20
適用事例:概要(1/2)
複数のオープンソースソフトウェアに対し,
手法を実装したツールを適用
対象ソフトウェア
ソフトウェア名
FreeMind
• FreeMind
• JHotDraw
• HelpSetMaker
対象開発期間
2000/08~2008/01
利用したメトリクス
最初の変更時の
ソースコードの総行数
3,882
最後の変更時の
ソースコードの総行数
39,350
•
CKメトリクス
(RFC, CBO, LCOM, NOC, DIT)
•
対象クラスの行数(LOC)
開発者数
12
総変更回数
225
21
適用事例:概要(2/2)
各種変動度からソフトウェアの特性を導出
•
•
•
•
•
•
モジュールの変動度
メトリクスの変動度
変更の変動度
(モジュール,メトリクス)の変動度
(モジュール,変更)の変動度
(モジュール,メトリクス,変更)の変動度
22
適用事例:モジュールの変動度
(1/3)
14
モジュールの変動度が大
12
10
8
6
4
2
0
FMD(H )
– 他のモジュールに影響
– 他のモジュールから影響
– 頻繁に変更されている
問題の発生しやすい状態
45
40
35
30
モジュールの変動度が大きい
クラスに注意すれば,
効率的な開発や保守が望める
25
20
15
10
5
0
FMD(DM )
23
適用事例:モジュールの変動度
(2/3)
将来のバグ修正の予測効果に関する実験
1. 開発履歴を前半と後半に分割
2. 前半の開発履歴から変動度を計測
3. 前半の開発履歴における最後の変更時での
メトリクス値を計測
4. 後半の開発履歴におけるバグ修正変更を調査
5. それぞれの上位何%が後半のバグ修正の何%
を含んでいるか,その関係を調査
24
適用事例:モジュールの変動度
(3/3)
ランキングの上位20%
バグ修正被覆率(%)
100
90
• モジュールの変動度
80
97~100%の予測
70
60
• メトリクス値
50
22~89%の予測
40
30
モジュールの変動度は
将来のバグ修正の予測に
有効
25
モジュールの変動度(全5種)
20
メトリクス(全6種)
10
0
0
10
20
30
40
50
60
70
80
90
100
モジュールの変動度/メトリクス値ランキング被覆率(%)
2000/8/1
(a)
(b)
(c)
(d)
26
変更の変動度は開発過程の理解に有効
FCT (DM )
Ver.0.4リリースへ向けての多量のバグ修正
Ver.0.6へ移行するための2年ぶりの変更
Ver.0.8に実装する新機能を持つプラグインの一斉追加
Ver.0.9に実装する機能の追加と多量のソースコードの削除や統合
2007/12/1
2007/10/1
(c)
2007/8/1
2007/6/1
2007/4/1
2007/2/1
2006/12/1
2006/10/1
2006/8/1
2006/6/1
2006/4/1
2006/2/1
2005/12/1
2005/10/1
2005/8/1
2005/6/1
2005/4/1
2005/2/1
2004/12/1
2004/10/1
2004/8/1
2004/6/1
(b)
2004/4/1
2004/2/1
2003/12/1
(a)
2003/10/1
2003/8/1
2003/6/1
2003/4/1
2003/2/1
2002/12/1
2002/10/1
2002/8/1
2002/6/1
2002/4/1
2002/2/1
2001/12/1
2001/10/1
2001/8/1
2001/6/1
2001/4/1
2001/2/1
2000/12/1
2000/10/1
適用事例:変更の変動度
90
(d)
80
70
60
50
40
30
20
10
0
まとめ
• メトリクス値の変遷から変動度を導出し,ソフト
ウェアの特性を分析する手法を提案
• 手法を実装したツールを作成し,複数のオープン
ソースソフトウェアに適用
様々な変動度からそれぞれ有益なソフトウェアの
特性を取得
今後の課題
ツールの拡張
• C++やC#など,他のプログラミング言語への対応
• Subversionなど,他のバージョン管理システムへの対応
27