• Tidak ada hasil yang ditemukan

PENDETEKSIAN PENJIPLAKAN KODE PROGRAM C DENGAN K-MEANS ABI PANCA GUMILANG

N/A
N/A
Protected

Academic year: 2021

Membagikan "PENDETEKSIAN PENJIPLAKAN KODE PROGRAM C DENGAN K-MEANS ABI PANCA GUMILANG"

Copied!
22
0
0

Teks penuh

(1)

PENDETEKSIAN PENJIPLAKAN KODE PROGRAM C

DENGAN K-MEANS

DEPARTEMEN ILMU KOMPUTER

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

INSTITUT PERTANIAN BOGOR

BOGOR

2013

(2)

PENDETEKSIAN PENJIPLAKAN KODE PROGRAM C

DENGAN K-MEANS

ABI PANCA GUMILANG

Skripsi

sebagai salah satu syarat untuk memperoleh gelar

Sarjana Komputer pada

Departemen Ilmu Komputer

DEPARTEMEN ILMU KOMPUTER

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

INSTITUT PERTANIAN BOGOR

BOGOR

2013

(3)

ABI PANCA GUMILANG. C Code Plagiarism Detection Using K-Means. Supervised by AHMAD RIDHA.

The practice of plagiarism in programming assignments can be easily done by students. Thus, a system that can detect this practice, i.e., by grouping similar programs into a cluster, is needed. K-Means clustering is a method of flat clustering that has been used to determine similar codes based on the structure of the source codes. The objective of this research is to make the checking process automatic. This research uses a sample of 92 source codes in C comprising 9 groups based on the source code structure similarity. In this study we conducted two experiments, i.e., by determining the number of clusters (manual) and without determining the number of clusters (automatic). The results indicate that the manual experiment resulted in a higher Rand Index (91.35%) and a faster execution time. The system is able to perform automatic clustering process with a Rand Index of 90.63%. The automated clustering does not have significant difference of Rand index, implying the performance is good enough for the clustering without determining the K value first.

(4)

Penguji : Sony Hartono Wijaya, SKom MKom Musthofa, SKom MSc

(5)

Judul Skripsi : Pendeteksian Penjiplakan Kode Program C dengan K-Means Nama : Abi Panca Gumilang

NRP : G64070042

Menyetujui:

Pembimbing

Ahmad Ridha, SKom MS NIP. 19800507 200501 001

Mengetahui: Ketua Departemen

Dr Ir Agus Buono, MSi MKom NIP. 19660702 199302 1 001

(6)

PRAKATA

Puji dan syukur penulis panjatkan ke hadirat Allah Subhanahu wa Ta’ala atas rahmat, hidayah, dan nikmat-Nya sehingga penulis dapat menyelesaikan penelitian ini sebagai tugas akhir untuk memperoleh gelar Sarjana Komputer. Banyak pihak yang telah memberikan bantuan baik yang bersifat materi maupun moral kepada penulis dalam penyelesaian tugas akhir ini. Oleh karena itu, penulis ingin menyampaikan rasa terima kasih yang sebesar-besarnya kepada:

1 Ayahanda Sutopo dan Ibunda Emma Kurniasari serta Kakak-kakak Manggar Purwa Setiawan, Dwinanto Mulyo Satriotomo dan Danu Darmoyuwono yang senantiasa mendoakan, mendukung, serta memberikan motivasi dan kesabarannya dalam mengingatkan penulis untuk menyelesaikan tugas akhir. Keluarga besar Natawidjaya yang selalu mendukung dan mendoakan penulis.

2 Bapak Ahmad Ridha, SKom MS selaku dosen pembimbing yang senantiasa membimbing dan mengarahkan dengan sabar serta memberi saran dan motivasi yang membangun.

3 Bapak Sony Hartono Wijaya, SKom MKom dan Bapak Musthofa, SKom MSc selaku dosen penguji yang telah memberikan kritik dan saran yang membangun.

4 Teman-teman Ilmu Komputer 44 yang selalu sabar berbagi ilmu, membantu, dan mengajarkan penulis dalam proses menyelesaikan tugas akhir.

5 Sahabat-sahabat penulis: Arizal Notyasa, Remarchtito Heyziputra, Nur Nissa A. D., Ade Fruandta, Teguh Cipta Pramudia, Huswantoro Anggit P. M., Inne Larasati, Ni Made F., Ria Astriratma, Rani Dwijayanti, Windy Widowati, serta Risa Nurul Fitra yang selalu ada menemani, mendukung, mengingatkan, membantu, dan memberi semangat serta motivasi kepada penulis.

6 Teman-teman satu Ilmu Komputer, serta semua pihak yang telah memberikan dorongan, semangat, doa, bantuan dan kerja samanya selama pengerjaan tugas akhir ini.

Semoga tulisan ini dapat bermanfaat bagi para pembaca. Terima kasih.

Bogor, November 2012

(7)

RIWAYAT HIDUP

Abi Panca Gumilang dilahirkan di kota Jakarta, pada tanggal 30 Desember 1989 dari pasangan Bapak Sutopo dan Ibu Emma Kurniasari dan merupakan anak terakhir dari lima bersaudara. Pada tahun 2007, penulis lulus dari SMA Negeri 3 Jakarta dan diterima di Program Studi Ilmu Komputer Institut Pertanian Bogor melalui jalur Undangan Seleksi Masuk IPB (USMI). Selain itu, penulis juga aktif dalam beberapa organisasi kampus, seperti Fraternidade Esportivo de Capoeira Alegria IPB (FEDCA IPB) di bagian pelaksanaan pelatihan dan anggota komunitas film Ilmu Komputer (FOKERZ). Penulis juga sering menjadi panitia pada acara-acara yang diadakan oleh Himpunan Mahasiswa Ilmu Komputer. Penulis melaksanakan praktik kerja lapangan pada tanggal 28 Juni 2010 hingga tanggal 20 Agustus 2010 di Bank Indonesia divisi Tim Pengembangan dan Pemeliharaan Aplikasi Bidang Moneter.

(8)

v

DAFTAR ISI

Halaman DAFTAR TABEL ... vi DAFTAR GAMBAR ... vi DAFTAR LAMPIRAN ... vi PENDAHULUAN Latar Belakang... 1 Tujuan Penelitian ... 1 Ruang Lingkup ... 1 Manfaat ... 1 METODE PENELITIAN Studi Literatur dan Pengambilan Data Penelitian ... 2

