Bu konuda boş yere yazdığım bazı açıklamalar ...
Özellikle, M = E - N + 2P'nin Wikipedia denklemi için
Bu denklem çok yanlış .
Bir nedenden ötürü, McCabe gerçekten orijinal belgesinde ("Bir Karmaşıklık Ölçümü", IEEE Yazılım Mühendisliği İşlemleri, Vo .. SE-2, No.4, Aralık 1976), ancak haklı göstermeden ve gerçekten doğru olduktan sonra ilk sayfadaki formül
v (G) = e - v + p
(Burada formül öğeleri yeniden etiketlendi)
McCabe özellikle C.Berge, Graphs and Hypergraphs (aşağıda G&HG olarak kısaltılmıştır) kitabına referansta bulunmaktadır . Doğrudan bu kitaptan :
Tanım (sayfa 27, G&HG'nin alt kısmı):
Bir (yönlendirilmemiş) grafik G'nin (birkaç bağlantısı kesilmiş bileşene sahip olabilen) siklomatik sayısı v (G) şu şekilde tanımlanır:
v (G) = e - v + p
burada e = kenar sayısı, v = köşe sayısı, p = bağlı bileşen sayısı
Teorem (sayfa 29 G&HG'nin üstü) (McCabe tarafından kullanılmaz):
Bir grafiğin G siklomatik sayısı v (G), maksimum bağımsız döngü sayısına eşittir
Bir döngü , aynı tepe noktasında başlayan ve biten bir köşe dizisidir ve dizideki birbirini takip eden her iki köşe, grafikte birbirine bitişiktir.
Sezgisel olarak, bir döngü grubu olan , bağımsız döngü hiçbiri yürür atma diğerlerinden inşa edilmesi mümkün bulunmaktadır.
Teorem (G&HG'nin sayfa 29'u) (McCabe tarafından kullanıldığı gibi):
Güçlü bir şekilde bağlı G grafiğinde, siklomatik sayı maksimum doğrusal olarak bağımsız devre sayısına eşittir.
Bir devre izin köşe ve kenarlar herhangi bir tekrarlı bir döngüdür.
Her tepe noktasına her bir tepe noktasından belirlenen yönden kenarlardan geçerek ulaşılabiliyorsa, yönlendirilmiş bir grafiğin güçlü bir şekilde bağlandığı söylenir .
Not biz geçirilen burada o yön verilmemiş grafiklerle için kuvvetle bağlı grafiklerde (yönlendirilir ... Berge bu tamamen açık yapmaz)
McCabe şimdi bir "McCabe Siklomatik Karmaşıklık Numarası" (CCN) hesaplamak için basit bir yol elde etmek için yukarıdaki teoremi uygulamaktadır:
Bir prosedürün “atlama topolojisini” temsil eden yönlendirilmiş bir grafik verildiğinde (talimat akış grafiği), benzersiz giriş noktasını temsil eden belirlenmiş bir tepe noktası ve benzersiz çıkış noktasını temsil eden belirlenmiş bir tepe noktası (çıkış noktası tepe noktasının “yapılandırılması gerekebilir” birden çok döndürme durumunda ekleyerek), çıkış noktası tepe noktasından giriş noktası tepe noktasına yönlendirilmiş bir kenar ekleyerek, böylece giriş noktası tepe noktasını başka bir tepe noktasından erişilebilir hale getirerek güçlü bir şekilde bağlı bir grafik oluşturun.
McCabe şimdi, değiştirilmiş talimat akış grafiğinin siklomatik sayısının "sezgisel 'minimum yol sayısı'" anlayışımıza uyduğunu (ve kafa karıştırıcı diyebilirim) ve bu sayıyı karmaşıklık ölçüsü olarak kullanacağız.
Harika, yani:
Değiştirilmiş talimat akış grafiğinin siklomatik karmaşıklık sayısı, yönlendirilmemiş grafikteki "en küçük" devreler sayılarak belirlenebilir. Bunun insan veya makine tarafından yapılması özellikle zor değildir, ancak yukarıdaki teoremi uygulamak bize bunu belirlemenin daha kolay bir yolunu verir:
v (G) = e - v + p
kenarların yönlülüğünü göz ardı ederse.
Her durumda, sadece tek bir prosedür düşünüyoruz, bu yüzden tüm grafikte sadece bir bağlı bileşen var ve bu yüzden:
v (G) = e - v + 1.
Eklenen "girişten çıkış" kenarı olmadan orijinal grafiği dikkate alırsanız, basitçe elde edilir:
ṽ (G) = ẽ - v + 2
ẽ = e - 1 olarak
Makalesinde McCabe'nin örneğini kullanarak açıklayalım:
İşte burada:
- e = 10
- v = 6
- p = 1 (bir bileşen)
- v (G) = 5 (açıkça 5 döngüyü sayıyoruz)
Siklomatik sayının formülü şöyle diyor:
v (G) = e - v + p
5 = 10-6 + 1 verir ve bu yüzden doğru!
Makalesinde belirtildiği gibi "McCabe siklomatik karmaşıklık numarası"
5 = 9 - 6 + 2 (makalede nasıl yapılacağı konusunda başka açıklama yapılmamıştır)
ki bu doğru olur (v (G) verir) ama yanlış nedenlerle, yani kullanırız:
ṽ (G) = ẽ - v + 2
ve böylece ṽ (G) = v (G) ... vay!
Peki bu önlem iyi mi?
İki kelimeyle: Pek değil
- Özellikle istisna işleme ve özyineleme resme girerse, bir prosedürün "talimat akış grafiği" nin nasıl oluşturulacağı tam olarak açık değildir. McCabe'nin fikrini , özyineleme, istisna ve basit bir yürütme yapısı olmayan bir dil olan FORTRAN 66'da yazılan koda uyguladığını unutmayın .
- Kararlı bir prosedür ve bir döngü içeren bir prosedürün aynı CCN'yi vermesi iyi bir işaret değildir.