オブジェクト指向プログラムを対象とした複雑度メトリ

オブジェクト指向プログラムを対象と
した複雑度メトリクスの実験的評価
- Chidamberらのメトリクスを対象として 神谷 年洋, 別府 明, 楠本 真二, 井上 克郎
(大阪大学大学院基礎工学研究科)
毛利 幸雄
(日本ユニシス株式会社)
#1
構成
背景
ソフトウェア複雑度メトリクス
プログラム開発における再利用
Chidamberらのメトリクス
Chidamberらのメトリクスの問題点
仮説
修正版メトリクス
実験
分析
Chidamberらのメトリクス
修正版メトリクス
まとめ
1997/12/10
Toshihiro Kamiya, Osaka Univ.
#2
背景
 ソフトウェアが大規模・複雑化してきている
 開発期間の短縮や品質向上が求められて
いる
 ソフトウェアの全ライフサイクルにわたる管理
– プロダクトの評価を行う必要がある
 再利用
1997/12/10
Toshihiro Kamiya, Osaka Univ.
#3
ソフトウェア複雑度メトリクス
複雑であるほど
・エラーが含まれている可能性が高くなる
・保守が困難になる
 代表例
– Halstedのメトリクス
– McCabeのサイクロマチック数
– Chidamberらのメトリクス*
(*) S.R.Chidamber and C.F.Kemerer, “A Metrics Suite for Object-Oriented Design”,
IEEE Trans. Software Eng., vol. 20, no. 6, pp.476-493, June 1994
1997/12/10
Toshihiro Kamiya, Osaka Univ.
#4
プログラム開発における再利用
 従来の再利用
– ライブラリの利用
プログラム全体の処理の流れなどの主要な部分は開発者が
開発し、ライブラリから必要な部品を持ってきて組み合わせる
 オブジェクト指向開発における再利用
– フレームワークの利用
プログラムの主要な部分をフレームワークから取り出し、新た
に必要な部分を開発者が開発して、それを組み合わせる
1997/12/10
Toshihiro Kamiya, Osaka Univ.
#5
アプリケーションフレームワーク
 クラスライブラリ
 ドメインに特化している
 プログラムの基幹となる構造を持つ
 プログラムの再利用率が高くなる
 例
– Microsoft Foundation Class
– Abstract Windowing Toolkit
1997/12/10
Toshihiro Kamiya, Osaka Univ.
#6
Chidamberらの6種のメトリクス
 オブジェクト指向設計のための複雑度メトリ
クス
 クラスの定義から複雑度を測定する
 Basilliらが実験を行ってエラーの予測性能を
評価した*
(*) V.R.Basilli, L.C.Briand and W.L.Melo: “A Validation of Object-Oriented Design
Metrics as Quality Indicators”, IEEE Trans. On Software Eng., vol. 22, no. 10,
pp.751-761, 1996.
1997/12/10
Toshihiro Kamiya, Osaka Univ.
#7
Chidamberらのメトリクス(1)
クラスの内部的な複雑度
 LCOM:クラスの凝集度の欠如
あるクラスのメソッドのすべての組み合わせのうち、参照するインスタンス
変数に共通のものが無い組み合わせの数から、共通するものがある組み
合わせの数を引いたもの。ただし、0より小さい場合は0とする
 WMC:クラスの重み付きメソッド数
あるクラスに定義されているすべてのメソッドの複雑度の和。各メソッドが
どれも同じくらいの複雑さであると考えられるなら、クラスで定義されてい
るメソッドの数
1997/12/10
Toshihiro Kamiya, Osaka Univ.
#8
Chidamberらのメトリクス(2)
継承に関する複雑さ
 DIT:継承木内での深さ
クラスの派生関係が木であるときは、そのクラスの木の中での深さ
 NOC:子クラスの数
そのクラスから直接派生している
クラスの数
DIT
DIT = 4
NOC = 3
NOC
1997/12/10
Toshihiro Kamiya, Osaka Univ.
#9
Chidamberらのメトリクス(3)
クラス間の関係についての複雑さ
 CBO:クラス間の結合
あるクラスが「結合」しているクラス数。「結合」とは、他のクラスのインスタ
ンス変数やメソッドを参照すること
 RFC:クラスに対する反応
あるクラスのメソッドの集合と、各メソッドで呼び出す他のクラスのメソッド
の集合の和集合の要素数
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 10
CBO,RFCの例
Window
draw()
move()
BoundedWindow
move()
setBoundary()
place
Rect
getOrigin()
getCorner()
setOrigin()
setCorner()
operator=()
...
Point
x:integer
y:integer
boundary BoundaryRect
CBO = 3
RFC = 5
bound()
...
void move(Rect newPlace)
{
Rect boundedPlace = boundary.
Window:: move(boundedPlace);
}
void setBoundary(Rect newBoundary)
{
boundary = newBoundary;
move(place);
}
1997/12/10
2
Toshihiro Kamiya, Osaka Univ.
bound(newPlace);
# 11
Chidamberらのメトリクスの問題点
 再利用されたクラスの品質は新規開発のク
