• 検索結果がありません。

Summary5 1 4 Last nano

N/A
N/A
Protected

Academic year: 2018

シェア "Summary5 1 4 Last nano"

Copied!
18
0
0

読み込み中.... (全文を見る)

全文

(1)

5.1.4 「情報フロー複雑度メトリク

ス」 ~

5.4 「まとめ」

担当:なの

(2)

情報フロー複雑度 ( IFCInformation Flow

Complexity

モジュールに入力/出力する「制御」や「データ」の量が多いと 設計における凝集度が減る

複雑度が増す

モジュール

データ

データ

ファンイ ファンアウト

長さ: LOC

制御の流れ(ローカルフロー)

データ 複数機能? 情報転送量

多い? 機能が複雑

(3)

情報フロー複雑度 ( IFCInformation Flow

Complexity

IFC     = (ファンイン × ファンアウト) 重み付きIFC = IFC × 長さ

ファンイン  = 入力ローカルフロー数+読み出すデータ数 ファンアウト = 出力ローカルフロー数+書き出すデータ数

IFC = {(2+1) × (1+ 2)}2 = 81

重み付きIFC = 81 × 100 

= 8100

長さ=100LO

(4)

情報フロー複雑度 ( IFCInformation Flow

Complexity

読み出すデータ

(3コ)

書き出すデータ(1

出力ローカルフロー(0 コ)

入力ローカルフロー(?

?コ)

これってカウントする 意味あるの?

(5)

システムの保守性指標 ( MIMaintainability

Index

保守性を向上/低下させているかどうか決定できる 複合メトリクス

コード行 LOC

ハルステッドのメトリ V(大きさ)クス

サイクロマティック複 V (g)雑度

コメント行の割合

(6)

システムの保守性指標 ( MIMaintainability

Index

MI = 171

    ー 5.2ln(aV)     ー 0.23aV(g’)

    ー 16.2ln(aLOC)

    + 50sin[(2.4 × perCM)1/2

aV     モジュール毎のハルステッドメトリクスの大きさVの平均 aV(g‘) モジュール毎の拡張サイクロマティック複雑度の平均

aLOC   モジュール毎のコード行数の平均

perCM  モジュール毎のコメント行の割合の平均 85

65 0

MI 高い保守性

適度の保守性 保守が困難

(7)

システムの保守性指標 ( MIMaintainability

Index

MI = 171

     - 5.2ln( 147 )      - 0.23 ×  4

     - 16.2ln( 17 )

     + 50sin[(2.4 ×  0.2 4 )1/2] = 133

ハルステッドメトリクスの 大きさ

サイクロマティッ拡張 複雑度

コード行数

コメント率

(8)

アグレスティ - カード - グラスのシステム複雑度

システム複雑度の総計:C = S + D

モジュール間複雑度 の総計

モジュール内複雑度 の総計

(9)

アグレスティ - カード - グラスのシステム複雑度

モジュール間複雑度の総計:S= Σ (f(i))

モジュール内複雑度の総計:D = Σ

 f(i):モジュールiのファンアウト(ローカルフロー数のみ)  V(i):モジュールiの内部変数の数

情報フロー複雑度

V(i) f(i)+1

V(i) f(i)+1

ファンアウ

内部変数が増える

→  内部的に複雑になる

下位モジュールに機能をまかせ

→  内部的に単純になる

(10)

アグレスティ - カード - グラスのシステム複雑度

相対的システム複雑度

(RSC:Relative System Complexity)  RSC = S / n + D / n’

  n :システム内のモジュール数

  n’:システム内の新しいモジュール数

新しいモジュールが多い と、モジュール内複雑度

の影響が小さくなる

システム全体の規模にかかわらず システムの複雑度を比較できる

モジュール毎の複雑度の平均

設計の良さの指標とすることで

データが少ない&古いので 独自の標準値を確立する

必要がある

(11)

オブジェクト指向設計メトリクス

Chaidamber Kemerer のメトリクス( CK メトリクス)~

データ駆動設計機能設計 オブジェクト指向設計

クラスA

クラスB

クラスC

クラスD

クラスE

オブジェク により構造

オブジェクト のカプセル化 手続き、モジュー

により構造化

オブジェクト指向設計と実装の 複雑性を示すメトリクスが必要

異なる

(12)

+ メソッド3() + メソッド2() + メソッド1() - プロパティ2 - プロパティ1 クラスB

オブジェクト指向設計メトリクス

Chaidamber Kemerer のメトリクス( CK メトリクス)~

WMC : Weighted Methods per Class

6つのメトリクス

クラス毎の重みづけされたメソッ ド数

重み1 重み2 重み1

WMC =

クラスA

クラスB

クラスC

クラスD

クラスE

DIT : Depth of Inheritance Tree

継承ツリーの深さ

DIT = 1

スーパークラス

サブクラス

クラスが大きすぎないか

設計が複雑?

再利用性が高い?

(13)

オブジェクト指向設計メトリクス

Chaidamber Kemerer のメトリクス( CK メトリクス)~ 6つのメトリクス

NOC : Number of Children

クラスA

クラスB

クラスC

クラスD

クラスE

継承上の子の数

NOC = 2

親クラスの抽象化が弱い 再利用性が高い?

CBO : Coupling Between Object Classes

オブジェクトクラス間の結 合度

クラスA

クラスB

クラスC

クラスD

クラスE

CBO = 2

他のクラスに依存している 複雑?

保守性/再利用性が低い?

(14)

【インスタンスA1】変数1 を取得

【インスタンスA1】 メソッド8

【インスタンスD1】変数3 を取得

【インスタンスD1】 メソッド4

【インスタンスD1】 メソッド5

+ メソッド3() + メソッド2() + メソッド1() - プロパティ2 - プロパティ1 クラスB

オブジェクト指向設計メトリクス

Chaidamber Kemerer のメトリクス( CK メトリクス)~ 6つのメトリクス

RFC : Response for Class LCOM : Lack of Cohesion of Methods

クラスの応答 メソッドの凝集性欠如

: クラスD : クラスB

: クラスA

メソッド1()

メソッド8()

メソッド5() メソッド4()

メソッド 1 の PFC = 3

テストが必要複雑?

メソッド 1

LCOM = 2

複雑? メソッ

設計が困難?

(15)

オブジェクト指向設計メトリクス

Chaidamber Kemerer のメトリクス( CK メトリクス)~

オブジェクト指向設計メトリクスは発展途上

利用の方法について組織内で十分に定義されている必要がある

(一例)NASAのローゼンバーグのガイドライン

 以下基準の「少なくとも2つ」を満たしているクラスは注意!!   ・RFC > 100

  ・CBO > 5

  ・RFC > クラス内のメソッド数の5倍   ・WMC > 100

  ・メソッド数 > 40

RF

CB

WM

(16)

概念的複雑性

理解する上での難しさ

どっちが難しい

微分積分学 代数学

割り込み処理 給与計算

階乗ルーチン 1 階乗ルーチン 2

より心理的なも

特定のメトリ がないクス

設計や実装の比較検討

(17)

計算複雑性

実行中の計算の複雑性 計算時間

(命令数) 計算に使用する空

(ディスクやメモ リ)

どっちが計算として複雑

階乗ルーチン 1階乗ルーチン 2

スタックメ

モリ 再帰的に実行する度に 使用

“ n”によって サイズが変化

スタックメ

モリ 固定サイズ を使用

効率性について設計、実装を評価

(18)

本文中のコトバ

~106ページ~

「誰かが書いたコードを保守することは、新しいコードを書くこと よりも難しい。では、私たちがコードを書くのがとても得意なら、 誰が私たちのコードを保守してくれるのか?」

Bell Labs

~107ページ~

「設計の複雑性は、頭の中で同時に保たなければいけないアイデアの 数、それぞれのアイデアの持続時間、そしてそれらの2つの事柄の外 積に相互作用の重要度をかけあわせたものを変数とする関数である」 B.Colwell

参照

関連したドキュメント

① 要求仕様固め 1)入出力:入力電圧範囲、出力電圧/精度 2)負荷:電流、過渡有無(スリープ/ウェイクアップ含む)

ユーザ情報を 入力してくだ さい。必要に 応じて複数(2 つ目)のメー ルアドレスが 登録できます。.

機器名称 相 銘板容量(kW) 入力換算 入力容量(kW) 台数 現在の契約電力.

ウェブサイトは、常に新しくて魅力的な情報を発信する必要があります。今回制作した「maru 

パキロビッドパックを処方入力の上、 F8特殊指示 →「(治)」 の列に 「1:する」 を入力して F9更新 を押下してください。.. 備考欄に「治」と登録されます。

・電源投入直後の MPIO は出力状態に設定されているため全ての S/PDIF 信号を入力する前に MPSEL レジスタで MPIO を入力状態に設定する必要がある。MPSEL

理由:ボイラー MCR範囲内の 定格出力超過出 力は技術評価に て問題なしと確 認 済 み で あ る が、複数の火力

※ 本欄を入力して報告すること により、 「項番 14 」のマスター B/L番号の積荷情報との関