Cara menganalisis kerumitan siklomatik dalam kod anda

Terdapat pelbagai faktor yang boleh menyumbang kepada kerumitan jenis atau kaedah yang berkaitan dengan jenis dalam kod aplikasi anda. Kerumitan sikomatik adalah metrik popular yang digunakan untuk mengukur kerumitan program anda. Dengan kata lain, ini adalah metrik perisian yang memberikan ukuran kuantitatif kerumitan program.

Pada dasarnya, kerumitan siklomatik adalah ukuran jalan bebas linear yang tersedia melalui program anda. Nilainya sebenarnya bergantung pada jumlah cawangan atau konstruksi bersyarat dalam kod anda. Oleh itu, kerumitan siklomatik akan tinggi untuk kaedah yang mempunyai sebilangan besar konstruk bersyarat (i. E, pernyataan / suis / jika / sementara / untuk / foreach).

MSDN menyatakan: "Kerumitan siklomatik mengukur bilangan jalur bebas linier melalui kaedah ini, yang ditentukan oleh bilangan dan kerumitan cabang bersyarat. Kerumitan siklomatik rendah umumnya menunjukkan kaedah yang mudah difahami, diuji, dan dikekalkan."

Inilah cara kerumitan siklomatik dikira:

CC = E - N + 1

Di mana,

CC menunjukkan kerumitan siklomatik

E menunjukkan bilangan tepi dalam graf

N menunjukkan bilangan nod dalam grafik

Perhatikan bahawa nod mewakili cabang logik dan tepi mewakili garis bersambung antara nod. Secara kebetulan, semakin rendah nilai kerumitan siklomatik suatu kaedah, semakin mudah menguji dan mempertahankannya, maka semakin baik. Anda boleh memanfaatkan kerumitan siklomatik untuk mengira kerumitan kaedah, jenis dan juga modul dalam aplikasi anda.

Oleh kerana kerumitan siklomatik menunjukkan jalan bebas liner walaupun program ini, semakin banyak nilai kerumitan siklomatik, semakin banyak jumlah kes ujian yang anda perlukan untuk program anda - jumlah kes ujian yang anda perlukan biasanya setara dengan siklomatik kerumitan dalam kes ini. Sekiranya nilai kerumitan siklomatik kurang (nilai kurang dari atau sama dengan 10 dianggap hebat), kod tersebut dianggap tersusun dengan baik, sangat mudah diuji dan dapat dikendalikan.

Bagaimana cara memeriksa kerumitan siklomatik?

Versi Visual Studio yang lebih baru memberikan sokongan untuk mengira kerumitan siklomatik menggunakan Visual Studio IDE. Anda boleh mengira Metrik Kod untuk keseluruhan penyelesaian atau untuk projek yang telah anda pilih. Semasa anda menjalankannya, tetingkap Hasil Metrik Kod akan menunjukkan kepada anda hasil analisis kod yang disusun ke dalam Indeks Kebolehlanjutan, kerumitan siklikomatik, Kedalaman Pewarisan, gandingan Kelas dan juga Garisan Kod. Dalam catatan ini kita akan meneroka Kerumitan Siklomatik dan saya akan membincangkan perbincangan mengenai perkara-perkara lain dalam catatan selanjutnya di sini.

Sekarang, rujuk coretan kod yang diberikan di bawah.

private void DisplayMessage(string str)

       {

           Console.WriteLine(str);

       }

Apabila anda mengira kerumitan siklomatik untuk kaedah DisplayMessage menggunakan Visual Studio, ia menunjukkan nilainya sebagai 1. Sekarang, pertimbangkan kaedah ini yang berisi tanda periksa untuk melihat apakah parameter yang diteruskan ke kaedah tersebut sebagai argumen adalah nol atau kosong.

private void DisplayTextMessage(string str)

       {

           if(!string.IsNullOrEmpty(str))

           Console.WriteLine(str);

       }

Sekiranya anda menjalankan Metrik Kod untuk penyelesaiannya lagi, anda akan melihat bahawa kerumitan siklomatik untuk kaedah DisplayTextMessage adalah 2.

Bagaimana cara mengurangkan kerumitan siklomatik dalam kod?

Walaupun dalam beberapa kes, sukar untuk menerapkan strategi tertentu untuk mengurangkan kerumitan siklomatik dalam kod anda kerana konstruksi bersyarat mungkin disebabkan oleh masalah anda, anda boleh menggunakan pelbagai strategi untuk mencapai nilai kerumitan siklomatik yang lebih rendah. Dua pendekatan yang harus anda ikuti untuk mengurangkan kerumitan siklomatik yang tinggi adalah melalui ujian unit dan pemodelan semula kod. Walaupun ujian unit akan membantu anda meminimumkan risiko, anda harus memanfaatkan refactoring kod untuk menjadikan kod anda kurang rumit, lebih mudah untuk diuji dan diselenggara.

Anda boleh mengurangkan kerumitan siklomatik dalam program anda dengan mengganti konstruk bersyarat dengan polimorfisme. Dalam menggunakan polimorfisme, anda dapat menambahkan banyak kelenturan pada kod anda - kod anda menjadi lebih mudah diuji dan anda dapat menambahkan, mengedit atau bahkan menghapus syarat tanpa banyak perubahan pada kod anda. Pada dasarnya, semakin rendah nilai kerumitan siklomatik, semakin banyak kod anda mudah dibaca, diuji dan dijaga. Dalam beberapa kes, saya mengesyorkan agar anda memanfaatkan corak reka bentuk tingkah laku seperti, corak reka bentuk Strategi untuk mengurangkan kerumitan siklomatik dalam kod anda.