Pendeteksian Kemiripan Kode Program C dengan Algoritme KMedoids

PENDETEKSIAN KEMIRIPAN KODE PROGRAM C
DENGAN ALGORITME K-MEDOIDS

RADEN FITYAN HAKIM

DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENG ETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
BOGOR
2014

PERNYATAAN MENGENAI SKRIPSI DAN
SUMBER INFORMASI SERTA PELIMPAHAN HAK CIPTA
Dengan ini saya menyatakan bahwa skripsi berjudul Pendeteksian
Kemiripan Kode Program C dengan Algoritme K-medoids adalah benar karya
saya dengan arahan dari komisi pembimbing dan belum diajukan dalam bentuk
apa pun kepada perguruan tinggi mana pun. Sumber informasi yang berasal atau
dikutip dari karya yang diterbitkan maupun tidak diterbitkan dari penulis lain telah
disebutkan dalam teks dan dicantumkan dalam Daftar Pustaka di bagian akhir
skripsi ini.
Dengan ini saya melimpahkan hak cipta dari karya tulis saya kepada Institut

Pertanian Bogor.
Bogor, September 2014
Raden Fityan Hakim
NIM G64070032

ABSTRAK
RADEN FITYAN HAKIM. Pendeteksian Kemiripan Kode Program C dengan
Algoritme K-medoids. Dibimbing oleh IMAS SUKAESIH SITANGGANG.
Aksi penjiplakan terhadap kode program lebih sering dan lebih mudah
dilakukan. Pendeteksian manual terhadap penjiplakan memakan banyak waktu
maupun tenaga. Pendeteksian dapat dilakukan dengan mengelompokkan kode
program yang mirip berdasarkan strukturnya. Penelitian ini bertujuan untuk
menerapkan algoritme K- medoids pada 4 dataset kode program C untuk
menentukan kemiripan dari kode-kode program tersebut dan menganalisis hasil
pengelompokan yang diperoleh. Hasil percobaan menunjukkan clustering terbaik
pada dataset1 (Kondisi If- Else dan Pengulangan While) diperoleh pada k=10
dengan rataan dissimilarity 2.655, dan sebanyak 18.9% tugas mahasiswa memiliki
kelompok yang sama. Pada dataset2 (Pengulangan While), clustering terbaik
diperoleh pada k=9 dengan rataan dissimilarity 2.227, dan 32.6% tugas
mahasiswa memiliki kelompok yang sama. Untuk dataset3 (Pengulangan For

Bersarang dan Kondisi If), tugas mahasiswa terbagi menjadi dua buah cluster
dengan rataan dissimilarity 0.719, dan sebanyak 87% tugas mahasiswa berada
pada cluster yang sama. Hasil clustering terbaik pada dataset4 (Kondisi If- Else
dan Pengulangan For) diperoleh pada k=6 dengan rataan dissimilarity 3.199, dan
sebanyak 61% tugas mahasiswa berada pada kelompok yang sama. Nilai akurasi
dari hasil pengclusteran mencapai 93.28%.
Kata kunci: algoritme K-medoids, clustering, pendeteksian kemiripan

ABSTRACT
RADEN FITYAN HAKIM. C Source Code Similarity Detection using KMedoids Algorithm. Supervised by IMAS SUKAESIH SITANGGANG.
Practice of plagiarism on program codes is more common and easier to do.
Manual detection of plagiarism takes a lot of time and effort. The detection can be
done by grouping program codes that have similar structures. This study intends
to apply K-medoids algorithm on 4 C code program datasets to find similarities of
code program and analyze clustering results. The experimental results show that
the best clustering in dataset1 (If- Else Condition and Looping While) was
obtained at k=10 with an average of dissimilarity 2.655, and 18.9% of students
have the same group. In dataset2 (Looping While), the best clustering was
obtained at k=9 with an average of dissimilarity 2.227, and 32.6% student
assignments are in the same group. For dataset3, the assignments are divided into

two clusters with an average of dissimilarty 0.719, and 87% of students
assignments are in the same cluster. The best clustering result on the dataset4 was
obtained at k=6 with an average of dissimalrity 3.199, and 61% of students
assignments are in the same group. The accuracy rate from clustering results is
93.28%.
Keywords: clustering, K-Medoids algorithm, similarity detection