Pemilihan Sampel Tugas dan Pengelompokan Awal ... 2

Clustering ... 2

Validasi Hasil Clustering ... 4

Otomatisasi Pengelompokan ... 4

Lingkungan Implementasi ... 5

HASIL DAN PEMBAHASAN Pemilihan Sampel Tugas dan Pengelompokan Awal ... 5

Clustering ... 5

Otomatisasi Pengelompokan ... 7

Validasi Hasil Clustering dan Analisis Hasil ... 9

KESIMPULAN DAN SARAN Kesimpulan... 11

Saran ... 11

DAFTAR PUSTAKA ... 11

(9)

vi

DAFTAR TABEL

Halaman

1 Konversi kode program ... 2

2 Hasil pengelompokan awal ... 6

3 Term frequency ... 7

4 Hasil looping dengan iterasi maksimum 25 ... 7

5 Hasil pengelompokan iterasi pertama percobaan pertama ... 8

6 Hasil pengelompokan iterasi pertama percobaan kedua ... 8

7 Contoh cluster hasil pengelompokan dengan K = 9 ... 9

8 Contoh cluster hasil pengelompokan otomatis ... 10

DAFTAR GAMBAR

Halaman 1 Tahapan penelitian. ... 1

2 Tahapan praproses sebelum clustering. ... 2

3 Ilustrasi kesamaan kosinus dengan query T1 dan T2. ... 3

4 Alur otomatisasi pengelompokan. ... 4

DAFTAR LAMPIRAN

1 Daftar konversi kode program ... 13

(10)

PENDAHULUAN

Latar Belakang

Tugas pemrograman biasanya dikumpulkan berupa berkas elektronik. Hal ini sangat memungkinkan terjadinya penjiplakan yang dapat dilakukan mahasiswa. Untuk mengetahui terjadinya plagiat, dibutuhkan pemeriksaan kemiripan program. Pemeriksaan dengan tenaga manusia akan memakan banyak waktu dan menguras tenaga yang dapat mengurangi efisiensi kerja. Pemeriksaan kemiripan juga dipersulit oleh keahlian mahasiswa dalam melakukan plagiat misalnya mengubah nama variabel dan menambahkan blok komentar pada tugasnya. Oleh sebab itu, dibutuhkan sistem yang dapat memeriksa kemiripan tugas-tugas pemrograman secara otomatis.

Pemeriksaan kemiripan kode program yang dilakukan oleh Burrows (2004) ialah dengan cara mencari kode program dari query yang diberikan dan menghitung kemiripannya. Sistem yang digunakan oleh Burrows adalah structure-oriented code-based system. Sistem berbasis kode dengan berorientasikan pada struktur kode program ini membuat representasi yang lebih ringkas dari kode program. Sistem ini sengaja mengabaikan elemen yang mudah dimodifikasi seperti blok komentar, white space dan nama variabel. Sistem berorientasi struktur tidak terlalu rentan terhadap penambahan pernyataan yang berlebihan. Untuk menghindari pendeteksian, mahasiswa harus memodifikasi semua bagian program secara signifikan (Bowyer dan Hall 1999, Gitchel dan Tran 1999, Prechelt et al. 2002 diacu dalam Burrows 2004).

Pendekatan Burrows (2004) ini digunakan untuk pendeteksian penjiplakan kode program dengan cara mengelompokkan kode program yang serupa. Salah satu teknik pengelompokan yang termasuk dalam kategori flat clustering adalah K-Means. Pemodelan K-Means dapat digunakan untuk mengelompokkan dokumen yang menerapkan pengukuran jarak kedekatan suatu dokumen dengan titik centroid-nya (Manning et al. 2008).

Penelitian ini mengelompokkan kode program secara otomatis yang memiliki kemiripan struktural. Pengelompokan kode program dilakukan dengan pemodelan K-Means berdasarkan jarak terdekat yang didapat dari pengukuran kesamaan kosinus dokumen dengan centroid-nya.

Tujuan Penelitian

Tujuan penelitian ini adalah:

1 Membentuk korpus kode program untuk pengujian plagiarisme program C.

2 Mengotomatiskan pendeteksian plagiat pada program bahasa C dengan sistem pengelompokan dokumen-dokumen yang mirip menggunakan pemodelan K-Means.

Ruang Lingkup

Ruang lingkup penelitian ini meliputi: 1 Contoh kasus yang digunakan merupakan

kode program bahasa pemrograman C sebanyak 92 tugas.

2 Nilai masukan berupa path folder yang berisi kumpulan tugas dan jumlah cluster ditentukan sebanyak sembilan cluster. Banyaknya cluster yang digunakan berdasarkan hasil pengelompokan yang telah dilakukan secara manual.

3 Penelitian ini mengasumsikan tidak adanya makro sehingga bagian preprocessor directives dibuang semua.

Manfaat

Pengotomatisan pendeteksian plagiat ini memudahkan dalam pemeriksaan kode program yang dapat meningkatkan efisiensi kerja.

METODE PENELITIAN

Secara umum terdapat 5 tahapan penelitian, yaitu studi literatur dan pengambilan data penelitian, pemilihan sampel tugas dan pengelompokan manual, clustering, validasi hasil clustering dan otomatisasi pengelompokan. Tahapan penelitian dapat dilihat pada Gambar 1.

Gambar 1 Tahapan penelitian. Validasi hasil clustering

Clustering

Studi literatur dan pengambilan data penelitian

Pemilihan sampel tugas dan pengelompokan manual

(11)

Studi Literatur dan Pengambilan Data Penelitian

Tahap awal penelitian dimulai dengan pengumpulan bahan pustaka yang berkaitan dengan pendeteksian praktik plagiat pada kode program. Salah satunya adalah tesis dengan judul “Efficient And Effective Plagiarism Detection For Large Code Repositories” (Burrows 2004) dan artikel “Otomatisasi Pengelompokan Koleksi Perpustakaan dengan Pengukuran Cosine Similarity dan Euclidean Distance” (Kurniawan dan Aji 2006). Selain itu, studi literatur mengenai clustering dan K-Means termasuk dalam tahapan ini.

Data yang digunakan sebagai korpus kode program yang diambil dari lab Temu Kembali Informasi Ilmu Komputer. Data penelitian ini adalah kumpulan berkas elektronik tugas pemrograman yang berisi kode program dengan bahasa pemrograman C.

