以前、Cyclomatic複雑度によるソースコードの品質評価についてご紹介しました。
Cyclomatic複雑度についてはご存じの方も多く、利用機会も多いメトリクスかと思います。
では、同じCyclomatic複雑度「6」を持つ、以下の2つの関数は、どちらがより複雑でしょうか。
今日は、これらを評価するためのメトリクスを紹介したいと思います。
先ほどの2つの関数の構造を見ていくと、左側の関数にはネストされた条件分岐が含まれています。対して、右側の関数は条件分岐が直列に並んでいます。
直感的には、左側の関数の方がより複雑そうですが、Cyclomatic複雑度の値からは判断することができません。
ここで、Essential複雑度というメトリクスを使い、2つの関数の「本質的な複雑度」を計測してみます。
Essential複雑度では、以下の様な、単純な条件分岐構造を畳み込んだ構造を作成します。
以下の様に畳み込んでいきます。
最終的には以下の様になります。
この状態でCyclomatic複雑度を計測したものが「Essential複雑度」になり、それぞれ以下の値となり、左側の関数がより複雑度が高いことが示されています。
このように、Essential複雑度により、Cyclomatic複雑度だけでは測定できない、本質的な複雑度を、定量的に測定することができます。