Kompleksitas Siklomatik dalam Pengujian Perangkat Lunak dengan Contoh
⚡ Ringkasan Cerdas
Kompleksitas Siklomatik adalah metrik perangkat lunak yang dikembangkan oleh Thomas McCabe pada tahun 1976 yang menghitung jalur independen melalui suatu program. Metrik ini dihitung dari grafik aliran kontrol dan memberikan jumlah kasus uji yang diperlukan untuk cakupan cabang penuh.

Apa itu Kompleksitas Siklomatik McCabe?
Kompleksitas Siklomatik dalam Pengujian Perangkat Lunak adalah metrik pengujian yang digunakan untuk mengukur kompleksitas suatu program perangkat lunak. Ini adalah ukuran kuantitatif dari jalur independen dalam kode sumber suatu program perangkat lunak. Kompleksitas siklomatik dapat dihitung dengan menggunakan grafik aliran kontrol atau berkenaan dengan fungsi, modul, metode, atau kelas dalam suatu program perangkat lunak.
Jalur independen didefinisikan sebagai jalur yang memiliki setidaknya satu sisi yang belum pernah dilalui jalur lain sebelumnya.
Metrik ini dikembangkan oleh Thomas J. McCabe pada tahun 1976 dan didasarkan pada representasi aliran kendali program. Aliran kontrol menggambarkan suatu program sebagai grafik yang terdiri dari Node dan Edge.
Dalam grafik, Node mewakili tugas pemrosesan sementara tepi mewakili aliran kontrol antar node.
Notasi Grafik Alur untuk Sebuah Program
Notasi Grafik Aliran untuk suatu program mendefinisikan beberapa node yang terhubung melalui tepinya. Di bawah ini adalah diagram alir untuk pernyataan seperti if-else, While, hingga dan urutan aliran normal.
Cara Menghitung Kompleksitas Siklomatik
Representasi matematika:
Secara matematis, ini adalah himpunan jalur independen melalui diagram grafik. Code Kompleksitas program dapat didefinisikan menggunakan rumus –
V(G) = E - N + 2
Dimana,
E – Jumlah tepi
N – Jumlah Node
V (G) = P + 1
Dimana P = Jumlah node predikat (node yang berisi kondisi)
Contoh -
i = 0; n=4; //N-Number of nodes present in the graph while (i<n-1) do j = i + 1; while (j<n) do if A[i]<A[j] then swap(A[i], A[j]); end do; j=j+1; end do;
Grafik alur untuk program ini adalah
Menghitung secara matematis,
- V(G) = 9 – 7 + 2 = 4
- V(G) = 3 + 1 = 4 (Kondisi node adalah 1,2 dan 3 node)
Himpunan dasar, keempat jalur eksekusi independen:
- 1, 7
- 1, 2, 6, 1, 7
- 1, 2, 3, 4, 5, 2, 6, 1, 7
- 1, 2, 3, 5, 2, 6, 1, 7
Sifat-Sifat Kompleksitas Siklomatik
Berikut ini adalah sifat-sifat kompleksitas Siklomatik:
- V (G) adalah jumlah maksimum jalur independen dalam grafik
- V (G) >=1
- G akan memiliki satu jalur jika V (G) = 1
- Pedoman yang umum digunakan adalah menjaga V(G) pada angka 10 atau di bawahnya untuk satu modul.
Bagaimana Metrik Ini Berguna untuk Pengujian Perangkat Lunak
Pengujian jalur dasar (Basis Path testing) adalah salah satu teknik kotak putih (White box) dan menjamin setidaknya satu pernyataan akan dieksekusi selama pengujian. Teknik ini memeriksa setiap jalur yang independen secara linier melalui program, yang berarti bahwa Jumlah kasus uji yang dibutuhkan sama dengan kompleksitas siklomatik program tersebut..
Metrik ini berguna karena sifat kompleksitas Siklomatik (M) –
- M dapat berupa jumlah kasus uji untuk mencapai cakupan cabang (Batas Atas)
- M dapat berupa jumlah jalur melalui grafik. (Batas bawah)
Pertimbangkan contoh ini –
If (Condition 1) Statement 1 Else Statement 2 If (Condition 2) Statement 3 Else Statement 4
Kompleksitas Siklomatik untuk program ini adalah 8-7+2=3.
Karena kompleksitas telah dihitung sebesar 3, tiga kasus uji diperlukan untuk cakupan jalur lengkap pada contoh di atas.
Langkah-langkah yang harus diikuti
Langkah-langkah berikut harus diikuti untuk menghitung kompleksitas Siklomatis dan desain kasus uji.
Langkah 1 – Konstruksi grafik dengan node dan tepi dari kode
Langkah 2 – Identifikasi jalur independen
Langkah 3 – Perhitungan Kompleksitas Siklomatik
Langkah 4 – Desain Kasus Uji
Setelah himpunan dasar terbentuk, KASUS UJI harus ditulis untuk mengeksekusi semua jalur.
Lebih lanjut tentang V (G)
Kompleksitas siklomatik dapat dihitung secara manual jika programnya kecil. Alat otomatis perlu digunakan jika programnya sangat kompleks karena melibatkan lebih banyak grafik aliran. Berdasarkan angka kompleksitas, tim dapat menyimpulkan tindakan yang perlu diambil untuk pengukuran.
Tabel berikut memberikan gambaran umum tentang bilangan kompleksitas dan arti yang sesuai dari v (G):
| Nomor Kompleksitas | Arti |
|---|---|
| 1 untuk 10 |
Kode yang terstruktur dan ditulis dengan baik. Kemampuan untuk diuji tinggi Biaya dan upaya lebih sedikit. |
| 11 untuk 20 |
Kode yang kompleks Kemampuan pengujian sedang Biaya dan upaya tergolong sedang. |
| 21 untuk 40 |
Kode yang sangat kompleks Kemampuan pengujian rendah Biaya dan upaya yang dibutuhkan sangat tinggi. |
| > 40 |
Sama sekali tidak dapat diuji Biaya dan upaya yang sangat tinggi |
Alat untuk Menghitung Kompleksitas Siklomatik
Banyak alat yang tersedia untuk menentukan kompleksitas aplikasi. Beberapa alat kalkulasi kompleksitas digunakan untuk teknologi tertentu. Kompleksitas dapat ditemukan berdasarkan jumlah titik keputusan dalam suatu program. Titik keputusan tersebut adalah pernyataan if, for, for-each, while, do, catch, case dalam kode sumber.
Contoh alatnya adalah
- OCLint – Penganalisis kode statis untuk C dan Bahasa Terkait
- SonarQube – Melaporkan kompleksitas siklomatik dan kognitif di lebih dari 25 bahasa
- Visual Studio Code Metrik – Analisis kompleksitas siklomatik bawaan untuk assembly .NET
- Radon dan Lizard – Penganalisis kompleksitas baris perintah untuk Python dan untuk proyek multibahasa masing-masing
- GMetrik – Temukan metrik di Java aplikasi terkait
Penggunaan Kompleksitas Siklomatik
Kompleksitas Siklomatik dapat terbukti sangat membantu dalam
- Membantu pengembang dan penguji menentukan eksekusi jalur independen
- Pengembang dapat memastikan bahwa semua jalur telah diuji setidaknya sekali.
- Membantu kita untuk lebih fokus pada jalur yang belum tercakup
- Tingkatkan cakupan kode di Rekayasa Perangkat Lunak
- Evaluasi risiko yang terkait dengan aplikasi atau program
- Penggunaan metrik ini di awal siklus akan mengurangi risiko program
Cara Mengurangi Kompleksitas Siklomatik
Angka kompleksitas yang tinggi adalah sebuah sinyal, bukan vonis. Empat kali refactoring sudah mencakup sebagian besar pengurangan yang dapat dicapai dalam praktiknya.
- Extracmetode t. Memindahkan sebuah cabang ke dalam fungsinya sendiri akan membagi kompleksitas antara dua modul. Total kompleksitas di seluruh sistem tetap tidak berubah, tetapi setiap unit menjadi dapat diuji secara independen.
- Gantikan rantai kondisional dengan pencarian. Rangkaian if-else-if yang panjang yang menguji variabel yang sama menjadi sebuah map atau switch, yang meringkas banyak titik keputusan menjadi satu.
- Gunakan klausa pengaman. Mengembalikan nilai awal pada input yang tidak valid menghilangkan penataan bertingkat yang dibuat oleh satu blok if-else besar, tanpa mengubah perilaku.
- Gantikan pernyataan bersyarat dengan polimorfisme. Jika suatu pernyataan bersyarat bergantung pada suatu tipe, memindahkan setiap cabang ke kelasnya sendiri akan menghilangkan keputusan tersebut sepenuhnya.
Sebelumnya, dengan V(G) = 4:
if (user != null) { if (user.isActive()) { if (user.hasRole("admin")) { return grantAccess(); } } } return denyAccess();
Setelah itu, dengan perilaku yang sama dan penestingan dihilangkan:
if (user == null) return denyAccess(); if (!user.isActive()) return denyAccess(); if (!user.hasRole("admin")) return denyAccess(); return grantAccess();
Peringatan mengenai metrik tersebut. Kompleksitas siklomatik menghitung keputusan, bukan kesulitan. Pernyataan switch dengan dua puluh kasus sederhana mendapat skor 21 namun mudah dibaca, sementara blok bersarang dalam yang mendapat skor 8 mungkin jauh lebih sulit dipahami. Gunakan angka tersebut untuk menemukan kandidat yang perlu ditinjau, bukan sebagai target untuk dimanipulasi.


.png)
.png)