Pemilihan Sampel Tugas dan Pengelompokan Awal

Pada tahap ini dilakukan pemilihan sampel tugas dan pengelompokan tugas secara manual. Sampel yang dipilih pada penelitian ini memiliki tingkat kesulitan tidak terlalu mudah dan tidak terlalu sulit. Sampel yang dipilih sebanyak 92 kode program. Sampel diperiksa satu per satu dan dikelompokkan berdasarkan kemiripan algoritme dan struktur kode programnya.

Clustering

Proses clustering pada tahap ini menggunakan pemodelan K-Means terhadap dokumen. Alur proses clustering dapat dilihat pada Gambar 2.

Gambar 2 Tahapan praproses sebelum clustering.

Pembuangan preprocessor directives dilakukan karena diasumsikan tidak adanya

makro pada kode program. Selanjutnya Tokenisasi dilakukan untuk memilah keyword dan special character dari kode program bahasa C. Pada proses tokenisasi, karakter white space dibuang sehingga didapat term atau string uniknya saja (Manning et al. 2008). Komentar pada kode program dibuang karena tidak berpengaruh ketika program dijalankan. Setelah pembuangan komentar, dilakukan perubahan uppercase menjadi lowercase semua.

Selanjutnya kode program diubah menjadi token sederhana agar lebih ringkas dan mudah untuk perhitungan. Perubahan kode program menjadi sebuah string panjang dari token yang telah dikonversi disebut token stream (Burrows 2004). Konversi kode program ke

token sederhana dilakukan berdasarkan aturan

pada Tabel 1.

Tabel 1 Konversi kode program

Term Token sederhana

int A main N for M return R ( H ) I { K } L = O < M + A , J ALPHANUM N STRING 5

Tabel 1 memperlihatkan perubahan penulisan kode menjadi token sederhana. ALPHANUM adalah nama fungsi nama variabel atau nilai variabel. STRING adalah sederetan karakter yang diapit oleh tanda "" (doublequote). Berikut adalah contoh kode program yang diubah menjadi token stream:

1 #include <stdio.h>

2 int main (){

3 int var;

4 for (var=0; var<5; var++){ 5 printf("%d\n", var); 6 } 7 return 0; 8 } Tokenstream: ANhikANMhNoNNmNNaaikNh5jNilRNl Selanjutnya token stream ini dilakukan proses N-Gram. N-Gram adalah potongan sejumlah n karakter dari sebuah string. N-Gram merupakan Kumpulan program Pembuangan preprocessor directives N-Gram Tokenisasi Simplification Tabel term frequency

(12)

sebuah metode yang diaplikasikan untuk pembangkitan kata atau karakter. Metode N-Gram ini digunakan untuk mengambil potongan-potongan karakter huruf sejumlah n dari suatu token stream.

Menurut Cavnar dan Trenkle (1994), N-Gram dibedakan berdasarkan jumlah potongan karakter sebesar n. Untuk membantu dalam mengambil potongan-potongan kata berupa karakter huruf tersebut, dilakukan padding dengan blank karakter di awal dan di akhir suatu kata. Sebagai contoh kata ”TEXT” dapat diuraikan ke dalam beberapa N-Gram berikut (penggunaan karakter „_‟ merepresentasikan blank):

uni-grams : T, E, X, T

bi-grams : _T, TE, EX, XT, T_ tri-grams : _TE, TEX, EXT, XT_ quad-grams : _TEX, TEXT, EXT_ quint-grams : _TEXT, TEXT_

Salah-satu keunggulan menggunakan N-Gram dalam pencocokan string adalah karena semua string dipecah menjadi beberapa substring, kesalahan yang terjadi pada suatu string cenderung hanya berpengaruh pada bagian substring-nya, sedangkan sisanya tidak terpengaruh. Berikut contoh string dengan 2-Gram:

Text : _T Te ex xt t_ Teext : _T Te ee ex xt t_

Kesalahan hanya terdapat pada substring “ee” pada string “Teext”, sedangkan sisa substring-nya sama dengan substring pada string “Text”. Token stream diproses N-Gram dengan N = 4. Kemudian kemunculan tiap substring dihitung sehingga didapat tabel term frequency. Tabel ini digunakan sebagai vektor dokumen untuk proses pengelompokan pada algoritme pemodelan K-Means. Berikut adalah pseudocode dari K-Means yang digunakan dalam penelitian ini.

1 K-Means({𝑥 1,...,𝑥 n},K)

2 (𝑠 1 ,𝑠 2, …,𝑠 K)

SelectRandomSeed({𝑥 1,...,𝑥 n},K)

3 for 1 k to K

4 do µ k 𝑠 k

5 while stopping criterion has not been met

6 do for 1 k to K

7 do ωk {}

8 for n 1 to N

