Cognitive Complexity (Bilişsel Karmaşıklık)

cognitive-complexity-bilissel-karmasiklik (büyük resim için tıklayın)

Cognitive Complexity (Bilişsel Karmaşıklık), bir kod bloğunun veya bir fonksiyonun anlaşılabilirliğini ölçen bir metrik olup, özellikle bir kişinin bu kodu okurken ve anlamaya çalışırken ne kadar zihinsel çaba harcadığını gösterir. Bu metrik, klasik Cyclomatic Complexity'nin bir uzantısıdır, ancak kodun okunabilirliğine daha fazla odaklanır.

Cognitive Complexity Nedir?

Hedefi: Kodun ne kadar "zor" olduğunu ölçmek ve daha okunabilir, basit kod yazmayı teşvik etmektir.

Temel Faktörler:

Kontrol Yapıları: if, else, for, while, switch gibi kontrol akış yapılarını artırır.

Dallanma ve Döngüler: Kodda dallanmalar ve iç içe döngüler arttıkça karmaşıklık yükselir.

Gömülü Yapılar: Bir yapı içinde başka bir kontrol yapısının bulunması (örneğin, iç içe if blokları) karmaşıklığı artırır.

Koşulların Birleştirilmesi: Birden fazla koşulun tek satırda kullanılması (if (a && b || c)) okunabilirliği düşürür.

Cognitive Complexity Limiti Ne Olmalıdır?

Genel Tavsiyeler:

Fonksiyonlar için 10 veya daha az.

Kodun tümü için 15-20 arasında tutulması önerilir.

Karmaşık işlevler gerekliyse bile, mümkün olduğunca 50'nin altında olmalıdır.

Daha yüksek değerler, kodun anlaşılmasını ve bakımını zorlaştırır.

Cognitive Complexity'yi Düşürmek İçin Neler Yapılabilir?

Kodunuzu Modülerleştirin:

Büyük fonksiyonları daha küçük, anlamlı parçalara bölün.

Her fonksiyon bir işi yapmalı ve bu işi iyi yapmalı (Single Responsibility Principle).

İç İçe Yapıları Azaltın:

İç içe if-else ve döngüleri en aza indirin.

Örneğin, iç içe döngüler yerine bir kontrol fonksiyonu kullanabilirsiniz.

Koşulları Sadeleştirin:

Birden fazla koşulu ayrı satırlara bölün veya yardımcı değişkenler kullanın.

Erken Dönüş (Early Return) Kullanın:

Karmaşık if-else zincirleri yerine, koşulları kontrol ettikten sonra erken çıkış yapın.

Daha Az Sayıda Mantık Kullanımı:

Tek bir if içinde çok fazla && ve || kullanmamaya çalışın.

Karmaşık Döngüleri Basitleştirin:

Döngü içindeki kodu ayrı bir fonksiyona taşıyın.

Kod İnceleme ve Refaktör:

Karmaşıklığı yüksek olan kodları düzenli olarak gözden geçirin ve refaktör yapın.

Testler ve kod incelemeleri sırasında bilişsel karmaşıklığa dikkat edin.

Sonuç

Bilişsel karmaşıklık, kodun okunabilirliğini ve sürdürülebilirliğini etkileyen önemli bir metriktir. Düşük karmaşıklık, ekiplerin kodu daha kolay anlamasına, hataları daha hızlı bulmasına ve kodun uzun vadeli bakımını kolaylaştırmasına yardımcı olur. Kodda modülerlik, sadeleştirme ve erken dönüş gibi iyi pratikler uygulandığında bilişsel karmaşıklık düşürülebilir.

*Gönderi ve görsel chatgpt ile oluşturulmuştur.

omurs

Ö S, 30 Ağustos 2018 Perşembe 15:30 tarihinde kayıt oldu

Etiketler

Beğeni


Yıllara Göre Gönderiler








LombokLoglamaB2C (Business-to-Consumer)B2B (Business-to-Business)İçerik Yönetim Sistemi - CMS (Content Management System)Pagination (Sayfalama)Sanal Özel Ağ - VPN (Virtual Private Network)Cronjob (Zamanlanmış Görevler)Printer-YazıcıJava'daki İlkel Veri Tipleri ve Alabilecekleri DeğerlerBit & Byte ve Hafıza Boyutlarındaki Ölçüm BirimleriSanallaştırma (Virtualization)DNS KayıtlarıE-Fatura ve E-ArşivYazılım Lisans TürleriAudit (Denetim) Açık Kaynak (Open Source)Monitoring (İzleme)Sitemap & Robots.txtKilometretaşı (Milestone)BSMV (Banka ve Sigorta Muameleleri Vergisi)KKDF (Kaynak Kullanımı Destekleme Fonu)Siber Pazartesi (Cyber Monday)Black Friday (Kara Cuma)Hotlink.htaccessCryptoLockerMalwareTrojanWormDependency (Yazılım Geliştirme Sürecinde Paket Bağımlılığı)Configuration (Yazılım Geliştirme Sürecinde Yapılandırma)Yahoo ve Yahoo'nun Başarısızlık NedenleriArchiving (Yazılım Geliştirme Sürecinde Arşivleme)Görsel Dosya Türleri (Image Types)ReleaseVersioning & Tagging (Versiyonlama ve Etiketleme)BuildJob (Yazılım Geliştirme Sürecinde Görevler)SonarQubeCDATA (Character Data)Alan Adı Uzantıları (Domain Name Extensions)Regresyon Kara Kutu (Black-Box) TestBeyaz Kutu (White-box) TestGri Kutu (Grey-box) TestYazılım Geliştirme Sürecindeki Temel Test TürleriKod gözden geçirme (Code Review)Birim Testi (Unit Testing)Yazılım Sürecinde EntegrasyonJAR & WAREager & Lazy Fetch TypeMaskelemeKPI (Key Performance Indicator)KII (Key Impact Indicator)Projenin JAR Dosyasını Oluştur - JAR PathSunucu için Linux dağıtım SeçimiKonyteynerler (container technologies)Runtime & Compile Time (Çalışma ve Derleme Zamanı)@Anotasyonlar (@Annotations)