C++プログラムを対象とした 複雑度メトリクス計測ツールと その評価 神谷年洋 高林修司 楠本真二 井上克郎 大阪大学 大学院基礎工学研究科 背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入 page 1 品質評価によるプロセス改善 • ISO9000シリーズ・SPICE・CMMなど – プロセスやプロダクトを計測する – 分析によって問題点を見つけだし、改善策を立てる – 改善策を実行する • 計測にはさまざまなメトリクスを用いる page 2 メトリクス • メトリクスとは、ソフトウェアのさまざまな特性を 判別する客観的な数学的尺度である – プロセスメトリクス・プロダクトメトリクス • 複雑度メトリクスはエラーの発生を予測するた めのメトリクスである – MaCabeのサイクロマチック数・Halsteadのソフト ウェアサイエンス • オブジェクト指向設計を計測対象とする Chidamberらの複雑度メトリクス page 3 複雑度メトリクスによるエラー予測 メトリクスを用いて複雑である(エラーを含みやす い、保守しにくい)モジュールを予測する ↓ 複雑であると判断されたモジュールの再設計をす る レビューやテストを重点的に行う page 4 目的 • オブジェクト指向開発を対象としてプロダクト品 質評価のためのツールを作成する • ツールの有効性を実験的に評価する page 5 Chidamberらの複雑度メトリクス • オブジェクト指向設計を対象とする – クラス間の参照関係(CBO,RFC) – 派生関係(DIT,NOC) – クラス内部の複雑度(WMC,LCOM) • S. R. Chidamber and C. F. Kemerer: “A metrics suite for objectoriented 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). page 6 ツールが計測するメトリクス RFC 使用するメソッドの数 CBO 結合するクラスの数 DIT 継承木内での深さ NOC 子クラスの数 WMC メソッドの数 LCOM メソッドの凝集度の欠如 NIV SLOC インスタンス変数の数 結合 継承 クラス内の 複雑さ ソースコードの行数 page 7 ツール概要 • Chidamberらの複雑度メトリクスを用いたクラ スの複雑度 – メトリクス計測機能 – メトリクスによる複雑度評価機能 • GUIによる操作 • Windows 95上で動作 page 8 ツールの入出力 • 入力: – C++ソースコード • 出力: – クラス階層図 – ソースコードのブラウズ – メトリクスによる複雑度判定 page 9 対象とするC++サブセット • C構文 • C++構文 – 例外処理構文 – クラス/メソッド構文 – テンプレート • 関数テンプレート(部分的に受理する) • クラステンプレート(部分的に受理する) page 10 ツールの画面 (クラス階層の表示) page 11 ツールの画面(ソースコードのブラウズ) page 12 ツールの画面 (メトリクスによる判定) page 13 ツールの構成 ライブラリのソースコード 新規開発のソースコード Smart C++プログラム構造抽出部 構造データ メトリクス分析部 ソースコード位置 データ メトリクスデータ, 統計分析データ グラフィックユーザーインターフェイス部 メトリクス値,統 計分析 クラス階層 ソースコード page 14 メトリクスによる複雑度判定 (1)クラスの分類 6種類:ドキュメント、ビュー、ダイアログ、フレーム、ア プリケーション、その他 (2)基準値の設定 分類/メトリクスごとに基準値(a, σ)を用意する (今回は実験で収集したデータを用いた) (3)異常値の算定 メトリクス値 0 ≦ m < a +σ a +σ ≦ m < a + 2σ a + 2σ ≦ m < a + 3σ a + 3σ ≦ m 異常値 0 1 2 3 page 15 クラス分類 • ドキュメント – アプリケーションのデータを保持する • ビュー – データを表示する・(メニュー等)操作を受け付ける • ダイアログ – 定型入力を行う・警告を出す • フレーム – ウィンドウの状態を管理する • アプリケーション – アプリケーションに関する情報(レジストリ情報等)を 管理する • その他 page 16 実験概要 • ある企業の新人研修 • 開発するプログラムは電子メールの配送システ ム(3000行程度) – 5つのサブシステムからなる:SMTPサーバー、POP サーバー、DELIVERサーバー、SMTPクライアント、 POPクライアント • 4~5名の開発者がチームで開発を行う(一人あ たり600行程度) • Visual C++、MFC(Microsoft Foundation Class)を用いる page 17 データの収集方法 • プログラムのソースコード – サーバーによって1時間毎に自動収集 • フォールトデータ – フォールト報告用ツール(Efer)によって収集 • 開発作業の開始・終了時刻 – コーディング・レビュー・テスト・フォールト修正など • 開発作業の結果 – 欠陥・フォールト page 18 メトリクスデータ • 被験者17人、クラス124個、フォールト84個 メトリクス NIV CBO NIM DIT NOC RFC LCOM SLOC Ec Et(分) 最小 最大 平均 標準偏差 0 14 4 2.67 0 5 1.39 1.59 0 22 5.73 4.86 0 6 3.44 1.41 0 0 0 0 0 27 8.23 6.81 0 190 22.42 36.84 5 420 96.43 81.01 0 17 0.57 1.93 0 599 12.68 58.94 page 19 分析:クラス分類とメトリクス CDocument派生クラス (サンプル数19) CView派生クラス (サンプル数17) CFrameWnd派生クラス (サンプル数17) cbo cbo 3 3 cbo sloc 2 rfc sloc 2 3 rfc sloc 1 1 1 0 0 0 niv wmc dit niv wmc lcom dit rfc 2 niv lcom wmc dit lcom CDialog派生クラス (サンプル数15) CWinApp派生クラス (サンプル数17) その他のクラス (サンプル数39) cbo cbo cbo 3 3 3 sloc 2 rfc 2 rfc sloc 2 1 1 1 0 0 0 niv wmc dit sloc lcom niv wmc dit lcom rfc niv wmc dit lcom page 20 分類CDocumentの特徴 CDocument派生クラス (サンプル数19) cbo 3 sloc 2 rfc 1 0 niv wmc dit lcom ドキュメントクラスは「データの 保持する」役目を持つ • NIVが大きい。インスタンス 変数が多い • CBOが小さい。あまり他のク ラスの変数を参照していない • WMCが大きい。他のクラス にデータを操作するためのメ ソッドを提供している page 21 分類CViewの特徴 CViewはデータを表示し、UIを 受け持つ CView派生クラス (サンプル数17) cbo 3 sloc 2 rfc 1 0 niv wmc dit lcom • CBOが大きい。他のクラスの 変数を参照している • WMCが大きい。他のクラス にメソッドを提供している • LCOMが大きい。互いに関 連のない雑多な機能を凝集 している page 22 分析:異常値とエラー CMsgSock CPopsDoc CSetDlg CPopsView CRegistDlg CPopsApp CMainFrame CMsg CListenSock CCCRRRWWWLLLNiNiNiSSS CRRWLLLNiS RWNiS CRRL W CSmtpSDoc CSmtpSView CSmtpSApp CMainFrame CMsg CMailRound MessageSock CMailListDlg RWLLNiNiS RWLLNiS CCRRS R CSmtpCView CSmtpCDoc CSmtpCApp CMainFrame CMailProvDlg MessageSock CMsg RWLLS RLNiNiS CPopCView CPopCDoc CLogDlg CMainFrame CMsg CPopCApp MessageSock CRWLS CRLNiS CRWL RL Ni 1 1.25 6 168.03 R 3 135.35 1 7.72 R CUserCtl CCCRRRWWLLLSSS CSMTPclientViewCRWLLNiSS CAdressDlg CCRRRWSS CSMTPclientDoc CRLNiSS CSMTPclientApp CMAILENV L CUserDlg Ni CMainFrame R CSMTPSocket CMsg 1 9.27 2 82.55 1 0.1 CMailFile CCCRRWWLS CIndex CRRWNiS CPopServerDoc CCRRS CPopServerApp CPassword R CConfig R CAboutDlg CPopServerView CMessageSock CMainFrame CSmtpCApp S CSmtpCDoc CRL CMainFrame R CMsg CSMTPSocket CSmtpCView CPopCView CCRRRWLLLSSS CPopCDoc CRNiS CMainFrame RL CPopCApp CMySock Ni CLogonDlg CKankyouDlg 1 77.9 1 0.1 1 1 41.4 8.3 1 0.3 2 38.55 CPopSDoc MessageSock CPopSApp ListenSock CPopSView CMainFrame CMsg CCCRRRWLLNiSSS CRWS 2 255.43 CMainFrame CDeliverApp Mail User CDeliverView CDeliverDoc CSS 7 43.27 3 599.73 Ni CMsg CRWSSS CMsgSocket Ni CPOPServerApp CListenSocket CPOPServerDoc CMainFrame CPOPServerView 3 1 0.62 0.68 CPopCDoc CPopCApp CMsg CDialogbox CPopCView MessageSock CMainFrame RLS CMainFrame CCRRRWWLLLNiNiNiSSS CMsg WNi CDeliverApp CDeliverSocket Mail Ni CDeliverDoc User CDeliverView CMilDlg CRWLS CMsg WNi CSmtpCView LNi CSmtpCDoc RL CSmtpCApp CSmtpSocket CMainFrame CAddressbookDlg 1 0.27 17 58.25 7 40.63 1 1 86.12 20.43 1 0.43 5 68.63 CSplashWnd CSmtpCApp CSmtpCView CKankyo CMainFrame CSmtpCDoc CSmtpCSock CMsg CCRRRWWLLNiS CCRRLLSSS CRNiS L CR L CMainFrame CEntry CDeliverApp CDeliverView CDeliverDoc CRRWLS RRWS 1 8 0.23 42.53 CPopCView CPopCApp CLogonDlg CEnvDlg CMainFrame CMsg CPopCDoc CMySocket CRRWLLNiNiSS RLLSS L L R 3 1.1 page 23 1 0.38 まとめ • Chidamberらのメトリクス • プロダクト評価ツール – ソースコードからメトリクスを計算する • ツールの評価実験 – クラス分類によってメトリクスの分布に差がある – メトリクスによる複雑度判定 page 24 課題 • 多くのプロジェクトに対して、ツールの有効性を 評価する • Chidamberらのメトリクス以外のメトリクスを計 測できるようにする • 上流工程のCASEツールのデータを扱えるよう にする – Rational Rose – Visual Modeler page 25 C++ソース分析ツールの比較 • ツールの出力からChidamberらのメトリクスを 算出可能か 解析器 DIT NOC C++ 仕 様 書 工 房 V1.0 L10 C++ doctor ver. 2.0 Hotdoc for VC++ 5.0 β ○ ○ ○ ○ ○ ○ ○ ○ ○ × × × ○ ○ ○ × × × Rational Rose WMC LCOM RFC CBO 備考 テンプレートクラスに関して は参照関係の解析は行わ れない。 関数とメソッドを異なった方 法で分析する。ただし、評価 したのはβ版なので、製品 版では異なるかもしれない。 Rational Rose で設計し 、 生 成し たC++ ソー スのみ解析 する。 page 26
© Copyright 2025 ExpyDoc