Share via


Kod ölçümleri - Döngüsel karmaşıklık

Kod ölçümleriyle çalışırken en az anlaşılan öğelerden biri döngüsel karmaşıklık gibi görünüyor. Temelde, döngüsel karmaşıklıkta, yüksek sayılar kötüdür ve daha düşük sayılar iyidir. Belirli bir kodun test etmek, korumak veya sorun gidermek için ne kadar zor olabileceğini anlamak ve kodun hata üretme olasılığının göstergesini almak için döngüsel karmaşıklığı kullanabilirsiniz. Yüksek düzeyde, kaynak kodunuzda alınan karar sayısını sayarak döngüsel karmaşıklığın değerini belirleriz. Bu makalede, kavramı hızlı bir şekilde anlamak için basit bir döngüsel karmaşıklık örneğiyle başlayacak, ardından gerçek kullanım ve önerilen sınırlar hakkında bazı ek bilgilere göz atacaksınız. Son olarak, bu konuyu daha derine inmek için kullanılabilecek alıntıların bir bölümü vardır.

Örnek

Döngüsel karmaşıklık, "kaynak kodu işlevindeki karar mantığı miktarını" NIST235 ölçmek olarak tanımlanır. Basitçe söylemek gerekirse, kodda ne kadar çok karar alınması gerekirse, o kadar karmaşık olur.

Şimdi nasıl çalıştığını görelim. Yeni bir konsol uygulaması oluşturun ve Çözüm için Kod Ölçümlerini Hesapla'ya > giderek kod ölçümlerinizi hemen hesaplayın.

Döngüsel karmaşıklık örneği 1

Siklomatik karmaşıklığın 2 (mümkün olan en düşük değer) olduğuna dikkat edin. Karar dışı kod eklerseniz karmaşıklığın değişmediğini fark edin:

Döngüsel karmaşıklık örneği 2

Bir karar eklerseniz, döngüsel karmaşıklık değeri 1'e kadar çıkar:

Döngüsel karmaşıklık örneği 3

If deyimini, 4 karar alınacak bir switch deyimi olarak değiştirdiğinizde, özgün 2'den 6'ya geçer:

Döngüsel karmaşıklık örneği 4

Şimdi daha büyük (varsayımsal) bir kod tabanına göz atalım.

Döngüsel karmaşıklık örneği 5

Products_Related sınıfında detaya giderken öğelerin çoğunun 1 değerine sahip olduğuna, ancak birkaçının 5 karmaşıklığa sahip olduğuna dikkat edin. Tek başına, bu büyük bir sorun olmayabilir, ancak diğer üyelerin çoğunun aynı sınıfta 1'i olduğu göz önüne alındığında, kesinlikle bu iki öğeye daha yakından bakmalı ve bunların içinde ne olduğuna bakmalısınız. Öğeye sağ tıklayıp bağlam menüsünden Kaynak Koduna Git'i seçerek bunu yapabilirsiniz. daha yakından bakın Product.set(Product):

Döngüsel karmaşıklık örneği 6

Tüm if deyimleri göz önüne alındığında, döngüsel karmaşıklığın neden 5 olduğunu görebilirsiniz. Bu noktada, bunun kabul edilebilir bir karmaşıklık düzeyi olduğuna karar verebilir veya karmaşıklığı azaltmak için yeniden düzenlemeniz gerekebilir.

Sihirli Sayı

Bu sektördeki birçok ölçümde olduğu gibi, tüm kuruluşlara uyan tam bir döngüsel karmaşıklık sınırı yoktur. Ancak NIST235 10 sınırının iyi bir başlangıç noktası olduğunu gösterir:

Ancak sınır olarak kullanılacak kesin sayı biraz tartışmalı olmaya devam ediyor. McCabe tarafından önerilen orijinal 10 sınırı önemli destekleyici kanıtlara sahiptir, ancak 15'e kadar olan sınırlar da başarıyla kullanılmıştır. 10'un üzerindeki sınırlar, deneyimli personel, resmi tasarım, modern bir programlama dili, yapılandırılmış programlama, kod kılavuzu ve kapsamlı bir test planı gibi tipik projelere göre çeşitli operasyonel avantajları olan projeler için ayrılmalıdır. Başka bir deyişle, bir kuruluş 10'dan büyük bir karmaşıklık sınırı seçebilir, ancak yalnızca ne yaptığını bildiğinden eminse ve daha karmaşık modüllerin gerektirdiği ek test çalışmalarını ayırmaya istekliyse." NIST235

Döngüsel Karmaşıklık ve Çizgi Numaraları

Kod satırlarının sayısına tek başına bakmak, en iyi durumda kod kalitesinin çok geniş bir tahmincisidir. Bir işlevde ne kadar çok kod satırı olursa hata alma olasılığının da o kadar yüksek olduğu fikrinin temel bir gerçeği vardır. Ancak, döngüsel karmaşıklığı kod satırlarıyla birleştirdiğinizde, hata olasılığına ilişkin çok daha net bir resme sahip olursunuz.

NASA'daki Yazılım Güvencesi Teknoloji Merkezi (SATC) tarafından açıklandığı gibi:

"SATC, en etkili değerlendirmenin boyut ve (Siklomatik) karmaşıklık birleşimi olduğunu buldu. Hem yüksek karmaşıklık hem de büyük boyutlu modüller en düşük güvenilirlik düzeyine sahip olma eğilimindedir. Düşük boyuta ve yüksek karmaşıklık düzeyine sahip modüller, değiştirilmesi veya değiştirilmesi zor olan çok ters kod olma eğiliminde olduklarından güvenilirlik riski de oluşturur." SATC

Kod Çözümleme

Kod analizi, Bakım kuralları kategorisini içerir. Daha fazla bilgi için bkz . Bakım kuralları. Eski kod analizi kullanılırken Genişletilmiş Tasarım Kılavuzu kural kümesi bir bakım alanı içerir:

Döngüsel karmaşıklık tasarım yönergeleri kural kümeleri

Bakım alanının içinde karmaşıklık için bir kural vardır:

Döngüsel karmaşıklık bakım kuralı

Bu kural, döngüsel karmaşıklık 25'e ulaştığında bir uyarı ve dolayısıyla aşırı karmaşıklığı önlemenize yardımcı olabilir. Kural hakkında daha fazla bilgi edinmek için bkz. CA1502

Hepsini bir araya getirmek

Sonuç olarak, karmaşıklık sayısının yüksek olması, bakım ve sorun giderme süresinin artmasıyla hata olasılığının daha yüksek olması anlamına gelir. Karmaşıklığı yüksek olan işlevlere daha yakından bakın ve daha az karmaşık hale getirmek için yeniden düzenlenmesi gerekip gerekmediğine karar verin.

Alıntı

MCCABE5

McCabe, T. and A. Watson (1994), Software Complexity (CrossTalk: The Journal of Defense Software Engineering).

NIST235

Watson, A. H., & McCabe, T. J. (1996). Yapılandırılmış Test: Siklomatik Karmaşıklık Ölçümünü Kullanan Bir Test Metodolojisi (NIST Özel Yayını 500-235). McCabe Software web sitesinden 14 Mayıs 2011'de alındı: http://www.mccabe.com/pdf/mccabe-nist235r.pdf

SATC

Rosenberg, L., Hammer, T., Shaw, J. (1998). Yazılım Ölçümleri ve Güvenilirliği (Proceedings of IEEE International Symposium on Software Reliability Engineering). 14 Mayıs 2011'de Penn State University web sitesinden alındı: https://citeseerx.ist.psu.edu/pdf/31e3f5732a7af3aecd364b6cc2a85d9495b5c159