オブジェクト指向プログラムを対象と した複雑度メトリクスの実験的評価 - Chidamberらのメトリクスを対象として 神谷 年洋, 別府 明, 楠本 真二, 井上 克郎 (大阪大学大学院基礎工学研究科) 毛利 幸雄 (日本ユニシス株式会社) #1 構成 背景 ソフトウェア複雑度メトリクス プログラム開発における再利用 Chidamberらのメトリクス Chidamberらのメトリクスの問題点 仮説 修正版メトリクス 実験 分析 Chidamberらのメトリクス 修正版メトリクス まとめ 1997/12/10 Toshihiro Kamiya, Osaka Univ. #2 背景 ソフトウェアが大規模・複雑化してきている 開発期間の短縮や品質向上が求められて いる ソフトウェアの全ライフサイクルにわたる管理 – プロダクトの評価を行う必要がある 再利用 1997/12/10 Toshihiro Kamiya, Osaka Univ. #3 ソフトウェア複雑度メトリクス 複雑であるほど ・エラーが含まれている可能性が高くなる ・保守が困難になる 代表例 – Halstedのメトリクス – McCabeのサイクロマチック数 – Chidamberらのメトリクス* (*) S.R.Chidamber and C.F.Kemerer, “A Metrics Suite for Object-Oriented Design”, IEEE Trans. Software Eng., vol. 20, no. 6, pp.476-493, June 1994 1997/12/10 Toshihiro Kamiya, Osaka Univ. #4 プログラム開発における再利用 従来の再利用 – ライブラリの利用 プログラム全体の処理の流れなどの主要な部分は開発者が 開発し、ライブラリから必要な部品を持ってきて組み合わせる オブジェクト指向開発における再利用 – フレームワークの利用 プログラムの主要な部分をフレームワークから取り出し、新た に必要な部分を開発者が開発して、それを組み合わせる 1997/12/10 Toshihiro Kamiya, Osaka Univ. #5 アプリケーションフレームワーク クラスライブラリ ドメインに特化している プログラムの基幹となる構造を持つ プログラムの再利用率が高くなる 例 – Microsoft Foundation Class – Abstract Windowing Toolkit 1997/12/10 Toshihiro Kamiya, Osaka Univ. #6 Chidamberらの6種のメトリクス オブジェクト指向設計のための複雑度メトリ クス クラスの定義から複雑度を測定する Basilliらが実験を行ってエラーの予測性能を 評価した* (*) V.R.Basilli, L.C.Briand and W.L.Melo: “A Validation of Object-Oriented Design Metrics as Quality Indicators”, IEEE Trans. On Software Eng., vol. 22, no. 10, pp.751-761, 1996. 1997/12/10 Toshihiro Kamiya, Osaka Univ. #7 Chidamberらのメトリクス(1) クラスの内部的な複雑度 LCOM:クラスの凝集度の欠如 あるクラスのメソッドのすべての組み合わせのうち、参照するインスタンス 変数に共通のものが無い組み合わせの数から、共通するものがある組み 合わせの数を引いたもの。ただし、0より小さい場合は0とする WMC:クラスの重み付きメソッド数 あるクラスに定義されているすべてのメソッドの複雑度の和。各メソッドが どれも同じくらいの複雑さであると考えられるなら、クラスで定義されてい るメソッドの数 1997/12/10 Toshihiro Kamiya, Osaka Univ. #8 Chidamberらのメトリクス(2) 継承に関する複雑さ DIT:継承木内での深さ クラスの派生関係が木であるときは、そのクラスの木の中での深さ NOC:子クラスの数 そのクラスから直接派生している クラスの数 DIT DIT = 4 NOC = 3 NOC 1997/12/10 Toshihiro Kamiya, Osaka Univ. #9 Chidamberらのメトリクス(3) クラス間の関係についての複雑さ CBO:クラス間の結合 あるクラスが「結合」しているクラス数。「結合」とは、他のクラスのインスタ ンス変数やメソッドを参照すること RFC:クラスに対する反応 あるクラスのメソッドの集合と、各メソッドで呼び出す他のクラスのメソッド の集合の和集合の要素数 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 10 CBO,RFCの例 Window draw() move() BoundedWindow move() setBoundary() place Rect getOrigin() getCorner() setOrigin() setCorner() operator=() ... Point x:integer y:integer boundary BoundaryRect CBO = 3 RFC = 5 bound() ... void move(Rect newPlace) { Rect boundedPlace = boundary. Window:: move(boundedPlace); } void setBoundary(Rect newBoundary) { boundary = newBoundary; move(place); } 1997/12/10 2 Toshihiro Kamiya, Osaka Univ. bound(newPlace); # 11 Chidamberらのメトリクスの問題点 再利用されたクラスの品質は新規開発のク ラスよりも高い* メトリクスを計測する際に、再利用されたクラ スと新規開発のクラスを同等に扱う (*) V.R.Basilli, L.C.Briand and W.L.Melo: “A Validation of Object-Oriented Design Metrics as Quality Indicators”, IEEE Trans. Software Eng., vol. 22, no. 10, pp.751761, 1996. 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 12 仮説 仮説:再利用されたクラスとの結合は複雑 度を増大させない メトリクスを計測する際に、再利用されたクラ スの重みを0とおく 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 13 修正版メトリクス(1) DITo そのクラスの木の中での深さから、根にいたるまでのパス上にある再利用 クラスを引いたもの フレームワーク DITo DITo = 1 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 14 修正版メトリクス(2) CBOo あるクラスが結合しているクラス数のうち、新規開発クラスの数 RFCo あるクラスのメソッドの集合と、各メソッドで呼び出す他の新規開発クラス のメソッドの集合の和集合の要素数 フレームワーク 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 15 CBOo,RFCoの例 Rect Window draw() move() BoundedWindow move() setBoundary() CBOo = 1 RFCo = 3 place getOrigin() getCorner() setOrigin() setCorner() operator=() ... Point x:integer y:integer boundary BoundaryRect CBO = 3 RFC = 5 bound() ... void move(Rect newPlace) { Rect boundedPlace = boundary. Window:: move(boundedPlace); } void setBoundary(Rect newBoundary) { boundary = newBoundary; move(place); } 1997/12/10 2 Toshihiro Kamiya, Osaka Univ. bound(newPlace); # 16 実験 目的:再利用を考慮して修正したメトリク スを評価する 実際のオブジェクト指向開発プロセスからデ ータを収集する – メトリクスデータ – エラー修正時間 修正版メトリクスをオリジナルと比較する 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 17 実験の概要 新人研修におけるC++プログラム開発演習 からデータを収集した 6チームが独立に同じ課題を行う – チームは4から5名の開発者から構成される 課題は酒屋問題を拡張したものである – データベースを用いて在庫管理を行う – 売り上げ予測機能を持つ – パスワードによるオペレータ認証を行う MFCをフレームワークとして用いる 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 18 例 開発規模: 約3000行 再利用: 約10000行 CObject CRecordset CCmdTarget CBunsekiSet CGoukeiSet KionSet CPasswdSet CYosokuSet CDocument CWinThread CBunsekiDoc CHattyuDoc CYosokuDoc CWinApp CWnd CFrameWnd 1997/12/10 CMDIChildWnd CMDIFrameWnd CChildFrame CMainFrame Toshihiro Kamiya, Osaka Univ. CDialog CAboutDlg CYosokuDlg CPasswdDlg CView CScrollView CHattyuView CSotuenApp CBunsekiView # 19 データ収集の方法 メトリクスデータ – 開発者の作業ディレクトリを1時間おきにバック アップする エラー修正時間データ – 開発者に報告書を提出してもらう • • • • • 1997/12/10 レビュー報告書 単体テスト報告書 結合テスト報告書 エラー特定報告書 エラー修正報告書 Toshihiro Kamiya, Osaka Univ. # 20 分析 分析はメンバー単位で行う – 課題は分割され、各メンバーに割り当てられた – メンバー間にまたがるエラーが発見されなかっ た 収集されたデータに不備のあった被験者は 分析対象から除いた 19人のデータが分析対象となった 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 21 データ 開発者 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 T15 T16 T17 T18 T19 1997/12/10 LCOM WMC RFCo(RFC) CBOo(CBO) DIT Ec Et(分) 73 33 31 (75) 8 (38) 17 7 1124 47 19 7 (38) 3 (16) 10 2 50 46 22 9 (58) 3 (21) 14 5 315 16 7 9 (14) 0 ( 8) 6 0 0 47 19 17 (41) 3 (17) 10 2 390 14 8 9 (13) 0 ( 8) 6 2 114 47 19 17 (40) 2 (17) 10 3 21 49 20 24 (32) 0 (18) 14 7 891 13 8 8 (16) 0 ( 9) 6 0 0 62 25 2 (58) 0 (24) 16 5 530 52 21 19 (52) 1 (18) 12 8 576 59 24 22 (50) 1 (20) 16 8 1005 13 8 8 (16) 0 ( 9) 6 1 60 88 38 35 (90) 3 (37) 20 4 850 55 22 20 (55) 3 (20) 12 3 154 57 26 24 (67) 3 (23) 16 1 94 11 11 10 (24) 0 (10) 6 1 90 47 17 16 (24) 0 (13) 10 3 75 13 8 5 (15) 0 ( 9) 6 1 25 Toshihiro Kamiya, Osaka Univ. # 22 メトリクスとエラー修正時間の相関 WMC Et(分) RFCo CBOo LCOM DIT (RFC) (CBO) 0.72 0.77 0.47 0.7 0.77 (0.63) (0.74) 有意水準 5%で検定 RFCoはRFCよりも相関が高い CBOoはCBOよりも相関が低い 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 23 CBOoとCBO CBOはインスタンス変数を直接参照する結合も数 える エラーを修正するためにはメソッドの定義も知って いなければならない 再利用されたクラス==新規開発のクラス 再利用されたクラス インター フェイス メソッドの 定義 1997/12/10 Toshihiro Kamiya, Osaka Univ. 新規開発のクラス # 24 RFCoとRFC RFCはメソッドを介した参照を数える 再利用されるクラスはインターフェイスだけを知って いればよい 再利用されたクラス<新規開発のクラス 再利用されたクラス インター フェイス メソッドの 定義 1997/12/10 Toshihiro Kamiya, Osaka Univ. 新規開発のクラス # 25 考察 フレームワークを再利用することは複雑度を 増大させない ただし、インスタンス変数を直接参照するよ うな結合は複雑度を増大させる 「publicなデータメンバは避けるべきである」 という経験則と一致する 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 26 まとめと課題 再利用を考慮してChidamberらのメトリクスを 改善できる可能性を示した Briandらのメトリクス*についても実験してみる 開発者にメトリクスを提供する開発環境の開発 (*) L.Briand, P.D., and W.M., “An Investigation into Coupling Measures for C++”, Proc. of the 19th ICSE, 1997. 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 27 再利用クラスの重みを変化させ た場合 0.8 相関 0.7 0.6 CBOw RFCw 0.5 0.4 0.3 0 0.1 0.2 0.3 0.4 0.5 W 1997/12/10 Toshihiro Kamiya, Osaka Univ. 0.6 0.7 0.8 0.9 1 # 28 テスト・エラー特定・エラー修正 に要した時間 テスト ただしこのデータは 97年度のもの 1997/12/10 Toshihiro Kamiya, Osaka Univ. 特定 修正 a07 334 100 98 a10 a14 26 117 134 0 0 7 a18 21 6 3 b02 1 77 0 b06 c01 61 37 17 5 51 34 c02 114 18 1 c03 149 14 242 c06 c08 151 5 69 0 250 0 c15 59 0 0 c16 108 3 28 c19 d01 17 130 107 137 3 69 d03 10 1 1 d10 34 0 22 d16 22 1396 28 716 0 809 # 29 その他のOO指向メトリクス Mark Lorenz and J.K., Object-Oriented Software Metrics, Prentice Hall, 1994. – 数多くの基本的なメトリクスが提案されている L.Briand, P.D., and W.M., “An Investigation into Coupling Measures for C++”, Proc. of the 19th ICSE, 1997. – クラスが「どのように」結合しているかを考慮に 入れた18種のメトリクスを提案している 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 30 Halsted, McCabeのメトリクス Halstedのメトリクス*1 制御構造や演算子や関数をオペレータ、変数や定数をオペランド とする。オペレータの数とオペランドの数を数えることでプログラム の「大きさ」を測定する McCabeのサイクロマチック数*2 手続きの複雑さ==制御の基本パス数(分岐の数+1) (*1) Halsted, M.H., Elements of Software Science, Elsevier North-Holland, 1977. (*2) McCabe, T.J., “A complexity measure”, IEEE Trans. Software Eng., vol. SE-2, no. 4, pp.308-320, 1976 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 31 メトリクスツールの概要 開発者 ソースコード 履歴 ソースコード構造視覚化 作業履歴 ソースコード履歴管理 ▲・・・・ ■・・・・ ▼・・・・ メトリクスによる分析 作業データ メトリクス ツール 1997/12/10 Toshihiro Kamiya, Osaka Univ. # 32 1997/12/10 Toshihiro Kamiya, Osaka Univ.
© Copyright 2024 ExpyDoc