Apa kategori kompleksitas siklomatik? Sebagai contoh:
1-5: mudah untuk mempertahankan
6-10: sulit
11-15: sangat sulit
20+: mendekati tidak mungkin
Selama bertahun-tahun sekarang, saya telah pergi dengan asumsi bahwa 10 adalah batasnya. Dan apa pun di luar itu buruk. Saya menganalisis solusi, dan saya mencoba menentukan kualitas kode. Tentu saja kompleksitas siklomatik bukan satu-satunya pengukuran, tetapi dapat membantu. Ada metode dengan kerumitan siklomatik 200+. Saya tahu itu mengerikan, tetapi saya ingin tahu tentang kisaran yang lebih rendah, seperti dalam contoh saya di atas.
Saya menemukan ini :
Nilai referensi yang disebutkan dari Carnegie Mellon menentukan empat rentang kasar untuk nilai kompleksitas siklomatik:
- metode antara 1 dan 10 dianggap sederhana dan mudah dipahami
- nilai antara 10 dan 20 menunjukkan kode yang lebih kompleks, yang mungkin masih dapat dipahami; Namun pengujian menjadi lebih sulit karena semakin banyak cabang yang mungkin diambil oleh kode
- nilai 20 dan di atas adalah tipikal kode dengan sejumlah besar jalur eksekusi potensial dan hanya dapat dipahami dan diuji sepenuhnya dengan kesulitan dan upaya besar
- metode yang bahkan lebih tinggi, misalnya> 50, tentu saja tidak dapat dipelihara
Saat menjalankan metrik kode untuk solusi, hasilnya menunjukkan warna hijau untuk apa pun di bawah 25. Saya tidak setuju dengan ini, tetapi saya berharap untuk mendapatkan input lain.
Apakah ada daftar rentang yang diterima secara umum untuk kompleksitas siklomatik?
sumber
Jawaban:
Saya kira itu tergantung pada kemampuan staf pemrograman Anda, dan tidak sedikit pada kepekaan Anda sebagai seorang manajer.
Beberapa programmer adalah pendukung setia TDD, dan tidak akan menulis kode apa pun tanpa menulis unit test terlebih dahulu. Pemrogram lain sangat mampu membuat program yang bebas bug dengan baik, tanpa menulis satu unit test. Tingkat kompleksitas siklomatik yang dapat ditoleransi setiap kelompok hampir pasti akan sangat bervariasi.
Ini adalah metrik subjektif; mengevaluasi pengaturan pada solusi Metrik Kode Anda, dan menyesuaikannya dengan sweet spot yang membuat Anda merasa nyaman dengan yang memberi Anda hasil yang masuk akal.
sumber
Tidak ada kategori yang telah ditentukan dan tidak ada kategorisasi karena beberapa alasan:
Beberapa teknik refactoring hanya memindahkan kompleksitas dari satu titik ke titik lain (bukan dari kode Anda ke kerangka kerja atau pustaka eksternal yang telah teruji dengan baik, tetapi dari satu lokasi ke lokasi lain dari basis kode). Ini membantu mengurangi kompleksitas siklomatik dan membantu meyakinkan atasan Anda (atau siapa pun yang menyukai presentasi dengan grafik yang terus meningkat) bahwa Anda menghabiskan waktu Anda untuk membuat sesuatu yang hebat, tetapi kode tetap seburuk sebelumnya.
Sebaliknya, kadang-kadang, ketika Anda melakukan refactor suatu proyek dengan menerapkan beberapa pola desain dan pemrograman, kompleksitas cyclomatic bisa menjadi lebih buruk, sementara kode yang di-refactored diharapkan menjadi jelas: pengembang tahu pola pemrograman (setidaknya mereka diharapkan mengetahuinya), jadi itu menyederhanakan kode untuk mereka, tetapi kompleksitas cyclomatic tidak memperhitungkan ini.
Beberapa teknik non-refactoring lainnya tidak mempengaruhi kompleksitas siklomatik sama sekali, sementara sangat mengurangi kompleksitas kode untuk pengembang. Contoh: menambahkan komentar atau dokumentasi yang relevan. "Memodernisasi" kode dengan menggunakan gula sintaksis.
Ada beberapa kasus di mana kompleksitas siklomatik tidak relevan. Saya suka contoh yang diberikan oleh whatsisname dalam komentarnya : beberapa
switch
pernyataan besar bisa sangat jelas dan menulis ulang dengan cara yang lebih OOP tidak akan sangat berguna (dan akan mempersulit pemahaman kode oleh pemula). Pada saat yang sama, pernyataan-pernyataan itu adalah bencana, dari segi kompleksitas siklisomatik.Seperti Robert Harvey katakan di atas , itu tergantung pada tim itu sendiri.
Dalam prakteknya, saya telah melihat kode sumber yang memiliki kompleksitas siklomatik yang baik, tetapi yang mengerikan. Pada saat yang sama, saya telah melihat kode dengan kompleksitas siklomatik yang tinggi, tetapi saya tidak terlalu kesulitan memahaminya.
Hanya saja tidak ada dan tidak bisa menjadi alat apa pun yang akan menunjukkan, tanpa cacat, seberapa baik atau buruk sepotong kode yang diberikan atau betapa mudahnya mempertahankannya . Karena Anda tidak dapat memprogram aplikasi yang akan memberi tahu bahwa lukisan yang diberikan adalah sebuah mahakarya, dan yang lainnya harus dibuang, karena tidak memiliki nilai artistik.
Ada metrik yang rusak oleh desain (seperti LOC atau jumlah komentar per file), dan ada metrik yang dapat memberikan beberapa petunjuk mentah (seperti jumlah bug atau kompleksitas siklomatik). Dalam semua kasus, itu hanyalah petunjuk, dan harus digunakan dengan hati-hati.
sumber