第5章
複雑性の測定
TEF 東海メトリックス勉強会
By はやし 友情出演 むしくん
よろしく!
ソフトウェアが複雑であると
欠陥の増加や生産性の低下を招く。
欠陥の含まれやすさと生産性を予測可能な
複雑性メトリックスがほしくなる。
本章では、複雑性を構造、概念、
計算に着眼する。
物事は可能な限り単純化されるべきである。
ただし、それ以上単純にしてはいけない。
- by アルベルト・アインシュタイン
大好きだよ複雑は
5 . 1 構造的複雑性 (1/2)
① 規模:
LOC またはファンクションポイントを測定
② サイクロマティック複雑度(循環的複雑度):
モジュール内の制御フローを測定
③ ハルスレッドの複雑度:
コード内の演算子(オペレータ)と
演算対象(オペランド)の数を測定
以下のメトリックスを用い検討
する
FPは前回 やったね。
④ 情報フロー:
モジュールに入出力するデータのフローを測定
⑤ システムの複雑度
保守性や設計全体の観点から、システム全体の
複雑性を測定
⑥ オブジェクト指向構造メトリックス:
(機能設計されたプログラムとは異なる)
オブジェクト指向プログラムの構造を測定
5 . 1 構造的複雑性 (2/2)
以下のメトリックスを用い検討
する
たくさんある なぁ
5 . 1 . 1 複雑性メトリックスとし
5 . 1 . 1 . 1 システムの規模と ての規模
システムの規模が増加すれば、 複雑性
欠陥と規模の関係は相対的に線形になる。
有効ソースコード行数 欠陥数
※7章 p178 統合から出荷までに発見された欠陥数 より
うれしいね大きいと
5 . 1 . 1 . 2 モジュールの規模と
複雑性
モジュールあたり
200LOC ~ 750LOC におい
欠陥密度はもっと低くなる て
モジュール規模数 欠陥密度
ハットンとマライヤ、デントンが分析した結果
より
ちいさすぎも いいね~
複合結果密度モデル
By マライヤ と デント
ン
Dm (s)= a/s
Dm (s) :欠陥密度 ( 欠陥数 /LOC) 、 S: 規模、 a: 実証され た定数
モジュール関連の欠陥密度
モジュール規模が増加すると 欠陥密度が減少する
式にしたん だ…
命令関連の欠陥密度
Di (s)= b+c*s
Di(s) :欠陥密度 (欠陥数 /LOC) S:モジュール規模、
b:規模に依存しない一定のバグが存在 c :実証的に導出された相互作用係数
規模によらず 一定のバグが存在す
る
モジュール内の別コード行と
誤って相互作用する可能性がある 傾向があるん命令関連も
だ。
D (s)= Dm (s) + Di
(s) = a/s + b+c*s
総合的な欠陥密度
モジュール 関連
命令関連
足したんだ。
欠陥密度を最小にする
最適モジュール規模 S
minは、
0 = -as -2 +c
D (s)= a/s+b+c*s
微分
s min = a/c
プログラマーが短期記憶に
とどめることができるコード量になり、
直感的に妥当である
= 200 ~ 400LOC
みつかりやすいサイズだね
5 . 1 . 2 サイクロマティック
Cyclomatic Complexityy 、 CC by マッケー
複雑度
ブ
考え方:モジュール内の経路数が多いほど
複雑性は高くなる。
プログラム内の独立な経路を数え算出する
。
V (g)= e-n+2
グラフ循環数 V ( g )は、
グラフのノード (n) とエッジ (e) を
かぞえることにより計算
。CCっていうん だ
具体的は… 次ペー
ジ
V ( A )= 5-5+2=2
V ( B )= 6-5+2=3
V ( C )= 6-5+2=3
V (g)= e-n+2 よ り
複雑性が最も低い
A B C
e=5,n=5 e=6,n=5 e=6,n=5
n :ノー ド
e :エッ ジ
ノードとエッジを使った事
例
さらに、グラフ循環数 V ( g )は、
線形独立な経路を数えることで算出で
きる
V (g)=bd +1
bd は 2 分決定数。
n 通りの決定がある場合、
n-1 の二分決定として計算できる
別のやり方だ ね
具体的は… 次ペー
ジ
V ( A )= 1+1=2
A B C
V ( B )= 2+1=3
V ( C )= 2+1=3
n=2 n=3 n=3
複雑性が最も低い
V (g)=bd +1,n-1=bd
より
分岐: 2 分岐: 2
2分決定数を使った事例
CC 手続きの種類 リスク
1~4 単純な手続き 低い
5~10 適切に構造化され安定した手続き 低い 11~2
0 複雑な手続き 中程度
21~5
0 厄介なほど複雑な手続き 高い
>50 エラーを起こしやすく、極度に厄介 で
テストの難しい手続き
とても高い
表 サイクロマティック複雑度の推奨 値
サイクロマティック複雑度
Cyclomatic Complexity 、 CC
NA の内部テストでは、
20が欠陥の含まれやすさ (fault-prone) の閾値となっている サイクロマティック複雑度は、コード内にあるすべての経路を
実施するために必要な最小限のテスト数となっている。
CC が高いほど、コードの修正が困難、 別の欠陥を作り込む可能性が高い。
みつからない高いと… よ
CC 誤った修正の可能性 1~10 5%
20~30 20%
>50 40% 100近く 60%
表 サイクロマティック複雑度の推奨 値
サイクロマティック複雑度は。。。
1.詳細設計インスペクションを行う必要の 複雑なコード部分を大まかに特定する。ある
2.インスペクションを行う必要ないコード部分を 特定する。
3.保守の工数を見積もり、厄介なコードを特 定し、
テストの工数を見積もる。
… やめて!
サイクロマティック複雑度密度
( Cyclomatic Complexity Density 、 CCD)
CCD = CC/LOC
CCD は CC を LOC で割った値
「保守活動における生産性の統計的に顕著な単一の予想因
By ギルとケメラー 子」
... CCD が低いほど、
保守活動の生産性が高い。
カメラ…本質的サイクロマティック複雑度
( Essential Cyclomatic Complexity 、 ECC)
構成要素( if,case,while,repeat,sequence) を取り除いた後
コード部分のサイクロマティク複雑度である。 の
A B C
A 、 B の ECC は1、 C は、3となる
英会話…
5 . 1 . 3 ハルステッドのメト
リックス
ハルステッドのメトリックスは、
構造メトリックスの議論を始めるうえでは役に立つが、
あまり、実用的でなく、開発工数を予想する力がない。
長さ: N = N 1+ N2 語彙:n=n1+n2 大きさ: V ( log2(n)
困難さ: D= ( n1/2)/(N2/n2) 工数: E=D*V
記号の定義
n 1= 演算子の種類数 n2= オペランドの種類数 N 1= 演算子の総出現回数 N 2= オペランドの総出現回 数
コード内の演算子(オペレータ: 例 while,do,{},if,+
+ )と
演算対象(オペランド:例 変数、定数、文字列)の数
を測定
… 聞いたこと ないし
またね!