9 do j arg maxj` cosine sim

10 ωk ωk {𝑥 n}(reassignment of vector)

11 for to 1 k to K 12 do µ k 𝜔𝑘 1 𝑥 ⋲ ωk𝑥

13 return {µ 1 ,...,µ k }

Tahap awal pada algoritme K-Means adalah memilih centroid awal secara acak (random seed 𝑠 𝐾) dari dokumen-dokumen yang akan dikelompokkan sebanyak K. Kemudian vektor dokumen yang telah dipilih secara acak tadi dimasukkan ke sebuah variabel centroid (µ k). Setelah itu, looping dilakukan selama kriteria pemberhenti belum terpenuhi (Manning et al. 2008). Proses pengelompokan berhenti jika anggota cluster yang baru sama dengan anggota cluster yang lama.

Gambar 3 Ilustrasi kesamaan kosinus dengan query T1 dan T2.

Dalam algoritme pemodelan K-Means terdapat pengukuran kemiripan dokumen dalam ruang vektor pada saat looping. Penelitian ini menggunakan ukuran kesamaan kosinus sebagai pengukur kemiripan dokumen. Kesamaan kosinus memiliki sifat makin besar nilai kesamaan kosinusnya semakin dekat jarak kedua vektor tersebut. Gambar 3 adalah ilustrasi dari ukuran kesamaan kosinus.

Perhitungan standar kesamaan antara dua dokumen d1 dan d2 adalah dengan menghitung kesamaan kosinus dari representasi vektor dokumen 𝑉 (d1) dan 𝑉 (d2). Vektor dokumen merupakan term frequency yang merepresentasikan jumlah term pada tiap dokumen. Kesamaan kosinus diformulasikan sebagai berikut:

𝑠𝑖𝑚(𝑑1, 𝑑2) = 𝑉 𝑑1 .𝑉 𝑑2

𝑉 𝑑1 𝑉 𝑑2 , (1)

Pembilang menunjukkan perkalian dalam atau dot product antara dua vektor 𝑉 (d1) dan

𝑉 (d1) 𝑉 (q) 𝑉 (d2) 𝑉 (d3) 1 1 0 0 T1 T2 𝜃

(13)

𝑉 (d2). Penyebut menunjukkan perkalian panjang jarak Euclid masing-masing vektor (Manning et al. 2008).

Validasi Hasil Clustering

Validasi dari hasil clustering dilakukan pada tahap ini. Validasi clustering dilakukan dengan menggunakan perhitungan akurasi Rand Index (RI). RI menghitung persentase keputusan yang benar. Tujuannya adalah memasukkan dua dokumen ke dalam satu cluster yang sama jika dan hanya jika keduanya mirip. Formula RI ditunjukkan sebagai berikut:

RI = TP +TN

TP +FP+FN +TN , (2)

dengan

RI : Rand index

TP : true positive memberikan keputusan dua dokumen mirip dengan cluster yang sama FP : false positive memberikan keputusan dua dokumen berbeda dalam cluster yang sama

TN : true negative memberikan keputusan dua dokumen berbeda di cluster yang berbeda FN : false negative memberikan keputusan dua

dokumen mirip di cluster yang berbeda Setelah mendapatkan hasil akurasi, selanjutnya kekurangan dan kelebihan dari hasil pengelompokan juga dianalisis pada tahap ini.

Otomatisasi Pengelompokan

Pengotomatisan pengelompokan dilakukan pada tahap ini dengan mengubah metode pengelompokan, yaitu dengan tanpa memasukkan banyaknya cluster pada awalmenu. Alur proses otomatisasi dapat dilihat pada Gambar 4.

Proses otomasi ini bermula dari pengelompokan K-Means dengan K = 1 pada iterasi pertama. Proses K-Means menghasilkan kumpulan nama kode program sebagai anggota cluster yang telah terkelompokkan. Tiap anggota cluster memiliki nilai kesamaan kosinus dokumen-centroid. Setelah itu, dilakukan perhitungan rata-rata jarak kesamaan kosinus internal tiap cluster dengan menjumlahkan semua nilai kesamaan kosinus pada satu cluster yang dibagi dengan banyaknya anggota dari cluster tersebut sehingga didapat nilai rata-rata internal (𝑥 a). Setelah didapat 𝑥 a, kemudian nilai-nilai 𝑥 a tersebut dirata-rata kembali dengan menjumlahkan tiap 𝑥 a kemudian dibagi dengan banyaknya K sehingga didapat nilai rata-rata

akhir (I). Salah satu permasalahan dari otomatisasi pengelompokan adalah pemberhenti dari proses otomasi ini. Oleh sebab itu, suatu nilai variabel dibutuhkan sebagai pemberhenti proses ini. Penelitian ini menggunakan nilai i sebagai pemberhenti dalam kondisi I > i. Pada tahap ini, nilai i yang digunakan sebagai batasan minimal untuk pemberhentian proses pengelompokan ditentukan.

Gambar 4 Alur otomatisasi pengelompokan. Ada kondisi saat I > i terpenuhi atau tidak. Jika kondisi terpenuhi, proses berhenti. Jika kondisi tidak terpenuhi, proses selanjutnya adalah pengambilan centroid baru. Setelah terpilih centroid, kemudian K ditambah 1 untuk iterasi ke dua, K = K+1, kemudian dilakukan K-Means kembali, dan begitu seterusnya. Untuk menghindari adanya anggota yang memiliki nilai kemiripan rendah berada dalam satu cluster, dilakukan pemilihan centroid dari anggota cluster yang memiliki jarak terjauh dari yang paling jauh dari centroid pada tiap cluster-nya.

Ada variabel lain selain i yang digunakan sebagai pemberhenti apabila kondisi I > i tidak kunjung terpenuhi, yaitu batas maksimum iterasi. Apabila I tidak dapat mencapai nilai i pada maksimum 25 iterasi, maka proses pengelompokan berhenti. Hal ini dilakukan untuk menghindari terjadinya looping tanpa batas yang terlampau lama.

Percobaan penentuan variabel i dilakukan dengan 20 kali looping mulai dari i = 0.80 hingga i = 1 dengan increment = 0.01 dan maksimum iterasi 25. Proses K-Means dilakukan tiap iterasi, kemudian dihitung nilai I-nya dan dibandingkan apakah nilai I > i. Jika I telah melebihi i, proses berhenti dan berlanjut ke looping i+0.01 dan

Cluster akhir K = 1, iterasi = 1

Ambil

centroid baru K-Means

ya tidak I > i tidak ya iterasi > 25 K++, iterasi++

(14)

seterusnya. Tiap percobaan i dicatat jumlah iterasi, banyak cluster, nilai RI dan nilai I.

Lingkungan Implementasi

Lingkungan implementasi perangkat keras yang digunakan pada penelitian ini berupa desktop dengan spesifikasi sebagai berikut:

Processor : Pentium(R) Dual-Core CPU T4400 @2.20GHz

Memory : 3.00 GB

Harddisk : 250GB

Perangkat lunak yang termasuk lingkungan implementasi pada penelitian ini adalah sebagai berikut:

 Windows 7 Professional sebagai sistem operasi

 PHP 5.3.0 sebagai bahasa pemrograman

Netbeans 6.8 sebagai Integrated Development Environment

XAMPP 2.5 sebagai server control panel

MySQL sebagai database management system

 Notepad++ sebagai editor

HASIL DAN PEMBAHASAN

Pemilihan Sampel Tugas dan Pengelompokan Awal

Pemilihan sampel tugas dilakukan berdasarkan tingkat kesulitan tugas. Sampel ini dipilih dengan tujuan mendapat beberapa kelompok dengan anggota yang memiliki kemiripan sehingga kemiripan kode program dapat dianalisis. Berikut adalah salah satu kode program yang digunakan sebagai sampel. Contoh kode program yang digunakan sebagai sampel:

1 #include <stdio.h>

2 main()

3 {

4 unsigned long int a,n=0; 5 long int b=0;

6 scanf("%lu", &a); //baca input 7 while ((pow(10,n++))<=a) 8 b+=1; 9 printf("%lu\n", b); //cetak hasil 10 return 0; 11 }

Tugas dengan tingkat kesulitan rendah sebagian besar memiliki algoritme yang sama, sedangkan tugas dengan tingkat kesulitan tinggi memiliki algoritme yang cenderung berbeda. Oleh sebab itu, pemilihan tugas dengan tingkat

kesulitan menengah dianggap tepat untuk pengelompokan awal.

Pengelompokan 92 kode program secara manual menghasilkan 9 cluster dengan struktur kode program yang berbeda. Hasil pengelompokan manual dapat dilihat pada Tabel 2. Cluster 1 memiliki anggota sebanyak 30 kode program karena sebagian besar sampel kode program sama strukturnya pada cluster ini. Cluster 3 merupakan kelompok dengan anggota terbanyak kedua setelah cluster 1. Berikut masing-masing contoh kode program pada cluster 1 dan cluster 3.

Kode program M80:

1 #include <stdio.h>

2 main()

3 {

4 unsigned long int a,n=0; 5 long int b=0; 6 scanf("%lu", &a); 7 while ((pow(10,n++))<=a) 8 b+=1; 9 printf("%lu\n", b); 10 return 0; 11 } Kode program M91: 1 #include<stdio.h> 2 main(){

3 unsigned long int n; 4 int digit=0; 5 scanf("%lu", &n); 6 while(n != 0) 7 { 8 digit++; 9 n= n/10;} 10 printf("%d", digit); 11 return 0; 12 } Clustering

Proses clustering memiliki beberapa tahap praproses data, yaitu pembuangan preprocessor directives, tokenisasi, simplification, serta N-Gram. Setelah tahap praproses selesai, kemudian dihitung term tiap dokumen sehingga didapat tabel term frequency yang digunakan sebagai vektor dokumen pada algoritme pemodelan K-Means. Ukuran kesamaan kosinus digunakan dalam pemodelan K-means sebagai pengukur kemiripan dokumen-centroid.

Preprocessor directives dibuang setelah proses parsing selesai, yaitu proses pembacaan dan pengenalan kode program mulai dari tanda „#‟ pada awal kode program hingga tanda „}‟ pada akhir kode program. Pembuangan

(15)

preprocessor directives dilakukan karena diasumsikan tidak adanya makro dalam tugas-tugas tersebut. Oleh sebab itu, preprocessor directives tersebut tidak dibutuhkan.

Proses selanjutnya adalah tokenisasi. Pemilahan keyword dan special character pada kode program dilakukan dalam proses tokenisasi. Keyword dan special character didapat setelah memisah tiap term dengan membuang white space dan komentar dari kode program. Pembuangan komentar dilakukan karena komentar tidak berpengaruh pada jalannya kode program. Berikut adalah kode program yang

telah dibuang preprocessor directives dan komentarnya:

1 main()

2 {

3 unsigned long int a,n=0; 4 long int b=0; 5 scanf("%lu", &a); 6 while ((pow(10,n++))<=a) 7 b+=1; 8 printf("%lu\n", b); 9 return 0; 10 }

Tabel 2 Hasil pengelompokan awal

1 2 3 4 5 6 7 8 9 M80 M92 M91 M90 M87 M84 M74 M68 M73 M77 M33 M89 M88 M75 M81 M52 M43 M34 M76 M25 M82 M86 M65 M59 M39 M27 M71 M7 M79 M85 M54 M55 M30 M22 M70 M6 M78 M83 M35 M53 M18 M69 M3 M72 M46 M29 M17 M67 M2 M64 M40 M24 M16 M66 M62 M37 M21 M5 M63 M58 M15 M1 M61 M50 M9 M60 M44 M57 M41 M56 M38 M51 M36 M49 M26 M48 M20 M47 M10 M45 M42 M32 M31 M28 M23 M19 M14 M13 M12 M11 M8 M4

(16)

Setelah keyword dan special character dipilah, masing-masing term diubah dari uppercase menjadi lowercase. Sebagai contoh: Int diubah menjadi int. Tujuan dilakukannya perubahan tersebut agar mempermudah konversi selanjutnya karena kedua keyword ini dianggap sebagai dua term yang berbeda walaupun memiliki arti yang sama, yaitu mendeklarasikan tipe integer.

Selanjutnya, keyword dan special character dikonversi menjadi sebuah token sederhana dan diurutkan berdasarkan struktur program. Setelah diurutkan, kode program tersebut berubah bentuk menjadi sebuah string panjang sederhana yang merepresentasikan struktur kode program. Aturan perubahan term menjadi token sederhana dapat dilihat pada Lampiran 1. Berikut adalah hasil pengurutan berupa token stream dari sampel kode program yang digunakan:

“NhikHFANjNoNFANoNNh5jfNiKhhNhNjNa aiimoNiNaoNNh5jNiRNl”.

Setelah string panjang didapat, dilakukan proses N-Gram pada string tersebut. Hasil proses N-Gram dapat dilihat pada Tabel 3.

Tabel 3 Term frequency

Dok Term

Nhik hikF ikHF kHFA HFAN ...

dok1 1 1 1 1 3 ...

dok2 1 1 0 0 2 ...

dok3 1 1 1 1 3 ...

... ... ... ... ... ... ...

Tabel 3 menunjukkan hasil dari proses N-Gram yang dilakukan dengan menggunakan N = 4. Selanjutnya, dilakukan penghitungan frekuensi tiap term dari hasil proses N-Gram. Hasil term frekuensi ini kemudian disimpan ke dalam berkas XML. Tabel term frequency ini digunakan pada pemodelan K-Means sebagai vektor dokumen kode program. Vektor dokumen pada pemodelan K-Means digunakan untuk perhitungan kemiripan dengan menggunakan ukuran kesamaan kosinus. Semakin besar nilai kesamaan kosinusnya, maka semakin dekat jarak dokumen dengan centroid.

Otomatisasi Pengelompokan

Pengotomatisan pengelompokan dilakukan

dengan mengubah mekanisme

pengelompokannya yang sebelumnya harus memasukkan banyaknya cluster menjadi hanya memasukkan path direktori dan nama tugas.

Tahapan ini dapat dilihat pada Gambar 4. Langkah pengelompokan pada pengotomatisan ini dilakukan sama seperti pengelompokan K-Means sebelumnya hanya saja berbeda pada saat pemilihan seed di awal.

Sebuah percobaan dilakukan untuk menentukan nilai i yang cocok sebagai pemberhenti proses clustering otomatis. Nilai I harus dihitung terlebih dahulu untuk menentukan nilai i yang akan digunakan. Misalnya, terdapat 3 cluster, tiap cluster memiliki anggota yang sudah dihitung jarak kesamaan kosinusnya antara dokumen dan centroid. Nilai-nilai jarak tersebut kemudian dirata-ratakan untuk mendapatkan nilai 𝑥 a pada tiap cluster. Setelah didapat nilai rata-rata jarak dari ketiga cluster tersebut, yaitu 𝑥 1,𝑥 2 dan 𝑥 3, ketiga nilai rataan tersebut kemudian dirata-ratakan kembali ([𝑥 1+𝑥 2+𝑥 3]/3) sehingga didapat nilai I. Nilai I digunakan untuk dibandingkan dengan nilai i pada tiap looping seperti kondisi pada Gambar 4. Hasil percobaan ini dapat dilihat pada Tabel 4.

Tabel 4 Hasil looping dengan iterasi maksimum 25 i Jumlah iterasi Banyak cluster RI Rata-rata I 0.80 2 2 0.3287 0.8614 0.81 2 2 0.3287 0.8614 0.82 2 2 0.3287 0.8614 0.83 2 2 0.3287 0.8614 0.84 2 2 0.3287 0.8614 0.85 2 2 0.3287 0.8614 0.86 2 2 0.3287 0.8614 0.87 3 3 0.7293 0.8981 0.88 3 3 0.7293 0.8981 0.89 3 3 0.7293 0.8981 0.90 4 4 0.7634 0.9236 0.91 4 4 0.7634 0.9236 0.92 4 4 0.7634 0.9236 0.93 5 5 0.7651 0.9484 0.94 5 5 0.7651 0.9484 0.95 6 6 0.7692 0.9574 0.96 9 9 0.8865 0.9604 0.97 12 12 0.9063 0.9720 0.98 19 19 0.9467 0.9805 0.99 25 25 0.9388 0.9873 1 25 25 0.9388 0.9873

Berdasarkan hasil percobaan dipilih nilai i = 0.97 yang ditandai dengan arsiran kuning.

(17)

Nilai tersebut diambil karena memiliki RI yang cukup baik, yaitu 0.906 dan memiliki banyak cluster yang mendekati hasil pengelompokan manual seperti pada Tabel 2. Pada i = 0.96, cluster yang terbentuk adalah 9, akan tetapi RI yang dicapai hanya 0.8865. Pada i = 0.98, RI yang dicapai adalah 0.9467. Nilai RI tersebut lebih besar daripada RI pada i = 0.97. Akan tetapi, banyak cluster yang terbentuk pada i = 0.98 terlalu banyak dibandingkan dengan banyak cluster yang terbentuk pada Tabel 2.

Proses yang berhenti karena sudah tercapainya I > i adalah looping dari i = 0.80 hingga i = 0.98, sedangkan proses yang berhenti karena sudah tercapainya iterasi maksimum 25 adalah looping dengan i = 0.99 dan i = 1. Perbedaan pengelompokan manual dan pengelompokan otomatis adalah terjadinya beberapa kali proses pengelompokan yang mengakibatkan lamanya waktu komputasi.

Setelah nilai i ditentukan, dilakukan pengujian otomatisasi pengelompokan. Iterasi pertama proses pengotomatisan pengelompokan dengan K-Means dimulai dengan inisialisasi K = 1. Kemudian, seed diambil secara acak yang digunakan sebagai centroid awal pada iterasi pertama proses K-Means. Setelah proses K-Means selesai, dilakukan pengecekan apakah I > 0.97.

Penelitian ini memanfaatkan nilai hasil perhitungan kesamaan kosinus sebagai faktor dalam memilih centroid baru untuk iterasi berikutnya. Dokumen dengan jarak terjauh dari centroid yang ditandai dengan nilai kesamaan kosinus terkecil, akan dijadikan kandidat untuk pemilihan centroid berikutnya. Dari semua kandidat yang didapat pada tiap cluster, centroid diambil dari anggota yang memiliki jarak paling jauh, yaitu yang memiliki nilai kesamaan kosinus paling kecil. Hal ini dilakukan dengan tujuan meningkatkan fungsi objektif dari pengelompokan, yaitu kemiripan

dokumen pada satu cluster (intra-cluster similarity) yang tinggi dan

kemiripan dokumen pada beda cluster (inter-cluster similarity) yang rendah. Proses pengelompokan otomatis berhenti ketika rata-rata keseluruhan jarak dokumen-centroid I pada tiap cluster melebihi nilai 0.97.

Pengujian pengotomatisan pengelompokan dilakukan dengan beberapa kali percobaan yaitu dengan mengulang pengelompokan sebanyak lima kali. Hasil pengelompokan untuk iterasi pertama proses pengelompokan otomatis pada percobaan pertama dapat dilihat pada Tabel 5.

Tabel 5 Hasil pengelompokan iterasi pertama percobaan pertama Cluster Kode program Jarak kesamaan kosinus dokumen-centroid c0 M92 0.5843 c0 M91 0.7607 c0 M90 0.7301 c0 M89 0.7778 c0 M88 0.7574 c0 M87 0.5450 c0 M86 0.7269 c0 M85 0.7607 c0 M84 0.6423 c0 M83 0.7607

Tabel 5 menunjukkan sepuluh anggota pertama iterasi pertama pada proses pengotomatisan pengelompokan dengan K = 1. Kode program M92 terpilih secara acak sebagai centroid awal. Setelah proses K-Means selesai, pemillihan centroid berikutnya untuk iterasi kedua pengotomatisan pengelompokan diambil dari anggota cluster dengan jarak terjauh dari centroid, yaitu kode program M87 dengan jarak kesamaan kosinus dokumen-centroid sebesar 0.5450 yang ditandai dengan arsiran kuning pada Tabel 5.

Percobaan kedua dilakukan dengan mengulang pengelompokan yang sama. Hasil untuk iterasi pertama proses pengelompokan otomatis pada percobaan kedua dapat dilihat pada Tabel 6.

Tabel 6 Hasil pengelompokan iterasi pertama percobaan kedua Cluster Kode program Jarak kesamaan kosinus dokumen-centroid c0 M92 0.5843 c0 M91 0.7607 c0 M90 0.7301 c0 M89 0.7778 c0 M88 0.7574 c0 M87 0.5450 c0 M86 0.7269 c0 M85 0.7607 c0 M84 0.6423 c0 M83 0.7607

(18)

Tabel 6 menunjukkan sepuluh anggota pertama pada iterasi pertama proses pengotomatisan pengelompokan dengan K = 1. Kode program M16 terpilih sebagai centroid awal. Setelah terbentuk kelompok pada iterasi pertama pengelompokan otomatis, pemillihan centroid berikutnya untuk iterasi kedua proses pengelompokan otomatis, centroid diambil dari anggota cluster dengan jarak terjauh dari centroid, yaitu kode program M87 dengan jarak kesamaan kosinus dokumen-centroid sebesar 0.5450 yang ditandai dengan arsiran kuning pada Tabel 6.

Pengulangan percobaan sebanyak lima kali memberikan hasil pada iterasi pertama dengan K = 1 yang sama pada tiap percobaan. Hal ini mengakibatkan hasil akhir yang terbentuk sama untuk semua perulangan percobaan dengan RI sebesar 0.9027. Centroid yang terpilih pada lima kali percobaan dapat dilihat pada Lampiran 2. Centroid pada iterasi pertama dipilih secara acak, selanjutnya pemilihan centroid dilakukan berdasarkan jarak kesamaan kosinusnya pada tiap iterasi.

Dengan hasil yang demikian, maka tidak diperlukan pengelompokan berulang karena hasil pengelompokan akan sama pada tiap perulangan pengotomatisan pengelompokan sehingga untuk mendapatkan terkelompoknya kode program hanya diperlukan satu kali perulangan pengelompokan. Hal ini tentu memiliki kelebihan, yaitu penghematan dalam penggunaan waktu untuk pengelompokan kode program.

Validasi Hasil Clustering dan Analisis Hasil

Validasi hasil clustering dilakukan dengan dua kali percobaan menggunakan RI. Percobaan pertama adalah pengujian pengelompokan dengan memasukkan K = 9. Pada percobaan pertama, pengujian pengelompokan dilakukan sebanyak lima kali dengan rata-rata hasil RI 91.35%. Rata-rata lama waktu eksekusi pada percobaan pertama adalah 4.3025 detik. Percobaan kedua adalah pengujian pengelompokan yang dilakukan tanpa memasukkan banyaknya cluster. Pada percobaan ke dua pengujian dilakukan sebanyak lima kali pengelompokan otomatis. Percobaan kedua didapat hasil RI sebesar 90.63%. Rata-rata lama waktu eksekusi pada percobaan kedua adalah 20.9882 detik. Contoh hasil percobaan pertama dapat dilihat pada Tabel 7.

Bagian yang ditandai dengan arsiran hijau pada Tabel 7 adalah anggota yang merupakan satu kelompok berdasarkan pada Tabel 2.

Karena banyak cluster sudah ditentukan, pengelompokan pada percobaan ini memberikan rata-rata hasil yang lebih baik dibanding dengan pengelompokan tanpa memasukkan banyaknya cluster. Rata-rata RI yang dihasilkan sebesar 0.9135. Waktu komputasi yang dibutuhkan juga lebih sedikit. Akan tetapi, dengan hasil demikian masih terdapat kekurangan, yaitu ada cluster kosong pada hasil saat percobaan. Kesalahan lain juga terdapat pada hasil pengelompokan seperti pada Tabel 7.

Tabel 7 Contoh cluster hasil pengelompokan dengan K = 9

Kode program

Jarak kesamaan kosinus dokumen-centroid M37 0.7399 M22 0.7788 M17 0.7982 M74 0.8142 M52 0.8142 M39 0.8142 M30 0.8339 M85 0.8614 M83 0.8614 M90 0.8717 M15 0.9027

Bagian yang ditandai dengan kotak garis merah merupakan dua anggota beda kelas yang sekelompok pada cluster ini. Anggota yang ditandai dengan arsiran hijau adalah anggota yang dominan pada cluster tersebut. Masing-masing kode program M30 dan M85 adalah sebagai berikut.

Kode program M30: 1 #include <stdio.h> 2 main(){ 3 int n, i=0; 4 scanf("%d", &n); 5 do { 6 n/=10; 7 i++; 8 } 9 while (n) ; 10 printf("%d\n", i); 11 return 0; 12 }

(19)

Kode program M85: 1 #include <stdio.h> 2 main (){ 3 long int n; 4 int c=0; 5 scanf ("%ld", &n); 6 while (n){ 7 n/=10; 8 c++; 9 } 10 printf ("%d", c); 11 return 0; 12 }

Kode program M30 dan M85 berada pada kelompok yang berbeda berdasarkan Tabel 2, tetapi masuk dalam cluster yang sama pada hasil percobaan pertama. Terdapat perbedaan pada kode program M30 dan M85, yaitu struktur looping dan hasil keluarannya. Pada kode program M30 baris 5 sampai 9 menggunakan struktur do while dan untuk kode program M85 pada baris 6 sampai 9 menggunakan struktur while. Jika diberi masukan 0, keduanya memberikan hasil keluaran yang berbeda. M30 memberikan keluaran 1 sedangkan M85 memberikan keluaran 0. Percobaan kedua menghasilkan 12 cluster untuk 5 kali pengelompokan. Masih terdapat kekurangan pada hasil pengelompokan secara otomatis. Contoh hasil untuk percobaan kedua dapat dilihat pada Tabel 8.

Tabel 8 merupakan contoh cluster hasil percobaan pengelompokan tanpa memasukkan banyaknya cluster. Bagian yang ditandai dengan arsiran hijau adalah anggota yang satu kelompok berdasarkan Tabel 2. Bagian yang ditandai dengan kotak garis merah merupakan anggota yang tidak sekelompok pada Tabel 2, tetapi sekelompok pada percobaan ini seperti kode program M9 dan kode program M79 yang berada pada satu cluster berdasarkan hasil percobaan. Masing-masing kode program M9 dan M79 adalah sebagai berikut.

Kode program M9: 1 #include<stdio.h> 2 main(){ 3 int n,hasil=0; 4 scanf("%d", &n); 5 while(n){ 6 hasil++; 7 n /= 10; 8 } 9 printf("%d\n", hasil); 10 return 0; 11 }

Tabel 8 Contoh cluster hasil pengelompokan otomatis

Kode program Jarak kesamaan kosinus dokumen-centroid M75 0.7601 M21 0.7601 M16 0.7731 M40 0.7512 M29 0.7601 M35 0.7690 M9 0.7811 M79 0.8046 M54 0.8109 M65 0.8167 M26 0.8740 M91 0.8844 M1 0.8876 M41 0.8876 M27 0.8876 M18 0.8876 M5 0.8876 M89 0.9208 M82 0.9208 M78 0.9208 M58 0.9208 M50 0.9208 M38 0.9208 M20 0.9208 M16 0.9208 Kode program M79: 1 #include <stdio.h> 2 main() 3 { 4 long int n; 5 int sum=0; 6 scanf("%ld", &n); 7 while (n!=0){ 8 sum=sum+1; 9 n=n/10; 10 } 11 printf("%d", sum); 12 return 0; 13 }

(20)

Hasil keluaran pada kode program M9 dan M79 memberikan keluaran yang sama. Misalnya, masukan 1231252 memberikan keluaran 7 pada kedua program tersebut. Akan tetapi, struktur kode program berbeda pada kondisi while pada kode program M9 dan kode program M79. Kode program M9 menggunakan kondisi while(n)pada baris 5, sedangkan kode program M79 menggunakan kondisi while (n!=0)pada baris 7.

Secara keseluruhan, hasil yang demikian disebabkan oleh belum mengertinya sistem terhadap semantik kode program. Secara sintaksis, sistem sudah cukup mampu untuk mengelompokkan kode program berdasarkan struktur kodenya.

Kekurangan dari hasil juga dipengaruhi oleh pemilihan seed pertama kali pada percobaan pertama yang memasukkan banyaknya cluster dan percobaan kedua yang mengelompokkan secara otomatis. Hal ini mempengaruhi hasil akhir pengelompokan dan besar kecilnya nilai RI. Faktor lainnya adalah adanya kemungkinan kekeliruan pengelompok karena cukup sulitnya membandingkan tugas dan menentukan apakah tugas satu dengan tugas yang lain cocok untuk dikelompokkan.

KESIMPULAN DAN SARAN

Kesimpulan

Pengelompokan telah membentuk suatu korpus kode program C yang dapat digunakan untuk pengujian pengelompokan. Korpus tersebut telah digunakan dalam penelitian ini untuk pengelompokan berdasarkan struktur kode program menggunakan K-Means. Untuk mengatasi masalah penentuan banyaknya K dalam pengelompokan, telah dilakukan otomatisasi pengelompokan dengan hasil RI yang selisihnya kurang dari 1%. Dengan demikian, pengelompokan dapat dilakukan tanpa menentukan banyaknya K. Akan tetapi, waktu yang dibutuhkan menjadi jauh lebih lama.

Saran

Penelitian selanjutnya dapat mengembangkan aspek semantik kode program agar pengelompokan lebih optimal. Salah satunya dengan cara mengecek kesamaan keluaran sebelum dikelompokkan. Selain itu, dapat dicoba metode clustering yang tidak perlu menentukan banyaknya K seperti hierarchical clustering agar pengelompokan lebih cepat. Korpus kode program C perlu dikembangkan agar mencakup kompleksitas kode program yang beragam.

DAFTAR PUSTAKA

Bowyer K, Hall L. Experience using MOSS to detect cheating on programming assignments. Di dalam 29th ASEE/IEEE

Frontiers in Education Conference: San

Juan, 10-13 Nov 1999. Hlm 18-22.

Burrows S. 2004. Effecient and effective plagiarism detection for large code repositories [tesis]. Melbourne: RMIT University, Australia.

Cavnar WB, Trenkle JM. 1994. N-Gram-Based

Text Categorization. Ann Arbor:

Environmental Research Institute of Michigan.

Gitchel D, Tran N. Sim: A utility for detecting similarity in computer programs. Di dalam

30th SIGCSE Technical Symposium: New

Orleans, 14-28 Mar 1999. Hlm 266-270. Kurniawan H, Aji RF. Otomatisasi

pengelompokan koleksi perpustakaan dengan pengukuran cosine similarity dan

euclidean distance. Di dalam SNATI:

Yogyakarta, 17 Jun 2006. Hlm 19-22. Manning CD, Raghavan P, Schütze H. 2008. An

Introduction to Information Retrieval.

Cambridge: Cambridge University Press. Prechelt L, Malpohl G, Philippsen M. 2002.

Finding plagiarisms among a set of programs with JPlag. Universal Computer

(21)
(22)

Lampiran 1 Daftar konversi kode program

Keyword / special character Pemetaan

+ a - b * c / d % e & f | g ( h ) i , j { k } l < m > n = o . p ! q : r int A float B char C double D

Keyword / special character Pemetaan

short E long F signed G unsigned H if I else J while K do L for M

abjad atau angka dan nama

fungsi N goto O case P break Q return R switch S const T continue U sizeof W struct X enum Y typedef Z "string" 5

Lampiran 2 Centroid yang terpilih pada lima kali percobaan

Percobaan 1 Percobaan 2 Percobaan 3 Percobaan 4 Percobaan 5

M92 M16 M4 M67 M55 M87 M87 M87 M87 M87 M22 M22 M22 M22 M22 M87 M87 M87 M87 M87 M30 M30 M30 M30 M30 M22 M22 M22 M22 M22 M62 M62 M62 M62 M62 M37 M37 M37 M37 M37 M84 M84 M84 M84 M84 M68 M68 M68 M68 M68 M24 M24 M24 M24 M24

Referensi

Dokumen terkait

Selanjutnya setelah dilakukan N- gram dengan nilai N=4, frequency jumlah kemunculan setiap N-gram dari masing- masing kode program dihitung dengan menggunakan tool

Dengan adanya masalah tersebut, maka dilakukan penelitian pengelompokan peminjam dan kelompok buku yang banyak dipinjam dengan metode k-means untuk menunjang

K-Means menggunakan k kelompok yang telah ditetapkan (k kelompok pertama sebagai centroid) dan secara berterusan akan melalui proses pengiraan titik tengah (min) sehingga

Yang pertama adalah dengan membatasi banyak kelompok yang terbentuk melalui proporsi eigen value matriks korelasi dari objek yang akan dikelompokkan.. Yang kedua

Untuk menguji apakah kode program penanganan makro yang sudah dibuat berfungsi atau tidak dibutuhkan data kode program yang mempunyai banyak jenis makro di dalamnya oleh karena