本質的複雑度の評価

以前、Cyclomatic複雑度によるソースコードの品質評価についてご紹介しました。

Cyclomatic複雑度についてはご存じの方も多く、利用機会も多いメトリクスかと思います。

では、同じCyclomatic複雑度「6」を持つ、以下の2つの関数は、どちらがより複雑でしょうか。

今日は、これらを評価するためのメトリクスを紹介したいと思います。

先ほどの2つの関数の構造を見ていくと、左側の関数にはネストされた条件分岐が含まれています。対して、右側の関数は条件分岐が直列に並んでいます。

直感的には、左側の関数の方がより複雑そうですが、Cyclomatic複雑度の値からは判断することができません。

ここで、Essential複雑度というメトリクスを使い、2つの関数の「本質的な複雑度」を計測してみます。

Essential複雑度では、以下の様な、単純な条件分岐構造を畳み込んだ構造を作成します。

以下の様に畳み込んでいきます。

最終的には以下の様になります。

この状態でCyclomatic複雑度を計測したものが「Essential複雑度」になり、それぞれ以下の値となり、左側の関数がより複雑度が高いことが示されています。

このように、Essential複雑度により、Cyclomatic複雑度だけでは測定できない、本質的な複雑度を、定量的に測定することができます。

タイトルとURLをコピーしました
Close Bitnami banner
Bitnami