Cyclomatic Complexity

Bir programın karmaşıklığını gösteren bir yazılım metriği.

McCabe, 1976

Tanım

Cyclomatic complexity = Karar noktası sayısı + 1

  • Bir programın karmaşıklığını gösteren bir yazılım metriği.

  • Bir metottaki kararların (dalların) ve bunlara bağlı olası yolların sayısı.

  • Her if, switch bloğu 1 sayılır. Toplam sayı ne kadar fazla olursa, kodun karmaşıklığı açısından o kadar kötüdür.

  • Bakım yapılabilirlik endeksini (Maintainability Index) ölçmek açısından yararlı bir metriktir.

Sorun

  • Bir metotta ne kadar fazla dal varsa, işlevin zihinsel modelini oluşturmak o kadar zor olur. (İnsan aklı belli bir anda belirli sayıda konuya odaklanabilir → 7 +- 2)

  • Bir metodun testlerinde kapsamı tamamlamak zorlaşır ve daha uzun sürer.

  • Hata oluşma (mantıksal kurguda) olasılığı artar.

Yarar

  • Bir metodun kaç tane birim testi ile %100 kapsama sağlanarak test edilebileceğini gösterir.

Tespit Etmek

  • Indent şelalerine dikkat! Bir metodun gövdesine göz gezdirildiğinde, içeri doğru giden birçok kod bloğu görünüyorsa metodun ne yaptığına bakmadan da karmaşıklık sorunu olduğu anlaşılabilir.

  • Bazen metotlardaki indent sayısını arttıran koşullu ifadeler doğrudan görünmeyebilir, ancak masum gibi görünen ancak sinsi private metot çağrılarıyla uzayıp giden bir akışın da yüksek karmaşıklığa sahip olduğu tespit edilebilir.

  • Statik kod analiz araçlarıyla uygulamayı oluşturan bileşenlerin Cyclomatic Complexity sayısı ölçülebilir.

Düşük CC

Kod kalitesini arttırır. → Okunabilirlik (Readability) → Bakım yapılabilirlik (Maintainability) → Taşınabilirlik (Portability)

Yüksek CC

→ Az cohesion (uyumluluk) olduğunu gösterir. (S.R.P ihlali)

Last updated