Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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, NIST235"kaynak kodu işlevindeki karar mantığı miktarını" ö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 Analiz > Hesaplamagiderek kod ölçümlerinizi hemen hesaplayın.
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:
Bir karar eklerseniz, döngüsel karmaşıklık değeri bir yukarı çıkar:
If deyimini, dört karar alınacak bir switch deyimi olarak değiştirdiğinizde, ilk ikisinden altıya geçer:
Şimdi daha büyük (varsayımsal) bir kod tabanına göz atalım.
Products_Related sınıfında detaya giderken öğelerin çoğunun bir değerine sahip olduğuna, ancak birkaçının beş karmaşıklığa sahip olduğuna dikkat edin. Tek başına, bu fark önemli olmayabilir, ancak diğer üyelerin çoğunun aynı sınıfta bir tane olduğu göz önüne alındığında, kesinlikle bu iki öğeye daha yakından bakmalı ve bunların içinde ne olduğunu görmelisiniz. Öğeye sağ tıklayıp bağlam menüsünden Kaynak Koduna Git seçerek daha yakından bakabilirsiniz.
Product.set(Product)'a bir daha yakından bakın.
Tüm if deyimleri göz önüne alındığında, döngüsel karmaşıklığın neden beş olduğunu görebilirsiniz. Bu noktada, bu sonucun 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 fikrine ilişkin temel bir gerçek 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 güvenilirlik riski oluşturur çünkü bunlar genellikle değiştirilmesi veya değiştirilmesi zor olan çok ters kodlardır." SATC
Kod Analizi
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:
Bakım alanında karmaşıklık için bir kural vardır.
Bu kural, döngüsel karmaşıklık 25'e ulaştığında bir uyarı vererek 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