PENDETEKSIAN KEMIRIPAN KODE PROGRAM C
DENGAN ALGORITME K-MEDOIDS

RADEN FITYAN HAKIM

Skripsi
sebagai salah satu syarat untuk memperoleh gelar
Sarjana Komputer
pada
Departemen Ilmu Komputer

DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENG ETAHUAN ALAM

INSTITUT PERTANIAN BOGOR
BOGOR
2014

Judul Skripsi : Pendeteksian Kemiripan Kode Program C dengan Algoritme KMedoids
Nama
: Raden Fityan Hakim
NIM
: G64070032

Disetujui oleh

Dr Imas Sukaesih Sitanggang, SSi MKom
Pembimbing

Diketahui oleh

Dr Ir Agus Buono, MSi MKom
Ketua Departemen


Tanggal Lulus:

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 Tjatja Sudarsa dan ibunda Nenden Malihah serta Kakak penulis Elva
Munawwaroh, Vera Farohatul Mardiah, Irvaanulhakim, Maftuh Hasan
Harkoni, Euis YP Harun, dan Miftah Suritho yang senantiasa mendoakan,
memotivasi dan memberikan kasih sayangnya kepada penulis.
2 Ibu Dr.Imas Sukaesih Sitanggang S.Si, M.Kom selaku dosen pembimbing yang
senantiasa membimbing dan mengarahkan dengan sabar serta memberi saran
dan motivasi yang membangun.
3 Bapak Hari Agung Adrianto, S.Kom, M.Si dan Bapak Aziz Kustiyo S.Kom,
M.Si selaku dosen penguji.
4 Seluruh staff Departemen Ilmu Komputer yang senantiasa membantu penulis.
5 Teman-teman Ilmu Komputer 44 yang selalu sabar berbagi ilmu, membantu,

dan mengajarkan penulis dalam proses menyelesaikan tugas akhir.
6 Sahabat-sahabat penulis: Rilan, Adi Gunarso, Dipta, Yanta, Abi, serta Arizal,
yang selalu ada menemani, mendukung, mengingatkan, membantu, dan
memberi semangat serta motivasi kepada penulis.
Akhir kata, Penulis berharap semoga tulisan ini dapat berma nfaat bagi para
pembaca.

Bogor, Agustus 2014
Raden Fityan Hakim

DAFTAR ISI
DAFTAR TABEL

v

DAFTAR GAMBAR

v

DAFTAR LAMPIRAN


v

PENDAHULUAN

1

Latar Belakang

1

Perumusan Masalah

2

Tujuan Penelitian

2

Manfaat Penelitian


2

Ruang Lingkup Penelitian

2

METODE

3

Data Penelitian

3

Tahapan Penelitian

3

Pengelompokan Data Manual


4

Praproses Data

4

Penerapan Algoritme K- medoids

6

Algoritme K-medoids

7

Analisis Hasil Cluster

8

Evaluasi Hasil Clustering


8

HASIL DAN PEMBAHASAN

9

Pengelompokan Manual

9

Praproses Data

10

Penerapan Algoritme K- medoids

12

Analisis Hasil Cluster


14

Evaluasi Hasil Clustering

19

SIMPULAN DAN SARAN

20

Simpulan

20

Saran

20

DAFTAR PUSTAKA

20

RIWAYAT HIDUP

34

DAFTAR TABEL
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Komposisi data penelitian
Contoh aturan konversi kode program
Dataset awal
Dataset setelah pengelompokan manual
Term frequency
Hasil clustering untuk DataSet1
Hasil clustering untuk DataSet2
Hasil clustering untuk DataSet3
Hasil clustering untuk DataSet4
Hasil cluster terbaik untuk DataSet1
Hasil cluster terbaik untuk DataSet2
Hasil cluster terbaik untuk DataSet3
Hasil cluster terbaik untuk DataSet4
Nilai akurasi setiap dataset

3
5
9
10
12
13
13
13
14
14
16
17
18
19

DAFTAR GAMBAR
1
2
3
4
5
6
7
8

Tahapan penelitian
Praproses data
Contoh penyederhanaan kode program
Algoritme K-medoid
Hasil pembuangan preprocessor directives
Hasil proses tokenisasi
Hasil Penyederhanaan token stream
N-gram dengan nilai N=4

