Metrik yang paling umum untuk mengukur kompleksitas (atau kesederhanaan, jika Anda menganggap kesederhanaan sebagai kebalikan dari kompleksitas) adalah Kompleksitas Sikomatik McCabe dan Metrik Kompleksitas Halstead .
Kompleksitas siklus mengukur jumlah jalur yang berbeda melalui unit yang diberikan, biasanya metode atau fungsi, meskipun juga dapat dihitung pada kelas. Dengan meningkatnya jumlah jalur, menjadi lebih sulit untuk mengingat aliran data melalui modul yang diberikan, yang terkait dengan konsep memori kerja . Kompleksitas siklomatik yang tinggi cenderung mengindikasikan kesulitan dalam kemampuan untuk menguji suatu modul - dibutuhkan lebih banyak kasus uji untuk mencakup berbagai jalur melalui sistem. Ada juga penelitian yang mengaitkan kompleksitas siklomatik yang tinggi dengan tingkat cacat yang tinggi. Biasanya, kerumitan siklomatik 10 menunjukkan bahwa suatu unit harus ditinjau dan mungkin dire-reforasi.
Langkah-langkah kompleksitas Halstead menggunakan input dari operator dan operan total dan berbeda untuk menghitung volume, kesulitan, dan upaya sepotong kode. Kesulitan, yang merupakan (jumlah operator unik / 2) * (jumlah total operan / jumlah operan unik), terkait dengan kemampuan membaca dan memahami kode untuk tugas-tugas seperti mempelajari sistem atau melakukan tinjauan kode. Sekali lagi, Anda dapat menghitung ini pada level sistem, level kelas, atau level metode / fungsi. Ada beberapa posting tentang menghitung pengukuran ini di sini dan sini .
Hanya dengan menghitung baris kode juga dapat memberi Anda gambaran tentang kompleksitas. Semakin banyak baris kode berarti ada lebih banyak untuk dibaca dan dipahami dalam modul. Saya akan ragu untuk menggunakan ini sebagai ukuran yang berdiri sendiri. Sebagai gantinya, saya akan menggunakannya dengan pengukuran lain, seperti jumlah cacat dalam modul yang diberikan untuk mendapatkan kepadatan cacat. Kerapatan cacat yang tinggi dapat mengindikasikan masalah dalam penulisan tes dan pelaksanaan tinjauan kode, yang mungkin atau mungkin tidak disebabkan oleh kode kompleks.
Fan-in dan fan-out adalah dua metrik lainnya, terkait dengan aliran data. Seperti yang didefinisikan di sini , fan in adalah jumlah dari prosedur yang disebut, pembacaan parameter, dan variabel global read and fan out adalah jumlah dari prosedur yang memanggil prosedur yang diberikan, parameter yang ditulis (diekspos ke pengguna luar, diteruskan dengan referensi), dan variabel global yang ditulis untuk. Sekali lagi, fan-in dan fan-out yang tinggi mungkin mengindikasikan modul yang mungkin sulit untuk dipahami.
Dalam paradigma tertentu, mungkin ada tindakan atau metrik lain yang juga berguna. Sebagai contoh, di dunia berorientasi objek, pemantauan kopling (keinginan rendah), kohesi (keinginan tinggi), dan kedalaman warisan (keinginan rendah) dapat digunakan untuk menilai seberapa sederhana atau rumit suatu sistem.
Tentu saja, penting untuk menyadari bahwa banyak tindakan dan metrik hanyalah indikator. Anda perlu menggunakan penilaian Anda untuk menentukan apakah perlu refactor untuk meningkatkan kesederhanaan atau jika itu tidak sepadan dengan upaya untuk melakukannya. Anda dapat melakukan pengukuran, menghitung metrik, dan mempelajari kode Anda, tetapi Anda tidak ingin mendesain sistem Anda dengan angka. Pada akhirnya, lakukan apa yang masuk akal.