Karmaşıklığı ölçmek için en yaygın metrikler (veya karmaşıklığın tersi olarak sadeliği alırsanız basitlik), McCabe'nin Siklomatik Karmaşıklığı ve Halstead Karmaşıklığı Metrikleridir .
Siklomatik karmaşıklık, bir sınıfta da hesaplanabilmesine rağmen, genellikle bir yöntem veya işlev olan belirli bir birimdeki farklı yolların sayısını ölçer. Yolların sayısı arttıkça, çalışma belleği kavramıyla ilgili olan belirli bir modülden veri akışını hatırlamak daha da zorlaşır . Yüksek siklomatik karmaşıklık, bir modülü test etme yeteneğinde zorluk olduğunu gösterir - sistemdeki çeşitli yolları kapsamak için daha fazla test durumu gerekir. Yüksek siklomatik karmaşıklığı yüksek kusur oranlarıyla ilişkilendiren çalışmalar da vardır. Tipik olarak, 10'luk bir siklomatik karmaşıklık, bir birimin gözden geçirilmesi ve muhtemelen yeniden düzenlenmesi gerektiğini gösterir.
Halstead karmaşıklığı ölçümleri, bir kod parçasının hacmini, zorluğunu ve çabasını hesaplamak için toplam ve farklı operatörlerin ve işlenenlerin girdilerini kullanır. (Benzersiz operatör sayısı / 2) * (toplam işlenen sayısı / benzersiz işlenen sayısı) olan zorluk, sistemi öğrenme veya kod incelemesi yapma gibi görevlerin kodunu okuma ve anlama yeteneğine bağlıdır. Yine, bunu bir sistem düzeyinde, bir sınıf düzeyinde veya bir yöntem / fonksiyon düzeyinde sayabilirsiniz. Bu ölçümlerin burada ve burada hesaplanmasıyla ilgili birkaç gönderi var .
Sadece kod satırlarını saymak size karmaşıklık fikri de verebilir. Daha fazla kod satırı, bir modülde okunacak ve anlaşılacak daha çok şey olduğu anlamına gelir. Bunu bağımsız bir ölçüm olarak kullanmakta tereddüt ederdim. Bunun yerine, hata yoğunluğunu elde etmek için belirli bir modüldeki hata sayısı gibi diğer ölçümlerle birlikte kullanırım. Yüksek hata yoğunluğu, karmaşık koddan kaynaklanabilecek veya kaynaklanmayabilecek test yazma ve kod gözden geçirme işlemlerindeki sorunları gösterebilir.
Fan girişi ve fan çıkışı, veri akışıyla ilgili diğer iki metriktir. Tanımlandığı gibi burada , fan parametreleri okumak, denilen prosedürler toplamıdır ve küresel değişkenler okumak ve fan dışarı verilen bir prosedür çağrı prosedürleri toplamıdır, yazılı parametreler (referans olarak geçirilen, dış kullanıcılara maruz), ve global değişkenlere yazılmıştır. Yine, yüksek fan girişi ve fan çıkışı, anlaşılması zor olabilecek bir modülün göstergesi olabilir.
Belirli paradigmalarda, yararlı olan başka önlemler veya metrikler de olabilir. Örneğin, nesne yönelimli dünyada, bir sistemin ne kadar basit veya karmaşık olduğunu değerlendirmek için eşleşmenin (düşük arzu), bütünlüğün (yüksek arzu) ve kalıtım derinliğinin (düşük arzu) izlenmesi kullanılabilir.
Tabii ki, birçok önlemin ve metriklerin sadece göstergeler olduğunu anlamak önemlidir. Basitliği artırmak için yeniden düzenleme yapmanın gerekli olup olmadığını veya bunu yapmaya çabalamaya değip değmeyeceğini belirlemek için kararınızı kullanmanız gerekir. Ölçümleri yapabilir, metrikleri hesaplayabilir ve kodunuzu öğrenebilirsiniz, ancak sisteminizi sayılara göre tasarlamak istemezsiniz. Sonuçta, mantıklı olanı yapın.