ラスよりも高い*
 メトリクスを計測する際に、再利用されたクラ
スと新規開発のクラスを同等に扱う
(*) V.R.Basilli, L.C.Briand and W.L.Melo: “A Validation of Object-Oriented Design
Metrics as Quality Indicators”, IEEE Trans. Software Eng., vol. 22, no. 10, pp.751761, 1996.
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 12
仮説
仮説:再利用されたクラスとの結合は複雑
度を増大させない
 メトリクスを計測する際に、再利用されたクラ
スの重みを0とおく
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 13
修正版メトリクス(1)
 DITo
そのクラスの木の中での深さから、根にいたるまでのパス上にある再利用
クラスを引いたもの
フレームワーク
DITo
DITo = 1
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 14
修正版メトリクス(2)
 CBOo
あるクラスが結合しているクラス数のうち、新規開発クラスの数
 RFCo
あるクラスのメソッドの集合と、各メソッドで呼び出す他の新規開発クラス
のメソッドの集合の和集合の要素数
フレームワーク
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 15
CBOo,RFCoの例
Rect
Window
draw()
move()
BoundedWindow
move()
setBoundary()
CBOo = 1
RFCo = 3
place
getOrigin()
getCorner()
setOrigin()
setCorner()
operator=()
...
Point
x:integer
y:integer
boundary BoundaryRect
CBO = 3
RFC = 5
bound()
...
void move(Rect newPlace)
{
Rect boundedPlace = boundary.
Window:: move(boundedPlace);
}
void setBoundary(Rect newBoundary)
{
boundary = newBoundary;
move(place);
}
1997/12/10
2
Toshihiro Kamiya, Osaka Univ.
bound(newPlace);
# 16
実験
目的:再利用を考慮して修正したメトリク
スを評価する
 実際のオブジェクト指向開発プロセスからデ
ータを収集する
– メトリクスデータ
– エラー修正時間
 修正版メトリクスをオリジナルと比較する
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 17
実験の概要
 新人研修におけるC++プログラム開発演習
からデータを収集した
 6チームが独立に同じ課題を行う
– チームは4から5名の開発者から構成される
 課題は酒屋問題を拡張したものである
– データベースを用いて在庫管理を行う
– 売り上げ予測機能を持つ
– パスワードによるオペレータ認証を行う
 MFCをフレームワークとして用いる
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 18
例
開発規模: 約3000行
再利用: 約10000行
CObject
CRecordset
CCmdTarget
CBunsekiSet
CGoukeiSet
KionSet
CPasswdSet
CYosokuSet
CDocument
CWinThread
CBunsekiDoc
CHattyuDoc
CYosokuDoc
CWinApp
CWnd
CFrameWnd
1997/12/10
CMDIChildWnd
CMDIFrameWnd
CChildFrame
CMainFrame
Toshihiro Kamiya, Osaka Univ.
CDialog
CAboutDlg
CYosokuDlg
CPasswdDlg
CView
CScrollView
CHattyuView
CSotuenApp
CBunsekiView
# 19
データ収集の方法
 メトリクスデータ
– 開発者の作業ディレクトリを1時間おきにバック
アップする
 エラー修正時間データ
– 開発者に報告書を提出してもらう
•
•
•
•
•
1997/12/10
レビュー報告書
単体テスト報告書
結合テスト報告書
エラー特定報告書
エラー修正報告書
Toshihiro Kamiya, Osaka Univ.
# 20
分析
 分析はメンバー単位で行う
– 課題は分割され、各メンバーに割り当てられた
– メンバー間にまたがるエラーが発見されなかっ
た
 収集されたデータに不備のあった被験者は