3
4
5
8
10
11
11
11

DAFTAR LAMPIRAN
1

Contoh kode program dari masing- masing set data yang digunakan
dalam penelitian
2 Hasil pengelompokan manual
3 Tabel aturan konversi kode program menjadi token sederhana
4 Hasil clustering untuk DataSet1
5 Hasil clustering untuk DataSet2
6 Hasil clustering untuk DataSet3
7 Hasil clustering untuk DataSet4
8 Hasil evaluasi untuk DataSet1
9 Hasil evaluasi untuk DataSet2
10 Hasil evaluasi untuk DataSet3
11 Hasil evaluasi untuk DataSet4

22
24
25
26
27
28
29
30
31
32
33

PENDAHULUAN
Latar Belakang
Pada era globalisasi yang serba cepat dan instan saat ini, mahasiswa
cenderung menginginkan segala sesuatunya dapat dilakukan dengan cepat,
mudah, dan praktis. Kemajuan teknologi yang terjadi malah disalahgunakan oleh
kebanyakan orang untuk melakukan kecurangan, salah satunya adalah tindak
penjiplakan atau plagiarism. Hal itu dapat terlihat pada saat para siswa
mengerjakan tugas sekolah maupun tugas matak uliah. Mereka cenderung
berkeinginan untuk dapat sesegera mungkin menyelesaikan tugas mereka tanpa
perlu bersusah payah, cukup dengan menjiplak dari tugas teman yang telah selesai
ataupun mengambilnya dari internet. Dengan begitu tugas sekolah, kantor,
maupun tugas kuliah dapat selesai dengan cepat dan mudah.
Mata kuliah Algoritme dan Pemrograman merupakan salah satu mata
kuliah yang memberikan penugasan berupa kode program yang umumnya
dikumpulkan dalam bentuk berkas digital. Hal ini menyebabkan tugas kode
program rentan terhadap tindak penjiplakan. Saat ini pendeteksian penjiplakan
semakin sulit dilakukan. Hal ini disebabkan bertambahnya jumlah mahasiswa dan
semakin mudahnya mahasiswa untuk saling berbagi hasil pekerjaan baik melalui
internet ataupun media lainnya. Selain itu, pendeteksian semakin sulit dengan
adanya modifikasi berupa penambahan atau penghapusan baris komentar,
merubah nama variabel atau fungsi, maupun merubah susunan struktur kode
programnya. Sehingga, pendeteksian secara manual sangatlah memakan banyak
biaya dan juga tenaga. Oleh karena itu dibutuhkan suatu cara ataupun sistem yang
dapat membantu pendeteksian penjiplakan secara otomatis.
Pendeteksian kemiripan kode program secara otomatis oleh Burrows (2004)
ialah dengan mengindeks semua kode program yang terkumpul, kemudian
melakukan query terhadap hasil indexing tersebut untuk mendapatkan kode-kode
program yang mirip. Burrows (2004) menggunakan cara pendeteksian penjiplakan
structure-oriented code-based system. Sistem ini membuat representasi sederhana
dari kode program. Sistem ini sengaja mengabaikan elemen yang mudah
dimodifikasi seperti komentar, whitespace, dan nama variabel. Sistem berorientasi
struktur ini juga tidak rentan terhadap penambahan kode program yang bersifat
redundant.
Gumilang (2013) menggunakan structure-oriented code-based system untuk
pendeteksian penjiplakan kode program C dengan clustering. Proses
pengelompokan pada penelitian Gumilang (2013) dilakukan dengan menggunakan
algoritme K-means. Pada penelitian ini, Gumilang (2013) melakukan iterasi Kmeans secara otomatis. Iterasi K-means otomatis yaitu melakukan clustering
menggunakan K- means dengan nilai K bertambah secara otomatis pada setiap
iterasinya. Iterasi berhenti apabila anggota-anggota clusters hasil sudah cukup
dekat dengan centroid- nya.
Notyasa (2013) juga menggunakan structure-oriented code-based system
untuk pendeteksian penjiplakan kode program C dengan clustering. Proses
pengelompokan pada penelitian ini dengan menggunakan salah satu metode
clustering HDC yaitu bisecting K-means yang menggunakan pendekatan top-

