オブジェクト指向開発における フォールト発生早期予測手法の 一提案 神谷 年洋†,楠本 真二†,井上 克郎†‡ †大阪大学大学院基礎工学研究科 ‡奈良先端科学技術大学院大学情報科学研究科 大阪大学の神谷年洋です. オブジェクト指向開発におけるフォールト発生早期予測手法の一提案 というタイトルで発表いたします.
背景 複雑度メトリクスはソフトウェア部品の複雑さを計測する. エラー修正(レビュー・テスト・フォールト修正)に必要な労力を,計測されたメトリクス値から予測する. Chidamberと Kemererのメトリクス(以下C&Kメトリクス)はオブジェクト指向ソフトウェア向けの代表的な複雑度メトリクスである. 複雑度メトリクスは,ソフトウェアの複雑さを計測します. 「より複雑なソフトウェアにより多くのフォールとが作りこまれる」という 仮定をもちいて, 計測されたメトリクス値によってエラー修正に必要な労力を予測します. 複雑度メトリクスの中でも,ChidamberとKemererのメトリクスはオブジェクト指向ソフトウェア向けの代表的な複雑度メトリクスです.
C&Kメトリクス [1] C&Kメトリクスは以下の3つの観点からクラスの複雑さを評価する: 継承 [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) それでは,C&Kメトリクスについて説明いたします. ChidamberとKemererはオブジェクト指向設計を計測対象とする6つの複雑度メトリクスを提案しました. C&Kメトリクスは以下の3つの観点,継承,カップリング,内部的な複雑さ,から,クラスの複雑さを評価します. 最初の2つ,DITとNOCはクラスの継承に関する複雑さを計測します. DIT(Depth…)は計測対象のクラスが継承木の中の深さを数えます. NOC(Number…)は計測対象のクラスから直接導出されているクラスの数を数えます. 次の2つ,RFCとCBOはクラス間の結合に関する複雑さを計測します. RFC(Response…)はあるクラスが呼び出すメソッドの数を数えます. CBO(Coupling…)はクラスがメソッドまたは変数によって他のクラスを参照している数を数えます. 最後の2つ,WMCとLCOMはクラスの内部的な複雑度を計測します. WMC(Weighed…)はクラスのメソッドの複雑さを合計したものです. ですが,これまでに発表されている研究事例では,通常,「クラスに定義されているメソッドの数」を用いています. LCOM(Lack…)はクラスのメソッドについての凝集度の欠如を計測します.
C&Kメトリクスの有効性 C&Kメトリクスの有効性を評価した研究 Chidamberと KemererはC&Kメトリクスが Weyukerの性質を満たすことを確認した [1]. Basiliらは クラスのフォールトを予測する際は,C&Kメトリクスが従来のコードメトリクスより精度が高いことを実験的に確認した [2]. Briandらは C&Kメトリクスを含む多くの設計メトリクスを比較した [3]. C&Kメトリクスの有効性を評価した研究には以下のようなものがあります. まず,ChidamberとKemererがC&Kメトリクスを提案した論文の中で, C&KメトリクスがWeyukerの性質を満たすことを確認しました. 次に,Basiliらが行った研究です. オブジェクト指向で課初されたソフトウェアのクラスのフォールトの予測をするという実験を行いました. この実験では,従来のコードメトリクスを組み合わせたものとC&Kメトリクスの比較を行い, C&Kメトリクスのほうがよりよくフォールトを予測できるという結果が得られました. Briandらが行った研究では,C&Kメトリクスを含む多くのメトリクスを比較・分類しています. [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.
C&Kメトリクスを設計に適用する上での問題点 レビューやテスト労力の割り当てにメトリクスによる予測を用いる場合,クラス(部品)のフォールト予測は早期に行えることが望ましい. これまでの研究を振り返ってみると, ChidamberとKemererは,C&Kメトリクスを「設計に対する」メトリクスとして提案しているのですが, C&Kメトリクスはソースコードに対して適用されています. その理由としては, 「C&Kメトリクスの中には,メソッドのアルゴリズムや呼び出し関係といった, 設計フェーズの後期になって初めて入手可能な情報から計算されるものがある」 といったことがあげられます. しかしながら,設計自体の複雑さを計測すれば, レビューやテスト労力の割り当てを行う際にフォールト予測を用いることができます.
提案する手法 設計の初期段階からメトリクスを計測する手法 設計・実装フェーズに4つのチェックポイントを導入する. 各チェックポイントで計測可能なメトリクスの集合を決定する. 各チェックポイントで,計測されたメトリクスによる多変量ロジスティック回帰分析を行い,それぞれのクラス(部品)にフォールトが発生するかしないかを予測する. 実験によって,各チェックポイントにおけるメトリクス集合のフォールト予測精度を確認する. そこで,次のような手法を考えました. まず,オブジェクト指向の設計・実装フェーズに4つのチェックポイントを導入します. 次に,それぞれのチェックポイントで計測可能なメトリクスのサブセットを決定します. 最後に,それぞれのチェックポイントで,計測されたメトリクス値によって,多変量ロジスティック回帰分析という手法を用いて,それぞれのクラスにフォールトが発生するかしないかを予測します. 発表の後半で,この手法の適用実験を行って,それぞれのチェックポイントにおけるメトリクス集合のフォールト予測精度を確認します.
チェックポイントと開発プロセス 分析 実装 t CP1: クラス間の関係と属性が決定される システム 設計 オブジェクト 設計 CP3: メソッドのアルゴリズムが開発される このスライドは開発プロセスと,導入されたチェックポイントを示します. この図では,ランバーらの研究に基づいて,設計プロセスを4つのフェーズ,分析,システム設計,オブジェクト設計,実装,に分けました. 実装 CP4: ソースコードが書かれる t
利用されるメトリクス 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)
チェックポイントとメトリクス 分析 実装 t CP1: クラス間の関係と属性が決定される S1 = { NIV, CBON } システム 設計 CP2: 導出,インターフェイス(メソッド),再利用クラスが決定される S2 = S1 { CBOR, CBO, WMC, DIT, NOC } オブジェクト 設計 CP3: メソッドのアルゴリズムが開発される S3 = S2 { RFC, LCOM } 実装 CP4: ソースコードが書かれる S4 = S2 { SLOC } t
フォールト発生の予測 “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: 係数 ロジスティック回帰分析は,連続した値をとる独立変数から,2値の値をとる従属変数を予測する式を作成するのに用いられます.この研究においては,ロジスティック回帰分析を用いて,メトリクスの計測値から,フォールとの発生を予測する式を作ります.
実験の概要 1997年8月にある企業の新人研修で行われた5日間に渡るC++プログラム開発演習. 複数の開発チームが同一の要求仕様書に基づいてメール配送システムを作成する.
収集データ フォールトに関するデータ メトリクスデータ 17人の開発者の,141のクラスから,80個のフォールトに関するデータが収集された. (エラー追跡ツールを用いて収集) コードレビューとテストで発見されたフォールト フォールト修正に要した時間 メトリクスデータ (メトリクス抽出ツールを用いて,ソースコードから抽出) 新規開発されたクラスのメトリクス値 17人の開発者の,141のクラスから,80個のフォールトに関するデータが収集された.
実験データの統計量 This table shows the summary of metric values and faults observed in the experiment. Faults is amount of faults found in the class. For example, as for metric DIT, the minimum value is zero, the maximum value is 6, the average is 3.44, and the standard deviation is 1.41.
括弧内の数字はそれらのクラスのフォールト数 メトリクスによる予測(1/2) 収集されたメトリクスデータに多変量ロジスティック回帰分析を行って予測式を作成した. CP1における予測 括弧内の数字はそれらのクラスのフォールト数
メトリクスによる予測 (2/2)
予測精度評価のための指標 予測精度を評価するための2つの指標 [2]. 完全性: 実際にフォールトがあったクラスのうち,フォールトありと予測されていたクラスの割合 正確性: フォールトありと予測されたクラスのうち,実際にフォールトがあったクラスの割合 … これらの2つの指標はトレードオフの関係にありますので,予測の正確さを評価するためには,2つの指標を同時に用います. 完全性 正確性
予測精度 全体としては,プロセスが進むにつれて予測の精度は改善する. 正確性はすべてのCPで概して高めである.
考察(1/2) CP1では少数のクラスがフォールト有と予測され,その82%にフォールトが発見される. ↓ シードされたクラスは重点的にレビュー・テストされるクラスの候補になる. シードされたクラスの分布が設計レビューの判断基準になる.
考察(2/2) CP3での予測精度の向上のために 結合の種類を区別する,「細粒度」C++設計メトリクスを援用する. サイクロマチック数などを用いて,メソッドの複雑さを適正に重み付けするWMCを用いる.
まとめと展望 オブジェクト指向開発において,クラスにフォールトが作りこまれるかどうかを早期に予測する手法を提案した. 今後の研究課題: 他のメトリクスを利用する 設計書に直接適用する 支援ツールを開発する まとめと展望です. この研究では,実験を行い,オブジェクト指向開発の設計フェーズで,クラスにフォールトが作りこまれるかを予測する手法を提案しました. 今後の研究課題として, ChidamberとKemerer以外のメトリクスを用いる. 設計から直接メトリクス値を計測する.