V-1
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 autograderPhobos dalam platformJava 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.
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 subpackagelisp 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.
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
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
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.
Gambar V-1 Arsitektur Interpreter Phobos
Interpreter LispInterpreter PhobosLisp PascalInterpreter PhobosPascal LispObjectStream PascalTreeParser LispLexer LispParser PascalParser PascalLexer LispObject LispFunction
LispLibrary PascalNamedBlock PascalScope
PascalProcedure PascalFunction Pemroses Pohon Sintaks Abstrak Antarmuka Eksekusi … …
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
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 <ifStatement> 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 <B> merupakan produksi dari simbol nonterminal <A>, maka dapat dibuat kelas <B> 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> ::=
<compoundStatement> | <conditionalStatement> | <repetetiveStatement> | <withStatement>
<ifStatement> ::=
STRUCT_IF <expression> PREP_THEN <statement> (PREP_ELSE <statement>) Kode V-1 Aturan Produksi Simbol Nonterminal <ifStatement> pada Pascal
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 elseStatement yang bertipe PascalStatement. Kelas PascalExpression 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. AutograderPhobos 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.
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
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.
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 enginePhobos 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 Unit Deskripsi Data masukan Hasil uji
Skema penilaian : penilaian dengan eksekusi, bobot 100%, 5 data uji
Diterima Membuat definisi skema
penilaian baru
Skema penilaian :
penilaian dengan eksekusi, bobot 80%, 5 data uji, SLOC, bobot 20%.
Diterima
Schema_id = 1 Diterima
1. SchemaManager
Membuka definisi skema
penilaian Schema_id = 7 Diterima
Directory = prak1 Diterima
2 MarkingManager Membaca direktori berdasarkan
parameter Directory =prak7 Diterima
3 ReportManager Menyimpan laporan penilaian
baru
MarkingResult : [81,0.81] MarkingResult : [100,1]
No Unit Deskripsi Data masukan Hasil uji
MarkingResult : [78,3.271] MarkingResult : [97, 4.891]
Diterima
Schema id = 7 Source dir = prak7
Diterima Membuka Laporan Penilaian
Schema id = 1 Source dir = prak1
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 Function Data masukan Hasil
Spesifikasi tugas dengan bahasa pemrograman LISP, untuk soal Mean, dengan data uji diberikan secara manual dan penilaian yang telah ditentukan sebelumnya.
diterima
Spesifikasi tugas dengan bahasa pemrograman Pascal, untuk soal HitungIPK, dengan data uji diberikan secara manual.
diterima 1. PHB-UC-01 Membuat definisi skema
penilaian
Skema penilaian yang sudah ada (Mean-LISP) diedit dengan mengubah bobot perhitungan nilai akhir di antara penilaian-penilaian.
diterima
Skema penilaian Mean-LISP, dan
source code solusi model (eksekusi sempurna, memenuhi konvensi penulisan kode, cukup sederhana dan efisien).
diterima
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 2. PHB-UC-02 Penilaian otomatis pada
kumpulan source code
untuk solusi model dan sekumpulan source code yang ditulis secara manual untuk menunjukkan
kekurangan pada kasus-kasus tertentu.
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.
No Use Case Function 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.
diterima
3. PHB-UC-03 Melihat hasil penilaian otomatis pada kumpulan
source code yang telah dijalankan sebelumnya.
Kumpulan source code Pascal dari mata kuliah IF1282, jumlah source code 120.
diterima
4. PHB-UC-04 Menghapus laporan nilai dari proses penilaian yang telah dijalankan sebelumnya.
Kumpulan source code Pascal dari mata kuliah IF1282, jumlah source code 120.
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.
Tabel V-3 Hasil Pengujian Kebutuhan Nonfungsional Phobos
Nomor
SRS Spesifikasi Keterangan Hasil uji
PHB-SRS-NF-01
Aksesibilitas Layanan autograder dan hasil penilaiannya dapat diakses dari komputer manapun yang terhubung pada internet.
Phobos dapat diakses dari berbagai komputer melalui web browser.
PHB-SRS-NF-02
Efisiensi 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.
Dengan menggunakan lingkungan pengujian pada Subbab BAB I, Phobos mampu menilai 100 buah source code
di bawah 10 menit.
PHB-SRS-NF-03
Ekstensibilitas Autograder dapat dikembangkan lebih lanjut agar dapat menangani bahasa pemrograman lain tanpa mengembangkan ulang seluruh
autograder.
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 non-fungsional 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 aspek-aspek 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.