分析対象から除いた
 19人のデータが分析対象となった
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 21
データ
開発者
T1
T2
T3
T4
T5
T6
T7
T8
T9
T10
T11
T12
T13
T14
T15
T16
T17
T18
T19
1997/12/10
LCOM WMC RFCo(RFC) CBOo(CBO) DIT Ec Et(分)
73
33
31 (75)
8 (38)
17
7
1124
47
19
7 (38)
3 (16)
10
2
50
46
22
9 (58)
3 (21)
14
5
315
16
7
9 (14)
0 ( 8)
6
0
0
47
19
17 (41)
3 (17)
10
2
390
14
8
9 (13)
0 ( 8)
6
2
114
47
19
17 (40)
2 (17)
10
3
21
49
20
24 (32)
0 (18)
14
7
891
13
8
8 (16)
0 ( 9)
6
0
0
62
25
2 (58)
0 (24)
16
5
530
52
21
19 (52)
1 (18)
12
8
576
59
24
22 (50)
1 (20)
16
8
1005
13
8
8 (16)
0 ( 9)
6
1
60
88
38
35 (90)
3 (37)
20
4
850
55
22
20 (55)
3 (20)
12
3
154
57
26
24 (67)
3 (23)
16
1
94
11
11
10 (24)
0 (10)
6
1
90
47
17
16 (24)
0 (13)
10
3
75
13
8
5 (15)
0 ( 9)
6
1
25
Toshihiro Kamiya, Osaka Univ.
# 22
メトリクスとエラー修正時間の相関
WMC
Et(分)
RFCo CBOo LCOM DIT
(RFC) (CBO)
0.72
0.77
0.47
0.7 0.77
(0.63) (0.74)
有意水準 5%で検定
 RFCoはRFCよりも相関が高い
 CBOoはCBOよりも相関が低い
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 23
CBOoとCBO
 CBOはインスタンス変数を直接参照する結合も数
える
 エラーを修正するためにはメソッドの定義も知って
いなければならない
 再利用されたクラス==新規開発のクラス
再利用されたクラス
インター
フェイス
メソッドの
定義
1997/12/10
Toshihiro Kamiya, Osaka Univ.
新規開発のクラス
# 24
RFCoとRFC
 RFCはメソッドを介した参照を数える
 再利用されるクラスはインターフェイスだけを知って
いればよい
 再利用されたクラス<新規開発のクラス
再利用されたクラス
インター
フェイス
メソッドの
定義
1997/12/10
Toshihiro Kamiya, Osaka Univ.
新規開発のクラス
# 25
考察
 フレームワークを再利用することは複雑度を
増大させない
 ただし、インスタンス変数を直接参照するよ
うな結合は複雑度を増大させる
 「publicなデータメンバは避けるべきである」
という経験則と一致する
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 26
まとめと課題
 再利用を考慮してChidamberらのメトリクスを
改善できる可能性を示した
 Briandらのメトリクス*についても実験してみる
 開発者にメトリクスを提供する開発環境の開発
(*) L.Briand, P.D., and W.M., “An Investigation into Coupling Measures for
C++”, Proc. of the 19th ICSE, 1997.
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 27
再利用クラスの重みを変化させ
た場合
0.8
相関
0.7
0.6
CBOw
RFCw
0.5
0.4
0.3
0
0.1 0.2
0.3 0.4
0.5
W
1997/12/10
Toshihiro Kamiya, Osaka Univ.
0.6 0.7
0.8 0.9
1
# 28
テスト・エラー特定・エラー修正
に要した時間
テスト
ただしこのデータは
97年度のもの
1997/12/10
Toshihiro Kamiya, Osaka Univ.
特定
修正
a07
334
100
98
a10
a14
26
117
134
0
0
7
a18
21
6
3
b02
1
77
0
b06
c01
61
37
17
5
51
34
c02
114
18
1
c03
149
14
242
c06
c08
151
5
69
0
250
0
c15
59
0
0
c16
108
3
28
c19
d01
17
130
107
137
3
69
d03
10
1
1
d10
34
0
22
d16
22
1396
28
716
0
809
# 29
その他のOO指向メトリクス
 Mark Lorenz and J.K., Object-Oriented
Software Metrics, Prentice Hall, 1994.
– 数多くの基本的なメトリクスが提案されている
 L.Briand, P.D., and W.M., “An Investigation
into Coupling Measures for C++”, Proc. of
the 19th ICSE, 1997.
– クラスが「どのように」結合しているかを考慮に
入れた18種のメトリクスを提案している
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 30
Halsted, McCabeのメトリクス
 Halstedのメトリクス*1
制御構造や演算子や関数をオペレータ、変数や定数をオペランド
とする。オペレータの数とオペランドの数を数えることでプログラム
の「大きさ」を測定する
 McCabeのサイクロマチック数*2
手続きの複雑さ==制御の基本パス数(分岐の数+1)
(*1) Halsted, M.H., Elements of Software Science, Elsevier North-Holland,
1977.
(*2) McCabe, T.J., “A complexity measure”, IEEE Trans. Software Eng., vol.
SE-2, no. 4, pp.308-320, 1976
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 31
メトリクスツールの概要
開発者
ソースコード
履歴
ソースコード構造視覚化
作業履歴
ソースコード履歴管理
▲・・・・
■・・・・
▼・・・・
メトリクスによる分析
作業データ
メトリクス
ツール
1997/12/10
Toshihiro Kamiya, Osaka Univ.
# 32
1997/12/10
Toshihiro Kamiya, Osaka Univ.