BAB IV PERANCANGAN RINCI Pada Tugas Akhir ini, dijelaskan perancangan rinci detektor plagiarisme Deimos. Berdasarkan rancangan global pada Subbab 3.2.7, Deimos terbagi menjadi dua komponen perangkat lunak. Komponen yang pertama adalah aplikasi backend, sementara yang kedua merupakan aplikasi web. Perancangan setiap komponen dapat dilihat pada Subbab 4.1 dan 4.2. Sedangkan perancangan representasi persisten kelas entity dan perancangan antarmuka dapat dilihat pada Subbab 4.3 dan Subbab 4.4. Diagram sequence untuk setiap use case dapat dilihat pada Lampiran D.
4.1 Aplikasi Backend Pada Subbab ini, akan diberikan penjelasan mengenai perancangan aplikasi backend Deimos. Aplikasi backend merupakan aplikasi yang melakukan proses deteksi
plagiarisme otomatis pada kumpulan source code program yang diberikan. Eksekusi aplikasi backend tersebut di-trigger oleh aplikasi web. Aplikasi backend bertanggung jawab terhadap fungsionalitas tiga buah use case, yaitu use case tokenizing, use case mendeteksi kesamaan setiap pasangan token string, dan use case mengirimkan notifikasi bahwa deteksi selesai. Pada tokenizing atau tokenisasi, seluruh source code pada direktori yang telah dispesifikasikan pengguna diubah menjadi token string yang merupakan representasi linier program. Untuk mengubah source code menjadi token string, dapat dilakukan analisis statik terhadap source code. Analisis statik melakukan telaah terhadap kode program tanpa melalui proses eksekusi. Struktur dan sintaks source code diperiksa sedemikian rupa sehingga pemrogram dapat menerima informasi statistik tentang program yang dibuatnya. Untuk itu pada perancangan ini terdapat kelas Scanner dan Parser. Scanner bertanggung jawab untuk melakukan analisis leksikal, yaitu mengubah kode
program menjadi serangkaian simbol. Simbol pada konteks ini merupakan potongan teks tunggal dengan arti tertentu. Sebenarnya pada teori kompilasi, istilah yang dipakai untuk hasil analisis leksikal adalah token. Namun untuk membedakan token
1
IV-2 hasil analisis leksikal dengan token yang dibutuhkan oleh algoritma pembandingan, pada laporan ini hasil analisis leksikal disebut dengan istilah simbol. Rangkaian simbol yang dihasilkan dari Scanner tersebut akan menjadi input Parser. Parser bertanggung jawab untuk melakukan analisis sintaks, yang terkait dengan
grammar atau aturan kalimat pada bahasa pemrograman yang bersangkutan. Parser inilah yang akan menghasilkan token string yang dibutuhkan oleh algoritma pembandingan. Pada detektor yang dibangun di Tugas Akhir ini, token disimpan ketika proses parsing berlangsung. Selain itu, posisi bagian source code yang direpresentasikan token tersebut juga disimpan untuk kepentingan tampilan pada aplikasi web. Sesuai dengan analisis tokenizer pada Subbab 3.2.7.1, proses tokenisasi Deimos bisa dilakukan dengan
mengimplementasikan
scanner
dan
parser
sesuai
dengan
bahasa
pemrograman source code yang akan dideteksi. Perancangan scanner dan parser serta daftar token set detil bisa dilihat pada Lampiran C. Fungsionalitas berikutnya dari aplikasi backend ini yaitu mendeteksi kesamaan setiap pasangan token string. Sesuai dengan analisis pada Subbab 3.2.7.2, algoritma yang diimplementasikan untuk fungsionalitas ini yaitu algoritma Running Karp-Rabin Greedy String Tiling. Selain mampu menemukan bagian-bagian yang sama pada dua buah string, algoritma ini juga dapat digunakan untuk menentukan nilai similaritas pasangan string dan juga dapat menerima parameter sensitivitas deteksi. Detil algoritma ini dapat dilihat pada studi literatur di Subbab 2.2.3. Algoritma Running Karp-Rabin Greedy String Tiling diterapkan di kelas Comparator_RKRGST. Diagram kelas aplikasi backend Deimos dapat dilihat pada Gambar IV-1. Semua kelas entity
sebenarnya
mempunyai
hubungan
dependency
terhadap
kelas
DatabaseConnector. Namun kelas DatabaseConnector tidak digambarkan pada
diagram kelas di bawah ini untuk alasan keterbacaan. Penjelasan detil untuk setiap kelas dapat dilihat pada Tabel IV-1. Aturan penamaan untuk kelas turunan yaitu XXX_YYY dengan XXX merupakan nama kelas dasar. Pada kelas turunan Scanner dan Parser, YYY merupakan nama bahasa
IV-3 pemrograman, sedangkan pada kelas turunan Comparator dan Token, YYY merupakan pengenal algoritma pembandingan yang dipakai.
Parser_Pascal
Scanner
Parser_LISP
startParse() acceptTerminal() program() block() label_declaration_part() constant() constant_definition() type() type_definition_part() variable() variable_declaration_part() expression() statement()
startParse() acceptSExpressi on() acceptAtom() acceptUnreservedString()
Scanner_Pascal
FileCReader DirectoryBrowser
CC : char C : int myfile : FileInputStream filename : String rowNum : int col Num : int
directoryName : String browseDirectory() browseProgramDirectory() chooseLanguage() checkExtention()
T oken
ST ART() ADVANCE() EOP() getCC() closeFile() setFilenam e() getColNum() getRowNum() resetColRow()
Program tokenString : list of Token numOfFiles : int passParsing : boolean subdirectoryName : String
getTokenContent() getFilename() getStartRow() getStartCol () getEndRow() getEndCol() setTokenContent() setEverything()
startScan() scanSource() acceptNumber() checkScaleNumber()
startScan() throwWhitespace() isDigit()
Parser parsedProgram filename currentSymbol startParse()
tokenContent : int filenam e : int startRow : int startCol : int endRow : int endCol : int
Scanner_LISP
filereader : FileCReader dbconn : DatabaseConnector symbolList : list of Symbols
Main main()
getTokenString() getNumOfFiles() addToken() insertProgramRecord() updateParseStatus()
startScan() scanSource() isUnreservedChar() checkNumber() checkScaleNumber() checkString() checkComment1() checkComment2() checkIdent() checkOtherSymbols() addElement()
Mail Sender props : Properties session : Session
PairM aker ProgramPair similarity : int program1 : Program program2 : Program tiles1 : list of Tiles tiles2 : list of Tiles
T oken_RKRGST mark : boolean nextUnmarked : int previousUnmarked : int isTokenMarked() getPreviousUnmarkedToken() getNextUnmarkedToken() markT oken() unmarkToken() setPreviousUnmarkedToken() setNextUnmarkedToken()
directoryName : Stri ng sendMail() validateMail()
makePairs()
getProgram1() getProgram2() setSimilarity() insertProgramPairRecord() updateSimilarity() insertT iles()
Comparator pair : ProgramPair compare() countSimilarity()
getFromAddress() getToAddress() getCcAddress() getSubject() getContent() setEverything()
Comparator_RKRGST minimum_m atch_length : int maxmatch_list : list of Match length_of_tokens_tiled : int
Tile color : String filenam e : String startToken : T oken endToken : endToken getColor() getFilename() getStartToken() getEndToken() setEverything() insertTileRecord()
compare() countSimilarity() scanpattern() markstrings() rkrgst() firstUnmarkedPosition() positionFirstUnmarkedAfterNextTile() distanceToNextTile() countHashValue() countNextHashValue() addMatchtoMaxmatchList() getHighestMatchLength() allUnmarked() allSame() unmarkAll()
Mail fromAddress : String toAddress : String subject : String content : String ccAddress : String
Match p : int t : int s : int get_p() get_s() get_t() setEverything()
Gambar IV-1. Diagram Kelas Aplikasi Backend Deimos
Untuk menangani bahasa pemrograman yang berbeda, perlu diimplementasikan scanner dan parser yang berbeda. Pada Tugas Akhir ini, hanya scanner dan parser untuk bahasa pemrograman LISP dan Pascal yang akan diimplementasikan. Untuk membuat scanner yang spesifik untuk suatu bahasa dapat diimplementasikan dengan
IV-4 menurunkan kelas Scanner. Begitu pula untuk membuat parser yang spesifik untuk bahasa pemrograman tertentu, dapat dibuat kelas yang menurunkan kelas Parser. Pada diagram kelas di Gambar IV-1, bisa dilihat bahwa terdapat kelas Scanner_LISP dan Scanner_Pascal yang diturunkan dari kelas Scanner, dan juga kelas Parser_LISP dan Parser_Pascal yang diturunkan dari kelas Parser. Perancangan
dibuat sedemikian rupa agar spesifikasi non-fungsional nomor SRS-NF-03 pada Subbab 3.2.3 dapat dipenuhi, sehingga keseluruhan detektor tidak perlu dibangun ulang untuk menangani bahasa pemrograman lain, melainkan hanya perlu membuat kelas scanner dan parser baru sesuai bahasa pemrograman target yang diturunkan dari kelas Scanner dan Parser. Selain penanganan perbedaan bahasa pemrograman, tokenizer juga dirancang agar mampu menangani program yang terdiri dari banyak file. Caranya adalah dengan melakukan scanning dan parsing pada setiap file source code, namun token-token yang dihasilkan dikonkatenasi menjadi satu buah token string walaupun program tersebut terdiri dari banyak file. Kasus ini perlu ditangani karena dianjurkan pada praktek pemrograman yang baik. Contohnya pada praktek pemrograman dalam bahasa C, bagian header, body, dan driver program dibuat terpisah pada file yang berbeda.
No 1. 2.
3.
4. 5. 5.
6.
7.
Tabel IV-1. Rancangan Kelas Aplikasi Backend Deimos Nama kelas Definisi Main Kelas berisi algoritma utama pada aplikasi backend. DatabaseConnector Kelas ini merupakan kelas boundary yang bertanggung jawab atas koneksi ke basis data, operasi-operasi modifikasi basis data dan pengambilan record dari basis data. FileCReader Kelas yang bertanggung jawab untuk membaca file per karakter termasuk menyimpan posisi baris dan kolom karakter yang sedang dibaca. MailSender Kelas yang bertanggung jawab untuk mengirimkan email dengan menggunakan protokol SMTP. Mail Kelas entity yang merepresentasikan email. DirectoryBrowser Kelas yang bertanggung jawab untuk membaca isi direktori masukan dan memanggil scanner / parser yang sesuai untuk setiap file source code di dalam direktori. Scanner Kelas dasar bagi seluruh scanner. Setiap kelas yang diturunkan dari kelas ini mengimplementasikan scanner untuk bahasa pemrograman tertentu. Agar Deimos dapat menangani bahasa baru, tambahkan kelas scanner baru sebagai turunan kelas ini. Semua kelas turunan Scanner harus mengikuti aturan penamaan Scanner_XXX dengan XXX merupakan nama bahasa pemrograman yang akan diimplementasi scanner-nya. Scanner_LISP Kelas turunan dari kelas Scanner. Kelas ini bertanggung jawab untuk scanning source code dalam bahasa pemrograman LISP sambil mengubah elemen leksikal source code tersebut menjadi serangkaian
IV-5 No
Nama kelas
8.
Scanner_Pascal
7.
Parser
10.
Parser_LISP
11.
Parser_Pascal
12.
Program
13.
PairMaker
18.
ProgramPair
16.
Token
17.
Token_RKRGST
14.
Comparator
15.
Comparator_RKRGST
19.
Match
Definisi simbol yang dibutuhkan Parser_LISP untuk proses parsing. Kelas turunan dari kelas Scanner. Kelas ini bertanggung jawab untuk scanning source code dalam bahasa pemrograman Pascal sambil mengubah elemen leksikal source code tersebut menjadi serangkaian simbol yang dibutuhkan Parser_Pascal untuk proses parsing. Kelas dasar bagi seluruh parser. Setiap kelas yang diturunkan dari kelas ini mengimplementasikan parser untuk bahasa pemrograman tertentu. Setiap turunan parser harus berpasangan dengan satu kelas turunan scanner yang menangani bahasa pemrograman yang sama. Agar Deimos dapat menangani bahasa baru, tambahkan kelas parser baru sebagai turunan kelas ini. Semua kelas turunan Parser harus mengikuti aturan penamaan Parser_XXX dengan XXX merupakan nama bahasa pemrograman yang akan diimplementasi parser-nya. Kelas turunan dari kelas Parser. Kelas ini bertanggung jawab untuk parsing rangkaian simbol yang dihasilkan Scanner_LISP sambil menyimpan token yang sesuai dengan definisi sintaks bahasa pemrograman LISP. Kelas turunan dari kelas Parser. Kelas ini bertanggung jawab untuk parsing rangkaian simbol yang dihasilkan Scanner_Pascal sambil menyimpan token yang sesuai dengan definisi sintaks bahasa pemrograman Pascal. Kelas entity yang merepresentasikan program yang akan dideteksi plagiarisme. Program merupakan sekumpulan source code yang dapat dieksekusi. Kelas ini bertanggung jawab untuk mengiterasi daftar program dan memasangkan setiap program satu sama lain. Kelas inilah yang menentukan pasangan-pasangan source code yang akan dibandingkan oleh Comparator_RKRGST. Kelas entity yang merepresentasikan pasangan program yang akan dibandingkan dan ditentukan nilai similaritasnya. Kelas entity yang merepresentasikan token. Token adalah elemen tunggal dari bahasa pemrograman. Pada aplikasi ini token dihasilkan oleh Parser dan akan digunakan oleh Comparator. Kelas ini dapat diturunkan menjadi Token_YYY dengan YYY adalah pengenal algoritma pembandingan yang dipakai, dan akan merepresentasikan token yang akan dibutuhkan oleh algoritma pembandingan YYY. Kelas entity yang diturunkan dari kelas Token. Kelas ini merepresentasikan token pada algoritma Running Karp-Rabin Greedy String Tiling. Kelas dasar bagi seluruh kelas yang membungkus algoritma pembandingan. Kelas ini bertanggung jawab untuk membandingkan pasangan token string dan menentukan nilai similaritas serta menyimpan hasilnya ke basis data. Ada bermacam-macam algoritma yang dapat digunakan untuk pembandingan. Untuk menerapkan algoritma tertentu, dapat dibuat kelas yang menurunkan kelas Comparator ini. Setiap kelas turunan dari Comparator harus mengikuti aturan penamaan Comparator_YYY dengan YYY merupakan pengenal algoritma pembandingan yang berpasangan dengan kelas Token_YYY. Kelas yang bertanggung jawab untuk membandingkan pasangan token string dan menentukan nilai similaritas serta menyimpan hasilnya ke basis data. Kelas ini merupakan turunan dari kelas Comparator. Algoritma Running Karp-Rabin Greedy String Tiling diterapkan di kelas ini. Kelas ADT yang merepresentasikan maximal-match pada algoritma Running Karp-Rabin Greedy String Tiling. Sebuah maximal-match menyimpan posisi dan panjang sebuah substring yang sama pada kedua token string yang dibandingkan. ADT ini hanya dibutuhkan oleh kelas Comparator_RKRGST saja.
IV-6 No 20.
Nama kelas Tile
Definisi Kelas entity yang merepresentasikan tile pada algoritma Running KarpRabin Greedy String Tiling. Sebuah tile menyimpan posisi dan panjang sebuah substring yang sama pada kedua token string yang dibandingkan. Kelas ini hanya dibutuhkan oleh kelas Comparator_RKRGST saja.
4.2 Aplikasi Web Pada subbab ini, akan diberikan penjelasan mengenai perancangan aplikasi web Deimos. Aplikasi web Deimos akan diimplementasikan dalam platform PHP.
Berdasarkan analisis pada Subbab 3.2.7.3, aplikasi web detektor plagiarisme Deimos mempunyai dua fungsi utama, yaitu men-trigger aplikasi backend untuk mendeteksi plagiarisme pada kumpulan source code dan menampilkan hasil deteksi dalam format HTML. Model perancangan pada Gambar IV-2, hanya merepresentasi kelas-kelas yang bukan user interface karena user interface tidak dirancang sebagai kelas melainkan sebagai script. Penjelasan detil untuk setiap kelas dijelaskan pada Tabel IV-2.
DetectionResultFetcher detection : Detection getDetectionInfo() getColorTable() countSimilarityDistribution() getNumberOfPrograms() getSimilarityList() getRepositoryList() getTilesPositions() setDetection()
Detection directoryName : String date : date startTime : time endTime : time sensitivity : int prgLanguage : String notificationEmail : String getDirectoryName() getDate() getStartTime() getEndTime() getSensitivity() getPrgLanguage() setEverything() setDirectoryName() selectDetectionRecord() insertDetectionRecord() deleteDetectionRecord()
DetectionTrigger executeDetector()
Gambar IV-2. Diagram kelas yang mewakili modeler dan controller pada aplikasi web Deimos
No 1.
2. 3.
Tabel IV-2. Rancangan Kelas Aplikasi Web Deimos Nama kelas Definisi DetectionResultFetcher Kelas yang menyediakan fungsi-fungsi untuk mengolah hasil deteksi yang diambil dari basis data dan mengembalikan data-data yang siap ditampilkan pada halaman HTML. Detection Kelas entity yang merepresentasikan proses deteksi. DetectionTrigger Kelas yang bertanggung jawab untuk men-trigger aplikasi backend Deimos.
IV-7
4.3 Perancangan Representasi Persisten Kelas Entity Dari perancangan yang sudah didefinisikan pada Subbab 4.1 dan Subbab 4.2, dibutuhkan suatu penyimpanan data persisten untuk menyimpan objek beberapa kelas yang termasuk instance kelas entity. Penyimpanan data persisten pada Deimos diwujudkan dalam bentuk tabel dalam basis data relasional. Deskripsi tabel dan pemetaan kelas entity dalam tabel dapat dilihat pada Tabel IV-3. Tabel IV-3. Perancangan Penyimpanan Data Persisten dan Pemetaannya dengan Kelas Entity Kelas Entity Rancangan Tabel No Keterangan Nama Atribut Nama Atribut Detection directoryName detection directory_name Menyimpan 1. date startTime endTime sensitivity prgLanguage notificationEmail
2.
Program
subdirectoryName passParsing numOfFiles -
program
3.
Token
token
4.
Pair
tokenContent filename startRow startCol endRow endCol similarity program1 program2 -
5.
Tile
startToken endToken filename color -
tile
detection_date start_time end_time minimum_match_length language email_address
informasi mengenai proses deteksi.
program_id (primary key) subdirectory_name pass_parsing num_files directoryName (foreign
Menyimpan informasi mengenai program. Program dapat terdiri dari banyak file source code. Menyimpan informasi mengenai token. Token adalah elemen tunggal dari bahasa pemrograman.
key)
pair
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) start_token_id end_token_id filename color pair_id (foreign key) program_id (foreign key)
Menyimpan informasi pasangan program yang telah dibandingkan dan mempunyai nilai similaritas. Menyimpan informasi mengenai tile. Pada algoritma Running KarpRabin Greedy String Tiling, sebuah tile menyimpan posisi dan panjang sebuah substring yang sama pada kedua token string yang dibandingkan.
4.4 Perancangan Antarmuka Aplikasi Web Pada aplikasi web, setiap halaman web diimplementasikan secara fisik sebagai satu buah file PHP. Tampilan setiap halaman mengikuti rancangan antarmuka generik yang
IV-8 dapat dilihat pada Gambar IV-3. Detil antarmuka setiap halaman akan dijelaskan pada Subbab 4.4.1 sampai Subbab 4.4.5.
Gambar IV-3. Rancangan Antarmuka Generik Detektor Plagiarisme Deimos
4.4.1 Halaman Utama Halaman utama berisi menu untuk memilih fungsionalitas Deimos. Tampilan halaman utama dapat dilihat pada Gambar IV-4.
Gambar IV-4. Halaman Utama Aplikasi Web Deimos
4.4.2 Form Memulai Deteksi Form memulai deteksi ditampilkan jika pengguna ingin memulai deteksi plagiarisme pada kumpulan source code yang sudah disiapkan. Pengguna harus memilih nama direktori tempat menyimpan kumpulan source code yang akan dideteksi serta bahasa pemrograman source code tersebut. Pengguna juga harus memasukkan nilai sensitivitas pada tempat yang disediakan. Antarmuka form ini dapat dilihat pada Gambar IV-5.
IV-9
Gambar IV-5. Antarmuka Form Memulai Deteksi pada Aplikasi Web Deimos
4.4.3 Form Menghapus Hasil Deteksi Pada form menghapus hasil deteksi terdapat daftar hasil deteksi sehingga pengguna dapat memilih hasil deteksi yang ingin dihapusnya. Antarmuka form ini dapat dilihat pada Gambar IV-6.
Gambar IV-6. Antarmuka Form Menghapus Hasil Deteksi
4.4.4 Halaman Utama Tampilan Hasil Deteksi Antarmuka halaman utama tampilan hasil deteksi bisa dilihat pada Gambar IV-7. Halaman tersebut dibagi menjadi tiga bagian besar, yaitu ikhtisar hasil deteksi, tabel distribusi similaritas dan matriks similaritas.
IV-10
Gambar IV-7. Halaman Tampilan Hasil Deteksi Utama pada Aplikasi Web Deimos
Ikhtisar hasil deteksi berisi data tanggal deteksi, waktu dimulainya deteksi dan berakhirnya deteksi, nama direktori tempat menyimpan source code, jumlah program yang dibandingkan, dan sensitivitas deteksi. Tabel distribusi similaritas menunjukkan jumlah pasangan source code yang memiliki nilai similaritas pada range tertentu. Dari tabel tersebut diharapkan pengguna bisa mendapatkan gambaran mengenai tingkat plagiarisme yang terjadi. Tampilan yang terletak paling bawah disebut dengan matriks similaritas. Setiap titik pada matriks mewakili satu pasangan program. Setiap titik ditandai dengan warna yang berbeda, yang menunjukkan range persentase similaritas
IV-11 pasangan tersebut berdasarkan warna pada tabel distribusi similaritas. Untuk melihat nama program pasangan tertentu, pengguna hanya perlu menunjuk salah satu titik dan informasi akan ditampilkan. Jika titik tersebut di-klik, maka browser akan menampilkan halaman perbandingan pasangan source code yang akan dijelaskan pada Subbab 4.4.5.
4.4.5 Halaman Perbandingan Pasangan Source Code Pada halaman ini, dua buah source code ditampilkan secara bersebelahan sehingga pengguna dapat membandingkan kedua source code tersebut dengan mudah. Bagian yang sama ditandai dengan warna tertentu. Diharapkan dengan adanya penanda warna tersebut, pengguna dapat memutuskan apakah pasangan tersebut merupakan kasus plagiarisme atau bukan. Antarmuka halaman perbandingan pasangan source code ini dapat dilihat pada Gambar IV-8.
Gambar IV-8. Antarmuka Halaman Perbandingan Pasangan Source Code pada Aplikasi Web Deimos