Sikilomatik Karmaşıklık
Cyclomatic Complexity Metric · Ayrıca şöyle bilinir: CC, cyclomatic number, McCabe complexity
Sikilomatik Karmaşıklık (CC), Thomas McCabe tarafından 1976'da tanıtılmış olup, bir fonksiyonun kontrol akış grafiğindeki doğrusal olarak bağımsız yolların sayısını ölçen nicel bir metriktir. Yüksek sikilomatik karmaşıklığa sahip bir fonksiyonun anlaşılması, test edilmesi ve bakımı daha zordur; McCabe, sürdürülebilirlik için karmaşıklık sınırı olarak 10 eşiğini savunmuştur.
Tam yöntemi oku
Bu bölümü okumak için ücretsiz hesapla giriş yapın.
Yöntem haritası
İlişkili yöntemlerin komşuluğu — keşfetmek için bir düğüm seçin.
Ne zaman kullanılır
Yeniden düzenleme gerektiren fonksiyonları belirlemek, test çabasını tahmin etmek ve kalite kapıları belirlemek için sikilomatik karmaşıklığı kullanın. Yüksek kapsama alanının zorunlu olduğu güvenlik açısından kritik sistemler (havacılık, tıp) için esastır. Bütünsel kalite değerlendirmesi için diğer metriklerle (kod tekrarı, boyut) birleştirin. Minimum dallanmaya sahip veri işleme kodu için daha az kullanışlıdır.
Güçlü yönler & sınırlılıklar
- Hesaplanması basittir: araçlar (ESLint, SonarQube) tüm diller için otomatik olarak hesaplar
- Test çabasıyla güçlü bir şekilde ilişkilidir: yıllarca süren kullanımla ampirik olarak doğrulanmıştır
- Uygulanabilir: eşiği aşmak, yeniden düzenleme ihtiyacını açıkça gösterir (daha küçük fonksiyonlara ayırın)
- Dil bağımsızdır: aynı metrik C, Python, Java, JavaScript vb. için geçerlidir
- Yalnızca dallanmayı ölçer, veri akışı karmaşıklığını göz ardı eder (karmaşık değişmezlere sahip iç içe döngüler hala düşük CC'ye sahiptir)
- Eşit ve iç içe koşulları ayırt etmez: seri if ifadeleri iç içe if-else ile aynı CC'ye sahiptir
- Zımni karmaşıklığa sahip diller için yanıltıcıdır (kontrol akışında gösterilmeyen istisnalar, geri çağrılar, eşzamanlılık)
- 10 eşiği keyfidir; McCabe'ın orijinal gerekçesi (bilişsel sınırlar) tartışmalıdır
SSS
Sikilomatik karmaşıklık, karar noktalarının sayısıyla aynı mıdır?
Neredeyse: CC = (karar noktaları) + 1. Dalı olmayan bir fonksiyon (CC = 1) 0 karar noktasına sahiptir. Her if, while, case bir karar noktası ekler; mantıksal operatörler (&& ve ||) araçların onları nasıl saydığına bağlı olarak noktalar ekleyebilir.
Bir fonksiyonda sikilomatik karmaşıklığı nasıl azaltırım?
Dalları yardımcı fonksiyonlara ayırın: çıkarılan her fonksiyon CC = 1 ile başlar. Durum ifadelerini değiştirmek için polimorfizm kullanın (strateji deseni). Yuvalamayı düzleştirmek için koruyucu ifadeler (erken dönüşler) kullanın. Koşulları && ve || ile dikkatlice birleştirin.
Lambda'lar ve kısa geri çağrılardaki CC konusunda endişelenmeli miyim?
O kadar da değil: lambda'lar tipik olarak basittir. 20 satırdan uzun fonksiyonlara veya ana mantık yollarına odaklanın. Araçlar geri çağrılar için yüksek CC bildirebilir, ancak bunlar genellikle test çabası için darboğaz değildir.
CC, test çabasıyla (test senaryosu sayısı) nasıl ilişkilidir?
CC, %100 yol kapsamı için gereken minimum test sayısıdır. CC = 4 en az 4 test gerektirir. Pratikte, sınır değer analizi ve hata durumları daha fazlasını ekler, ancak CC gerekli testler için bir alt sınır sağlar.
Kaynaklar
- McCabe, T. J. (1976). A complexity measure. IEEE Transactions on Software Engineering, SE-2(4), 308–320. DOI: 10.1109/TSE.1976.233837 ↗
- Campbell, G. H. (1986). Defining a good metric, a software testing perspective. ASQ Software Quality Conference. link ↗
- Nagy, C., & Kriebel, K. (2001). Achieving optimal complexity and reliability. SAMS Publishing. ISBN: 0672322285
Bu sayfayı kaynak gösterin
ScholarGate. (2026, June 3). Cyclomatic Complexity Metric. ScholarGate. https://scholargate.app/tr/numerical-methods/cyclomatic-complexity
Hangi yöntem?
Bu yöntemi en yakın akrabalarının yanına koyup yan yana okuyun — kütüphane kitapları masaya serer; seçim sizindir.
- Halstead KarmaşıklığıSayısal yöntemler↔ karşılaştır