Özgür Adem Işıklı Özgür Adem Işıklı Software Developer Resume Contact

Software Developer

Cyclomatic Complexity Nedir ve Nasıl Ölçülür?

Cyclomatic Complexity kavramı yazılım camiasına ait bir terimdir ve geliştirilen kodların karmaşasının ölçülmesi olarak ifade edilir. Ölçüm yapılırken akış diyagramındaki bağımsız bölümler ve karar yapıları göz önünde bulundurulur. Ne kadar çok karar yapısı bulunuyorsa, kod karmaşası o kadar artık. Kod karmaşasının arttığı durumlarda üzerinde çalışılan projenin sürdürülebilir olması güçleşir, hata ile karşılaşma oranında artış gözlemlenir. Bu nedenle kod karmaşasının minumumda tutulması her zaman için önerilir.

Nasıl Ölçülür?

Bu ölçümü yapan ve teorinin formüllerine bağlı olarak çalışan hazır araçlar vardır. Ben ağırlıklı olarak PHP tarafında kod geliştiren bir geliştirici olduğum için bu işi yapan ve yanında başka raporlamar da gerçekleştiren PHPLOC isimli bir araç kullanıyorum. Kendisi PHPUnit‘i de geliştiren Sebastian Bergmann tarafından geliştirilmiş bir araç.

PHPLOC Kurulumu

Aşağıdaki adımları izleyerek kurulumu gerçekleştirebilirsiniz.


$ wget https://phar.phpunit.de/phploc.phar
$ chmod +x phploc.phar
$ mv phploc.phar /usr/local/bin/phploc

Kullanım

Proje dosyalarınızın bulunduğu klasörü parametre olarak göndererek sonuçları incleyebilirsiniz;


$ phploc src

phploc 2.0.4 by Sebastian Bergmann.

Directories                                          3
Files                                                8

Size
  Lines of Code (LOC)                             1858
  Comment Lines of Code (CLOC)                     560 (30.14%)
  Non-Comment Lines of Code (NCLOC)               1298 (69.86%)
  Logical Lines of Code (LLOC)                     289 (15.55%)
    Classes                                        260 (89.97%)
      Average Class Length                          37
      Average Method Length                          9
    Functions                                        5 (1.73%)
      Average Function Length                        5
    Not in classes or functions                     24 (8.30%)

Complexity
  Cyclomatic Complexity / LLOC                    0.67
  Cyclomatic Complexity / Number of Methods       7.86

Dependencies
  Global Accesses                                    2
    Global Constants                                 2 (100.00%)
    Global Variables                                 0 (0.00%)
    Super-Global Variables                           0 (0.00%)
  Attribute Accesses                                48
    Non-Static                                      48 (100.00%)
    Static                                           0 (0.00%)
  Method Calls                                      96
    Non-Static                                      91 (94.79%)
    Static                                           5 (5.21%)

Structure
  Namespaces                                         4
  Interfaces                                         0
  Traits                                             0
  Classes                                            7
    Abstract Classes                                 0 (0.00%)
    Concrete Classes                                 7 (100.00%)
  Methods                                           28
    Scope
      Non-Static Methods                            28 (100.00%)
      Static Methods                                 0 (0.00%)
    Visibility
      Public Method                                 10 (35.71%)
      Non-Public Methods                            18 (64.29%)
  Functions                                          1
    Named Functions                                  0 (0.00%)
    Anonymous Functions                              1 (100.00%)
  Constants                                          1
    Global Constants                                 1 (100.00%)
    Class Constants                                  0 (0.00%)

Yorumlama

Gösterilen sonuçlar arasında yer alan Complexity bölümünde sayısal değerler göreceksiniz. Bunlar koda ve metotlara göre kod karmaşasını gösteren değerlerdir. Aşağıdaki listeye göre kodunuzun karmaşasını saptayabilirsiniz;

  • 0-10: Basit kod yapısı, yüksek sürdürülebilirlik.
  • 11-20: Kabul edilebilir karmaşıklık, orta sürdürülebilirlik.
  • 21-50: Yüksek karmaşıklık, düşük sürdürülebilirlik.
  • 50-100: Test adilemez, çok düşük sürdürülebilirlik.
  • >100: Felaket

Karmaşıklığı Azaltma

Karmaşıklık bir çok farklı faktöre bağlı olsa da, genel olarak aşağıdaki adımlar uygulanarak azaltılabilir;

What About Comments?

I do not use any comment system such as Disqus because of user's privacy. If you want to discuss something about this post, you may open an issue on the repo.

You may check what is the problem with Disqus;