www.fatihkabakci.com

Personal Website and Computer Science TUR EN

McCabe CYCLOMATIC COMPLEXITY

Last update: 5/21/2015 1:30:00 AM

Yazan:Fatih KABAKCI

Fonksiyonel-yazılım karmaşıklık ölçüm yöntemlerinden bir diğeri olan McCabe Çevrimsel Karmaşıklığı(McCabe Cyclomatic Complexity), test edilmesi güç olan ve güvenilir olmayan program modüllerini ifşa etmeyi amaçlar. Kısaca CC olarak adlandırılan bu yöntem, temel olarak kontrol akış grafı(control flow graph) kullanarak ilgili modülün karmaşıklığını ölçmeye çalışır. Bunu graf üzerinde bulunan düğüm(node) ve ayrıtların(edge) varlığına göre yapar. Graf üzerindeki her bir düğüm, program kodu içerisinde bulunan mantıksal(logic) ifadelere göre oluşturulur. Bu ifadeler if, switch, while, for, goto gibi ifadelerdir. Her bir lojik deyimi kontrol grafı üzerinde düğümlere dönüştürülerek, deyimler ayrıtlar ile birbirlerine bağlanır. Program kodundaki her bir dallanma kontrol grafı üzerindeki ayrıt yönünü belirler. Tamamlanan graf üzerinde toplam ayrıt ve düğüm sayıları hesaplanarak aşağıda açıklanan bağıntı işletilir.

Çevrimsel karmaşıklık(cyclomatic complexity) modeli aşağıdaki bağıntıya göre bir program kodunun hataya ne derece eğimli olduğunu gösteren karmaşıklık değerini hesaplar.

V(G) = E - N + 2 * P (CC - Cyclomatic Complexity) 

E: Toplam ayrıt sayısı (number of edge)
N: Toplam düğüm sayısı (number of node)
P: Modül sayısı (number of module, equals to 1 as initial)

Yukarıdaki bağıntı bir program kodunun hataya ne kadar eğilimli olduğunu gösterir. Hata eğilimli olması kodun riskli olduğu anlamına gelir. Bağıntıdan elde edilen değer, Yazılım Mühendisliği Enstitüsü (Software Engineering Institute - SEI) tarafından kabul edilen risk değerlendirmesi ile ilişkilidir. Bu ilişki aşağıdaki tabloda verilmektedir.

Cyclomatic ComplexityRisk Değerlendirmesi
1-10Fazla riskli olmayan basit bir modül
11-20Orta riskli biraz daha karmaşık modül
21-50Yüksek riskli karmaşık bir modül
51 - Çok riskli test edilemez bir modül

Yukarıdaki tabloya göre, McCabe CC değerlerine göre risk değerlendirmesi yapılmaktadır. 1 ila 10 arasındaki değerler basit, neredeyse risk yoktur denilirken, 51 den yukarısında çıkan CC karmaşıklık değeri, program kodunun alarm verdiğini gösterir. CC değerinin nasıl hesaplanacağı aşağıdaki kod örnekleri ve buna karşılık grafları üzerinden gösterilmektedir.

Örnek 1

Kod BloğuKontrol Akış GrafıV(G)
Graf1

Yukarıdaki kod bloğunda expression1 deyimi grafta bulunan n1 düğümüne denk düşer. n1 düğümü if bloğunda görüldüğü üzere n2 ve n3 düğümlerine ulaşabilir. Program kodu son olarak statement4 ile yoluna devam eder. Burada toplamda 4 adet ayrıt(edge), yani düğümleri birbirlerine bağlayan ok-bağlantı çubuğu bulunur. Aynı zamanda her bir ifadeyi ihtiva eden 4 adette düğüm bulunur. McCabe cyclomatic complexity bağıntısına göre karmaşıklık değeri 2 dir. Bu sonuç enstitüye göre kodun riskli olmayan bir modül olduğunu gösterir.

Örnek 2

Kod BloğuKontrol Akış GrafıV(G)
Graf2

Yukarıdaki kod bloğunda expression1 deyimi grafta bulunan n1 düğümüne denk düşer. n1 düğümü switch bloğunda görüldüğü üzere n2, n3 veya n4 düğümlerine ulaşabilir. Program kodu son olarak statement5 ile yoluna devam eder. Burada toplamda 6 adet ayrıt(edge) ve 5 adet düğüm bulunur. McCabe cyclomatic complexity bağıntısına göre karmaşıklık değeri 3 dir. Bu sonuç enstitüye göre kodun riskli olmayan bir modül olduğunu gösterir.

Örnek 3

Kod BloğuKontrol Akış GrafıV(G)
Graf3

Yukarıdaki kod bloğunda ise do döngü girişi grafta bulunan n1 düğümüne denk düşer. n1 düğümü while döngüsü içerisinde statement2 ye ulaşır ve n1 e koşul sağlanmayana kadar geri döner. Program kodu son olarak statement3 ile yoluna devam eder. Burada toplamda 3 adet ayrıt(edge) ve 3 adet düğüm bulunur. McCabe cyclomatic complexity bağıntısına göre karmaşıklık değeri 2 dir. Bu sonuç enstitüye göre kodun riskli olmayan bir modül olduğunu gösterir.

Örnek 4

Aşağıdaki örnekte verilen, basitçe iki sayının obebini bulan bir C kodu modülünün McCabe CC değerini hesaplayalım.

int gcd(int n1, int n2)
{
    if (n2 != 0)
       return gcd(n2, n1 % n2);
    else 
       return n1;
}
int main()
{
   int n1, n2;
   printf("Enter two positive integers: ");
   scanf("%d%d", &n1, &n2);
   int result = gcd(n1, n2);
   printf("%d", result);
   return 0;
}

Yukarıdaki program kodunun kontrol akış grafı(control flow graph) aşağıdaki gibidir.

gcd control flow graph

Kontrol akış grafında toplam da 4 adet ayrıt(edge) ve 4 adet düğüm(node) olduğundan, McCabe karmaşıklığı V(G) = 4 - 4 + 2 * 1 = 2 olarak bulunur.

Özetle McCabe karmaşıklığı, bir kod modülü içerisinde if, switch, while gibi dallanma yaratan ifadelere bakarak ilgili modülün güvenilirliğini ölçmeye çalışır. Bunu yaparken kod bloğunun kontrol akış grafını çıkarak, graf üzerindeki düğüm ve ayrıtların toplam sayısına bakar. Nihai olarak da V(G) = E - N + 2 * P bağıntısı yardımıyla modülün karmaşıklığını ölçer.

Benzer yazılar:

Halstead Complexity(Halstead Karmaşıklığı)
There has been no comment yet

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.