270 likes | 621 Views
C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価. 神谷年洋 高林修司 楠本真二 井上克郎 大阪大学 大学院基礎工学研究科. 背景. ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入. 品質評価によるプロセス改善. ISO9000 シリーズ・ SPICE ・ CMM など プロセスやプロダクトを計測する 分析によって問題点を見つけだし、改善策を立てる 改善策を実行する 計測にはさまざまなメトリクスを用いる. メトリクス.
E N D
C++プログラムを対象とした複雑度メトリクス計測ツールとその評価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上で動作
ツールの入出力 • 入力: • C++ソースコード • 出力: • クラス階層図 • ソースコードのブラウズ • メトリクスによる複雑度判定
対象とするC++サブセット • C構文 • C++構文 • 例外処理構文 • クラス/メソッド構文 • テンプレート • 関数テンプレート(部分的に受理する) • クラステンプレート(部分的に受理する)
メトリクスによる複雑度判定 (1)クラスの分類 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個
ドキュメントクラスは「データの保持する」役目を持つドキュメントクラスは「データの保持する」役目を持つ NIVが大きい。インスタンス変数が多い CBOが小さい。あまり他のクラスの変数を参照していない WMCが大きい。他のクラスにデータを操作するためのメソッドを提供している 分類CDocumentの特徴
CViewはデータを表示し、UIを受け持つ CBOが大きい。他のクラスの変数を参照している WMCが大きい。他のクラスにメソッドを提供している LCOMが大きい。互いに関連のない雑多な機能を凝集している 分類CViewの特徴
まとめ • Chidamberらのメトリクス • プロダクト評価ツール • ソースコードからメトリクスを計算する • ツールの評価実験 • クラス分類によってメトリクスの分布に差がある • メトリクスによる複雑度判定
課題 • 多くのプロジェクトに対して、ツールの有効性を評価する • Chidamberらのメトリクス以外のメトリクスを計測できるようにする • 上流工程のCASEツールのデータを扱えるようにする • Rational Rose • Visual Modeler
C++ソース分析ツールの比較 • ツールの出力からChidamberらのメトリクスを算出可能か