2
down, dimana seluruh dokumen dimasukkan ke dalam satu cluster awal kemudian
dipisahkan berdasarkan kemiripannya dengan menggunakan K- means dengan
jumlah iterasi sebanyak 5 kali.
Salah satu teknik clustering adalah K-medoids. Algoritme K-medoids
merupakan penyempurnaan dari algoritme K-means yang sangat sensitif terhadap
nilai outlier atau titik terjauh. K-medoids mengambil sebuah objek aktual untuk
merepresentasikan sebuah cluster, dengan menggunakan sebuah objek untuk
setiap clusternya (Han dan Kamber 2011).
Pendeteksian kemiripan pada penelitian ini menggunakan dataset yang
berupa sejumlah N-gram dari kode program. Dataset ini kemudian diproses
dengan menggunakan WEKA untuk mendapatkan tabel term frequency dari
masing masing kode program dan selanjutnya dikelompokkan dengan
menggunakan algoritme K-medoids.
Perumusan Masalah
Perumusan masalah dalam penelitian ini adalah
1 Bagaimana menerapkan algoritme K-medoids dalam pendeteksian kemiripan
kode program.
2 Apakah algoritme K-medoids dapat menghasilkan cluster yang baik?
3 Bagaimana pola kemiripan kode program yang dihasilkan algoritme Kmedoids pada setiap dataset tugas algoritme dan pemrograman.
Tujuan Penelitian
Tujuan dari penelitian ini adalah menerapkan algoritme K-medoids untuk
menentukan tingkat kemiripan kode program C sehingga dapat membantu
pendeteksian penjiplakan pada kode program. Serta mengevaluasi dan
menganalisis hasil dari pengelompokan kode program.
Manfaat Penelitian
Manfaat dari penelitian ini adalah untuk membantu mempermudah
pendeteksian penjiplakan kode program C dengan mencari tingkat kemiripan dari
struktur kode program, sehingga efisiensi kerja tenaga pendidik dapat meningkat
dan tindak penjiplakan yang dilakukan mahasiswa dapat berkurang .
Ruang Lingkup Penelitian
Dalam penelitian ini akan digunakan empat buah dataset, dengan jumlah
data sebanyak 307 buah kode program C. Untuk dataset1 dengan jenis tugas
Kondisi If- Else dan Pengulangan While merupakan dataset yang dipilih untuk
melengkapi penelitian ini. Sedangkan untuk dataset2 yaitu jenis tugas
Pengulangan While, penelitian ini menggunakan dataset yang dipakai oleh
Gumilang (2013), dan untuk dataset3 dengan jenis tugas Pengulangan For
Bersarang dan Kondisi If serta dataset4 dengan jenis tugas Kondisi If-Else dan
Pengulangan For merupakan dataset yang digunakan oleh Notyasa (2013). Untuk
data N-gram dari setiap data tugas pemrograman C diperoleh dari hasil penelitian

3
sebelumnya yang dilakukan Notyasa (2013). Tabel 1 menunjukkan komposisi dari
data yang digunakan pada penelitian ini.
Tabel 1 Komposisi data penelitian
Dataset
dataset1
dataset2
dataset3
dataset4

Kode
Tugas
pjj0210
pjj0302
pjj0307
pjj0309

Keterangan
Kondisi If-Else dan Pengulangan While
Pengulangan While
Pengulangan For Bersarang dan Kondisi If
Kondisi If-Else dan Pengulangan For

METODE
Data Penelitian
Data yang digunakan pada penelitian ini merupakan kode program yang
diambil dari Bagian Komputasi Terapan Departemen Ilmu Komputer. Data
penelitian ini adalah kumpulan berkas digital kode program bahasa C yang
merupakan tugas mata kuliah Algoritme dan Pemrograman yang diberikan
kepada mahasiswa Program S1 Ilmu Komputer. Kode program bahasa C tersebut
dibagi ke dalam empat kelompok berdasarkan jenis tugas, yaitu DataSet1 untuk
jenis tugas pjj0210, DataSet2 untuk pjj0302, DataSet3 untuk pjj0307 dan
DataSet4 untuk jenis tugas pjj0309 dengan total data yang digunakan sebanyak
307 buah kode program tugas pemrograman bahasa C. Keempat buah jenis tugas
yang dipakai untuk dataset pada penelitian ini memiliki tingkat kesulitan
menengah. Hal ini dikarenakan tugas yang terlalu mudah akan memiliki variasi
algoritme pemecahan yang sedikit, sedangkan tugas yang terlalu sulit cenderung
memiliki jumlah kode program yang sedikit karena banyak mahasiswa yang tidak
mengumpulkan tugas.
Tahapan Penelitian
Secara garis besar tahapan penelitian yang dilakukan dalam penerapan
algoritme K-medoids ini memiliki 4 tahapan. Tahapan pada penelitian ini dapat
dilihat pada Gambar 1.
Mulai

