私は大学のソフトウェア品質保証コースで循環的複雑性を研究していますが、述語ステートメントまたはノードに複合条件がある場合にどのように機能するかを理解するのに苦労しています。循環的複雑性の複数の定義を見てきましたが、私のクラスで使用された主な定義は
V(G) = # of predicate nodes (with outdegree = 2) + 1
したがって、このようなプログラム グラフの場合、循環的複雑度は 2 になります。
V(G) = 2
また、次のように与えられる循環的複雑度の定義も見てきました。
V(G) = # edges - # nodes + 2
これは、上記のグラフでも機能します。ただし、述語ノードには複合条件があります。そして、自動短絡のための言語とシステムのセットアップを検討します。私には、左下のグラフをグラフに拡張する必要があるように思われます。以下のような場合、実際のソース コードでは if 文が 1 つしかない場合でも、サイクロマティック複雑度は 3 になりますか、それとも V(G) = 2 のままですか? .
循環的複雑度について私が目にする定義のほとんどは述語ノードについて話しているため、混乱を招きます。これが当てはまらない場合、ショートサーキット動作はパフォーマンスを向上させますが、実際に考慮した場合、サイクロマティックの複雑さを高めているようです。ソースコードが与えられた場合、循環的複雑度を計算する前に、すべての条件を左側のグラフのように独自のノードに分割する必要がありますか?