科学研究費補助金 特定領域研究 A05-9 既存ソフトウェアの適応と発展のための

オブジェクト指向開発における
フォールト発生早期予測手法の
一提案
神谷 年洋†,楠本 真二†,井上 克郎†‡
†大阪大学大学院基礎工学研究科
‡奈良先端科学技術大学院大学情報科学研究科
背景
 複雑度メトリクスはソフトウェア部品の複雑
さを計測する.
 エラー修正(レビュー・テスト・フォールト修
正)に必要な労力を,計測されたメトリクス
値から予測する.
 Chidamberと Kemererのメトリクス(以下
C&Kメトリクス)はオブジェクト指向ソフトウェ
ア向けの代表的な複雑度メトリクスである.
1
C&Kメトリクス [1]
[1] S.R. Chidamber and C.F. Kemerer, A Metrics Suite for Object Oriented Design,
IEEE Trans. on software eng., vol., 20, No. 6, Jun 1994.
 C&Kメトリクスは以下の3つの観点からクラ
スの複雑さを評価する:
DIT (Depth of inheritance tree)
継承
NOC (Number of children)
RFC(Response for a class)
結合
CBO(Coupling between object-class)
WMC(Weighted methods par class)
クラスの
内部複雑度 LCOM(Lack of cohesion in method)
2
C&Kメトリクスの有効性
 C&Kメトリクスの有効性を評価した研究
Chidamberと KemererはC&Kメトリクスが
Weyukerの性質を満たすことを確認した [1].
Basiliらは クラスのフォールトを予測する際
は,C&Kメトリクスが従来のコードメトリクスより
精度が高いことを実験的に確認した [2].
Briandらは C&Kメトリクスを含む多くの設計メ
トリクスを比較した [3].
[2] V.R. Basili, L.C.Briand, W.L.Mélo, A Validation of Object-Oriented Design Metrics as
Quality Indicators, IEEE Trans. on software eng., vol. 22, No. 10, Oct 1996.
[3] L.C. Briand, J.W.Daly, and J.K.Wüst, A Unified Framework for Coupling Measurement in
Object-Oriented Systems, IEEE Trans. on software eng., vol.25, No.1, Jan/Feb 1999.
3
C&Kメトリクスを設計に適用する
上での問題点
 C&Kメトリクスの一部は,アルゴリズムや呼
び出し関係といった,設計フェーズの後期
になるまで入手できない情報を必要とする.
 これまでの研究では,C&Kメトリクスはソー
スコードに適用されてきた.
 レビューやテスト労力の割り当てにメトリク
スによる予測を用いる場合,クラス(部品)
のフォールト予測は早期に行えることが望
ましい.
4
提案する手法
設計の初期段階からメトリクスを計測する手法
1. 設計・実装フェーズに4つのチェックポイントを導入する.
2. 各チェックポイントで計測可能なメトリクスの集合を決
定する.
3. 各チェックポイントで,計測されたメトリクスによる多変
量ロジスティック回帰分析を行い,それぞれのクラス
(部品)にフォールトが発生するかしないかを予測する.
実験によって,各チェックポイントにおけるメトリク
ス集合のフォールト予測精度を確認する.
5
チェックポイントと開発プロセス
分
析
CP1: クラス間の関係と属性が決定される
シ
設ス
計テ
ム
オ
ブ
設ジ
計ェ
ク
ト
実
装
CP2: 導出,インターフェイス(メソッド),再利用ク
ラスが決定される
CP3: メソッドのアルゴリズムが開発される
CP4: ソースコードが書かれる
t
6
利用されるメトリクス
 6種類のC&Kメトリクス
 CBOR(Coupling to reused classes)
 CBON(Coupling to newly-developed
classes)
CBO + CBON = CBO
 NIV(Number of instance variables)
 SLOC(Source lines of code)
7
チェックポイントとメトリクス
分
析
シ
設ス
計テ
ム
オ
ブ
設ジ
計ェ
ク
ト
実
装
CP1: クラス間の関係と属性が決定される
S1 = { NIV, CBON }
CP2: 導出,インターフェイス(メソッド),再利用ク
ラスが決定される
S2 = S1  { CBOR, CBO, WMC, DIT, NOC }
CP3: メソッドのアルゴリズムが開発される
S3 = S2  { RFC, LCOM }
CP4: ソースコードが書かれる
S4 = S2  { SLOC }
t
8
フォールト発生の予測
“Multivariate logistic regression is a standard
technique based on maximum likelihood
estimation, to analyze the relationships
between measures and fault-proneness of
classes.”
 P1: フォールト発生予測 (フォールトが検出される確
率)
 CBO, NIV: メトリクスの計測値
 C0, C1, C2: 係数
