Document

ソースコードの変更履歴における
メトリクス値の変化を用いた
ソフトウェアの特性分析
井上研究室
博士前期課程2年
村尾 憲治
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  15 log 15 ) ≒0.72
m2 変更回数:5,値1,2,3:1回,値4:2回
H  (3  15 log 15  2 5 log 2 5 ) ≒1.9
1
c1
c2
c3
c4
c5
変更
m3 変更回数:3,値1,3,4:1回
H  (3  13 log 13 ) ≒1.6
エントロピーが大きいほど変動が激しい
11
モジュールの変動度
モジュールの変動度 FMD
(fluctuation of module)
例)エントロピーによるモジュールの変動度
対象のモジュールおけるエントロピーの総和
FMD( H )   H
MT
メトリクス
モジュールの変動度が大きいほど,
全体的にメトリクス値の変動が激しい
12
提案手法:手順
メトリクス値
バージョン
管理システム
手順1:メトリクス値の変遷を
取得
• モジュールの変動度
4
m3
3
m2
2
m1
1
• メトリクスの変動度
手順2:変動度の
計測
• 変更の変動度
c1
c2
c3
c4
c5 変更
• (モジュール,メトリクス)の変動度
• (モジュール,変更)の変動度
• (モジュール,メトリクス,変更)の変動度

手順3:ソフトウェア
の特性分析
グラフによる変動度の可視化など
13
ユーザ
提案手法の実装
手法の手順1~2を自動で行うツールを作成
ツールの対象
プログラミング言語
Java
バージョン管理システム
CVS
モジュールの粒度
クラス
使用可能なメトリクス
CKメトリクス,
対象クラスの行数など
14
適用事例:概要(1/2)
複数のオープンソースソフトウェアに対し,
手法を実装したツールを適用
対象ソフトウェア
ソフトウェア名
FreeMind
• FreeMind
• JHotDraw
• HelpSetMaker
対象開発期間
2000/08~2008/01
利用したメトリクス
最初の変更時の
ソースコードの総行数
3,882
最後の変更時の
ソースコードの総行数
39,350
•
CKメトリクス
(RFC, CBO, LCOM, NOC, DIT)
•
対象クラスの行数(LOC)
開発者数
12
総変更回数
225
15
適用事例:概要(2/2)
各種変動度からソフトウェアの特性を導出
•
•
•
•
•
•
モジュールの変動度
メトリクスの変動度
変更の変動度
(モジュール,メトリクス)の変動度
(モジュール,変更)の変動度
(モジュール,メトリクス,変更)の変動度
16
適用事例:モジュールの変動度
(1/3)
モジュールの変動度が大
– 他のモジュールに影響
– 他のモジュールから影響
– 頻繁に変更されている
問題の発生しやすい状態
14
12
10
8
6
4
2
0
モジュール
FMD(H )
モジュールの変動度が大きい
クラスに注意すれば,
効率的な開発や保守が望める
17
適用事例:モジュールの変動度
(2/3)
将来のバグ修正の予測効果に関する実験
1. 開発履歴を前半と後半に分割
2. 前半の開発履歴から変動度を計測
3. 前半の開発履歴における最後の変更時での
メトリクス値を計測
4. 後半の開発履歴におけるバグ修正変更を調査
5. それぞれの上位何%が後半のバグ修正の何%
を含んでいるか,その関係を調査
18
適用事例:モジュールの変動度
(3/3)
ランキングの上位20%
バグ修正被覆率(%)
100
90
• モジュールの変動度
80
97~100%の予測
70
60
• メトリクス値
50
22~89%の予測
40
30
モジュールの変動度は
将来のバグ修正の予測に
有効
19
モジュールの変動度(全5種)
20
メトリクス(全6種)
10
0
0
10
20
30
40
50
60
70
80
90
100
モジュールの変動度/メトリクス値ランキング被覆率(%)
まとめ
• メトリクス値の変遷から変動度を導出し,ソフト
ウェアの特性を分析する手法を提案
• 手法を実装したツールを作成し,複数のオープン
ソースソフトウェアに適用
様々な変動度からそれぞれ有益なソフトウェアの
特性を取得
今後の課題
ツールの拡張
• C++やC#など,他のプログラミング言語への対応
• Subversionなど,他のバージョン管理システムへの対応
20