c++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

27
C++ プププププププププププ ププププププププププププププ ププププ 神神神神 神神神神 神神神神 神神神神 神神神神 神神神神神神神神神神

Upload: kawena

Post on 05-Jan-2016

60 views

Category:

Documents


0 download

DESCRIPTION

C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価. 神谷年洋 高林修司 楠本真二 井上克郎 大阪大学 大学院基礎工学研究科. 背景. ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入. 品質評価によるプロセス改善. ISO9000 シリーズ・ SPICE ・ CMM など プロセスやプロダクトを計測する 分析によって問題点を見つけだし、改善策を立てる 改善策を実行する 計測にはさまざまなメトリクスを用いる. メトリクス. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

C++ プログラムを対象とした複雑度メトリクス計測ツールとその評価

神谷年洋 高林修司 楠本真二 井上克郎大阪大学 大学院基礎工学研究科

Page 2: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 2

背景ソフトウェアの大規模化・複雑化生産性と品質の向上

オブジェクト指向分析設計の適用開発ツールの投入

Page 3: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 3

品質評価によるプロセス改善• ISO9000 シリーズ・ SPICE ・ CMM など– プロセスやプロダクトを計測する– 分析によって問題点を見つけだし、改善策を立

てる– 改善策を実行する

• 計測にはさまざまなメトリクスを用いる

Page 4: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 4

メトリクス• メトリクスとは、ソフトウェアのさまざま

な特性を判別する客観的な数学的尺度である– プロセスメトリクス・プロダクトメトリクス

• 複雑度メトリクスはエラーの発生を予測するためのメトリクスである– MaCabe のサイクロマチック数・ Halstead の

ソフトウェアサイエンス

• オブジェクト指向設計を計測対象とする Chidamber らの複雑度メトリクス

Page 5: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 5

複雑度メトリクスによるエラー予測メトリクスを用いて複雑である ( エラーを含

みやすい、保守しにくい ) モジュールを予測する

複雑であると判断されたモジュールの再設計をする

レビューやテストを重点的に行う

Page 6: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 6

目的• オブジェクト指向開発を対象としてプロダ

クト品質評価のためのツールを作成する• ツールの有効性を実験的に評価する

Page 7: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

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: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 8

ツールが計測するメトリクスRFC 使用するメソッドの数

CBO 結合するクラスの数

DIT 継承木内での深さ

NOC 子クラスの数

WMC メソッドの数

LCOM メソッドの凝集度の欠如

NIV インスタンス変数の数

SLOC ソースコードの行数

結合

継承

クラス内の複雑さ

Page 9: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 9

ツール概要• Chidamber らの複雑度メトリクスを用いた

クラスの複雑度– メトリクス計測機能– メトリクスによる複雑度評価機能

• GUI による操作• Windows 95 上で動作

Page 10: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 10

ツールの入出力• 入力:– C++ ソースコード

• 出力:– クラス階層図– ソースコードのブラウズ– メトリクスによる複雑度判定

Page 11: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 11

対象とする C++ サブセット• C 構文• C++ 構文– 例外処理構文– クラス / メソッド構文– テンプレート• 関数テンプレート(部分的に受理する)• クラステンプレート(部分的に受理する)

Page 12: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 12

ツールの画面 ( クラス階層の表示 )

Page 13: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 13

ツールの画面 ( ソースコードのブラウズ )

Page 14: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 14

ツールの画面 ( メトリクスによる判定 )

Page 15: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 15

ツールの構成 ラ イ ブ ラ リの ソ ー ス コー ド新 規 開 発 の ソ ー ス コー ド

C ++プ ロ グ ラ ム 構 造 抽 出 部

構 造 デ ー タ

メトリク ス 分 析 部

グ ラ フ ィック ユ ー ザ ー イ ン ター フ ェイ ス 部

,メトリク ス デ ー タ統 計 分 析 デ ー タ

ク ラ ス 階 層

,メトリク ス 値 統計 分 析 ソ ー ス コー ド

S mart

ソ ー ス コー ド位 置デ ー タ

Page 16: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

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: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 17

クラス分類• ドキュメント– アプリケーションのデータを保持する

• ビュー– データを表示する・ ( メニュー等 ) 操作を受け付ける

• ダイアログ– 定型入力を行う・警告を出す

• フレーム– ウィンドウの状態を管理する

• アプリケーション– アプリケーションに関する情報 ( レジストリ情報等 ) を管

理する• その他

Page 18: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 18

実験概要• ある企業の新人研修• 開発するプログラムは電子メールの配送シ

ステム (3000 行程度 )– 5 つのサブシステムからなる: SMTP サーバー、

POP サーバー、 DELIVER サーバー、 SMTP クライアント、 POP クライアント

• 4~ 5名の開発者がチームで開発を行う (一人あたり 600 行程度 )

• Visual C++ 、 MFC ( Microsoft Foundation Class) を用いる

Page 19: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 19

データの収集方法• プログラムのソースコード– サーバーによって 1時間毎に自動収集

• フォールトデータ– フォールト報告用ツール (Efer) によって収集• 開発作業の開始・終了時刻

– コーディング・レビュー・テスト・フォールト修正など

• 開発作業の結果– 欠陥・フォールト

Page 20: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

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: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

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: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 22

分類 CDocument の特徴ドキュメントクラスは「デー

タの保持する」役目を持つ

• NIV が大きい。インスタンス変数が多い

• CBO が小さい。あまり他のクラスの変数を参照していない

• WMC が大きい。他のクラスにデータを操作するためのメソッドを提供している

CDocument派生クラス( 19)サンプル数

0

1

2

3 cbo

rfc

wmc

lcom dit

niv

sloc

Page 23: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 23

分類 CView の特徴CView はデータを表示し、

UI を受け持つ

• CBO が大きい。他のクラスの変数を参照している

• WMC が大きい。他のクラスにメソッドを提供している

• LCOM が大きい。互いに関連のない雑多な機能を凝集している

CView派生クラス( 17)サンプル数

0

1

2

3 cbo

rfc

wmc

lcom dit

niv

sloc

Page 24: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

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: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 25

まとめ• Chidamber らのメトリクス• プロダクト評価ツール– ソースコードからメトリクスを計算する

• ツールの評価実験– クラス分類によってメトリクスの分布に差があ

る– メトリクスによる複雑度判定

Page 26: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

page 26

課題• 多くのプロジェクトに対して、ツールの有

効性を評価する• Chidamber らのメトリクス以外のメトリク

スを計測できるようにする• 上流工程の CASE ツールのデータを扱える

ようにする– Rational Rose

– Visual Modeler

Page 27: C++ プログラムを対象とした 複雑度メトリクス計測ツールと その評価

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++ソースのみ解析する。