1
P1 (CBO, NIV ) 
1  exp((C0  C1  CBO  C2  NIV ))
9
実験の概要
 1997年8月にある企業の新人研修で行わ
れた5日間に渡るC++プログラム開発演習.
 開発者は新入社員であり,研修によりオブ
ジェクト指向設計とC++言語によるプログ
ラミングを修得している.
 複数の開発チームが同一の要求仕様書に
基づいてメール配送システムを作成する.
10
収集データ
 フォールトに関するデータ
(エラー追跡ツールを用いて収集)
 コードレビューとテストで発見されたフォールト
 フォールト修正に要した時間
 メトリクスデータ
(メトリクス抽出ツールを用いて,ソースコードから抽出)
 新規開発されたクラスのメトリクス値
17人の開発者の,141のクラスから,80個のフォー
ルトに関するデータが収集された.
11
実験データの統計量
メトリクス 最小 最大
平均
NIV
CBON
CBOR
CBO
DIT
NOC
RFC
LCOM
SLOC
4
0.53
0.86
1.39
3.44
0
8.23
22.42
96.43
0.57
フォールト
0
0
0
0
0
0
0
0
5
0
14
3
4
5
6
0
27
190
420
17
標準偏差
2.67
0.99
0.99
1.59
1.41
0
6.81
36.84
81.01
1.93
CP
1
1
2
2
2
2
3
3
4
12
メトリクスによる予測(1/2)
収集されたメトリクスデータに多変量ロジスティッ
ク回帰分析を行って予測式を作成した.
CP1における予測
フォールト無
予測
フォールト無
112
実測
フォールト有
18(43)
フォールト有
2
9(37)
括弧内の数字はそれらのクラスのフォールト数
13
メトリクスによる予測 (2/2)
CP2 における予測
フォールト無
予測
フォールト無
109
実測
フォールト有
11(20)
フォールト有
5
16(60)
CP3 における予測
フォールト無 フォールト有
予測
フォールト無
111
3
実測
フォールト有
9(18)
18(62)
CP4 における予測
フォールト無 フォールト有
予測
フォールト無
111
3
実測
フォールト有
8(14)
19(66)
14
予測精度評価のための指標
予測精度を評価するための2つの指標 [2].
完全性: 実際にフォールトがあったクラスのうち,フォ
ールトありと予測されていたクラスの割合
正確性: フォールトありと予測されたクラスのうち,実
際にフォールトがあったクラスの割合
フォールト無
フォールト有
フォールト無
112
18
2
9
9
 0.33
完全性 
18  9
9

 0.82
正確性
29
予測
実測 フォールト有
15
予測精度
100
精度(%)
90
80
70
60
50
40
30
82
85
76
86
70
59
63
正確性
完全性
33
20
10
0
CP1
CP2
CP3
CP4
全体としては,プロセスが進むにつれて予測の精
度は改善する.
 正確性はすべてのCPで概して高めである.
 完全性は後期のCPの方が高い.
16
考察(1/2)
 CP1では少数のクラスがフォールト有と予測され,
その82%にフォールトが発見される.
 CP1での予測は,フォールトを含むであろうクラス
を「シード」する目的に用いる.
↓
 シードされたクラスは重点的にレビュー・テストさ
れるクラスの候補になる.
 シードされたクラスの分布が設計レビューの判断
基準になる.
17
考察(2/2)
 CP3での予測精度の向上のために
結合の種類を区別する,「細粒度」C++設計メ
トリクスを援用する.
サイクロマチック数などを用いて,メソッドの複
雑さを適正に重み付けするWMCを用いる.
18
まとめと展望
オブジェクト指向開発において,クラスにフ
ォールトが作りこまれるかどうかを早期に
予測する手法を提案した.
今後の研究課題:
他のメトリクスを利用する
設計書に直接適用する
支援ツールを開発する
19