Bagaimana menganalisis kompleksitas siklomatik dalam kode Anda

Ada berbagai faktor yang dapat berkontribusi pada kompleksitas suatu jenis atau metode yang berkaitan dengan suatu jenis dalam kode aplikasi Anda. Kompleksitas siklomatik adalah metrik populer yang digunakan untuk mengukur kompleksitas program Anda. Dengan kata lain, ini adalah metrik perangkat lunak yang memberikan ukuran kuantitatif kompleksitas program.

Intinya, kompleksitas Cyclomatic adalah ukuran jalur independen linier yang tersedia melalui program Anda. Nilainya sebenarnya bergantung pada jumlah cabang atau konstruksi bersyarat dalam kode Anda. Jadi, kompleksitas siklomatik akan tinggi untuk metode yang memiliki sejumlah besar konstruksi kondisional (misalnya pernyataan switch / if / while / for / foreach).

MSDN menyatakan: "Kompleksitas siklomatik mengukur jumlah jalur independen linier melalui metode, yang ditentukan oleh jumlah dan kompleksitas cabang bersyarat. Kompleksitas siklomatik rendah umumnya menunjukkan metode yang mudah dipahami, diuji, dan dipelihara."

Berikut ini cara penghitungan kompleksitas siklomatik:

CC = E - N + 1

Dimana,

CC menunjukkan kompleksitas siklomatik

E menunjukkan jumlah tepi pada grafik

N menunjukkan jumlah node dalam grafik

Perhatikan bahwa node mewakili cabang logis dan edge mewakili garis yang terhubung antara node. Semakin rendah nilai kompleksitas siklomatik suatu metode, semakin mudah untuk menguji dan memelihara, sehingga semakin baik. Anda dapat memanfaatkan kompleksitas siklomatik untuk menghitung kompleksitas metode, jenis, dan juga modul dalam aplikasi Anda.

Karena kompleksitas siklomatik menunjukkan jalur yang tidak bergantung liner melalui program, semakin banyak nilai kompleksitas siklomatik, semakin banyak jumlah kasus uji yang Anda perlukan untuk program Anda - jumlah kasus uji yang Anda perlukan biasanya akan setara dengan siklomatik kompleksitas dalam kasus ini. Jika nilai kompleksitas siklomatik kurang (nilai kurang dari atau sama dengan 10 dianggap mengagumkan), kode dianggap terstruktur dengan baik, sangat dapat diuji, dan dapat dipelihara.

Bagaimana cara memeriksa kompleksitas siklomatik?

Versi Visual Studio yang lebih baru menyediakan dukungan untuk menghitung kompleksitas siklomatik menggunakan Visual Studio IDE. Anda dapat menghitung Metrik Kode untuk seluruh solusi atau untuk proyek yang Anda pilih. Saat Anda menjalankannya, jendela Code Metrics Results akan menampilkan hasil analisis kode yang diatur ke dalam Maintainability Index, Cyclomatic complex, Depth of Inheritance, Class coupling dan juga Lines of Code. Pada postingan kali ini kita akan membahas Cyclomatic Complexity dan saya akan menyajikan pembahasan mengenai poin-poin lainnya pada postingan selanjutnya disini.

Sekarang, lihat cuplikan kode yang diberikan di bawah ini.

private void DisplayMessage(string str)

       {

           Console.WriteLine(str);

       }

Saat Anda menghitung kompleksitas siklomatik untuk metode DisplayMessage menggunakan Visual Studio, ini menunjukkan nilai sebagai 1. Sekarang, pertimbangkan metode ini yang berisi pemeriksaan untuk melihat apakah parameter yang diteruskan ke metode sebagai argumen adalah null atau kosong.

private void DisplayTextMessage(string str)

       {

           if(!string.IsNullOrEmpty(str))

           Console.WriteLine(str);

       }

Jika Anda menjalankan Metrik Kode untuk solusi itu lagi, Anda akan mengamati bahwa kompleksitas siklomatik untuk metode DisplayTextMessage adalah 2.

Bagaimana cara mengurangi kompleksitas siklomatik dalam kode?

Meskipun dalam beberapa kasus, sulit untuk mengadopsi strategi tertentu untuk mengurangi kompleksitas siklomatik dalam kode Anda karena konstruksi bersyarat mungkin karena ini melekat pada masalah Anda, Anda dapat mengadopsi berbagai strategi untuk mencapai nilai kompleksitas siklomatik yang lebih rendah. Dua pendekatan yang harus Anda ikuti untuk mengurangi kompleksitas siklomatik tinggi adalah melalui pengujian unit dan pemfaktoran ulang kode. Meskipun pengujian unit akan membantu Anda meminimalkan risiko, Anda harus memanfaatkan pemfaktoran ulang kode untuk membuat kode Anda tidak terlalu rumit, lebih mudah untuk diuji dan dipelihara.

Anda dapat mengurangi kompleksitas siklomatik dalam program Anda dengan mengganti konstruksi kondisional dengan polimorfisme. Dalam menggunakan polimorfisme, Anda dapat menambahkan banyak fleksibilitas ke kode Anda - kode Anda menjadi lebih dapat diuji dan Anda dapat menambahkan, mengedit, atau bahkan menghapus kondisi tanpa banyak perubahan pada kode Anda. Intinya, semakin rendah nilai kompleksitas siklomatik, semakin mudah kode Anda dibaca, diuji, dan dipelihara. Dalam beberapa kasus, saya merekomendasikan agar Anda memanfaatkan pola desain perilaku seperti, pola desain Strategi untuk mengurangi kompleksitas siklomatik dalam kode Anda.