Pendeteksian Penjiplakan Kode Program C dengan K-Means

PENDETEKSIAN PENJIPLAKAN KODE PROGRAM C
DENGAN K-MEANS

ABI PANCA GUMILANG

DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
BOGOR
2013

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

ABSTRACT
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.
Keywords: automatic clustering, clustering, K-Means, structure oriented

Penguji

: Sony Hartono Wijaya, SKom MKom
Musthofa, SKom MSc

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

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 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

Abi Panca Gumilang

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.

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
LAMPIRAN ............................................................................................................................. 12

v


DAFTAR TABEL
1
2
3
4
5
6
7
8

Halaman
Konversi kode program ................................................................................................................. 2
Hasil pengelompokan awal ............................................................................................................ 6
Term frequency ............................................................................................................................. 7
Hasil looping dengan iterasi maksimum 25 .................................................................................... 7
Hasil pengelompokan iterasi pertama percobaan pertama ............................................................... 8
Hasil pengelompokan iterasi pertama percobaan kedua .................................................................. 8
Contoh cluster hasil pengelompokan dengan K = 9 ........................................................................ 9
Contoh cluster hasil pengelompokan otomatis ............................................................................. 10


DAFTAR GAMBAR
1
2
3
4

Halaman
Tahapan penelitian. ....................................................................................................................... 1
Tahapan praproses sebelum clustering. .......................................................................................... 2
Ilustrasi kesamaan kosinus dengan query T1 dan T2. ..................................................................... 3
Alur otomatisasi pengelompokan. .................................................................................................. 4

DAFTAR LAMPIRAN
1 Daftar konversi kode program ..................................................................................................... 13
2 Centroid yang terpilih pada lima kali percobaan........................................................................... 13

vi

1


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 structureoriented 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.
Studi literatur dan pengambilan data
penelitian

Pemilihan sampel tugas dan
pengelompokan manual

Clustering

Validasi hasil clustering

Otomatisasi pengelompokan
Gambar 1 Tahapan penelitian.

2

Studi Literatur
Penelitian

dan

Pengambilan

Data

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.

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
int
main
for
return
(
)
{
}
=
<
+
,
ALPHANUM
STRING

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.
Kumpulan
program

Pembuangan
preprocessor
directives

Simplification

Tokenisasi

N-Gram

Tabel term
frequency

Gambar 2 Tahapan praproses sebelum
clustering.
Pembuangan
preprocessor
directives
dilakukan karena diasumsikan tidak adanya

Token sederhana
A
N
M
R
H
I
K
L
O
M
A
J
N
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
2
3
4
5
6
7
8

#include
int main (){
int var;
for (var=0; var i. Pada
tahap ini, nilai i yang digunakan sebagai batasan
minimal
untuk
pemberhentian
proses
pengelompokan ditentukan.
K++,
iterasi++

K = 1,
iterasi = 1

Ambil
centroid baru

K-Means

tidak
iterasi > 25

ya

tidak

I>i

ya
Cluster
akhir

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

5

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

kesulitan menengah
pengelompokan awal.

Lingkungan Implementasi

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.

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

: Pentium(R) Dual-Core CPU
T4400 @2.20GHz
: 3.00 GB
: 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
2
3
4
5
6
7
8
9
10
11

#include
main()
{
unsigned long int a,n=0;
long int b=0;
scanf("%lu", &a);
//baca
input
while ((pow(10,n++))
=
.
!
:
int
float
char
double

long
signed
unsigned
if
else
while
do
for
abjad atau angka dan nama
fungsi
goto
case
break
return
switch
const
continue
sizeof
struct
enum
typedef
"string"

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

Pemetaan

E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
W
X
Y
Z
5