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 .