C++プログラムを対象とした 複雑度メトリクス計測ツールと その評価 神谷年洋 高林修司 楠本真二 井上克郎 大阪大学 大学院基礎工学研究科
背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入
品質評価によるプロセス改善 ISO9000シリーズ・SPICE・CMMなど 計測にはさまざまなメトリクスを用いる プロセスやプロダクトを計測する 分析によって問題点を見つけだし、改善策を立てる 改善策を実行する 計測にはさまざまなメトリクスを用いる
メトリクス メトリクスとは、ソフトウェアのさまざまな特性を判別する客観的な数学的尺度である プロセスメトリクス・プロダクトメトリクス 複雑度メトリクスはエラーの発生を予測するためのメトリクスである MaCabeのサイクロマチック数・Halsteadのソフトウェアサイエンス オブジェクト指向設計を計測対象とするChidamberらの複雑度メトリクス
複雑度メトリクスによるエラー予測 メトリクスを用いて複雑である(エラーを含みやすい、保守しにくい)モジュールを予測する ↓ 複雑であると判断されたモジュールの再設計をする レビューやテストを重点的に行う
目的 オブジェクト指向開発を対象としてプロダクト品質評価のためのツールを作成する ツールの有効性を実験的に評価する
Chidamberらの複雑度メトリクス オブジェクト指向設計を対象とする クラス間の参照関係(CBO,RFC) 派生関係(DIT,NOC) クラス内部の複雑度(WMC,LCOM) S. R. Chidamber and C. F. Kemerer: “A metrics suite for object-oriented design”, IEEE Trans. on Software Eng., Vol.20, No.6, pp.476-493(1994). V. R. Basili, L. C. Briand, and W. L. Melo: “A validation of object-oriented design metrics as quality indicators”, IEEE Trans. on Software Eng., Vol. 20, No. 22, pp. 751-761 (1996).
ツールが計測するメトリクス RFC 使用するメソッドの数 結合 CBO 結合するクラスの数 DIT 継承木内での深さ 継承 NOC 子クラスの数 WMC メソッドの数 LCOM メソッドの凝集度の欠如 クラス内の 複雑さ NIV インスタンス変数の数 SLOC ソースコードの行数
ツール概要 Chidamberらの複雑度メトリクスを用いたクラスの複雑度 GUIによる操作 Windows 95上で動作 メトリクス計測機能 メトリクスによる複雑度評価機能 GUIによる操作 Windows 95上で動作
ツールの入出力 入力: C++ソースコード 出力: クラス階層図 ソースコードのブラウズ メトリクスによる複雑度判定
対象とするC++サブセット C構文 C++構文 例外処理構文 クラス/メソッド構文 テンプレート 関数テンプレート(部分的に受理する) クラステンプレート(部分的に受理する)
ツールの画面 (クラス階層の表示)
ツールの画面(ソースコードのブラウズ)
ツールの画面 (メトリクスによる判定)
ツールの構成
メトリクスによる複雑度判定 (1)クラスの分類 (2)基準値の設定 (3)異常値の算定 6種類:ドキュメント、ビュー、ダイアログ、フレーム、アプリケーション、その他 (2)基準値の設定 分類/メトリクスごとに基準値(a, σ)を用意する (今回は実験で収集したデータを用いた) (3)異常値の算定
クラス分類 ドキュメント ビュー ダイアログ フレーム アプリケーション その他 アプリケーションのデータを保持する データを表示する・(メニュー等)操作を受け付ける ダイアログ 定型入力を行う・警告を出す フレーム ウィンドウの状態を管理する アプリケーション アプリケーションに関する情報(レジストリ情報等)を管理する その他
実験概要 ある企業の新人研修 開発するプログラムは電子メールの配送システム(3000行程度) 5つのサブシステムからなる:SMTPサーバー、POPサーバー、DELIVERサーバー、SMTPクライアント、POPクライアント 4~5名の開発者がチームで開発を行う(一人あたり600行程度) Visual C++、MFC(Microsoft Foundation Class)を用いる
データの収集方法 プログラムのソースコード フォールトデータ サーバーによって1時間毎に自動収集 フォールト報告用ツール(Efer)によって収集 開発作業の開始・終了時刻 コーディング・レビュー・テスト・フォールト修正など 開発作業の結果 欠陥・フォールト
メトリクスデータ 被験者17人、クラス124個、フォールト84個
分析:クラス分類とメトリクス
分類CDocumentの特徴 ドキュメントクラスは「データの保持する」役目を持つ NIVが大きい。インスタンス変数が多い CBOが小さい。あまり他のクラスの変数を参照していない WMCが大きい。他のクラスにデータを操作するためのメソッドを提供している
分類CViewの特徴 CViewはデータを表示し、UIを受け持つ CBOが大きい。他のクラスの変数を参照している WMCが大きい。他のクラスにメソッドを提供している LCOMが大きい。互いに関連のない雑多な機能を凝集している
分析:異常値とエラー
まとめ Chidamberらのメトリクス プロダクト評価ツール ツールの評価実験 ソースコードからメトリクスを計算する クラス分類によってメトリクスの分布に差がある メトリクスによる複雑度判定
課題 多くのプロジェクトに対して、ツールの有効性を評価する Chidamberらのメトリクス以外のメトリクスを計測できるようにする 上流工程のCASEツールのデータを扱えるようにする Rational Rose Visual Modeler
C++ソース分析ツールの比較 ツールの出力からChidamberらのメトリクスを算出可能か