Pengelompokan
Manual

Selesai

Analisis Cluster

Praproses Data

Penerapan Algoritme
K-medoids

Gambar 1 Tahapan penelitian

4
Pengelompoka Data Manual
Pada tahapan ini dilakukan pemilihan sampel tugas dan pengelompokan tugas
secara manual. Setiap sampel diperiksa satu persatu dan melalui 2 tahap
pemeriksaaan. Tahap pertama adalah pemeriksaan nilai output kode program dan
tahap kedua adalah pemeriksaan struktur dan algoritme kode program. Pada tahap
pertama setiap kode program dijalankan dan diperiksa nilai output-nya, kemudian
kode-kode program yang memiliki nilai output yang sama akan dikelompokkan ke
dalam satu cluster yang sama. Selanjutnya pada tahap kedua, kode-kode program
tiap cluster tersebut diperiksa strukturnya. Kode-kode program dengan struktur
dan algoritme yang memiliki tingkat kemiripan tinggi dikelompokkan ke dalam
cluster yang sama dan kode program yang berbeda dipisah ke dalam cluster yang
berbeda.
Praproses Data
Praproses data dilakukan untuk mengubah data mentah, yaitu data yang
berupa kode-kode program C, ke format yang dapat diproses dalam clustering,
yaitu tabel term frequency. Praproses data pada penelitian ini terbagi ke dalam 4
tahapan. Gambar 2 menunjukkan alur tahapan praproses data.

Tabel term
frequency

Kumpulan
kode program

Pembuangan
preprocessor
directives

Tokenisasi

Penyederhanaan

N-gram

Gambar 2 Praproses data
Pembuangan Preprocessor Directives
Pada penelitian ini diasumsikan tidak adanya penggunaan makro pada kode
program. Oleh karena itu pada tahap pertama ini dilakukan tahap pembuangan
preprocessor directives. Preprocessor directives merupakan sejumlah baris pada
awal program yang diawali dengan karakter “#”.
Tokenisasi
Proses tokenisasi dilakukan untuk mendapatkan keywords dan special
characters dari kode program. Pada proses tokenisasi ini, karakter whitespace
dibuang semua sehingga didapat term atau string uniknya saja (Manning et al.
2008). Baris komentar pada kode program juga dibuan. Karakter “;” juga dibuang
karena merupakan karakter umum yang selalu digunakan di setiap akhir baris
kode program C. Setelah itu untuk semua karakter pada program dilakukan
perubahan uppercase menjadi lowercase.

5
Penyederhanaan
Selanjutnya pada proses penyederhanaan, keywords dan special characters
kode program diubah menjadi token sederhana agar lebih ringkas dan mudah
dalam pembentukan term. Kode program yang telah diubah menjadi sebuah string
panjang token sederhana disebut dengan token stream (Burrows 2004). Konversi
kode program menjadi token sederhana dilakukan berdasarkan aturan konversi
seperti pada Tabel 2.
Tabel 2 Contoh aturan konversi kode program
Keywords

Token sederhana

Int
For
Return
(
)
{
}
=
<
+
,
ALPHANUM
STRING

A
M
R
h
i
k
l
o
m
a
j
N
5

Tabel 1 memperlihatkan contoh aturan konversi beberapa keywords dan
special characters kode program C menjadi token sederhana. ALPHANUM
adalah nama fungsi, nama variabel, atau nilai variabel. STRING adalah sederetan
karakter yang diapit oleh tanda "" (kutip ganda). Contoh proses penyederhanaan
kode program menjadi sebuah token stream dapat dilihat pada Gambar 3.
1
2
3
4
5
6
7
8

#include
int main (){
int var;
for (var=0; var