C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価
description
Transcript of C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価
C++ プログラムを対象とした複雑度メトリクス計測ツールとその評価
神谷年洋 高林修司 楠本真二 井上克郎大阪大学 大学院基礎工学研究科
page 2
背景ソフトウェアの大規模化・複雑化生産性と品質の向上
↓
オブジェクト指向分析設計の適用開発ツールの投入
page 3
品質評価によるプロセス改善• ISO9000 シリーズ・ SPICE ・ CMM など– プロセスやプロダクトを計測する– 分析によって問題点を見つけだし、改善策を立
てる– 改善策を実行する
• 計測にはさまざまなメトリクスを用いる
page 4
メトリクス• メトリクスとは、ソフトウェアのさまざま
な特性を判別する客観的な数学的尺度である– プロセスメトリクス・プロダクトメトリクス
• 複雑度メトリクスはエラーの発生を予測するためのメトリクスである– MaCabe のサイクロマチック数・ Halstead の
ソフトウェアサイエンス
• オブジェクト指向設計を計測対象とする Chidamber らの複雑度メトリクス
page 5
複雑度メトリクスによるエラー予測メトリクスを用いて複雑である ( エラーを含
みやすい、保守しにくい ) モジュールを予測する
↓
複雑であると判断されたモジュールの再設計をする
レビューやテストを重点的に行う
page 6
目的• オブジェクト指向開発を対象としてプロダ
クト品質評価のためのツールを作成する• ツールの有効性を実験的に評価する
page 7
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).
page 8
ツールが計測するメトリクスRFC 使用するメソッドの数
CBO 結合するクラスの数
DIT 継承木内での深さ
NOC 子クラスの数
WMC メソッドの数
LCOM メソッドの凝集度の欠如
NIV インスタンス変数の数
SLOC ソースコードの行数
結合
継承
クラス内の複雑さ
page 9
ツール概要• Chidamber らの複雑度メトリクスを用いた
クラスの複雑度– メトリクス計測機能– メトリクスによる複雑度評価機能
• GUI による操作• Windows 95 上で動作
page 10
ツールの入出力• 入力:– C++ ソースコード
• 出力:– クラス階層図– ソースコードのブラウズ– メトリクスによる複雑度判定
page 11
対象とする C++ サブセット• C 構文• C++ 構文– 例外処理構文– クラス / メソッド構文– テンプレート• 関数テンプレート(部分的に受理する)• クラステンプレート(部分的に受理する)
page 12
ツールの画面 ( クラス階層の表示 )
page 13
ツールの画面 ( ソースコードのブラウズ )
page 14
ツールの画面 ( メトリクスによる判定 )
page 15
ツールの構成 ラ イ ブ ラ リの ソ ー ス コー ド新 規 開 発 の ソ ー ス コー ド
C ++プ ロ グ ラ ム 構 造 抽 出 部
構 造 デ ー タ
メトリク ス 分 析 部
グ ラ フ ィック ユ ー ザ ー イ ン ター フ ェイ ス 部
,メトリク ス デ ー タ統 計 分 析 デ ー タ
ク ラ ス 階 層
,メトリク ス 値 統計 分 析 ソ ー ス コー ド
S mart
ソ ー ス コー ド位 置デ ー タ
page 16
メトリクスによる複雑度判定(1) クラスの分類
6 種類 : ドキュメント、ビュー、ダイアログ、フレーム、アプリケーション、その他
(2) 基準値の設定分類 / メトリクスごとに基準値 (a, σ) を用意する
( 今回は実験で収集したデータを用いた )
(3) 異常値の算定メトリクス値 異常値0 ≦ m < a +σ 0a +σ ≦ m < a + 2σ 1a + 2σ ≦ m < a + 3σ 2a + 3σ ≦ m 3
page 17
クラス分類• ドキュメント– アプリケーションのデータを保持する
• ビュー– データを表示する・ ( メニュー等 ) 操作を受け付ける
• ダイアログ– 定型入力を行う・警告を出す
• フレーム– ウィンドウの状態を管理する
• アプリケーション– アプリケーションに関する情報 ( レジストリ情報等 ) を管
理する• その他
page 18
実験概要• ある企業の新人研修• 開発するプログラムは電子メールの配送シ
ステム (3000 行程度 )– 5 つのサブシステムからなる: SMTP サーバー、
POP サーバー、 DELIVER サーバー、 SMTP クライアント、 POP クライアント
• 4~ 5名の開発者がチームで開発を行う (一人あたり 600 行程度 )
• Visual C++ 、 MFC ( Microsoft Foundation Class) を用いる
page 19
データの収集方法• プログラムのソースコード– サーバーによって 1時間毎に自動収集
• フォールトデータ– フォールト報告用ツール (Efer) によって収集• 開発作業の開始・終了時刻
– コーディング・レビュー・テスト・フォールト修正など
• 開発作業の結果– 欠陥・フォールト
page 20
メトリクスデータ• 被験者 17 人、クラス 124個、フォールト 8
4個メトリクス 最小 最大 平均 標準偏差NIV 0 14 4 2.67CBO 0 5 1.39 1.59NIM 0 22 5.73 4.86DIT 0 6 3.44 1.41NOC 0 0 0 0RFC 0 27 8.23 6.81LCOM 0 190 22.42 36.84SLOC 5 420 96.43 81.01Ec 0 17 0.57 1.93Et(分) 0 599 12.68 58.94
page 21
分析:クラス分類とメトリクスCDocument派生クラス
( 19)サンプル数
0
1
2
3 cbo
rfc
wmc
lcom dit
niv
sloc
CView派生クラス( 17)サンプル数
0
1
2
3 cbo
rfc
wmc
lcom dit
niv
sloc
CFrameWnd派生クラス( 17サンプル数 )
0
1
2
3 cbo
rfc
wmc
lcom dit
niv
sloc
CDialog派生クラス( 15)サンプル数
0
1
2
3 cbo
rfc
wmc
lcom dit
niv
sloc
CWinApp派生クラス( 17)サンプル数
0
1
2
3 cbo
rfc
wmc
lcom dit
niv
sloc
その他のクラス( 39)サンプル数
0
1
2
3 cbo
rfc
wmc
lcom dit
niv
sloc
page 22
分類 CDocument の特徴ドキュメントクラスは「デー
タの保持する」役目を持つ
• NIV が大きい。インスタンス変数が多い
• CBO が小さい。あまり他のクラスの変数を参照していない
• WMC が大きい。他のクラスにデータを操作するためのメソッドを提供している
CDocument派生クラス( 19)サンプル数
0
1
2
3 cbo
rfc
wmc
lcom dit
niv
sloc
page 23
分類 CView の特徴CView はデータを表示し、
UI を受け持つ
• CBO が大きい。他のクラスの変数を参照している
• WMC が大きい。他のクラスにメソッドを提供している
• LCOM が大きい。互いに関連のない雑多な機能を凝集している
CView派生クラス( 17)サンプル数
0
1
2
3 cbo
rfc
wmc
lcom dit
niv
sloc
page 24
分析:異常値とエラーCMsgSock CCCRRRWWWLLLNiNiNiSSS 1 1.25CPopsDoc CRRWLLLNiS 6 168.03CSetDlg RWNiSCPopsView CRRLCRegistDlg WCPopsAppCMainFrame RCMsgCListenSock
CSmtpSDoc RWLLNiNiS 3 135.35CSmtpSView RWLLNiSCSmtpSApp CCRRSCMainFrame RCMsgCMailRoundMessageSockCMailListDlg
CSmtpCView RWLLSCSmtpCDoc RLNiNiS 1 7.72CSmtpCAppCMainFrame RCMailProvDlgMessageSockCMsg
CPopCView CRWLSCPopCDoc CRLNiS 1 9.27CLogDlg CRWLCMainFrame RLCMsg NiCPopCAppMessageSock
CUserCtl CCCRRRWWLLLSSS 2 82.55CSMTPclientViewCRWLLNiSSCAdressDlg CCRRRWSSCSMTPclientDocCRLNiSS 1 0.1CSMTPclientAppCMAILENV LCUserDlg NiCMainFrame RCSMTPSocketCMsg
CMailFile CCCRRWWLS 1 77.9CIndex CRRWNiSCPopServerDoc CCRRS 1 0.1CPopServerAppCPassword R 1 41.4CConfig R 1 8.3CAboutDlgCPopServerViewCMessageSock 1 0.3CMainFrameCSmtpCApp SCSmtpCDoc CRL 2 38.55CMainFrame RCMsgCSMTPSocketCSmtpCViewCPopCView CCRRRWLLLSSS 7 43.27CPopCDoc CRNiSCMainFrame RLCPopCAppCMySock NiCLogonDlgCKankyouDlg
CPopSDoc CCCRRRWLLNiSSS 2 255.43MessageSock CRWSCPopSAppListenSockCPopSViewCMainFrameCMsg
CMainFrame CSS 3 599.73CDeliverAppMail NiUserCDeliverViewCDeliverDoc
CMsg CRWSSS 3 0.62CMsgSocket Ni 1 0.68CPOPServerAppCListenSocketCPOPServerDocCMainFrameCPOPServerView
CPopCDoc RLS 1 0.27CPopCAppCMsgCDialogboxCPopCViewMessageSockCMainFrame
CMainFrame CCRRRWWLLLNiNiNiSSS 17 58.25CMsg WNiCDeliverAppCDeliverSocketMail NiCDeliverDocUserCDeliverView 7 40.63
CMilDlg CRWLSCMsg WNiCSmtpCView LNi 1 86.12CSmtpCDoc RL 1 20.43CSmtpCAppCSmtpSocketCMainFrameCAddressbookDlg
CSplashWnd CCRRRWWLLNiSCSmtpCApp CCRRLLSSSCSmtpCView CRNiS 1 0.43CKankyo LCMainFrame CRCSmtpCDoc L 5 68.63CSmtpCSockCMsg
CMainFrame CRRWLS 1 0.23CEntry RRWS 8 42.53CDeliverAppCDeliverViewCDeliverDoc
CPopCView CRRWLLNiNiSS 3 1.1CPopCApp RLLSSCLogonDlg LCEnvDlg LCMainFrame RCMsgCPopCDoc 1 0.38CMySocket
page 25
まとめ• Chidamber らのメトリクス• プロダクト評価ツール– ソースコードからメトリクスを計算する
• ツールの評価実験– クラス分類によってメトリクスの分布に差があ
る– メトリクスによる複雑度判定
page 26
課題• 多くのプロジェクトに対して、ツールの有
効性を評価する• Chidamber らのメトリクス以外のメトリク
スを計測できるようにする• 上流工程の CASE ツールのデータを扱える
ようにする– Rational Rose
– Visual Modeler
page 27
C++ ソース分析ツールの比較• ツールの出力から Chidamber らのメトリク
スを算出可能か解析器 DIT NOC WMC LCOM RFC CBO 備考C++仕 様 書工 房 V1.0L10
○ ○ ○ ○ ○ ○ テンプレートクラスに関しては参照関係の解析は行われない。
C++ doctorver. 2.0
○ ○ ○ × × ×
Hotdoc forVC++ 5.0 β
○ ○ ○ × × × 関数とメソッドを異なった方法で分析する。ただし、評価
βしたのは 版なので、製品版では異なるかもしれない。
RationalRose
Rational Roseで設計し、生成したC++ソースのみ解析する。