Complexity metrics dan model (Proses Kualitas Perangkat Lunak)
Oleh Mela Rahmadani
1617051049
Nur Shabrina
1617051099
Sisda Amalia U.
1617051075
Yeni Rosandi
1617051034
S1 ILMU KOMPUTER JURUSAN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS LAMPUNG 2017
1. Pendahuluan 1.1. Abstak Penelitian untuk mempelajari proses perangkat lunak semakin hari semakin berkembang pesat. Banyak hal baru yang membuat proses pembuatan perangkat lunak menjadi lebih modern. Salah satu cara mengukur kualitas dari software yaitu menggunakan kompleksitas metric. Dimana kompleksitas metric merupakan pengukuran perangkat lunak yang digunakan oleh industri untuk mengukur proses pembuatan, operasi, dan perawatan menggunakan beberapa atribut internal maupun karakteristik dari perangkat lunak untuk mengetahui bagaimana efek pada kualitas perangkat lunak itu sendiri. Melalui metrik, dapat diperoleh informasiinformasi berharga dan parameter-parameter sebagai bahan evaluasi yang obyektif mengenai atribut-atribut dan status dari suatu pengembangan perangkat lunak.
Dalam tulisan ini, akan dibahas beberapa kompleksitas metric perangkat lunak seperti kompleksitas Cyclomatic, baris kode, kompleksitas metric Hallstea, dan dampaknya pada kualitas perangkat lunak. Dalam paper ini juga membahas dan menganalisa korelasi antara mereka yang menunjukkan jumlah kesalahan menggunakan dataset. 1.2.Pengantar Perangkat lunak yang dicari oleh pelanggan maupun stakeholder adalah dinilai dari seberapa tinggi kualitasnya dan bagaimana software dapat bekerja dengan baik. Dalam system informasi, sangatlah penting untuk menemukan faktor-faktor kualitas dari software dan jika ada kesalahan, maka diidentifikasi bagian mana dari software yang mengandung cacat. Oleh karena itu manager dan developer selalu mencari cara bagaimana untuk mengurangi upaya bug suatu perangkat lunak.
Kualitas perangkat lunak adalah sejauh mana perangkat lunak memiliki penilaian dari kombinasi seperi nilai testability, reusability,complexity, reliability, dan lainlain. Cara utama untuk memeriksa kualitas sebuah perangkat lunak adalah dengan melakukan evaluasi secara terus-menerus, sehingga perangkat lunak memiliki kualitas tingi untuk memenuhi kebutuhan suatu bisnis. Karena terdapat factorfaktor tertentu yang bisa mempengaruhi kualitas dari perangkat lunak, banyak praktisi percaya bahwa adanya hubungan langsung antara atribut-atribut dalam pembuatan software seperti dari biaya, usaha, kecepatan, memori, dan dari faktor eksternal Dalam kompleksitas metric, misal jumlah yang lebih tinggi dari baris kode akan menyebabkan kompleksitas perangkat lunak yang lebih besar. Kompleksitas didefinisikan sebagai sejauh mana sistem atau komponen memiliki desain atau implementasi yang sulit untuk dipahami dan diverifikasi. Semua faktor-faktor yang membuat program sulit dimengerti adalah dari kompleksitas. Jadi kita perlu menemukan pengukuran perangkat lunak yang dimana dapat mengurangi dampak dari kompleksitas dan menjamin kualitas pada saat yang sama sebanyak mungkin.
Karena itu, hal yang terpenting adalah bagaimana cara mempertahankan kualitas perangkat lunak dalam garis fungsionalitas yang diperlukan. Berbagai kompleksitas metrik dapat dilakukan untuk mengukur perangkat lunak oleh pengembang seperti menggunakan kompleksitas metric Hallstead , Line of Code atau kompleksitas metric Cyclomatic.
2. The Software Complexity Metrics Berikut adalah metriks kompleksitas yang paling popular dan penting yang memiliki fungsi untuk menghitung sesuai dengan namanya: 2.1.Line of Code (LOC) Secara umum, LOC dihitung dengan menghitung baris kode program. Ini digunakan untuk mengevaluasi ukuran perangkat lunak namun tidak memadai untuk mengukur kompleksitas perangkat lunak. Hal ini dapat dihitung dengan berbagai cara sebagai berikut: a. LOC (Lines of Code) b. SLOC (Source Lines of Code) c. CLOC (Comment Lines of Code) d. S&CLOC (Source and Comment Lines of Code) e. BLOC (Blanks Lines of Code) f. PLOC (Physical Lines of Code) g. LLOC (Logical Lines of Code)
LOC dapat dihitung dengan berbagai cara untuk m enemukan perhitungan akhir. Pada tahun 1986, Jones menentukan berbagai metode:
Hitung baris yang dapat dieksekusi.
Hitung baris data deklarasi dan eksekusi.
Hitung baris data deklarasi, eksekusi, dan komentar.
Hitung baris yang dapat dieksekusi, komentar, deklarasi data dan Job Control Language (JCL).
Hitung garis pada layar input sebagai garis fisik.
Hitung garis dengan determinan logis sebagai penghentian.
Pada tahun 1981, Boehm menghitung LOC sebagai garis fisik dan mencakup baris deklarasi, komentar dan data yang dapat dieksekusi. Pada tahun 1986, Conte dkk menghitung LOC sebagai baris dalam program kecuali baris komentar dan empty (kosong), jadi LOC menyertakan baris data deklarasi yang dapat dieksekusi dan yang tidak dapat dieksekusi. LOC dapat digunakan s ebagai ukuran untuk kompleksitas perangkat lunak dan didasarkan pada hubungan dengan kepadatan cacat dan otonomi antara bahasa pemrograman dan kepadatan cacat. LOC dihitung dengan cepat untuk bahasa pemrograman dan dapat dipahami dengan mudah. Apalagi pengukuran LOC sangat bagus, namun juga memiliki beberapa kelemahan. Pertama, tidak membedakan antara kompleksitas garis kode.
Misalnya, kode “i=1” tidak berbeda dengan kode “i= (++x + max (a,b)) / power(c,d)”. Kode kedua lebih kompleks daripada yang pertama tapi metrik LOC hanya menghitung jumlah baris tanpa mempertimbangkan hal lain nya. Kedua, LOC mengabaikan struktur program seperti percabangan (branches) dan lompatan(jumps), sehingga kode yang memiliki lebih banyak cabang dan lompatan sama dengan kode yang memiliki jumlah baris dan cabang dan lompatan yang sama. Pada akhirnya, LOC dihitung dengan metode yang berbeda sehingga nilainya mungkin berbeda dari satu orang ke orang lainnya. 2.2.Halstead Complexity (HC) Kompleksitas halstead adalah metrik perangkat lunak yang tergolong metrik kompleksitas komposit. HC ini diperkenalkan pada tahun 1977 oleh Maurice Howard Halstead yang menjelaskan bahwa metrik tersebut memiliki karakteri stik program yang terukur dan hubungan di antara keduanya serupa dengan hukum fisika. Mereka mengungkapkan bahwa metrik tersebut harus mencerminkan ekspresi algoritma atau penerapannya dalam bahasa yang berbeda sehingga metrik ini dihitung berdasarkan kode statis. Terdapat empat faktor: 1) n1 = jumlah operator yang berbeda dalam sebuah program 2) n2 = jumlah operan yang berbeda dalam sebuah program 3) N1 = jumlah kejadian operator 4) N2 = jumlah kejadian operan
Berdasarkan parameter ini, beberapa formula dapat dihitung sebagai berikut: n = n1 + n2. N = N1 + N2. V = N * log2 n. D = (n1 / 2) * (N2 / n2). L = (2 * n2) / (n1 * N2), yang berhubungan dengan (1 / D). I = L * V. Dimana n adalah kosa kata program, N adalah panjang program, V adalah volume, D adalah kesulitan yang mengacu pada sulitnya menulis sebuah program atau untuk memahami, L adalah level dan saya mengacu pada konten Kecerdasan program. Ukuran usaha adalah jumlah pembeda yang dibuat selama penyusunan program dan dihitung sebagai berikut: E=D*V Hal ini digunakan untuk menghitung waktu pemrograman yang dibutuhkan (T) sebagai berikut: T=E/18
Hallstead memilih 18 berdasarkan nomor Stroud. Volume Hallstead dipilih untuk digunakan dalam studi kasus. Ini menggambarkan ukuran eksekusi dari program yang mendekati jumlah bit yang dibutuhkan untuk mengimplementasikan program. Contoh untuk (HC): If (k < 2) { If (k > 3) x = x*k; } Operators yang berbeda: if ( ) { } > < = *. Operan yang berbeda: k 2 3 x. n1 = 10 n2 = 4 N1 = 13 N2 = 7 D= (10/2)*(7/4) =8.75. N=13+7=20 n=10+4=14 V=20*log2 14 = 76.15, E= 8.75*76.15 = 666.31.
Dari contoh sebelumnya, dapat dikatakan bahwa kesulitan program adalah 8,75 dan jumlah bit yang dibutuhkan untuk mengimplementasikan program ini adalah 76,15 bit dan upayanya untuk menghasilkan hasilnya adalah 666.31. Metrik Halstead mudah dihitung dan tidak perlu menganalisa struktur logika perangkat lunak. Ini bisa digunakan untuk mengharapkan kerapatan bug. Di sisi lain, ada beberapa kelemahan dimana kompleksitas dihitung tergantung pada data bukan aliran kontrolnya. Operator dan operand kode dan beberapa cabang dan lompatan dihitung tanpa pembedaan. Sudah pasti bahwa komputasi percabangan dan lompatan lebih rumit.
2.3.Cyclomatic Complexity (CC) Kompleksitas siklon (Cyclomatic Complexity) adalah salah satu metrik yang paling populer. Hal ini digunakan untuk mengukur kompleksitas suatu program dengan mengukur jumlah jalur bebas linear melalui kode program. Kompleksitas siklon sangat mudah dihitung. CC menyediakan cara praktis untuk menentukan jumlah maksimum jalan bebas linear dalam sebuah program dan juga memungkinkan untuk mengevaluasi kualitas program. Program yang memiliki kompleksitas tinggi mengandung lebih banyak kesalahan dan mendeteksinya lebih sulit. Kompleksitas siklon dihitung dengan menggunakan Grafik Alur Kontrol atau Control Flow Graph (CFG).
CFG menggambarkan siklus instruksi selama eksekusi. Dengan kata lain, CFG menjelaskan bagaimana mengatur atau mengelola arus di seluruh sistem. Berikut adalah langkah-langkah membuat sketsa CFG sistem: Pertama, tuliskan semua pernyataan sebuah program. Setiap pernyataan yang bernomor dianggap sebagai node yang mengacu pada perintah atau keputusan suatu program. Kedua, tarik tepi antara node jika hasil eksekusi pernyataan diperlukan untuk transfer ke node berikutnya. Ketika kita tahu bagaimana merepresentasikan pesanan, seleksi (if ... else dan switch) dan bentuk iterasi (for, while, do/while dan lain-lain) untuk program apapun. 1 for i = 2 to n { 2 key = A[i] 3 j = i – 1 4 while (j > 0) and (A [j] > key) { 5 A [j+1] = A [j] 6 j = j – 1 7 } 8 A [j+1] = key 9 }
Gambar 1: Diagram aliran kontrol untuk menyortir penyisipan
Untuk grafik aliran kontrol G dari program, kompleksitas Cyclomatic V (G) dapat dihitung dengan: V (G) = E - N + 2. Dimana N adalah jumlah simpul dari grafik flow control dan E adalah jumlah edge pada grafik flow control. Gambar 1 menunjukkan bahwa E = 11 dan N = 10, oleh karena itu kompleksitas Cyclomatic dihitung sebagai: V (G) = 11 - 10 + 2 = 3. Program yang diukur sebagai kompleksitas Cyclomatic yang tinggi akan lebih sulit diuji secara memadai dan lebih rentan terhadap bug yang belum ditemukan dibandingkan metode sederhana dengan hanya beberapa jalur yang berbeda melalui kode. Pada contoh sebelumnya, algoritma sort penyisipan memiliki kompleksitas Cyclomatic 3 dan ini berarti bahwa ada 3 jalur independen melalui metode ini. Selanjutnya, ini menyiratkan bahwa diperlukan setidaknya 3 uji kasus berbeda untuk menguji semua jalur yang berbeda melalui kode. Jika kompleksitas program Cyclomatic adalah 15 misalnya, maka semakin sulit dipahami, dipelihara, ditingkatkan dan digunakan kembali. Pengalaman menunjukkan bahwa ada hubungan yang kuat antara jumlah kesalahan dan metrik kerapatan Cyclomatic. Kompleksitas siklis biasanya kurang dari 10, dan tidak lebih dari 20. Bila kompleksitas Cyclomatic mendekati 100, perangkat lunak akan sangat rumit. Rumit berarti bila terjadi kesalahan, kesalahan baru akan terungkap dengan probabilitas lebih dari 60%. Jadi kodenya hampir lepas kendali. Metrik kerapatan cyclomatic digunakan untuk mengukur aliran kontrol dan mengabaikan kompleksitas arus data perangkat lunak. Jadi, mengukur segmen kode eksekusi berurutan dari 10.000 garis dengan menggunakan metrik kerapatan Cyclomatic sama dengan satu baris kode. Dalam prakteknya, metrik kompleksitas Hallstead dan metrik kerapatan Cyclomatic biasanya digunakan bersamaan. Hallstead complex metric digunakan untuk mengukur kompleksitas dari arus data, sedangkan metrik kompleksitas Cyclomatic mengukur aliran kontrol. Kompleksitas kompleksitas siklis tidak membedakan kompleksitas berbagai jenis aliran kontrol. Dalam metrik kerapatan Cyclomatic, kompleksitas “if ” dianggap sama dengan “case”.
3. Motivation Tindakan produk perangkat lunak dipengaruhi oleh atribut internal seperti biaya, usaha atau LOC, dan atribut eksternal seperti fungsionalitas, kualitas atau kompleksitas, dan hubungan di antara keduanya. Metrik adalah kombinasi dari atribut ini. Ada banyak metrik yang digunakan untuk mengelola dan mengendalikan produk perangkat lunak. Seiring meningkatnya jumlah metrik yang digunakan, manajemen dan kontrol untuk peningkatan produk perangkat lunak juga meningkat. Tapi kalau kita bertanya, apakah ada hubungan antara metrik? Jika iya, apa manfaat dari hubungan ini? Misalkan kita
memiliki dua metrik X dan Y. Metrik X digunakan untuk mengukur kompleksitas sehingga pada saat nilai X meningkat, kompleksitas juga akan meningkat, dan metrik Y digunakan untuk mengukur usabilitas sehingga jika nilai Y meningkat, reusabilitas juga akan meningkat.Tujuannya adalah untuk meminimalkan nilai Y yang meminimalkan kompleksitas, dan memaksimalkan nilai X yang memaksimalkan reusabilitas. Jadi, jika kita mempelajari hubungan antara dua metrik dan menemukan bahwa jika nilai X meningkat, nilai Y juga meningkat. Dapat disimpulkan dari hubungan antara dua metrik bahwa metrik X akan digunakan untuk menilai usabilitas dan kompleksitas, dan hal yang sama untuk metrik Y yang akan digunakan untuk menilai kompleksitas selain reusabilitas.
Gambar 2: Hubungan antara metrik X, Y Tujuan paper ini adalah untuk mengetahui korelasi atau hubungan antara metrik Cyclomatic, metrik Halstead dan LOC, dan korelasi mereka dengan jumlah errors.
4. Studi Kasus: Mencari Korelasi antar Complexity Metrics Dataset target disusun dengan memilih fitur yang relevan, dan kemudian kami menggunakan dataset ini untuk menentukan korelasi antara kompleksitas Cyclomatic, kompleksitas Hallstead dan LOC. Setelah itu, kami membandingkan antar empat software project dalam beberapa hal seperti atribut internal dan eksternal. 4.1.Dataset Dataset yang digunakan dalam penelitian ini merupakan 5 kumpulan perangkat lunak domain-domain yang disediakan oleh Data Program IV & V dan Data Metrik (MDP) milik NASA. Situs NASA memberikan deskripsi singkat tentang setiap dataset MDP: 1. CM1: Dataset ini berasal dari instrumen sains yang ditulis dalam kode C yang mendekati 20 kilo-source line of code (KLOC). Ini berisi 505 modul. 2. PC1: Dataset ini merupakan perangkat lunak penerbangan dari satelit yang mengorbit bumi yang tidak lagi beroperasi. Ini berisi 40 KLOC kode C dengan 1107 modul. 3. PC2: Dataset ini adalah simulator dinamis untuk sistem control attitude. Ini berisi 26 KLOC kode C dengan modul 5589. 4. PC3: Dataset ini adalah perangkat lunak penerbangan dari satelit yang mengorbit bumi yang saat ini beroperasi. Ini memiliki 40 KLOC kode C dengan 1.563 modul.
5. PC4: Dataset ini adalah perangkat lunak penerbangan dari satelit yang mengorbit bumi yang saat ini beroperasi. Ini memiliki 36 KLOC kode C dengan 1458 modul. 4.2.Hasil Perilaku perangkat lunak dipengaruhi oleh atribut internal dan eksternal dan hubungan di antara keduanya. Jadi, atribut perangkat lunak harus diperhatikan untuk mengendalikan keseluruhan perangkat lunak. Kami memilih dataset CM1 yang berisi 505 modul, dan ditulis dalam kode C. Kami mempelajari korelasi antara kompleksitas Cyclomatic dan volume Hallstead dengan jumlah baris kode dan jumlah kesalahan.
Dari gambar [3, 4], jelas bahwa korelasi kompleksitas Cyclomatic dan volume Hallstead memiliki garis kode yang kuat. Perubahan jumlah baris kode akan berdampak pada kompleksitas Cyclomatic dan metrik volume Hallstead. Korelasi seperti yang terlihat pada angka masing-masing adalah 0,85 dan 0,87. Hal ini mengindikasikan adanya korelasi yang sangat kuat. Persamaan regresi antara kompleksitas Cyclomatic dan garis kode adalah y = 4,322x - 2.802, variabel x menunjukkan kompleksitas Cyclomatic, dan variabel y menunjukkan garis kode. Persamaan regresi antara volume Hallstead dan garis kode adalah y = 0,03x + 1,6724, variabel x menunjukkan volume Hallstead, dan variabel y menunjukkan garis kode.
Dari angka [5, 6], jelas bahwa korelasi antara kompleksitas Cyclomatic dan volume Hallstead dengan jumlah kesalahan sangat lemah menurut dataset ini, karena setiap modul memiliki ukuran kecil dan kebanyakan tidak mengandung apapun.
Kesalahan korelasi seperti yang terlihat pada gambar masing-masing adalah 0,059 dan 0,033. Hal ini mengindikasikan korelasi yang sangat lemah. Persamaan regresi antara kompleksitas Cyclomatic dan jumlah kesalahan adalah y = 0,003x - 0,004, variabel x menunjukkan kompleksitas Cyclomatic, dan variabel y menunjukkan jumlah kesalahan. Persamaan regresi antara volume Hallstead dan jumlah kesalahan adalah y = 3E-05x + 0,0015, variabel x menunjukkan volume Hallstead, dan variabel y menunjukkan jumlah kesalahan.
Dari gambar [7], jelas bahwa korelasi antara kompleksitas Cyclomatic dan volume Hallstead kuat. Perubahan dalam kompleksitas Cyclomatic akan berdampak pada volume Hallstead dan sebaliknya. Korelasi seperti yang terlihat pada gambar adalah 0,66 dan ini mengindikasikan korelasi yang kuat. Persamaan regresi adalah y = 114,4x - 98,79, variabel x menunjukkan kompleksitas Cyclomatic, dan variabel y mengindikasikan volume Hallstead. Kompleksitas siklomatik dan kompleksitas Hallstead biasanya digunakan bersamaan. Kompleksitas Hallstead digunakan untuk mengukur kompleksitas dari arus data, sedangkan kompleksitas Cyclomatic mengukur kompleksitas dari aliran kontrol.
Dalam tabel [1] di bawah ini, kami memberikan ringkasan singkat beberapa atribut internal dan eksternal dari kumpulan data. Kita bisa menentukan perangkat lunak yang memiliki modul angka, baris kode, atau kompleksitas paling tinggi atau paling rendah, dan sebagainya.
5. Kesimpulan Seperti yang ditunjukkan oleh paper ini, dapat dilihat bahwa kompleksitas Cyclomatic memiliki korelasi kuat dengan kompleksitas Hallstead dan garis kode. Kompleksitas Cyclomatic memiliki korelasi lemah dengan jumlah kesalahan, ini karena ukuran modul yang kecil dari dataset yang digunakan dalam studi kasus dimana kebanyakan dari mereka tidak mengandung errors. Untuk kompleksitas Hallstead, memiliki korelasi kuat dengan kompleksitas Cyclomatic dan korelasi lemah dengan garis kode. Korelasi antara kompleksitas Cyclomatic dan kompleksitas Hallstead kuat pada saat digunakan bersamaan, kompleksitas Cyclomatic untuk mengukur aliran kontrol, sedangkan kompleksitas Hallstead untuk mengukur arus data.
Pekerjaan kita kedepannya mencakup peningkatan dataset, mempelajari hubungan antara metrik berorientasi objek dan jenis metrik lainnya, dan juga mempelajari korelasi metrik aplikasi web. Sumber: https://www.researchgate.net/publication/264936702_The_Correlation_among_Softw are_Complexity_Metrics_with_Case_Study