BAB V IMPLEMENTASI DAN PENGUJIAN
Berdasarkan analisis pada BAB III dan perancangan pada BAB IV, telah diimplementasikan autograder Phobos untuk melakukan penilaian tugas pemrograman berupa source code secara otomatis. Implementasi dan pengujian Phobos masing-masing akan dibahas pada Subbab 45.1 dan 45.2.
5.1. Implementasi Dalam Tugas Akhir ini, telah diimplementasikan sebuah penilai source code otomatis dengan nama Phobos. Penjelasan mengenai lingkungan pengembangan dan implementasi Phobos akan diberikan pada Subbab 5.1.1. Batasan implementasi akan dibahas pada Subbab 5.1.2, sementara detil implementasi akan dibahas pada Subbab 5.1.3 hingga Subbab 5.1.5.
5.1.1 Lingkungan Implementasi dan Pengembangan Autograder Phobos 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 512 MB. 3. Harddisk IDE 60 GB.
Spesifikasi perangkat lunak yang dibutuhkan untuk implementasi autograder Phobos dalam platform Java Runtime Environment dan PHP yaitu: 1. Java Runtime Environment 1.6.0. 2. Java Platform, Standard Edition Development Kit 1.6.0 3. Eclipse IDE Europa 3.2.0. 4. Web Server Apache 2.2.0
Autograder Phobos telah diimplementasikan pada sistem operasi Windows XP SP2 Professional dan Ubuntu Linux rilis Dapper Drake 6.06 LTS.
V-1
V-2
5.1.2 Batasan Implementasi Batasan dalam implementasi source code autograder yang diberi nama Phobos dapat dijabarkan sebagai berikut: 1. Saat ini Phobos hanya dapat menangani deteksi pada source code dalam bahasa pemrograman LISP dan Pascal sesuai dengan analisis pada Subbab 3.1. 2. File serahan tugas berupa source code yang ditangani berjumlah 1 (satu) file untuk 1 (satu) siswa pada 1 (satu) tugas. 3. Spesifikasi tugas yang dapat dinilai mengikuti panduan pada LAMPIRAN J. 4. Penyusunan dan penghapusan file-file source code dilakukan secara manual.
5.1.3 Implementasi Kelas Setiap kelas pada komponen autograder engine akan diimplementasikan dalam bahasa Java. Sebuah kelas akan diimplementasikan dalam sebuah file. Kelas-kelas telah diimplementasikan sesuai dengan daftar kelas yang telah dirancang pada Subbab 4.1.
Pada saat implementasi, modul diorganisasi menurut package yang sesuai. Seluruh kelas berada dalam package akar phobos. Di dalam package phobos terdapat subpackage manager, marker dan langdef. Subsistem Manager diimplementasikan dalam subpackage manager. Kelas-kelas penilai diorganisasi dalam subpackage marker, yang berisi
subpackage
oracle
sebagai
implementasi
subsistem
Oracle
dan
subpackage
whiteboxmarkers sebagai implementasi subsistem WhiteboxMarkers. Kelas-kelas prosesor
bahasa pemrograman diorganisasi dalam subpackage langdef, yang berisi subpackage lisp untuk kelas-kelas interpreter Lisp dan subpackage package untuk kelas-kelas interpreter Pascal.
5.1.4 Implementasi Antarmuka dan Penyimpanan Data Persisten Antarmuka untuk komponen aplikasi web dan aplikasi backend berbeda. Aplikasi front-end diimplementasikan menggunakan bahasa pemrograman PHP tanpa rancangan kelas khusus. 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.2. Komponen autograder engine tidak memiliki antarmuka, karena komponen ini memang dirancang untuk tidak digunakan langsung oleh pengguna, melainkan eksekusinya di-trigger oleh aplikasi web seperti eksekusi perintah pada shell, sehingga antarmuka tidak diperlukan.
V-3 Penyimpanan data persisten telah diimplementasikan sebagai file dan direktori pada file system dalam sistem operasi. Setiap file merepresentasikan instansi baru, dengan identitas penanda pada nama file. Seluruh file yang dibutuhkan untuk proses penilaian diletakkan di dalam folder resources, termasuk skema penilaian (subdirektori schemas), laporan nilai diletakkan (subdirektori report) dan serahan tugas (subdirektori source). Seluruh peletakan data persisten diatur menggunakan file konfigurasi yang terpisah dan dapat diubah dengan mudah di masa mendatang.
5.1.5 Implementasi Interpreter Spesifik Bahasa Pemrograman Pada Subbab ini akan dibahas mengenai bagaimana interpreter untuk tiap bahasa pemrograman diimplementasikan dalam Phobos. Pada Subbab ini juga akan dibahas mengenai bagaimana interpreter bahasa pemrograman baru dapat dikembangkan dan ditambahkan ke dalam Phobos agar dapat menangani bahasa pemrograman baru.
5.1.5.1 Proses Pengembangan Interpreter Sebagaimana telah dibahas pada bab 3.3.6, pemroses bahasa pemrograman dalam Phobos akan mencakup pengembangan interpreter untuk tiap bahasa pemrograman yang ditangani. Sampai dengan tahap implementasi, rancangan yang telah dimiliki adalah rancangan untuk interpreter generik. Pengembangan interpreter juga direncanakan akan dibantu oleh generator parser Antlr. Antlr dapat membuat Lexer dan Parser secara otomatis dari grammar sebuah bahasa pemrograman, dan juga TreeParser untuk memproses pohon sintaks abstrak hasil proses parsing.
Pengembangan interpreter dimulai dari menemukan grammar bahasa pemrograman. Grammar dapat diperoleh dari membuat sendiri grammar berdasarkan spesifikasi bahasa yang bersangkutan, atau menggunakan grammar yang telah tersedia. Grammar yang dibutuhkan untuk pembuatan interpreter ada tiga jenis, yaitu grammar leksikal untuk Lexer, grammar sintaksis untuk Parser dan tree grammar untuk TreeParser. Pengembang Antlr telah menyediakan grammar untuk berbagai bahasa pemrograman yang umum digunakan, di antaranya Pascal, C, C++, C#, Java, dan Python. Berdasarkan ketiga grammar ini, Antlr dapat membangkitkan kelas prosesor pohon sintaks abstrak (Lexer, Parser dan TreeParser) secara otomatis.
Proses pembuatan interpreter selanjutnya dilakukan berdasarkan trial and error. Literatur, artikel dan source code yang ditemukan serta mata kuliah yang diikuti pada umumnya hanya membahas topik kompilasi sampai dengan teknik parsing untuk membangkitkan pohon
V-4 sintaks abstrak. Informasi mengenai pemrosesan pohon sintaks abstrak untuk menghasilkan efek eksekusi yang diharapkan sangat sedikit.
Sebenarnya, interpreter pertama yang dicoba untuk dikembangkan adalah interpreter untuk bahasa Java, dengan pertimbangan bahwa telah tersedia grammar dan contoh pengolahan pohon sintaks abstrak dalam bentuk pemeriksa pola Checkstyle. Pada percobaan pertama ini, proses interpretasi bahasa Java dicoba dilakukan sepenuhnya dengan penelusuran (treewalking) terhadap pohon sintaks abstrak. Pada akhirnya pengembangan interpreter Java dibatalkan, karena grammar untuk bahasa Java amat rumit sehingga dengan demikian interpreter bahasa Java dinilai sebagai awal usaha pengembangan yang salah.
Upaya pengembangan interpreter dilanjutkan dengan pengembangan interpreter untuk bahasa Lisp, yang dinilai lebih sederhana. Grammar Lisp tidak tersedia pada situs pengembang Antlr. Grammar Lisp yang tersedia yaitu grammar leksikal dan sintaksis yang telah dibuat
oleh Cynthia Kustanto [KUS07] untuk kepentingan deteksi plagiarisme otomatis. Grammar leksikal dan sintaksis yang dikembangkan ini dibatasi hanya pada konsep dan fitur yang digunakan pada pengajaran pemrograman dasar S1-IF-ITB, karena spesifikasi bahasa GNU Common Lisp formal meliputi sekitar 1000 (seribu) konstruksi, makro dan fungsi [STE90]. Grammar yang disederhanakan ini hanya mencakup sekitar 30 keyword fungsi dan konstruksi seperti tipe data dasar dan list saja. Meskipun harus dimodifikasi secara menyeluruh untuk kepentingan eksekusi, grammar Lisp ini akhirnya dapat digunakan dalam proses interpretasi. Pada tahap ini, diperoleh kesimpulan bahwa fitur-fitur yang akan diimplementasikan hanya fitur-fitur yang digunakan pada pengajaran pemrograman dasar S1-IF-ITB.
Proses interpretasi yang dilakukan sepenuhnya berdasarkan penelusuran pohon sintaks abstrak saja, sementara fungsi diimplementasikan sebagai kelas-kelas untuk menyeragamkan proses eksekusi program. Spesifikasi interpreter Lisp pada Phobos yang telah dikembangkan akan diberikan pada LAMPIRAN H.
Interpreter yang dikembangkan selanjutnya adalah interpreter untuk bahasa Pascal. Grammar yang digunakan untuk bahasa Pascal adalah grammar yang dikembangkan oleh Hakki Dogusan berdasarkan spesifikasi oleh Wirth [WIR73]. Grammar yang telah tersedia pada situs pengembang Antlr ini terdiri dari grammar leksikal, sintaksis dan tree grammar, walaupun tree grammar yang ada masih belum lengkap. Bersama dengan grammar tersebut telah tersedia pula kerangka kelas untuk hampir seluruh aturan gramatik Pascal. Pada awalnya pengembangan interpreter diusahakan untuk dilakukan hanya berdasarkan penelusuran pohon saja, namun pada saat penulisan kode, menjadi jelas bahwa dibutuhkan kelas-kelas khusus
V-5 untuk merepresentasikan behaviour program saat runtime. Kelompok kelas baru ini kemudian dinamai dengan kelas eksekusi. Pembangkitan objek-objek eksekusi ini dilakukan pada saat penelusuran pohon dengan bantuan tree grammar. Perancangan kelas-kelas eksekusi ini akan dijelaskan secara lebih mendetil pada Subbab 5.1.5.2, sementara spesifikasi interpreter Pascal pada Phobos yang telah dikembangkan akan diberikan pada LAMPIRAN I.
Pengembangan interpreter untuk suatu bahasa membutuhkan cukup banyak waktu dan upaya. Sumber daya yang digunakan berbanding lurus terhadap tingkat kerumitan bahasa yang hendak diimplementasikan. Pada Tugas Akhir ini, diputuskan untuk menghentikan proses pengembangan interpreter sampai dengan bahasa Lisp dan Pascal saja, dengan pembahasan teknis mengenai pengembangan interpreter bahasa pemrograman baru pada LAMPIRAN G.
5.1.5.2 Perancangan Interpreter Secara umum, modul interpreter pada Phobos terbagi ke dalam beberapa lapisan, yaitu lapisan antarmuka, lapisan pemroses pohon sintaks abstrak, dan lapisan eksekusi. Arsitektur implementasi interpreter Phobos secara umum dapat dilihat pada Gambar V-1. Interpreter
Antarmuka
PhobosLisp
LispInterpreter
PascalInterpreter
PhobosPascal
Pemroses Pohon Sintaks Abstrak LispParser
PascalParser LispObjectStream
PascalTreeParser PascalLexer
LispLexer
Eksekusi LispLibrary
LispObject
PascalNamedBlock
LispFunction PascalFunction
…
…
Gambar V-1 Arsitektur Interpreter Phobos
PascalScope
PascalProcedure
V-6 Antarmuka interpreter menghubungkan implementasi interpreter pada sistem lain, baik sistem autograder maupun sebagai interpreter mandiri. Antarmuka interpreter pada Phobos berfungsi untuk mengabstraksikan proses parsing dan eksekusi program terhadap sistem penilai otomatis, sehingga sistem dapat berjalan dengan secara seragam untuk seluruh bahasa yang ada. Proses input/output kepada program juga diimplementasikan. Antarmuka interpreter kepada autograder ini diimplementasikan sebagai sebuah kelas abstrak Interpreter. Implementasi interpreter untuk masing-masing bahasa pemrograman terdapat pada kelas-kelas turunan dari Interpreter, yaitu LispInterpreter dan PascalInterpreter. Dengan adanya lapisan antarmuka dalam modul interpreter ini, timbul pemikiran agar interpreter Phobos dirancang agar dapat dipergunakan tidak hanya dalam konteks penilaian otomatis. Interpreter Phobos dirancang untuk dapat digunakan secara mandiri agar dapat dipergunakan oleh siswa pada saat berlatih membuat program atau untuk mendukung aplikasi lainnya. Antarmuka interpreter sebagai sistem mandiri untuk interpreter Lisp diimplementasikan oleh kelas PhobosLisp, dan interpreter Pascal oleh PhobosPascal.
Pemroses pohon sintaks abstrak adalah kelas-kelas yang dibangkitkan secara otomatis oleh Antlr. Bagian ini terbagi ke dalam tiga kelompok menurut tahap-tahap awal interpretasi, yaitu
kelas Lexer untuk tahap analisis leksikal, kelas Parser untuk tahap analisis sintaks dan kelas TreeParser untuk tahap treewalking. Kelas Parser menggunakan kelas Lexer untuk membangkitkan pohon sintaks abstrak dari source code yang diberikan. Kedua kelas ini dibangkitkan secara otomatis oleh Antlr dari grammar bahasa pemrograman yang terkait, yaitu pada file lisp.g dan pascal.g. Lexer dan parser untuk Lisp bernama LispLexer dan LispParser. Lexer dan Parser untuk Pascal bernama PascalLexer dan PascalParser. Kelas TreeParser menerima pohon sintaks abstrak dan kemudian melakukan penelusuran terhadap pohon tersebut. Pada proses interpretasi, treewalking dilakukan untuk membangkitkan objek-objek eksekusi dari pohon sintaks abstrak tersebut. Kelas ini dibangkitkan secara otomatis oleh Antlr dari tree grammar bahasa pemrograman yang terkait, yaitu pada file lisp.tree.g dan pascal.tree.g. Kelas TreeParser untuk
Lisp
dinamai
LispObjectStream,
sementara
untuk
Pascal
dinamai
PascalTreeParser. Detil grammar dan tree grammar untuk Lisp dan Pascal diberikan pada Lampiran H.
Pada lapisan eksekusi terdapat kelas-kelas implementasi untuk setiap aturan grammar bahasa pemrograman beserta library dasar yang
disediakan untuk setiap bahasa pemrograman.
Kelas-kelas eksekusi merupakan instansiasi dinamik dari tiap konstruksi pohon sintaks
V-7 abstrak. Kelas-kelas eksekusi harus dibuat terpisah untuk menangani proses saat runtime seperti penanganan scope, pembuatan tabel simbol, stack eksekusi atau parameter binding. Jumlah kelas pada layer ini sebanding dengan kerumitan bahasa pemrograman yang bersangkutan secara konseptual.
Jumlah kelas dapat juga diperkirakan dari jumlah aturan produksi simbol nonterminal dan fungsi library yang diimplementasikan. Bahasa pemrograman Lisp dapat digolongkan sederhana karena hanya memiliki sembilan aturan produksi simbol nonterminal. Untuk implementasi interpreter Lisp, terdapat 42 kelas untuk kelas eksekusi. Sebanyak 37 dari antara kelas runtime Lisp merupakan implementasi library. Bahasa Pascal tergolong bahasa pemrograman yang lebih rumit dengan aturan produksi simbol nonterminal sebanyak 90 aturan. Dengan hanya tiga kelas di antaranya merupakan kelas implementasi library, kelas eksekusi untuk Pascal berjumlah 102 buah. Heuristik ini dapat dipergunakan untuk memperkirakan jumlah kelas eksekusi sebuah bahasa dan upaya yang akan dikeluarkan untuk membuat modul interpreter bahasa pemrograman baru. Sebagai gambaran, sebuah bahasa pemrograman yang cukup rumit seperti Java memiliki 145 aturan grammar dapat diperkirakan akan memiliki sekitar 120-150 kelas runtime apabila akan diimplementasikan secara penuh. Detil perancangan kelas selengkapnya untuk Interpreter Lisp Phobos beserta grammar yang digunakan akan dibahas lebih dengan lebih mendetil pada Lampiran H dan Lampiran I.
Berikut ini adalah sebuah contoh proses perancangan kelas eksekusi dari aturan grammar bahasa pemrograman. Diberikan sebuah produksi simbol non terminal
dalam Pascal sebagaimana tertera pada Kode V-1. Dalam perancangan kelas runtime terdapat heuristik bahwa satu simbol nonterminal menjadi satu kelas. Jika satu simbol nonterminal merupakan produksi dari simbol nonterminal , maka dapat dibuat kelas sebagai turunan dari kelas A. Dalam contoh di atas, rule statement dapat dibuat sebagai kelas parent bernama PascalStatement. Karena telah diketahui bahwa statement dalam Pascal dapat dieksekusi, maka dapat ditambahkan metode executeStatement() ke dalam kelas PascalStatement.
<statement> ::= <simpleStatement> | <structuredStatement> <structuredStatement> ::= | | | <withStatement> ::= STRUCT_IF <expression> PREP_THEN <statement> (PREP_ELSE <statement>)
Kode V-1 Aturan Produksi Simbol Nonterminal pada Pascal
V-8
Berdasarkan aturan produksi seperti di atas, maka dapat dibuat rancangan kelas eksekusi PascalIfStatement sebagai turunan dari kelas PascalStatement. Kelas ini akan
memiliki tiga atribut, yaitu condExpression yang bertipe PascalExpression, thenStatement
dan
PascalExpression
elseStatement
yang
bertipe
PascalStatement.
Kelas
merupakan kelas yang merepresentasikan simbol nonterminal
<expression> dan dapat dievaluasi sehingga memiliki method evaluateExpression. Metode
executeStatement
pada
PascalIfStatement
dapat
kemudian
diimplementasikan sebagaimana tertera pada Kode V-2.
public void executeStatement() { if (condExpression.evaluateExpression()) { thenStatement.executeStatement(); } else if (elseStatement != null) { elseStatement.executeStatement(); } }
Kode V-2 Contoh implementasi metode executeStatement pada kelas PascalIfStatement
5.1.6 Implementasi Ekstensibilitas Penilaian dan Bahasa Pemrograman Sebagaimana telah ditentukan dalam kebutuhan non fungsional pada Subbab 3.3.3, ekstensibilitas merupakan salah satu faktor penentu dalam pengembangan Phobos. Autograder Phobos dirancang agar dapat diperluas dengan mudah tanpa banyak melakukan perubahan pada modul-modul utama. Perluasan yang dapat dilakukan adalah penambahan jenis penilaian baru dan penambahan bahasa pemrograman yang dapat ditangani.
Pengembangan Phobos untuk menangani jenis penilaian baru dapat dilakukan dengan membuat
turunan
baru
dari
kelas
Marker.
Kelas
turunan
baru
ini
harus
mengimplementasikan method executeMarking untuk melakukan penilaian. Jika penilaian yang dilakukan dapat diimplementasikan menggunakan fasilitas yang sudah ada (notifikasi setiap kali token tertentu muncul) maka tidak perlu dibuat kelas tambahan lain. Tidak ada perubahan kode yang harus dilakukan karena mekanisme loading kelas dilakukan secara dinamis, namun harus ditambahkan entri jenis penilaian baru pada metaskema yang sesuai dengan nama kelas implementasi Marker. Sebagai konvensi penamaan, nama implementasi penilai harus sama dengan jenis penilaian dengan penambahan sufiks -Marker di belakang nama tersebut.
V-9
Pengembangan Phobos untuk menangani bahasa pemrograman baru dapat dilakukan dengan menambahkan modul interpreter baru dengan mengikuti panduan pada LAMPIRAN G. Tidak ada perubahan kode yang harus dilakukan karena mekanisme loading interpreter dilakukan secara dinamis, namun harus ditambahkan entri bahasa pemrograman baru pada metaskema yang sesuai dengan nama kelas implementasi Interpreter. Sebagai konvensi penamaan, nama implementasi interpreter harus sama dengan nama bahasa pemrograman dengan penambahan sufiks -Interpreter di belakang nama tersebut.
5.2. Pengujian Pada Subbab ini akan diberikan penjelasan mengenai perancangan komponen autograder engine pada Phobos. Autograder engine adalah komponen yang bertanggung jawab melakukan penilaian otomatis pada serahan tugas yang diberikan berdasarkan trigger dari aplikasi front-end. Sebagai komponen pada logic tier, komponen ini mengimplementasikan dari seluruh use case sistem : membuat skema penilaian, menilai tugas source code, melihat laporan nilai, dan menghapus hasil penilaian. Rancangan kelas-kelas dalam autograder engine dapat dilihat pada Gambar 4.1.
5.2.1 Lingkungan Pengujian Lingkungan pengujian Phobos secara keseluruhan dapat dilihat pada Gambar V-2. Phobos terletak pada layer “Autograder Phobos”. Lingkungan pengujian membentuk jaringan intranet lokal.
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.
V-10
Gambar V-2 Lingkungan pengujian Phobos
Aplikasi web Phobos dapat diakses dari komputer lain pada jaringan intranet lokal tersebut melalui alamat http://milestone.if.itb.ac.id/phobos/.
5.2.2 Persiapan Pengujian Sebelum dilakukan pengujian, dilakukan pengumpulan data uji berupa source code yang ditulis secara manual dan beberapa source code yang terpilih dari hasil praktikum IF1282 Dasar Pemrograman. 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 untuk penilai otomatis dilakukan menggunakan sejumlah source code yang dibuat secara manual dan sejumlah source code yang dipilih secara khusus dari kumpulan hasil praktikum IF2182 Dasar Pemrograman pada semester II 2006/2007. Tidak seluruh source code yang tersedia dari praktikum dapat diuji menggunakan Phobos, karena penilaian menggunakan Phobos hanya dapat dilakukan dengan beberapa prekondisi tertentu. Untuk source code dalam bahasa LISP, penilaian yang melibatkan uji eksekusi hanya dapat dilakukan pada fungsi-fungsi yang memiliki nama yang seragam. Source code dalam bahasa Pascal hanya dapat dieksekusi apabila tingkah laku (behaviour) orientasi barisnya seragam.
V-11 5.2.2.2 Instalasi Prototipe Sebelum pengujian dilakukan, terlebih dahulu dilakukan instalasi Phobos ke server yang telah dideskripsikan pada Subbab 5.2.1. Pada Subbab ini, akan dijelaskan cara instalasi Phobos sebagai bagian dari persiapan pengujian.
Berikut ini diuraikan langkah-langkah instalasi Phobos: 1. Periksa instalasi Java Virtual Machine dan Apache/PHP pada server, lakukan instalasi apabila belum terdapat aplikasi tersebut. 2. Copy direktori autograder engine Phobos ke server yang dituju. 3. Copy direktori aplikasi web Phobos 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, isi path tempat penyimpanan direktori aplikasi autograder engine, source code dan skema penilaian 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
Phobos,
dilakukan
pengujian
untuk
unit
yang
mengimplementasikan fungsionalitas utama pada aplikasi autograder engine. Pengujian unit dilakukan untuk kelas SchemaManager, MarkingManager dan ReportManager. Detil pengujian unit untuk kelas-kelas ini dapat dilihat pada Tabel V-1. Selain itu, pengujian unit dilakukan untuk modul interpreter LISP dan Pascal secara terpisah. Detil pengujian unit interpreter dapat dilihat pada Subbab H.6 dan Subbab I.6.
Tabel V-1 Pengujian Unit untuk Kelas-Kelas Phobos No 1.
Unit SchemaManager
2
MarkingManager
3
ReportManager
Deskripsi Membuat definisi skema penilaian baru
Membuka definisi skema penilaian Membaca direktori berdasarkan parameter Menyimpan laporan penilaian baru
Data masukan Skema penilaian : penilaian dengan eksekusi, bobot 100%, 5 data uji Skema penilaian : penilaian dengan eksekusi, bobot 80%, 5 data uji, SLOC, bobot 20%. Schema_id = 1 Schema_id = 7 Directory = prak1 Directory =prak7 MarkingResult : [81,0.81] MarkingResult : [100,1]
Hasil uji Diterima
Diterima
Diterima Diterima Diterima Diterima Diterima
V-12 No
Unit
Deskripsi
Membuka Laporan Penilaian
Data masukan MarkingResult : [78,3.271] MarkingResult : [97, 4.891] Schema id = 7 Source dir = prak7 Schema id = 1 Source dir = prak1
Hasil uji Diterima Diterima Diterima
5.2.3.2 Pengujian Fungsional berdasarkan Use Case Pada Subbab ini akan dibahas mengenai pengujian aplikasi berdasarkan use case sebagaimana tercantum pada Subbab 3.3.1. Pembahasan mengenai uji unit untuk tiap use case akan dijabarkan pada Tabel V-2
Tabel V-2 Hasil Pengujian Use Case terhadap Phobos
No Use Case 1. PHB-UC-01
2.
PHB-UC-02
Function Membuat definisi skema penilaian
Penilaian otomatis pada kumpulan source code untuk solusi model dan sekumpulan source code yang ditulis secara manual untuk menunjukkan kekurangan pada kasuskasus tertentu.
Data masukan Spesifikasi tugas dengan bahasa pemrograman LISP, untuk soal Mean, dengan data uji diberikan secara manual dan penilaian yang telah ditentukan sebelumnya. Spesifikasi tugas dengan bahasa pemrograman Pascal, untuk soal HitungIPK, dengan data uji diberikan secara manual.
Hasil diterima
diterima
Skema penilaian yang sudah ada (Mean-LISP) diedit dengan mengubah bobot perhitungan nilai akhir di antara penilaian-penilaian. Skema penilaian Mean-LISP, dan source code solusi model (eksekusi sempurna, memenuhi konvensi penulisan kode, cukup sederhana dan efisien). Skema penilaian Mean-LISP, dan source code solusi model bersama tiga source code program benar namun tidak sempurna (kasus source code tidak memenuhi konvensi penulisan kode, source code rumit, dan source code tidak efisien).
diterima
Skema penilaian Mean-LISP, dan source code solusi model bersama tiga source code program lulus kompilasi dengan keluaran yang salah pada satu, dua dan semua kasus uji.
diterima
diterima
diterima
V-13 No
Use Case
3.
PHB-UC-03
4.
PHB-UC-04
Function
Melihat hasil penilaian otomatis pada kumpulan source code yang telah dijalankan sebelumnya. Menghapus laporan nilai dari proses penilaian yang telah dijalankan sebelumnya.
Data masukan
Hasil
Skema penilaian Mean-LISP, dan source code model bersama empat source code program gagal kompilasi pada kasus tanda kurung tidak berimbang, variabel tidak dikenal, fungsi tidak dikenal, jumlah parameter tidak sesuai.
diterima
Skema penilaian Mean-LISP, dan source code model bersama dua source code program yang mengalami runtime error pada kasus tanda kurung rekursif tanpa basis, dan kesalahan tipe masukan fungsi.
diterima
Skema penilaian HitungIPK-Pascal, dan source code model bersama enam source code program gagal kompilasi pada kasus kesalahan sintaks (titik koma tidak ada, begin-end tidak berimbang), tipe tidak dikenal, variabel tidak dikenal, fungsi/prosedur tidak dikenal, definisi ulang simbol yang telah didefinisikan.
diterima
Skema penilaian HitungIPK-Pascal, dan source code model bersama empat source code program runtime error pada kasus akses indeks array yang di luar batas, pembagian oleh nol, infinite loop, variabel belum diinisialisasi, assignment pada variabel yang berbeda tipe. Kumpulan source code Pascal dari mata kuliah IF1282, jumlah source code 120.
diterima
Kumpulan source code Pascal dari mata kuliah IF1282, jumlah source code 120.
diterima
diterima
5.2.3.3 Pengujian Non-Fungsional Pada Subbab ini akan dibahas mengenai pengujian aplikasi berdasarkan kebutuhan non fungsional sebagaimana telah tercantum pada Subbab 3.3.3. Detil hasil pengujian tiap spesifikasi dapat dilihat pada Tabel V-3.
V-14 Tabel V-3 Hasil Pengujian Kebutuhan Nonfungsional Phobos Nomor SRS PHB-SRSNF-01
Spesifikasi Aksesibilitas
PHB-SRSNF-02
Efisiensi
PHB-SRSNF-03
Ekstensibilitas
Keterangan Layanan autograder dan hasil penilaiannya dapat diakses dari komputer manapun yang terhubung pada internet. Autograder harus mampu menilai source code yang mencapai ratusan dalam waktu yang dapat ditoleransi, yaitu tidak lebih dari setengah hari kerja untuk kelas berisi seratus mahasiswa. Autograder dapat dikembangkan lebih lanjut agar dapat menangani bahasa pemrograman lain tanpa mengembangkan ulang seluruh autograder.
Hasil uji Phobos dapat diakses dari berbagai komputer melalui web browser.
Dengan menggunakan lingkungan pengujian pada Subbab BAB I, Phobos mampu menilai 100 buah source code di bawah 10 menit. Untuk menangani bahasa pemrograman lain, hanya perlu menambahkan modul interpreter baru (lihat Subbab 5.1.5 untuk detil implementasi).
5.2.4 Hasil Pengujian Pada Subbab ini akan dibahas mengenai hasil-hasil pengujian terhadap aplikasi Phobos. Berdasarkan pengujian, Phobos dapat memenuhi setiap spesifikasi fungsional dan nonfungsional yang didefinisikan pada Subbab 3.3. Berdasarkan penjelasan di Subbab 1.1, hasil penilaian otomatis dapat membantu pengajar untuk menentukan nilai akhir siswa dari latihan pemrograman yang diberikan secara frequent. Pengajar dapat melakukan variasi terhadap proses penilaian yang dilakukan Phobos dengan cara mengubah skema penilaian yang diberikan.
Secara umum, source code yang tidak lulus parsing akan langsung mendapat nilai 0 dengan keterangan kesalahannya. Nilai hasil eksekusi sebanding dengan jumlah butir uji yang berhasil dijalankan dengan baik. Karena skema penilaian yang digunakan umumnya memberikan proporsi besar pada nilai pengujian (seperti halnya pada proses inspeksi kode oleh pengajar), nilai eksekusi sangat menentukan nilai akhir siswa. Penilaian untuk aspekaspek whitebox umumnya menggunakan aturan penilaian relatif terhadap source code lainnya atau aturan biner, nilai penuh jika syarat sudah dipenuhi. Pengujian menggunakan source code yang sengaja digunakan untuk menguji fitur penilai spesifik dapat menunjukkan bahwa penilai-penilai ini telah dapat bekerja dengan baik.