Karmaşıklık ve erişilebilirlik arasında bir korelasyon var mı?


18

Son zamanlarda uni'de siklomatik karmaşıklık (McCabe) ve yazılımın erişilebilirliği üzerine çalışıyorum. Bugün hocam iki metrik arasında bir korelasyon olmadığını söyledi, ama durum gerçekten böyle mi?

Ben daha az karmaşık programlar (baktığımız az sayıda) ulaşılabilirlik açısından 'daha iyi' sonuçlar var gibi görünüyor, kesinlikle bazı korelasyon olacağını düşünüyorum .

Herkes iki metriğe birlikte bakmaya yönelik herhangi bir girişim biliyor mu ve eğer değilse, çok sayıda programın karmaşıklığı ve erişilebilirliği hakkında veri bulmak için iyi bir yer ne olabilir?

Yanıtlar:


2

Son zamanlarda uni'de siklomatik karmaşıklık (McCabe) ve yazılımın erişilebilirliği üzerine çalışıyorum. Bugün hocam iki metrik arasında bir korelasyon olmadığını söyledi, ama durum gerçekten böyle mi?

Aslında hem evet hem hayır.

Her şeyden önce, sadece size hatırlatmak gerekirse, siklomatik karmaşıklık için McCabe metriği, kaynak kodunuzu temel bloklar veya ifadeler düğümler ve aralarındaki geçişler olan yönlendirilmiş bir grafiğe soyutladığınız kontrol akışı grafiğinde hesaplanır (ya normal kontrol akışı aşağıya doğru) veya koşullandırılmış sıçramalar ve döngüler olması durumunda) kenarlar. Buradaki siklomatik karmaşıklık, kabaca (tüm programınızın izole edilmiş bir kod olmadığını, yani grafiğinizin bağlı olduğunu düşünüyorsanız), kenar sayısı ile düğüm sayısı arasındaki fark olarak görülebilir.

CC = E - N

Okunabilirlik problemi, grafik teorisinde şu şekilde ifade edilebilen yaygın bir sorundur: iki A ve B düğümü verildiğinde, A düğümünden erişilebilen B düğümüdür, yani A'dan başlayıp grafiğin kenarlarını doğru bir şekilde takip eden B düğümüne ulaşabilir yönde? Dolayısıyla, yine kod üzerinde değil, kontrol akış grafiğine uygulanabilir metriktir.

Bu sorunu kontrol akış grafiğine uygulamanın birkaç yolu vardır . Bunun bir yolu "değişken erişilebilirlik analizi" olarak adlandırılır, yani verilen değişken için analizin değerinin belirli bir program noktasında hala mevcut olup olmadığını belirlediği anlamına gelir (bu tekniğe yazılım analizinde dilimleme de denir). Ayrıca, çok iş parçacıklı uygulamalar için yalnızca bu terimi (ve genellikle erişilebilirlik sorununu) kullanan bazı makaleler buldum .

Temel olarak CC ve ulaşılabilirlik arasında bir tür korelasyon görülebilir: CC'nin artmasıyla kenarların düğümler üzerindeki oranı da artar ve kenarın yönünün de önemli olduğu yönlendirilmiş bir grafik durumunda bile, bu artışın kenar sayısı en sonunda grafikteki kullanılabilir yolların artmasına ve dolayısıyla düğümler arasındaki doğrudan veya dolaylı bağlantılarla ulaşılabilirliğin artmasına yol açar. Yani, cevap burada Evet .

Öte yandan, çok iş parçacıklı ortamdaki erişilebilirlik kavramı, süpergraf denilen analizi gerektirir - ve bu çok önemsiz değildir. CC'nin artması (burada " senkronizasyon karmaşıklığı " olarak adlandırılır ), yazılımda daha fazla kilitlenme olasılığına yol açabilir ve böylece belirli düğümlerin / kod parçalarının erişilebilirliğini azaltabilir. Dolayısıyla "Hayır" burada da geçerli bir cevaptır .


1

Ben ulaşılabilirlik aşina değilim, ama hiç yürütülemez kod yolları bir ölçüsü ise, siklomatik karmaşıklık bunun bir üst sınırı tür olmalıdır.


0

Bu konuda bazı istatistikler olabilir ama bir korelasyon olmadığını söyleyebilirim çünkü biri diğerine bağlı değildir ve ayrıca bunu ortadan kaldıracak bir yazılım sisteminin tasarımında seçim vardır.

Gerçek dünya verileri açısından, güçlü bir korelasyon olabilir , ancak bu, bu korelasyonu ortadan kaldırmayan kötü tasarlanmış yazılım sistemlerinden kaynaklanabilir. Grafik teorisi hakkında bilgi eksikliği nedeniyle kazara bir korelasyon olabilir.


1
Biri diğerine bağlı olarak korelasyon değil nedenselliktir.
JeffO
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.