BAB V IMPLEMENTASI DAN PENGUJIAN Berdasarkan analisis pada BAB III dan perancangan pada BAB IV, telah dikembangkan detektor plagiarisme bernama Deimos untuk mendeteksi plagiarisme source code di kelas pemrograman dasar Teknik Informatika ITB. Pada Bab ini dijelaskan mengenai implementasi dan pengujian Deimos berturut-turut pada Subbab 5.1 dan Subbab 5.2.
5.1 Implementasi Pada Tugas Akhir ini, telah diimplementasikan sebuah detektor plagiarisme dengan nama Deimos. Penjelasan mengenai lingkungan implementasi dan pengembangan dapat dilihat di Subbab 5.1.1. Batasan implementasi diuraikan pada Subbab 5.1.2. Detil implementasi dapat dilihat pada Subbab 5.1.3 sampai Subbab 0. 5.1.1 Lingkungan Implementasi dan Pengembangan Detektor plagiarisme Deimos yang diimplementasikan dalam platform Java Runtime Environment dan PHP dikembangkan dalam lingkungan perangkat keras sebagai
berikut: 1. Prosesor Intel Pentium M 1,7 GHz. 2. Memory DDR2 768 MB. 3. Harddisk IDE 40 GB. Spesifikasi perangkat lunak yang dibutuhkan untuk implementasi deteksi plagiarisme Deimos dalam platform Java Runtime Environment dan PHP yaitu:
1. Sistem Operasi Microsoft Windows XP Professional Edition SP2. 2. Java Runtime Environment 1.6.0. 3. Java Platform, Standard Edition Development Kit 1.6.0 4. NetBeans 5.5 IDE. 5. Macromedia Dreamweaver 8 6. Web Server Apache 2.2.0 7. Basis Data MySQL 5.0.18
1
V-2 5.1.2 Batasan Implementasi Batasan dalam implementasi detektor plagiarisme yang diberi nama Deimos dapat dijabarkan sebagai berikut: 1. Saat ini Deimos hanya dapat menangani deteksi pada source code dalam bahasa pemrograman LISP dan Pascal sesuai dengan analisis pada Subbab 3.2.7.1. 2. Penyusunan dan penghapusan file-file source code dilakukan secara manual. 5.1.3 Implementasi Kelas Setiap kelas pada aplikasi backend akan diimplementasikan dalam bahasa pemrograman Java. Sebuah kelas akan diimplementasikan dalam sebuah file. Sedangkan pada aplikasi web, sebuah kelas diimplementasikan dalam PHP. Kelaskelas yang diimplementasikan sesuai pada perancangan kelas yang telah diuraikan di Subbab 4.1 dan Subbab 4.2. Pada aplikasi backend, ada perbedaan antara implementasi dan perancangan pada Subbab 4.1. Perbedaan tersebut ada pada implementasi scanner dan parser serta ketergantungan pada kelas DatabaseConnector. Pada implementasinya, proses scanning dan parsing dilakukan secara sekuensial. Pertama-tama source code dibaca per karakter ketika proses scanning. Proses scanning akan menghasilkan rangkaian token atau sering juga disebut sebagai rangkaian simbol. Rangkaian simbol tersebut akan menjadi input bagi parser. Token string yang akan digunakan untuk pembandingan dihasilkan ketika parsing dilakukan terhadap rangkaian simbol tersebut. Implementasi scanner dan parser untuk bahasa pemrograman Pascal sesuai dengan deskripsi di atas. Namun, ada perlakuan khusus untuk bahasa pemrograman LISP. Struktur sintaks bahasa pemrograman LISP sangatlah sederhana, sehingga dimungkinan scanning dan parsing dalam satu kali pass. Keuntungan satu kali pass adalah proses tokenizing yang lebih efisien, sehingga proses deteksi akan memakan waktu lebih singkat. Oleh karena itu pada implementasinya, kelas Scanner_LISP tidak mempunyai method selain konstruktor dan method override startScan() yang mengembalikan null. Pembacaan source code, sekaligus scanning dan parsing menjadi tanggung jawab kelas Parser_LISP, yang juga akan menghasilkan token string.
V-3 Perbedaan implementasi scanner dan parser untuk bahasa pemrograman Pascal dan LISP ini juga dapat menjadi petunjuk untuk pembangunan scanner dan parser untuk
bahasa pemrograman lain di kemudian hari. Untuk bahasa-bahasa pemrograman prosedural dan object-oriented seperti C, C++ dan Java yang mempunyai grammar sintaks yang cukup rumit, sebaiknya implementasi scanner dan parser-nya mengikuti implementasi scanner dan parser Pascal, dengan satu kali pass pada pembacaan source code dan satu kali pass untuk pembacaan rangkaian simbol. Sedangkan untuk bahasa-bahasa pemrograman dengan sintaks yang terbatas, misalnya bahasa pemrograman paradigma fungsional atau logik seperti Prolog, dapat dipakai implementasi seperti scanner dan parser LISP yang sekaligus melakukan scanning dan parsing dalam satu kali pass. Perbedaan kedua antara perancangan kelas dan implementasinya adalah pada penggunaan DatabaseConnector. Kelas DatabaseConnector merupakan kelas boundary yang bertanggung jawab atas koneksi ke basis data sehingga operasi-operasi modifikasi basis data dan pengambilan record dari basis data dapat dilakukan. Pada model perancangan di Subbab 4.1, hanya kelas-kelas entity saja yang menggunakan DatabaseConnector, sehingga koneksi ke basis data dibuat ketika objek kelas entity
tersebut dibuat. Namun ternyata pembuatan koneksi ke JDBC pada platform Java memakan waktu yang cukup lama, yang terutama akan dirasakan ketika ribuan operasi basis data dilakukan seperti pada eksekusi deteksi ini. Oleh karena itu pada implementasi aplikasi backend, sebuah objek DatabaseConnector dihidupkan di Main pada awal eksekusi aplikasi. Selain itu, koneksi ke basis data dibuat dan statement untuk operasi-operasi select disiapkan. Kemudian objek dari kelas DatabaseConnector ini akan di-pass melalui parameter ke setiap kelas lainnya,
sehingga otomatis setiap kelas yang diimplementasikan mempunyai hubungan dependency terhadap kelas DatabaseConnector. Dengan implementasi seperti yang telah dideskripsikan, waktu yang diperlukan untuk deteksi plagiarisme menjadi jauh lebih singkat karena koneksi ke JDBC hanya dilakukan satu kali saja. Koneksi yang dibuat di awal tersebut akan dipakai untuk berbagai operasi basis data selama proses deteksi berlangsung.
V-4 5.1.4 Implementasi Antarmuka Antarmuka untuk komponen aplikasi web dan aplikasi backend berbeda. Pada aplikasi web, setiap halaman web diimplementasikan secara fisik sebagai satu buah file HTML yang terpisah dari kode yang akan dieksekusi bila ada aksi yang dilakukan user. Implementasi tampilan pada aplikasi web sesuai dengan perancangan pada Subbab 4.4. Sedangkan pada aplikasi backend, tidak ada antarmuka. Aplikasi backend memang dirancang untuk tidak digunakan langsung oleh pengguna, melainkan eksekusinya di-trigger oleh aplikasi web seperti eksekusi perintah pada shell, sehingga antarmuka tidak diperlukan. 5.1.5 Implementasi Penyimpanan Data Persisten Sesuai dengan perancangan representasi persisten kelas entity yang sudah diuraikan pada Subbab 4.3, diimplementasikan tabel-tabel dalam basis data relasional sebagai penyimpanan data persisten untuk Deimos. Selain tabel-tabel pada perancangan, diimplementasikan dua buah tabel yang bukan merupakan representasi dari kelas entity. Isi kedua tabel tersebut tidak pernah diubah oleh eksekusi aplikasi, melainkan berdasarkan kehendak programmer. Tabel yang pertama adalah tabel language, yang berfungsi untuk menyimpan informasi daftar bahasa pemrograman yang dapat ditangani Deimos. Tabel yang kedua adalah tabel symbols yang dibutuhkan oleh turunan kelas Scanner. Tabel tersebut berisi simbol-
simbol yang merupakan reserved words pada bahasa pemrograman. Walaupun implementasi tabel-tabel lain sesuai dengan perancangan yang telah didefinisikan, ada perubahan pada tabel tile. Pada perancangan di Subbab 4.3, tabel tersebut mempunyai atribut start_token_id dan end_token_id, yang menandakan token awal dan token akhir yang menjadi bagian dari tile. Kedua atribut tersebut mengacu kepada token_id di tabel token, yang sebenarnya digunakan untuk keperluan tampilan aplikasi web untuk bagian-bagian yang diduga merupakan hasil praktek plagiarisme. Ketika tampilan tersebut dibuat, posisi baris dan kolom yang tersimpan di tabel token diambil. Mengingat bahwa operasi select untuk mengambil posisi token dilakukan cukup sering, maka pada implementasi ini atribut start_token_id dan end_token_id diganti dengan posisi token awal dan posisi
V-5 token akhir yaitu atribut startrow, startcol, endrow, endcol. Dengan begitu pembuatan tampilan akan menjadi lebih efisien. Selain itu, informasi token yang diperlukan untuk pembuatan tampilan hanyalah informasi posisi pada file source code saja. Jika informasi posisi tersebut sudah bisa didapatkan di tabel tile, maka isi tabel token dapat dihapus segera setelah eksekusi deteksi plagiarisme selesai. Dengan
begitu maka selain efisiensi pada proses pembuatan tampilan, memori yang dipakai untuk penyimpanan data juga lebih kecil. Detil implementasi tabel penyimpanan data persisten untuk Deimos dapat dilihat pada Tabel V-1.
No. 1.
Tabel V-1. Detil Implementasi Penyimpanan Data Persisten Untuk Deimos Nama Tabel Atribut Keterangan detection Menyimpan informasi mengenai proses directory_name (primary key) detection_date deteksi. start_time end_time minimum_match_length language email_address
2.
program
3.
token
4.
pair
5.
tile
6.
language
7.
symbols
program_id (primary key) subdirectory_name pass_parsing num_files directory_name (foreign key) token_id (primary key) content filename startrow startcol endrow endcol program_id (foreign key) pair_id (primary key) similarity program1_id program2_id directoryName (foreign key) tile_id (primary key) startrow startcol endrow endcol filename color pair_id (foreign key) program_id (foreign key) language_id (primary key) language_name language_id (primary_key) symbol_name (primary_key) token_value
Menyimpan informasi mengenai program. Program dapat terdiri dari banyak file source code.
Menyimpan informasi mengenai token. Token adalah elemen tunggal dari bahasa pemrograman.
Menyimpan informasi mengenai pasangan program yang telah dibandingkan dan mempunyai nilai similaritas. Menyimpan informasi mengenai tile. Pada algoritma Running Karp-Rabin Greedy String Tiling, sebuah tile menyimpan posisi dan panjang sebuah substring yang sama pada kedua token string yang dibandingkan.
Menyimpan informasi daftar bahasa pemrograman yang dapat ditangani Deimos. Menyimpan simbol-simbol yang merupakan reserved words pada bahasa pemrograman
V-6
5.1.6 Implementasi Extendability untuk Bahasa Pemrograman Lain Pada Tugas Akhir ini, Deimos dikembangkan agar dapat menangani deteksi plagiarisme pada source code berbahasa pemrograman LISP dan Pascal. Namun untuk membuktikan kemudahan extendability terhadap bahasa pemrograman lain, diimplementasikan pula scanner dan parser untuk bahasa C. Pada subbab ini, akan diuraikan langkah-langkah untuk penambahan fitur deteksi plagiarisme untuk source code dalam bahasa pemrograman C. Batasan implementasi untuk pembuktian extendability ini yaitu bahwa scanner dan parser yang dibangun hanya dapat menangani sintaks bahasa C yang bersifat Pascallike. Walaupun grammar yang dipakai sebagai dasar pembangunan scanner dan parser diambil dari The ANSI C Programming Language [KER98], tidak seluruh grammar yang didefinisikan pada buku tersebut diimplementasikan. Hanya sintakssintaks pilihan yang mirip dengan sintaks bahasa pemrograman Pascal saja yang dapat ditangani oleh scanner dan parser tersebut. Hal ini dikarenakan tujuan implementasi ini adalah untuk membuktikan extendability Deimos saja. Langkah-langkah menambahkan fitur deteksi plagiarisme untuk source code dalam bahasa pemrograman C diuraikan sebagai berikut: 1. Penentuan token set untuk bahasa pemrograman C. Token set adalah kumpulan token yang mewakili elemen bahasa pemrograman. Token harus berupa bilangan bulat (integer). Penentuan token set ini didasarkan pada kriteria plagiarisme yang harus ditentukan sebelumnya. 2. Implementasi kelas Scanner_C yang meng-extends kelas Scanner. Method startScan() di-override. Method tersebut mengembalikan rangkaian simbol yang
dihasilkan dari proses scanning. 3. Implementasi kelas Parser_C yang meng-extends kelas Parser. Method startParse() di-override. Proses parsing dilakukan sambil menyimpan token
yang dihasilkan ke penyimpanan data persisten. 4. Setelah Scanner_C dan Parser_C selesai diimplementasikan, pada method chooseLanguage() di kelas DirectoryBrowser tambahkan cabang else if baru
yang memanggil konstruktor Scanner_C dan Parser_C jika bahasa pemrograman
V-7 source code target deteksi adalah bahasa C. Berikut ini adalah kode yang harus ditambahkan pada method chooseLanguage(): else if (language.equals("c")) { scanner = new Scanner_C(dbconn); parser = new Parser_C(dbconn); }
5. Pada tabel language di basis data Deimos, tambahkan record baru dengan atribut language_name bernilai “c”.
Melalui langkah-langkah yang telah didefinisikan di atas, Deimos sudah mampu mendeteksi plagiarisme pada kumpulan source code berbahasa pemrograman C. Waktu yang diperlukan untuk penambahan fitur penanganan bahasa C tersebut kurang dari seminggu.
5.2 Pengujian Pada Tugas Akhir ini telah dilakukan pengujian terhadap detektor plagiarisme Deimos. Lingkungan pengujian dideskripsikan pada Subbab 5.2.1, sedangkan detil
pengujian diberikan pada Subbab 5.2.2 dan Subbab 5.2.3.3. 5.2.1 Lingkungan Pengujian Lingkungan pengujian Deimos secara keseluruhan dapat dilihat pada Gambar V-1. Deimos terletak pada layer “Detektor plagiarisme Deimos”. Lingkungan pengujian
membentuk jaringan intranet lokal.
Gambar V-1. Lingkungan Pengujian Deimos
V-8 Server pengujian yang digunakan merupakan server tempat terinstalasinya LMS Milestone (lihat Subbab 3.1). Server pengujian tersebut memiliki spesifikasi perangkat
keras sebagai berikut: 1. Processor Intel Pentium 4 – 3 GHz; 2. Memori – 512 MB DDR; 3. Harddisk IDE – 120 GB; Spesifikasi perangkat lunak yang dimiliki server pengujian tersebut yaitu sebagai berikut: 1. Sistem Operasi Ubuntu Linux 7.04 2. Java Platform, Standard Edition Development Kit 1.6.0 3. Web Server Apache 2.2.3 4. Basis Data MySQL 5.0.38. Aplikasi web Deimos dapat diakses dari komputer lain pada jaringan intranet lokal tersebut melalui alamat http://milestone.if.itb.ac.id/Deimos/. 5.2.2 Persiapan Pengujian Sebelum dilakukan pengujian, dilakukan pemilihan data sample yang diambil dari kelas IF1282 Dasar Pemrograman yang diselenggarakan pada semester II 2006/2007. Setelah itu dilakukan instalasi aplikasi backend dan aplikasi web ke komputer dengan spesifikasi yang telah diuraikan pada Subbab 5.2.1. Penjelasan detil mengenai data uji dan instalasi diuraikan pada Subbab 5.2.2.1 dan Subbab 5.2.2.2. 5.2.2.1 Data Uji Pengujian detektor plagiarisme Deimos akan dilakukan dengan menggunakan data uji dari source code hasil pengumpulan kelas IF1282 Dasar Pemrograman yang diselenggarakan pada semester II 2006/2007. Mata kuliah IF1282 Dasar Pemrograman adalah kuliah pemrograman pertama yang wajib ditempuh oleh semua mahasiswa Sekolah Teknik Elektro dan Informatika ITB tahun pertama. Pada mata kuliah tersebut, dua bahasa pemrograman digunakan untuk pengerjaan tugas praktikum, yaitu LISP dan Pascal. Praktikum menggunakan bahasa pemrograman LISP diselenggarakan pada paruh pertama semester, sementara
V-9 praktikum menggunakan bahasa pemrograman Pascal diselenggarakan pada paruh kedua semester. Berdasarkan analisis yang telah dilakukan, dapat disimpulkan karakteristik source code hasil praktikum mata kuliah IF1282 Dasar Pemrograman yang diselenggarakan pada semester II 2006/2007 yaitu: 1. Banyak terdapat kesalahan dalam penamaan ekstensi file source code berbahasa pemrograman LISP. Hal ini disebabkan sebagian besar mahasiswa belum terbiasa menggunakan komputer. Kesalahan ini berangsur-angsur berkurang pada tiap praktikum. 2. Sebagian besar file source code LISP tidak lulus kompilasi. Karena itu, selama ini asisten harus mengeksekusi ekspresi-s satu per satu untuk kebutuhan penilaian. Sedangkan pada praktikum berbahasa pemrograman Pascal, jumlah source code yang tidak lulus kompilasi sudah berkurang dibandingkan dengan pada praktikum LISP.
Proses penilaian tidak dilakukan oleh satu orang asisten. Terdapat 24 orang asisten yang masing-masing bertanggung jawab untuk menilai beberapa source code. Oleh karena itu, walaupun sebagian dari asisten menyadari adanya bagian source code yang serupa, tidak semua kasus plagiarisme ditemukan karena ada kemungkinan bahwa hasil-hasil praktek plagiarisme diperiksa oleh asisten yang berbeda-beda. Berdasarkan analisis tentang parameter sensitivitas algoritma Running Karp-Rabin Greedy String Tiling pada Subbab 3.2.3, pemilihan nilai sensitivitas untuk deteksi plagiarisme perlu mendapat perhatian khusus. Panjang source code yang bisa diukur dengan menghitung jumlah statement atau ekspresi perlu dipertimbangkan ketika memilih parameter. Dari perhitungan kasar banyaknya statement atau banyaknya simbol, dapat diketahui jumlah token rata-rata. Untuk source code hasil praktikum mata kuliah IF1282, banyaknya statement pada source code berbahasa Pascal kirakira antara 20 sampai 50 statement, sedangkan jumlah token untuk source code berbahasa pemrograman LISP dapat mencapai ratusan. Agar tidak banyak kesalahan deteksi tapi tidak hanya source code identik saja yang ditemukan, diberikan beberapa petunjuk dan saran mengenai pemilihan nilai sensitivitas. Sebaiknya nilai sensivitas tidak terlalu mendekati minimum, karena akan ada banyak kesalahan deteksi terjadi. Secara umum pada kelas pemrograman dasar, pada setiap source code pasti terdapat 1-2 baris yang sama dengan source code lainnya yang
V-10 posisinya menyebar karena setiap source code merupakan solusi terhadap permasalahan yang sama. Jika nilai sensitivitas diisi minimum, bagian-bagian source code yang sama karena ketidaksengajaan tersebut akan diduga merupakan praktek plagiarisme. Jika nilai sensivitas mendekati nilai maksimal, maka hanya source code yang sangat identik satu sama lain saja yang diduga merupakan hasil praktek plagiarisme. Jika nilai sensitivitas lebih besar dari nilai maksimal, maka hasil deteksi akan sama saja seperti hasil deteksi pada nilai sensivitas maksimal. Maka dari itu, jika pengajar hanya ingin menemukan pasangan source code yang identik, nilai sensitivitas dapat diisi cukup besar. Untuk source code berbahasa pemrograman Pascal di kelas pemrograman IF1282, nilai antara 3 sampai 10 sudah dapat menghasilkan dugaan plagiarisme yang cukup akurat. Sedangkan untuk source code berbahasa pemrograman LISP, nilai antara 10 sampai 40 disarankan. Nilai sensitivitas untuk LISP cenderung lebih besar karena pendefinisian token set dan banyaknya token yang dihasilkan dapat mencapai ratusan. 5.2.2.2 Instalasi Prototipe Sebelum pengujian dilakukan, terlebih dahulu dilakukan instalasi Deimos ke server yang telah dideskripsikan pada Subbab 5.2.1. Pada Subbab ini, akan dijelaskan cara instalasi Deimos sebagai bagian dari persiapan pengujian. Berikut ini diuraikan langkah-langkah instalasi Deimos: 1. Lakukan instalasi tabel-tabel basis data Deimos termasuk record-record statik yang diperlukan pada tabel language dan tabel symbols. Caranya dapat dengan langsung mengeksekusi perintah SQL atau import file berisi perintah SQL. 2. Copy direktori aplikasi backend Deimos ke server yang dituju. Terdapat file dengan nama config.txt pada direktori aplikasi. Pada file tersebut, isilah path, username dan password basis data sesuai dengan konfigurasi basis data tempat tabel-tabel yang diperlukan Deimos berada. 3. Copy direktori aplikasi web Deimos ke server yang dituju. Tempatkan di direktori yang bisa diakses melalui protokol http. Terdapat file dengan nama config.inc.php pada direktori aplikasi web tersebut. Pada file tersebut, isilah path, username dan password basis data sesuai dengan konfigurasi basis data tempat tabel-tabel yang
V-11 diperlukan Deimos berada. Isi juga path tempat menyimpan direktori aplikasi backend pada file konfigurasi tersebut. 5.2.3 Kasus Uji Pada subbab ini, dibahas mengenai kasus uji untuk pengujian unit, pengujian fungsional berdasarkan use case, dan pengujian non-fungsional. Detil setiap pengujian diberikan pada Subbab 5.2.3.1, Subbab 5.2.3.2, dan Subbab 5.2.3.3. 5.2.3.1 Pengujian unit Untuk menguji fungsionalitas Deimos, dilakukan pengujian untuk unit yang mempunyai fungsionalitas utama pada aplikasi backend. Untuk keperluan pengujian unit ini, dibuat driver pengujian untuk empat unit yang merupakan core functionality dari Deimos, yaitu unit Scanner-Parser untuk bahasa pemrograman Pascal, unit Scanner-Parser untuk bahasa pemrograman LISP, dan unit Comparator
yang
menerapkan algoritma RKR-GST. Detil hasil pengujian unit dapat dilihat pada Tabel V-2. Tabel V-2. Hasil Pengujian Unit Pada Aplikasi Backend Deimos No 1.
2.
3.
4.
Unit MailSender
Parser_LISP
Scanner_Pascal dan Parser_Pascal
Comparator_RKRGST
Deskripsi Mengirim email ke alamat masukan.
Membaca file source code berbahasa pemrograman LISP dan menghasilkan token string.
Membaca file source code berbahasa pemrograman Pascal dan menghasilkan token string.
Membandingkan dua buah string untuk menemukan bagian-bagian yang sama dan menghitung nilai similaritas pasangan string tersebut.
Data masukan Alamat email:
[email protected] Alamat email:
[email protected] File source code praktikum IF1282 tanggal 15 Maret 2007 File source code praktikum IF1282 tanggal 27 Maret 2007 File source code praktikum IF1282 tanggal 30 April 2007 File source code praktikum IF2081 tanggal 17 November 2005 Dua buah file berisi string identik yang ditulis manual. Dua buah file berisi string berbeda yang ditulis manual. Dua buah file berisi string dengan beberapa segmen yang identik yang ditulis manual. Dua buah file berisi token string identik yang dihasilkan oleh ParserLISP. Dua buah file berisi token string berbeda yang dihasilkan oleh ParserLISP. Dua buah file berisi token
Hasil uji Diterima Diterima Diterima
Diterima
Diterima Diterima
Diterima Diterima Diterima
Diterima
Diterima
Diterima
V-12 No
Unit
Deskripsi
Data masukan string dengan beberapa segmen yang identik yang dihasilkan oleh ParserLISP. Dua buah file berisi token string identik yang dihasilkan oleh ParserPascal. Dua buah file berisi token string berbeda yang dihasilkan oleh ParserPascal. Dua buah file berisi token string dengan beberapa segmen yang identik yang dihasilkan oleh ParserPascal.
Hasil uji
Diterima
Diterima
Diterima
5.2.3.2 Pengujian Fungsional Berdasarkan Use Case Pengujian fungsional untuk setiap use case yang didefinisikan pada subbab 3.2.5 dibahas pada subbab ini. Pengujian untuk use case mendeteksi plagiarisme otomatis, use case melihat hasil deteksi, dan use case menghapus hasil deteksi diberikan berturut-turut pada Subbab 5.2.3.2.1, Subbab 5.2.3.2.2, dan Subbab 5.2.3.2.3. 5.2.3.2.1 Butir Uji Mendeteksi Plagiarisme Otomatis Pada Subbab ini dibahas mengenai pengujian use case mendeteksi plagiarisme otomatis. Seperti yang telah dibahas pada Subbab 5.2.2.1, data uji diambil dari hasil praktikum mata kuliah IF1282 Dasar Pemrograman semester II 2006/2007. Pertama-tama pengujian dilakukan untuk pasangan source code dengan karakteristik yang berbeda-beda, yaitu pasangan source code identik, pasangan source code berbeda, dan pasangan dengan sebagian source code identik. Terdapat juga pasangan yang diduga merupakan hasil plagiarisme berdasarkan deteksi manual, namun terdapat perbedaan pada aspek-aspek tertentu dari source code seperti indentasi, komentar, nama identifier, dan sebagainya. Setelah itu, pengujian dilakukan untuk kumpulan source code yang dibuat berdasarkan soal pemrograman yang sama untuk setiap mahasiswa. Waktu yang dibutuhkan untuk mendeteksi plagiarisme pada source code LISP lebih lama dari source code Pascal karena jumlah token yang dihasilkan dari source code LISP biasanya lebih panjang. Waktu untuk melakukan pembandingan menggunakan
RKR-GST meningkat secara eksponensial berdasarkan jumlah token pada token string yang dihasilkan parser.
V-13 U-M-01 UC-M-01 Mendeteksi plagiarisme otomatis Mendeteksi plagiarisme otomatis pada kumpulan source code Pengguna menginisiasi deteksi plagiarisme otomatis pada kumpulan source code melalui aplikasi web, kemudian deteksi dieksekusi pada aplikasi backend. Kumpulan source code sudah terdapat pada direktori. Kondisi Awal 3 Juni 2007 Tanggal Pengujian Cynthia Kustanto Penguji Skenario Uji 1. Memilih nama direktori dan bahasa pemrograman source code target deteksi, memasukkan nilai sensitivitas lalu menekan tombol “Eksekusi deteksi”. Kriteria Evaluasi Hasil Pesan “deteksi selesai” ditampilkan di web browser. Identifikasi No. SRS/Usecase Nama Butir Uji Tujuan Deskripsi
Kasus dan Hasil Uji (Data normal, bahasa pemrograman Pascal) Data Masukan Yang diharapkan Pengamatan Pasangan source code Nilai similaritas 100% Nilai similaritas 100% [ identik, sensitivitas [ minimum Nilai similaritas 100% Nilai similaritas 100% [ Pasangan source code [ identik, sensitivitas mendekati maksimum. Pasangan source code Nilai similaritas 0-40% Nilai similaritas 0% [ berbeda, sensitivitas [ minimum. Pasangan source code Nilai similaritas 0% Sesuai yang diharapkan. [ berbeda, sensitivitas [ mendekati maksimum. [ Bagian awal dan akhir Bagian awal dan akhir Pasangan source code dianggap sebagai dugaan dianggap sebagai dugaan [ yang bagian awal dan plagiarisme. Nilai plagiarisme. akhirnya identik, tapi similaritas 80%. bagian tengah berbeda. Nilai similaritas 100% Nilai similaritas 100% [ Pasangan source code [ yang identik, tapi komentar dan indentasi diubah. Nilai similaritas 100% Nilai similaritas 100% [ Pasangan source code [ yang identik, tapi nama identifier diubah semua. Pasangan source code Nilai similaritas 100% Nilai similaritas 100% [ yang identik, tapi cara [ menulis variabel berbeda. Pasangan source code Nilai similaritas 100% Nilai similaritas 100% [ yang identik, tapi ada [ perubahan urutan statement. Sensitivitas minimum. Sesuai yang diharapkan. [ Nilai similaritas tidak Pasangan source code [ 100%, karena bagian identik, tapi ada yang urutan statementperubahan urutan nya berubah dianggap statement. Sensitivitas 5 berbeda. (sensitivitas dalam range yang disarankan). Waktu deteksi kurang Waktu deteksi sekitar [ Kumpulan source code belasan detik. [ Pascal dari IF1282, jumlah dari 30 detik. source code 20.
Kesimpulan X ] diterima ] ditolak X ] diterima ] ditolak X ] diterima ] ditolak X ] diterima ] ditolak X ] diterima ] ditolak
X ] diterima ] ditolak
X ] diterima ] ditolak X ] diterima ] ditolak X ] diterima ] ditolak
X ] diterima ] ditolak
X ] diterima ] ditolak
V-14 Kasus dan Hasil Uji (Data normal, bahasa pemrograman Pascal) Data Masukan Yang diharapkan Pengamatan Kesimpulan Waktu deteksi kurang Waktu deteksi sekitar 30 [ X ] diterima Kumpulan source code detik. [ ] ditolak Pascal dari IF1282, jumlah dari 5 menit. source code 50. Kumpulan source code Waktu deteksi kurang Waktu deteksi sekitar 2 [ X ] diterima Pascal dari IF1282, jumlah dari 10 menit. menit. [ ] ditolak source code 100. Kasus dan Hasil Uji (Data normal, bahasa pemrograman LISP) Data Masukan Yang diharapkan Pengamatan Pasangan source code Nilai similaritas 100% Nilai similaritas 100% [ identik, sensitivitas [ minimum. Pasangan source code Nilai similaritas 100% Nilai similaritas 100% [ identik, sensitivitas [ mendekati maksimum. Pasangan source code Nilai similaritas 0-40% Sesuai yang diharapkan. [ berbeda, sensitivitas [ minimum. Nilai similaritas 0% Sesuai yang diharapkan. [ Pasangan source code [ berbeda, sensitivitas mendekati maksimum. [ Bagian awal dan akhir Bagian awal dan akhir Pasangan source code dianggap sebagai dugaan dianggap sebagai dugaan [ yang bagian awal dan plagiarisme. plagiarisme. Nilai akhirnya identik, tapi similaritas 80%. bagian tengah berbeda. Nilai similaritas 100% Nilai similaritas 100% [ Pasangan source code [ yang identik, tapi komentar dan indentasi diubah. Nilai similaritas 100% Nilai similaritas 100% [ Pasangan source code [ yang identik, tapi nama identifier diubah. Nilai similaritas Sesuai yang diharapkan. [ Pasangan source code mendekati 100%. [ yang identik, tapi ada perubahan urutan deklarasi fungsi. Sensitivitas 11. Waktu deteksi kurang Waktu deteksi sekitar 1 [ Kumpulan source code dari 2 menit. menit. [ LISP dari IF1282, jumlah source code 20. Waktu deteksi kurang Waktu deteksi sekitar 12 [ Kumpulan source code dari 30 menit. menit. [ LISP dari IF1282, jumlah source code 50. Waktu deteksi kurang Waktu deteksi sekitar 1 [ Kumpulan source code dari 2 jam. jam. [ LISP dari IF1282, jumlah source code 100.
Kesimpulan X ] diterima ] ditolak X ] diterima ] ditolak X ] diterima ] ditolak X ] diterima ] ditolak X ] diterima ] ditolak
X ] diterima ] ditolak
X ] diterima ] ditolak X ] diterima ] ditolak
X ] diterima ] ditolak X ] diterima ] ditolak X ] diterima ] ditolak
Kasus dan Hasil Uji (Data salah: isi direktori masukan bukan source code yang valid) Data Masukan Yang diharapkan Pengamatan Kesimpulan Nama direktori : [ X ] diterima Semua source code Semua source code 2007.03.27_soal1(lisp) [ ] ditolak tidak lulus parsing, tidak lulus parsing, Bahasa pemrograman : pembandingan tidak pembandingan tidak Pascal dilakukan. dilakukan. Catatan
V-15 5.2.3.2.2 Butir Uji Melihat Hasil Deteksi Pada Subbab ini dibahas mengenai pengujian use case melihat hasil deteksi. Data uji diambil dari hasil pengujian use case mendeteksi plagiarisme otomatis yang telah diuraikan pada Subbab 5.2.3.2.1. Kasus normal pengujian yaitu jika deteksi telah selesai dilakukan dan source code terdapat di direktori yang dispesifikasikan. Pengujian skenario tidak normal juga dilakukan untuk menguji apakah peringatan ditampilkan dengan baik jika kasus tidak normal terjadi. U-M-02 UC-M-02 Melihat hasil deteksi Melihat hasil deteksi plagiarisme otomatis pada source code Pengguna melihat hasil deteksi plagiarisme otomatis yang ditampilkan pada halaman format HTML. Hasil deteksi tersimpan di basis data Kondisi Awal 24 Mei 2007 Tanggal Pengujian Cynthia Kustanto Penguji Skenario Uji 1. Menekan tombol “Lihat hasil deteksi”. 2. Memilih pasangan source code yang ingin dilihat hasil deteksinya. Kriteria Evaluasi Hasil Hasil deteksi ditampilkan di halaman HTML sesuai antarmuka pada Gambar IV-7 dan Gambar IV-8. Identifikasi No. SRS/Usecase Nama Butir Uji Tujuan Deskripsi
Data Masukan Nama direktori: 2007.03.15(lisp) Nama direktori: 2007.04.30(pascal)
Kasus dan Hasil Uji (Data normal) Yang diharapkan Pengamatan Hasil deteksi Hasil deteksi ditampilkan di web ditampilkan di web browser. browser. Hasil deteksi Hasil deteksi ditampilkan di web ditampilkan di web browser. browser.
Kesimpulan [ X ] diterima [ ] ditolak [ X ] diterima [ ] ditolak
Kasus dan Hasil Uji (Data salah: tidak ada hasil deteksi atau tidak ada source code) Data Masukan Yang diharapkan Pengamatan Kesimpulan [ X ] diterima Pesan “deteksi belum Nama direktori: Pesan “deteksi belum 2007.03.27_soal1(lisp) selesai” ditampilkan di selesai” ditampilkan di [ ] ditolak halaman utama hasil ketika deteksi belum halaman utama hasil deteksi. selesai deteksi. [ X ] diterima Pesan “tidak terdapat Pesan “tidak terdapat Nama direktori: [ ] ditolak source code pada 2007.04.24_soal1(pasc source code pada direktori” ditampilkan direktori” ditampilkan al). Direktori dihapus di halaman pasangan di halaman pasangan terlebih dahulu dari source code. source code. memori. Catatan
V-16 5.2.3.2.3 Butir Uji Menghapus Hasil Deteksi U-M-03 UC-M-03 Menghapus hasil deteksi Menghapus hasil deteksi plagiarisme otomatis pada source code Pengguna menghapus hasil deteksi plagiarisme otomatis pada source code yang terdapat dalam direktori yang dipilih. Hasil deteksi tersimpan di basis data. Kondisi Awal 24 Mei 2007 Tanggal Pengujian Cynthia Kustanto Penguji Skenario Uji 1. Memilih nama direktori yang hasil deteksinya ingin dihapus kemudian menekan tombol “Hapus hasil deteksi”. Kriteria Evaluasi Hasil Seluruh hasil deteksi yang berkaitan dengan source code pada direktori yang dipilih dihapus dari basis data. Kasus dan Hasil Uji (Data normal) Data Masukan Yang diharapkan Pengamatan Kesimpulan Nama direktori: Hasil deteksi dihapus Hasil deteksi dihapus [ X ] diterima 2007.03.27_soal1(lisp) dari basis data. dari basis data. [ ] ditolak Nama direktori: Hasil deteksi dihapus Hasil deteksi dihapus [ X ] diterima 2007.04.30(pascal) dari basis data. dari basis data. [ ] ditolak Identifikasi No. SRS/Usecase Nama Butir Uji Tujuan Deskripsi
Kasus dan Hasil Uji (Data salah: hasil deteksi pada basis data tidak lengkap) Data Masukan Yang diharapkan Pengamatan Kesimpulan Tidak ada hasil deteksi Tidak ada hasil deteksi [ X ] diterima Nama direktori: 2007.04.24_soal1(pasc apapun pada basis data, apapun pada basis data, [ ] ditolak tidak ada pesan error. tidak ada pesan error. al). Catatan
5.2.3.3 Pengujian non-fungsional Berdasarkan penjelasan pada Subbab 3.2.3, ada tiga buah spesifikasi non-fungsional Deimos. Detil hasil pengujian tiap spesifikasi dapat dilihat pada Tabel V-3. Tabel V-3. Hasil Pengujian Spesifikasi Non-fungsional Spesifikasi non-fungsional Hasil uji Pengajar dapat trigger deteksi dan mengakses data hasil deteksi dari berbagai komputer. Proses deteksi yang efisien. Detektor harus dapat menangani jumlah source code yang mencapai ratusan dalam waktu yang dapat ditoleransi. Detektor dapat dikembangkan lebih lanjut agar dapat menangani bahasa pemrograman lain tanpa mengembangkan ulang seluruh detektor.
Pengajar dapat menentukan sensitivitas deteksi sehingga dapat disesuaikan dengan tingkat kerumitan topik pemrograman.
dapat diakses dari berbagai komputer melalui web browser. Dengan menggunakan lingkungan pengujian pada Subbab 5.2.1, Deimos mampu menangani 100 buah source code di bawah 1 jam. Untuk menangani bahasa pemrograman lain, hanya perlu menambahkan scanner dan/atau parser baru ke subsistem Tokenizer (lihat Subbab 0 untuk detil implementasi). Terdapat parameter minimum-matchlength pada algoritma RKR-GST yang merupakan representasi sensitivitas. Deimos
V-17 5.2.4 Evaluasi Pengujian Berdasarkan pengujian, Deimos dapat memenuhi setiap spesifikasi fungsional dan non-fungsional yang didefinisikan pada Subbab 3.2.3. Berdasarkan penjelasan di Subbab 1.1, statistik hasil deteksi digunakan untuk membantu pengajar ketika melakukan drill-down, sehingga pengajar dapat menentukan kasus-kasus plagiarisme berdasarkan statistik yang dihasilkan Deimos. Tingkat kepercayaan terhadap dugaan kasus plagiarisme yang dihasilkan Deimos tersebut bervariasi tergantung pada similaritas pasangan source code dan parameter sensitivitas yang dipilih. Secara umum, untuk pasangan source code yang mempunyai similaritas 100%, dapat diyakini bahwa pasangan tersebut merupakan hasil plagiarisme. Begitu pula untuk pasangan source code yang mempunyai similaritas mendekati 0%, bisa disimpulkan bahwa pasangan tersebut tidak mempunyai kesamaan. Namun untuk pasangan dengan similaritas 0%, perlu dilihat lagi mengenai kesesuaian isi source code dengan kriteria spesifikasi soal pemrograman yang diberikan, karena terkadang mahasiswa mengumpulkan source code yang salah. Untuk deteksi dengan sensitivitas tinggi, kesalahan deteksi dapat terjadi jika kesamaan bagian source code yang tidak disengaja dianggap sebagai dugaan plagiarisme. Sedangkan untuk deteksi dengan sensitivitas rendah, kesalahan deteksi dapat terjadi karena diabaikannya kesamaan pada segmen-segmen program yang pendek. Oleh karena itu, untuk pasangan source code yang similaritasnya tidak mendekati 100% dan tidak mendekati 0%, sebaiknya pengajar membuka halaman perbandingan pasangan source code sehingga bagian-bagian yang diduga merupakan hasil plagiarisme dapat dilihat dengan jelas. Dengan melihat tampilan pasangan source code tersebut, pengajar dapat memutuskan apakah kesamaan pada bagianbagian source code yang ditandai merupakan kesamaan yang disengaja atau bukan. Berdasarkan analisis hasil pengujian di atas, sebaiknya nilai similaritas tidak menjadi keputusan final untuk menentukan kasus-kasus plagiarisme yang dilakukan mahasiswa karena ada kemungkinan hasil deteksi salah terutama untuk kasus plagiarisme segmen. Oleh karena itu, untuk dugaan-dugaan plagiarisme yang meragukan hendaknya pengajar mencermati isi source code pasangan tersebut sebelum membuat keputusan.