Cyclomatic Complexity adalah sebuah software metric yang menyediakan ukuran kuantitatif dari kompleksitas logika dari sebuah program. Dengan menggunakan hasil pengukuran atau perhitungan dari metric cyclomatic complexity, kita dapat menentukan apakah sebuah program merupakan program yang sederhana atau kompleks berdasarkan logika yang diterapkan pada program tersebut. Apabila dikaitkan dengan pengujian perangkat lunak (software testing), cyclomatic complexity dapat digunakan untuk menentukan berapa minimal test caseyang harus dijalankan untuk menguji sebuah program dengan menggunakan teknik basis path testing. Pada pengujian basis path, aliran control logika digambarkan dengan menggunakan flow graph. Berikut ini adalah notasi struktur kontrol pada flow graph untuk menggambarkan sekuensial, seleksi, maupun perulangan:

me - 1

Notasi lingkaran disebut sebagai flow graph node yang digunakan untuk menggambarkan statement-statement berikut:

  1. Satu atau lebih statement secara sekuensial yang dikelompokkan
  2. Percabangan seleksi dari satu statement kedua pilihan statement (seleksi)
  3. Penggabungan dua statement yang dilanjutkan pada satu statement yang sama (merge)

Sedangkan notasi garis panah disebut sebagai edge atau link, menggambarkan aliran kontrol. Setiap edge harus dihubungkan dari/ke sebuah node, meskipun node tersebut tidak mewakili sebuah statement khusus. Area yang dibatasi oleh node dan edge disebut sebagai region. Contoh pembuatan flow graph dari source code yang sudah dibuat atau dari flowchart yang dibuat sebelumnya dapat dibaca lebih detail pada artikel berikut “Basis Path Testing: Flow Graph”.

Berikut ini adalah contoh sebuah flow graph:

me - 2

Dari flow graph yang sudahtersedia, cyclomatic complexity dari sebuah program dapat dibuat dengan menggunakan rumus dibawah ini:

me - 3

V(G)      : cyclomatic complexity
E              : total jumlah edge
N             : total jumlah node

Pada contoh flow graph di atas (Gambar 2.), dapat dihitung cyclomatic complexity-nya sebagai berikut:
V(G)      = 11 edges – 9 nodes + 2
= 4

Angka  4 dari hasil perhitungan cyclomatic complexity menunjukan jumlah independent path dari basis path testing, atau dengan kata lain menunjukkan jumlah pengujian yang harus dijalankan untuk memastikan semua statement pada program dijalankan minimal sekali (semua statement telah diuji).

Hasil independent path pada contoh di atas dapat dijabarkan sebagai berikut:
path 1   : 1-11
path 2   : 1-2-3-4-5-10-1-11
path 3   : 1-2-3-6-8-9-10-1-11
path 4   : 1-2-3-6-7-9-10-1-11

Catatan:

  • independent path adalah setiap path yang dilalui program yang menunjukkan satu set baru dari pemrosesan statement atau dari sebuah kondisi baru
  • independent path pada flow graph harus melewati sedikitnya satu edge yang belum pernah dilewati oleh path sebelumnya
  • independent path selalu dimulai dari node awal hingga ke node terakhir
  • independent path yang dibuat pertama kali adalah independent path terpendek

Selain dengan menggunakan rumus di atas, cyclomatic complexity dapat ditentukan dengan dua cara lain:

  1. Menentukan jumlah region dari flow graph.
    Pada contoh di atas, terdapat 4 region, sehingga cyclomatic complexity = 4.
  2. Menentukan jumlah node simpul/bercabang ditambahkan dengan angka 1.
    Pada contoh di atas, terdapat 3 node simpul (1; 2,3; dan 6) sehingga total cyclomatic complexitynya adalah 3+1=4.

Untuk mendapatkan pemahaman yang lebih dalam, pada artikel ini disertakan sebuah contoh lain flow graph untuk perhitungan cyclomatic complexity sebagai berikut:

me - 4

Perhitungan cyclomatic complexity dengan menggunakan 3 cara:

  1. V(G) = 17 edges – 13 nodes + 2 = 6
  2. V(G) = 6 region
  3. V(G) = 5 node simpul + 1 = 6

Sumber: Software Engineering A Practitioner’s Approach oleh  Roger S. Pressman edisi ke-8.