Ifnu Bima Fatkhan
G64101070
DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
Skripsi
Sebagai salah satu syarat untuk memperoleh gelar Sarjana Komputer
pada Fakultas Matematika dan Ilmu Pengetahuan Alam
Institut Pertanian Bogor
Ifnu Bima Fatkhan
G64101070
DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
Dibimbing oleh Marimin dan Panji Wasmana.
Penyusunan Modul Evaluasi pada Sistem Pembelajaran Cerdas merupakan penelitian untuk menyusun modul evaluasi pada sistem pembelajaran cerdas yang mengajarkan pada siswa konsep-konsep dasar pemrograman bahasa C. Modul evaluasi digunakan oleh sistem pembelajaran cerdas sebagai media untuk mengetahui kemampuan siswa dan mengetahui perkembangan kemampuan siswa sebelum, ketika dan setelah proses pengajaran berlangsung. Modul evaluasi juga memberikan gambaran mengenai karakteristik kemampuan siswa terutama kemampuan siswa dalam mengerjakan soal-soal pemrograman bahasa C.
Penelitian ini didasarkan pada sistem pembelajaran cerdas yang telah disusun untuk bahasa Java oleh Edward R. Sykes (Sheridan College, Canada) dan Franya Franek (McMaster University, Canada). Dalam sistem pembelajaran cerdas yang disusun oleh keduanya, proses evaluasi pekerjaan siswa dilaksanakan dengan cara membandingkan pekerjaan siswa dengan kunci jawaban yang unik, padahal jawaban untuk suatu soal tidak unik. Penelitian ini mengambil beberapa ide Intent Recognition yang digunakan oleh Edward Sykes dan Franya Franek. Kemudian memperbaiki metode evaluasinya dengan menambahkan proses grading yang dapat secara objektif mengeveluasi jawaban siswa.
Penelitian ini menyempurnakan proses tutorial yang dikembangkan oleh Franek dan Sykes dengan menambahkan output grader, sistem penjelas dan sistem perbaikan terotomasi. Proses evaluasi dimulai dengan melakukan kompilasi terhadap kode sumber hasil jawaban siswa, jika proses kompilasi berhasil, output grader akan mengetes jawaban dengan serangkaian tes. Jika proses kompilasi gagal, lexer dan parser dalam Intent Recognition akan menganalisis kode sumber. Kesalahan yang ditemukan dalam kode sumber dijelaskan oleh sistem penjelas. Siswa dapat meminta pertolongan sistem perbaikan terotomasi untuk memperbaiki kode programnya.
Penelitian ini aku persembahkan untuk :
Ayah dan Ibu tercinta, Kak Mifta, Dek Banan, Dek Pinten dan Neng Dian.
Judul
: Penyusunan Modul Evaluasi pada Sistem Pembelajaran
Cerdas
Nama
: Ifnu Bima Fatkhan
NRP
: G64101070
Menyetujui:
Pembimbing I
Pembimbing II
Prof. Dr. Ir. Marimin, M.Sc
Panji Wasmana, S.Kom, M.Si
NIP.131645110 NIP. 132311917
Mengetahui:
Dekan Fakultas Matematika dan Ilmu Pengetahuan Alam
Institut Pertanian Bogor
Prof. Dr. Ir. Yonny Koesmaryono, MS
NIP. 131473999
RIWAYAT HIDUP
Ifnu Bima Fatkhan lahir di Banyuwangi 15 Maret 1983, dilahirkan dari pasangan Rahmad Nurhadi dan Ngatiyah Ismail. Anak kedu a dari empat bersaudara ini menyelesaikan Pendidikan. M engengah Atas di SMU Taruna Nusantara Magelang. Pada tahun 2001 penulis melanjutkan pendidikan tingginya di Departamen Ilmu Komputer Institut Pertanian Bogor melalui jalur undangan khusus prestasi. Undangan khusus ini dianugerahkan kepada penulis atas prestasinya sebagai anggota Tim Olimpiade Kimia Indonesia pada 33rd International Chemistry Olympiad di Mumbay India.
PRAKATA
Alhamdulillah wa syukrulillah penulis persembahkan ke hadirat Allah Subhanahu wa ta’ala atas segala rahmat dan hidayah-Nya sehingga penelitian ini berhasil diselesaikan. Shalawat beriring salam tercurah untuk Nabi Muhammad Shallalahu ‘alaihi wasallam beserta seluruh sahabat, keluarga dan umatnya hingga akhir zaman.
Penulis sampaikan terima kasih yang tiada berhingga kepada semua pihak yang telah membantu secara langsung maupun tidak langsung. Khususnya kepada Bapak Prof . Dr. Ir. Marimin, M.Sc dan Bapak Panji Wasmana, S.Kom, M.Si yang dengan sabar dan berbesar hati telah memberikan banyak bimbingan, masukan, motivasi berharga terhadap penelitian ini. P enulis juga ingin mengucapkan terima kasih kepada Ibu Imas Sitanggang, S.Si, M.Kom atas kesediaannya menjadi penguji pada sidang skripsi.
Selanjutnya penulis juga ingin mengucapkan terima kasih kepada:
1. Ayah dan Ibu tercinta atas semua do’a, nasehat, ketabahan, kesabaran dan kasih sayang dari awal hingga akhir.
2. Mbak Mifta, Mas Nur, Dek Banan, Dek Dima dan Neng Dian yang selalu memberikan dukungan dan semangat.
3. Dhira, Acid, Robi, Irfan, Rossi, Leisca yang dengan senang hati memberikan dorongan untuk segera menyelesaikan penelitian ini.
4. Dhiku dan Meynar yang dengan sabar memberik an masukan dan koreksi terhadap laporan penelitian ini.
5. Mas Endy yang secara tidak langsung mengenalkan ANTLR, Mas Ibrahim yang bersedia meluangkan wakt u berdiskusi tentang ANTLR, Pak Tonny yang mengajari beberapa konsep tentang Netbeans Platform dan tentu saja semua anggota komunitas netbeans indonesia.
6. Terrence Parr dan Jean Bovet untuk pekerjaan yang luar biasa, ANTLR, C.g dan AntlrWorks.
7. Mas Degy untuk ilmu Java dan icon SExI-FS.
8. Mas Irfan yang dengan sabar meminjami buku-buku perpustakaan, Pak Firman yang bersedia mendengarkan laporan kemajuan, dan Toto yang terus mendukung selama karantina di lab kecil.
9. Denny, Nanang dan penghuni MeteorHouse yang dengan murah hati menyediakan tempat bernaung selama penelitian ini .
10. Didi untuk pinjaman karpetnya.
11. Irfan untuk tumpangan ke Darmaga dan bantuan selama seminar dan sidang.
12. Semua dosen dan Staf Departemen Ilmu Komputer IPB yang telah banyak membantu baik selama pelaksanaan penelitian ini maupun sebelumnya.
13. Semua pihak lainnya yang telah memberikan kontribusi selama penelitian ini yang tidak dapat disebutkan satu-persatu, terima kasih.
Semoga penelitian ini memberikan manfaat untuk pengembangan ilmu pengetahuan di masa datang. Amin.
Bogor, Agustus 2007
DAFTAR ISI
PENDAHULUAN
Latar Belakang... 1
Tujuan ... 1
Ruang Lingkup ... 2
Manfaat ... 2
TINJAUAN PUSTAKA Sistem Pembelajaran Cerdas ... 2
Model Komunikasi... 2
Modul Pakar ... 3
Modul Pedagogig ... 3
Modul Siswa ... 4
Modul Evaluasi... 4
Kode Sumber Bahasa C ... Error! Bookmark not defined. Token ... 4
Lexer ... 4
Parser ... 4
Grammar ... 4
METODOLOGI PENELITIAN Kerangka Pemikiran ... 5
Studi Literatur ... 5
Penentuan Metode Pengembangan Sistem ... 5
Analisis Kebutuhan... 6
Perancangan ... 6
Implementasi... 6
Pengujian ... 6
HASIL DAN PEMBAHASAN Analisis ... 6
Kebutuhan Fungsional ... 6
Strategi Penilaian ... 7
Strategi Pengenalan Kesalahan ... 7
Strategi Perbaikan Terotomasi ... 7
Kebutuhan Non Fungsional ... 7
Perancangan ... 7
Arsitektur Sistem ... 7
Perancangan Struktur Penyimpanan Data ... 8
Perancangan Output Grader ... 8
Perancangan Intent Recognition... 9
Algoritma Transformasi Token ... 11
Algoritma Pemeriksaan dan Pencatatan Kesalahan... 11
Perancangan Sistem Perbaikan Terotomasi ... 12
Perancangan Antarmuka ... 13
Implementasi... 13
Implementasi Struktur Penyimpanan Data... 13
Implementasi Output Grader ... 14
Implementasi Intent Recognition ... 14
Implementasi Sistem Perbaikan Terotomasi... 16
Proses Tutorial ... 17
Implementasi Antarmuka Sistem... 18
Issue dalam Implementasi Sistem ... 19
Kelebihan Sistem ... 19
Kekurangan Sistem ... 20
Pengujian Kompleksitas Algo ritma Pada Modul Evaluasi ... 20
KESIMPULAN DAN SARAN
DAFTAR GAMBAR
1 Arsitektur sistem pembelajaran cerdas b ahasa C (Wasmana 2005). ... 2
2 Diagram metodologi p enelitian. ... 5
3 Alur pengembangan sistem (System Development Life Cycle) dengan metode waterfall menurut Pressman (2001). ... 6
4 Arsitektur modul evaluasi. ... 8
5 Langkah-langkah dalam modul Output Grader... 9
6 Graph DFA untuk menerima stringidentifier dalam bahasa C. ... 9
7 Graph DFA untuk memvalidasi sintaks if dalam bahasa C. ... 10
8 Algoritma pemeriksaan dan pencatatan kesalahan oleh Intent Recognition. ... 12
9 Perancangan antarmuka modul evaluasi. ... 13
10 Tampilan antarmuka modul e valuasi... 18
DAFTAR TABEL
DAFTAR LAMPIRAN
1 Pengujian kinerja Intent Recognition.... 23 2 Pengujian kinerja sistem perbaikan terotomasi... 26 3 Pengujian sistem menggunakan metode black box. ... 27
PENDAHULUAN
Latar Belakang
Komputer telah digunakan dalam dunia pendidikan lebih dari 20 tahun. Computer-based Tutorial (CBT) dan Computer Aided Instruction
(CAI) adalah sistem yang pertama kali diperkenalkan sebagai usaha untuk mengajar siswa menggunakan komputer. Dalam sistem seperti ini, instruksi terhadap siswa tidak diberikan secara unik kepada perseorangan, tetapi instruksi diberikan sama untuk setiap siswa. Keputusan bagaimana mengajarkan materi kepada siswa tidak memperhatikan kemampuan siswa, sehingga semua siswa akan diajar dengan cara yang sama, tidak peduli apakah dia siswa yang cepat belajar maupun siswa yang agak lambat menerima materi.
Sistem pembelajaran cerdas menyempurnakan kelemahan tersebut dengan memperhatikan kemampuan siswa, kemudian mengajarkan materi sesuai kemampuan masing-masing siswa. Selain itu, sistem pembelajaran cerdas juga dapat mengetahui kelemahan-kelemahan siswa, sehingga dapat diambil keputusan pedagogig untuk mengatasinya.
Dilihat dari berbagai sisi, sistem pembelajaran cerdas , sangat mirip dengan sistem pembelajaran yang diberikan oleh pengajar secara private. Didasarkan pada ilmu kognitif dan kecerdasan buatan, sistem pembelajaran cerdas telah membuktikan keberhasilannya menyampaikan pelajaran dengan baik dalam berbagai bidang ilmu pengetahuan. sistem pembelajaran cerdas mendapatkan sambutan yang sangat antusias dari berbagai pihak karena beberapa alasan, antara lain: (1) meningkatkan kemampuan siswa, (2) pemahaman kognitif yang semakin baik, (3) waktu yang diperlukan siswa memahami materi pelajaran lebih singkat (Franek 2003).
Penerapan sistem pembelajaran cerdas dalam memonitor dan mengajarkan bahasa pemrograman telah dikembangkan dan di evaluasi selama bertahun-tahun. Dalam banyak hal, penerapan sistem pembelajaran cerdas dalam mengajarkan bahasa pemrograman telah memberikan sumbangan yang cukup signifikan dalam perkembangan bidang sistem pembelajaran cerdas itu sendiri. Termasuk diperkenalkannya konsep model siswa,
representasi pengetahuan, dan penerapan konsep pedagogig.
Modul evaluasi pada sistem pembelajaran cerdas merupakan kajian yang aktual, terutama untuk menyusun modul evaluasi agar sesuai dengan domain materi pembelajaran bahasa pemrograman. Modul evaluasi pada sistem pembelajaran cerdas dengan domain materi pembelajaran bahasa pemrograman mempunyai keunikan tersendiri. Pada umumnya, modul evaluasi pada sistem pembelajaran cerdas hanya menilai hasil jawaban siswa atas pertanyaan berjenis pilihan ganda dan isian sederhana. Di sisi lain, modul evaluasi pada sistem pembelajaran cerdas dengan domain materi pembelajaran bahasa pemrograman, harus mampu mengevaluasi jawaban siswa atas pertanyaan es ai dengan jawaban berupa kode sumber program.
Sykes dan Franek (2003) menyusun modul yang disebut Intent Recognition untuk memeriksa kode sumber B ahasa Java yang dibuat oleh siswa.
Intent Recognition mengevaluasi kode sumber
siswa dengan memeriksa lebih teliti kode sumber tersebut menggunakan lexer, parser, pengenalan kesalahan, sistem penjelas, dan strategi perbaikan terotomasi. Modul Intent Recognition bertujuan untuk memahami makna semantik dari kode sumber siswa dan secara efektif mengajarkan siswa bahasa pemrograman lewat metode
learning-by-doing.
Intent Recognition memberikan solusi
bagaimana mengevaluasi hasil jawaban siswa yang berupa kode sumber program. modul evaluasi pada sistem pembelajaran cerdas akan menggunakan metode Intent Recognition yang digabungkan dengan output grader sebagai komponen utama. Dengan konsep ini diharapkan dapat disusun modul evaluasi yang dapat menilai jawaban siswa secara lebih objektif dan mengajarkan bahasa pemrograman kepada siswa secara lebih efektif.
Tujuan
Tujuan dari penelitian ini adalah:
bahasa C. Output dari modul ini adalah nilai hasil jawaban siswa.
2 Menyusun sistem tutorial yang akan memberikan petunjuk kepada siswa bagaimana memperbaiki kesalahan sintaks yang terjadi dalam jawaban siswa atas soal yang diberikan.
Ruang Lingkup
Penelitian ini dititikberatkan pada proses penyusunan modul evaluasi untuk mengenali kode sumber bahasa C sederhana. Kode sumber yang diperiksa terbatas hanya pada kode sumber yang ada dalam jendela editor. Semisal terdapat
preprocessor directrive #include, file header
dalam include tidak diperiksa. Fungsi lain yang terdapat dalam file .c juga tidak diperiksa, hanya ada satu fungsi yang digunakan, yaitu fungsi
main.
Kesalahan yang dikenali oleh modul evaluasi hanya terbatas pada kesalahan sintaks. Kesalahan logika (semantik) dalam program belum termasuk dalam subjek penelitian ini.
Tidak semua kesalahan dapat diperbaiki secara terotomasi. Hanya kesalahan penulisan
identifier dan kesalahan karena pengurangan atau penambahan satu token yang dapat diperbaiki secara terotomasi.
Manfaat
Penelitian ini diharapkan memberikan satu langkah ke depan dalam proses pengembangan sistem pembelajaran cerdas di lingkungan Departemen Ilmu Komputer. Terwujudnya sebuah sistem pembelajaran cerdas dapat membantu pengajar dan siswa dalam proses pembelajaran bahasa pemrograman, khususnya bahasa C.
Dalam lingkup lebih luas, penelitian ini diharapkan menjadi jembatan bagi penelitian sejenis yang mengambil disiplin ilmu Teori Bahasa dan Otomata di lingkungan Departemen Ilmu Komputer IPB. Bahasa pemrograman sekarang ini berkembang dengan pesat, terutama bahasa pemrograman yang spesifik terhadap satu area disiplin tertentu. Usaha untuk meneliti aspek-asp ek dalam bahasa pemrograman tersebut sangat diperlukan untuk meningkatkan kompetensi mahasiswa Ilmu Komputer di dunia pendidikan maupun dunia industri.
TINJAUAN PUSTAKA
Sistem Pembelajaran Cerdas
Sistem Pembelajaran Cerdas (Intelligence Tutoring System, ITS) adalah suatu sistem yang memanfaatkan teknik tingkat lanjut dalam mendeskripsikan dan meningkatkan proses pengajaran. Gambar 1 menjelaskan arsitektur sistem pembelajaran cerdas. Implementasi sistem pembelajaran cerdas telah berkembang menjadi suatu sistem yang mampu “memahami” dan berlaku selayaknya pengajar dalam lingkungan pengajaran private. Sistem pembelajaran cerdas memberikan fleksibilitas dalam mempresentasikan materi dan kemampuan memahami karakteristik siswa.
Keunggulan sistem pembelajaran cerdas dibandingkan proses pengajaran dalam kelas besar adalah kemampuannya dalam memahami karakteristik unik setiap siswa dan menyampaikan materi pembelajaran sesuai dengan karakteristik siswa tersebut (Franek 2003). Kecerdasan sistem pembelajaran cerdas diwujudkan dalam kemampuan pedagogignya untuk menyampaikan materi sesuai karakteristik siswa yang diajarnya, memberikan tugas, dan menilai kemampuan siswa.
Pengguna
Gambar 1 Arsitektur Sistem Pembelajaran Cerdas Bahasa C (Wasmana 2005).
Model Komunikasi
pilihan yang secara dominan dapat diakses melalui keyboard dan mouse.
Modul Pakar
Modul pakar berfungsi sebagai pengatur proses pedagogig dan menghitung tingkat kognitif yang diterapkan sistem kepada siswa. Pada modul pakar, strategi penyusunan materi didasarkan pada model taksonomi tujuan instruksional (taksonomi bloom’s pada ranah kognitif).
Parameter input yang digunakan untuk melakukan evaluasi adalah profil siswa dan hasil interaksi siswa dengan sistem. Secara lebih detail, komponen tersebut adalah:
1 Profil siswa
a Pembobotan terhadap ketertarikan terhadap materi (menyukai, sangat menyukai, biasa saja, tidak menyukai) b Pemahaman terhadap algoritma
pemrograman (sangat paham, paham, kurang paham, tidak paham sama sekali) c IPK yang selanjutnya dikategorikan
menjadi kurang, cukup, dan baik. d Model pembelajaran yang diinginkan e Tingkat kognitif siswa
2 Parameter sistem
a Waktu yang dibutuhkan dalam proses belajar suatu materi dibandingkan terhadap waktu rata-rata pada materi yang bersangkutan.
b Nilai evaluasi yang diperoleh pada akhir bab dengan melihat tingkat kognitif berdasarkan taksonomi Bloom’s. Parameter ini memiliki peranan terpenting dalam penentuan tingkat pedagogig siswa. c Tingkat pedagogig pada materi
sebelumnya.
d Jumlah kemunculan dan banyaknya referensi yang diakses.
Hasil akhir dari modul pakar adalah:
a Rekomendasi terhadap pemilihan materi evaluasi (sulit, normal, mudah).
b Penentuan tingkat pedagogig pada materi bab yang terkait atau bab selanjutnya (sulit, normal, mudah).
c Mengatur model bantuan sistem yang berbentuk penjelasan istilah atau bentuk soal latihan (sulit, normal, mudah).
Modul Pedagogig
Hasil dari proses identifikasi pengetahuan yang diperoleh dari pakar selanjutnya diterjemahkan sebagai bentuk modul pedagogig. Komponen pada modul ini terbagi dalam tiga sub modul, yaitu:
1 Unit kurikulum yang memuat aturan perkuliahan yang berlaku. Proses aturan ini selanjutnya disebut sebagai sekuen perkuliahan. Untuk memudahkan dalam pembagian secara logis, proses sekuen ini dibagi menjadi dua proses, yaitu:
• Sekuen konsep, memuat keterkaitan materi pada tingkat bab (suku bahasan utama).
• Sekuen chunk, memuat keterkaitan sub bahasan terkecil pada setiap bab. Penentuan kognitif seorang siswa ditentukan oleh sekuen konsep. Sedangkan untuk proses evaluasi dan pemindaian tingkat akurasi pengetahuan ditentukan oleh sekuen chunk.
2 Unit materi yang memuat materi – materi perkuliahan dengan tingkat penjelasan yang berbeda. Tingkat penjelasan ini didasarkan pada tingkat kognitif siswa dan model pedagogig yang yang telah diterapkan dalam sistem pada sesi pembelajaran sebelumnya. Secara umum terdapat tiga tingkat penjabaran materi yang diberikan sistem, yaitu: lambat, normal, cepat. Masing – masing penjelasan ini dipersiap kan untuk setiap bab bahasan. Selain itu, unit materi dilengkapi dengan bentuk – bentuk
fragment pengetahuan yang
mencerminkan satu sub komponen bahasan terkecil (chunk).
3 Unit soal yang memuat beragam bentuk soal yang bertujuan menguji kemampuan siswa dalam menguasai materi perkuliahan. Setiap soal memiliki karakteristik yang sesuai dengan ranah kognitif dan tingkat pedagogig yang dimiliki siswa.
pengetahuan siswa. Proses ini terus dilakukan hingga mereka telah dipandang cukup menguasai materi yang diberikan (Martin 2004).
Modul Siswa
Pada modul siswa ini akan terekam data siswa, komponen data yang terekam berkaitan dengan proses adaptasi sistem terhadap kemampuan siswa (Prentzas et al. 2002). Untuk lebih memperjelas latar belakang siswa yang berkaitan dengan materi yang diberikan, maka selain informasi interaksi dengan sistem, profil siswa turut direkam di dalam sistem (Wasmana 2005).
Modul Evaluasi
Modul evaluasi berfungsi dalam proses evaluasi jawaban siswa dari soal yang diberikan oleh sistem. Proses evaluasi dilakukan berdasarkan jenis soal yang diberikan. Untuk jenis soal pilihan terbatas tidak terdapat perlakuan khusus dari sistem dalam proses evaluasi. Sistem mencocokkan jawaban siswa dengan jawaban seharusnya dan memberikan nilai jika jawaban benar. Untuk kejadian jawaban salah, sistem evaluasi akan memberikan penjelasan letak kesalahan yang dilakukan berdasarkan pilihan yang dilakukan siswa. (Wasmana 2005)
Token
Token adalah kumpulan karakter yang menyusun suatu bahasa. Dalam ilmu bahasa,
token dapat disamakan dengan kata. Token-token
ini dibentuk dari karakter-karakter berdasarkan suatu aturan tertentu yang disebut sebagai lexer rule.
Kode sumber bahasa pemrograman merupakan kumpulan karakter-karakter yang masih belum bermakna. Untuk memperoleh maknanya karakter-karakter itu harus dikelompokan. Pengelompokan ini mempunyai aturan tertentu sehingga akan menghasilkan tipe-tipe token, misalnya: keywords, operator, identifier dan komentar.
Token-token ini kemudian dikirimkan kepada
parser untuk kemudian digabungkan dengan
token-token lainnya untuk membentuk statement
(kalimat) (Grune 2001).
Lexer
Lexer merupakan bagian awal dari sebuah
recognition, tugasnya adalah mengubah aliran
karakter yang tidak bermakna menjadi potongan-potongan token yang sesuai dengan spesifikasi
grammar dari domain bahasanya. Lexer juga membuang karakter-karakter yang tidak bermakna misalnya komentar, spasi, tab, dan karakter baris baru (new line).
Hasil dari lexer berupa aliran token-token
yang kemudian akan diproses oleh parser. Dengan mengubah aliran karakter menjadi aliran
token, lexer akan memudahkan parser dalam mengenali struktur program dengan lebih baik. Tanpa adanya lexer, parser harus mengenali struktur program dari aliran karakter yang kurang bermakna dibanding aliran token (Grune 2001).
Parser
Parser memeriksa struktur kode sumber
dengan menggunakan aturan-aturan dalam tata bahasa (grammar) tertentu. Grammar inilah yang menentukan apakah suatu urutan token dikatakan
valid atau tidak.
Parser mendapatkan input aliran token dari
lexer. Token-token ini kemudian dimasukan dalam aturan-aturan parser untuk mengetahui apakah urutan token-token tersebut membentuk tata bahasa yang sesuai atau tidak. Jika terjadi kesalahan tata letak token dalam tata bahasa,
parser akan mengembalikan kesalahan yang
mengindikasikan adanya kesalahan dalam kode sumber (Grune 2001).
Grammar
Grammar didefinisikan sebagai formalisasi dari struktur sebuah bahasa pemrograman (Grune 2000). Grammar merupakan sekumpulan aturan (rule) untuk membentuk sebuah bahasa pemrograman. Dalam konteks bahasa indonesia,
grammar adalah aturan-aturan pembentukan
huruf menjadi kata dan pembentukan kata menjadi kalimat. Dalam konteks bahasa pemrograman, grammar mendefinisikan aturan pembentukan huruf atau simbol menjadi token
dan token menjadi statement.
Sebuah grammar terdiri dari kumpulan
production rules. Dengan menggunakan notasi
mengarah ke kanan (à). Sisi sebelah kiri merupakan nama dari production rule; sisi sebelah kanan mendefisinikan aturan pembentukan token atau statement. Berikut ini adalah sintaks umum suatu production rule:
expression à ‘(‘ expression OPERATOR expression ‘)’
Setiap production rule bisa digolongkan menjadi dua: lexer rule dan parser rule. Lexer rule mendefinisikan aturan pembentukan token
dari aliran huruf/simbol; sedangkan parser rule
mendefinisikan aturan pembentukan statement
dari aliran token (Parr 2007). Seperti dalam contoh di atas, expression adalah parser rule sedangkan OPERATOR adalah lexer rule.
Deterministic Finite Outomata (DFA)
DFA adalah sebuah mesin yang digunakan untuk memvalidasi sebuah input. DFA mempunyai input dan kumpulan state yang menentukan apakah sebuah rangkaian input tersebut diterima oleh mesin atau tidak. DFA mempunyai aturan bahwa untuk sebuah transisi dari satu state ke state yang lain harus ada tepat satu input. Jika ada satu input yang sama untuk dua buah transisi maka akan menyebabkan transisi tersebut ambigu.
DFA terdiri atas:
1 Sebuah kumpulan finite state, dilambangkan sebagai Q.
2 Sebuah kumpulan simbol input, dilambangkan sebagai ? .
3 Fungsi transisi yang menerima argumen simbol input dan state, mengembalikan sebuah state. Dilambangkan sebagai d. 4 Sebuah startstate, salah satu state dalam
Q.
5 Sekumpulan final state F, yang merupakan subset dari Q.
DFA sering dinotasikan sebagai lima tuple
seperti contoh di bawah ini:
A = {Q, ? , d, q0, F}
METODOLOGI PENELITIAN
Kerangka Pemikiran
Penelitian ini mengembangkan lebih lanjut modul evaluasi pada sistem pembelajaran cerdas yang dikembangkan oleh Wasmana (2005).
Sistem y ang dikembangkan memiliki model
stand alone dan tidak mendukung proses
komunikasi data.
Penelitian ini akan melalui tahap-tahap seperti yang digambarkan dalam Gambar 2. Penelitian diawali dengan studi literatur, kemudian penentuan metode pengembangan sistem dan dilanjutkan dengan fase pengembangan sistem. Fase pengembangan sistem diawali dengan analisis kebutuhan dilanjutkan dengan perancangan, implementasi dan diakhiri dengan pengujian.
Gambar 2 Diagram Metodologi Penelitian.
Studi Literatur
Studi literatur diawali dengan menentukan acuan utama penelitian. Acuan utama penelitian ini adalah Java Intelligent Tutoring System
(JITS) yang dikembangkan oleh Edward Sykes dan Franya Franek . Dari penelitian JITS, diperoleh pengetahuan mengenai metode pemeriksaan kode sumber bahasa pemrograman menggunakan Intent Recognition.
Studi literatur dilanjutkan dengan mencari metode untuk mengimplementasikan Intent Recognition. Hal ini harus dilaksanakan penulis karena implementasi JITS tidak dapat diperoleh. Implementasi Intent Recognition adalah sebuah sistem language recognition dengan menggunakan konsep lexer dan parser. Parr (1999) menulis tutorial tentang membuat
recognizer sederhana dari awal, litetatur ini cukup memberikan gambaran awal bagaimana sebuah recognizer bekerja.
Penentuan Metode Pengembangan Sistem
Metode pengembangan sistem yang digunakan adalah Waterfall. Gambar 3 menggambarkan bagan pengembangan metode
Waterfall. Metode Waterfall diawali dengan
analisis, dilanjutkan dengan perancangan dan implementasi, diakhiri dengan pengujian.
Metode pengujian yang digunakan adalah
black box testing. Metode pengujian ini hanya terbatas menguji fungsionalitas dari sistem. Pengujian dilakukan dengan mengikuti langkah-langkah yang didefinisikan dalam dokumen test case yang telah disediakan sebelumnya.
Gambar 3 Alur pengembangan sistem (System Development Life Cycle) dengan metode
waterfall menurut Pressman (2001).
Analisis Kebutuhan
Tahap analisis kebutuhan mendefinisikan kebutuhan ap a saja yang harus dipenuhi oleh sistem. Kebutuhan yang harus didefinisikan mencakup kebutuhan fungsional dan kebutuhan non fungsional. Kebutuhan fungsional mendefinisikan fungsi-fungsi dasar yang harus diimplementasikan, kebutuhan fungsional ini yang nantinya akan membedakan modul evaluasi yang dibuat dan modul evaluasi yang ada dalam JITS.
Perancangan
Tahap perancangan mendefinisikan bentuk abstrak dari modul evaluasi. Arsitektur modul evaluasi disusun untuk memenuhi kebutuhan fungsional yang telah didefinisikan dalam tahap sebelumnya. Setiap bagian penting dari modul evaluasi dirancang lebih mendetail menggunakan notasi dan diagram.
Algoritma yang digunakan dalam modul evaluasi didefinisikan menggunakan notasi ilmiah beserta abstraksi berupa flowchart.
Implementasi
Modul evaluasi dibuat dalam Tahap Implementasi. Proses pembuatan modul evaluasi diawali dengan menyusun parser dan lexer, dilanjutkan dengan menyusun sistem penjelas dan diakhiri dengan sistem Perbaikan Terotomasi.
Implementasi modul evaluasi berupa kode program dan tampilan aplikasi didokumentasikan secara lengkap. Kendala dan issue yang muncul dalam tahap implementasi dicatat sebagai bahan masukan untuk penelitian selanjutnya.
Pengujian
Tahap pengujian dimaksudkan untuk mengetahui sejauh mana kinerja Sistem Evaluasi dalam memenuhi tujuan penelitian ini. Pengujian juga dimaksudkan mengurangi kesalahan (bug) sistem.
Proses pengujian dilaksanakan dengan beberapa tahap, antara lain: pengujian kinerja sistem, pengujian dengan metode black box testing dan pengujian dengan metode analisis algoritma.
HASIL DAN PEMBAHASAN
Analisis
1 Kebutuhan Fungsional
Kebutuhan fungsional mendefinisikan tiga aspek penting dalam modul evaluasi, yaitu: strategi penilaian jawaban siswa, strategi pengenalan kesalahan dan strategi perbaikan terotomasi. Ketiga aspek di atas merupakan fungsionalitas utama dari modul evaluasi.
Ketiga aspek kebutuhan fungsional dapat dipecah-pecah menjadi poin-poin penting sebagai berikut:
a Memahami variasi sintaks. Siswa harus diperbolehkan untuk menggunakan variabel yang berbeda, struktur kondisi dan struktur iterasi yang berbeda.
b Memahami variasi implementasi. Algoritma yang berbeda untuk konsep yang sama harus bisa dikenali.
d Membantu siswa memperbaiki kesalahan. Selain penjelasan yang lengkap atas kesalahan, siswa juga dibantu dalam memperbaiki kesalahan dengan memberikan petunjuk solusi yang benar.
e Mengenali batasan-batasan. Jika terdapat kesalahan yang tidak diketahui oleh sistem, harus diberikan keterangan yang jelas, hal ini berkaitan dengan faktor reliabilitas.
f Memberikan penilaian atas jawaban siswa. Penilaian yang diberikan didasarkan beberapa parameter dan kondisi, tidak hanya dari kebenaran jawaban.
2 S trategi Penilaian
Proses penilaian jawaban siswa menggunakan metode grading. Metode grading
memerlukan kumpulan pasangan data
input/output untuk setiap soal. Data input/output disimpan dalam struktur penyimpanan data. Ketika proses penilaian akan berlangsung, sistem akan membaca data input/output dari sumber data dan menyimpannya dalam memori.
Langkah berikutnya dalam strategi penilaian adalah mengkompilasi kode sumber hasil jawaban siswa menjadi file executable. Data input akan dimasukkan ke dalam file executable. Agar proses pemasukan data ini berhasil, kode sumber hasil jawaban siswa harus menyertakan kode untuk menerima input berupa data input.
File executable juga harus mengeluarkan output sesuai dengan format data output.
Penilaian akan didasarkan pada perbandingan output dari file executable dengan data output. Agar penilaian akurat, kumpulan pasangan data input/output disediakan sebanyak mungkin, semakin banyak data input/output
maka semakin akurat nilai yang dihasilkan.
3 Strategi Pengenalan Kesalahan
Kode sumber hasil jawaban siswa tidak selalu bebas dari kesalahan. modul evaluasi harus mampu mengenali kesalahan dalam kode sumber. Cara yang paling efektif untuk mengenali kesalahan dalam kode sumber adalah mengembangkan aplikasi yang bisa ”mengenali” kode sumber bahasa C. Aplikasi demikian disebut language recognizer. Language
recognizer adalah aplikasi yang dapat
menentukan apakah sebuah kalimat mematuhi aturan dalam tata bahasa atau tidak (Parr 2007).
Kesalahan yang ditemukan oleh language
recognizer dikategorikan dalam beberapa
kategori. Pengkategorian kesalahan memudahkan modul evaluasi menyusun penjelasan kesalahan. Kesalahan dengan kategori yang sama dapat dijelaskan dengan pola yang sama. Penjelasan kesalahan secara kasus per kasus sangat tidak efisien, pengguna tidak memerlukan penjelasan panjang lebar bertele-tele, tetapi penjelasan yang singkat dan padat tentang kesalahan yang dibuatnya.
4 Strategi Perbaikan Terotomasi
Kecerdasan modul evaluasi diwujudkan dalam kemampuannya memperbaiki kesalahan tertentu pada kode sumber secara terotomasi. Siswa cukup memberikan persetujuan “y a” atau “tidak” terhadap langkah perbaikan terotomasi, tanpa perlu secara manual memperbaiki kesalahan.
Siswa dapat menyetujui atau menolak proses perbaikan terotomasi, dan siswa dapat membatalkan semua langkah perbaikan terotomasi yang diajukan oleh sistem.
5 Kebutuhan Non Fungsional
a Kebutuhan Perangkat Keras 1 Prosesor : Intel Pentium 800 MHz 2 Memori : 256 M B DDR RAM 3 Hardisk : 40 GB
4 VGA : 32 MB 5 Keyboard dan Mouse b Kebutuhan Perangkat Lunak
1 Sistem Operasi Microsoft Windows XP Professional
2 Java 6 Runtime Environment
Perancangan
1 Arsitektur Sistem
Berdasarkan analisis kebutuhan sistem, disusunlah arsitektur modul evaluasi sep erti yang terlihat pada Gambar 4. Proses penilaian jawaban siswa ditunjukkan oleh diagram lurus dari atas hingga bawah. Jika terdapat kesalahan dalam kode sumber jawaban siswa, maka Intent
Recognition akan mengambil alih dan mulai
4 dilaksanakan untuk setiap satu soal dalam modul evaluasi.
Gambar 4 Arsitektur Modul Evaluasi.
2 Perancangan Struktur Penyimpanan Data
Struktur penyimpanan data aplikasi harus sefleksible mungkin dan semudah mungkin dimanipulasi. Ada beberapa alternatif penyimpanan data yang lazim digunakan dalam aplikasi, seperti misalnya: relational database,
text file, serializable object atau dokumen XML.
Data yang harus disimpan adalah:
a Soal dan pertanyaan b Jawaban
c Data evaluasi d Hasil evaluasi e Tingkat kesulitan soal
3 Perancangan Output Grader
Output grader bertugas untuk menilai hasil jawaban siswa. Output grader merupakan modul implementasi dari strategi penilaian. Proses penilaian akan dilaksanakan jika siswa memasukkan kode yang benar tanpa ada kesalahan. Kode sumber akan dikompilasi
menggunakan C compiler dan menghasilkan file executable. Kemudian file executable tersebut dijalankan dengan memasukkan data input.
Output yang dihasilkan file executable akan dicocokan menggunakan output data yang diambil dari struktur data yang telah disediakan sebelumnya.
Berikut ini langkah-langkah yang akan diambil oleh modul output grader.
1 Kode sumber bahasa C hasil pekerjaan siswa melalui proses kompilasi menggunakan Digital Mars C Compiler yang menghasilkan
file executable (exe).
2 File yang XML berisi input output data dibaca dan disimpan dalam memori, data ini lah yang digunakan sebagai patokan benar atau tidaknya hasil pekerjaan yang dilakukan oleh siswa
3 File eksekusi hasil kompilasi dari kode sumber bahasa C dijalankan dan data input dimasukkan dalam standard input (stdin). Operasi ini akan menghasilkan output dari program.
4 hasil output dari program akan dibandingkan dengan data output yang diperoleh dari data
input/output.
5 dari hasil perbandingan ini dapat ditentukan apakah pekerjaan siswa benar atau salah.
Langkah-langkah di atas dapat digambarkan dalam sebuah bagan seperti pada Gambar 5.
Compiler yang digunakan adalah DMC dari Digital Mars. Sedangkan metode untuk menjalankan Sistem output grader dilakukan dengan memasukkan data ke standard input (stdin) dan mengambil output dari standard output (stdout) dari program hasil kompilasi.
Set elah output grader selesai dilaksanakan, akan dihitung persentase keberhasilan tes ini. Semakin banyak item dalam output grader
diharapkan semakin akurat hasil penilaian terhadap pekerjaan siswa.
Penilaian terhadap pekerjaan siswa diperoleh dari rasio antara tes yang benar dan jumlah tes.
Nilai = (Jawaban benar / Jumlah tes) * 100
Kompilasi kode sumber
Proses evaluasi jawaban oleh output grader
Parse kode sumber
bahasa C
Tugas berikutnya atau keluar Kode sumber bahasa C
student
Gambar 5 Langkah-langkah dalam modul Output Grader.
4 Perancangan Intent Recognition
Beberapa jenis sistem pembelajaran cerdas, memerlukan solusi yang spesifik terhadap persoalan yang diberikan kepada siswa, kemudian jawaban siswa akan dicocokan karakter demi karakter dengan solusi tersebut. Bentuk sistem pembelajaran cerdas tersebut sangat kaku dan tidak dapat mengakomodasi jawaban siswa yang sangat bervariasi.
Intent Recognition menyempurnakan
kelemahan ini dengan berusaha mengerti jawaban siswa tanpa harus membandingkanya huruf demi huruf dengan solusi yang telah ditentukan terlebih dahulu.
Intent Recognition praktis merupakan
language recognition tools untuk mengenali
bahasa C. Kata Intent berarti bahwa proses pemeriksaan bahasa C oleh Intent Recognition
disertai dengan ”tujuan” tertentu selain hanya memeriksa saja.
Intent Recognition akan memeriksa kode
sumber jawaban siswa dengan tujuan:
a Mencari kesalahan dalam kode sumber. b Menjelaskan kesalahan.
c Mencatat kesalahan yang bisa diperbaiki secara terotomasi.
d Mencatat semua token dalam tabel token.
Bagian utama dari Intent Recognition adalah
lexer dan parser untuk memeriksa kode sumber siswa. Lexer akan membaca karakter per karakter kode sumber siswa. Kemudian mengubah aliran karakter menjadi aliran token. Parser akan mengambil setiap token yang dihasilkan oleh
lexer dan mencocokkannya dengan kumpulan
aturan-aturan yang mendefinisikan tata bahasa C.
Kumpulan aturan yang mendefinisikan tata bahasa C disebut C Language Grammar Specification. Seperti sudah dibahas di bagian sebelumnya, terdapat dua jenis rule: lexer rule
dan parser rule. Setiap rule pada dasarnya merupakan satu mesin DFA (Deterministic Finite Automata). Lexer rule adalah DFA yang memuat rangkaian langkah dan state untuk mengubah karakter menjadi token. Sedangkan parser rule
adalah DFA yang memuat rangkaian langkah dan
state untuk memvalidasi urutan token, apakah sudah memenuhi grammar atau tidak.
Perbedaan utama lexer rule DFA dan parser rule DFA adalah set input yang diterima lexer rule adalah karakter dengan hasil string yang diterima DFA adalah token. Parser rule
mempunyai set input berupa token dengan hasilnya berupa statement (kalimat) yang valid.
DFA dapat divisualisasikan menggunakan notasi graph. Gambar 6 menggambarkan DFA yang menerima stringIdentifier dalam bahasa C sebagai valid input. String Identifier dalam bahasa C harus diawali dengan huruf atau karakter $ atau _, kemudian boleh diikuti dengan huruf, angka, $ dan _.
Gambar 6 DFA untuk menerima stringIdentifier
dalam bahasa C.
DFA pada Gambar 6 di atas termasuk ke dalam kategori DFA yang merepresentasikan
Memasukkan data input
ke dalam program hasil proses kompilasi
Baca data input dari penyimpanan data
Membandingkan data output dengan output dari
program hasil kompilasi Program hasil kompilasi
kode sumber
Hasil evaluasi output grader
lexer rule, hal ini terlihat jelas dari simbol input, ?, yang terdiri dari karakter.
Definisi DFA:
Gambar 7 DFA untuk memvalidasi sintaks if dalam bahas a C.
Gambar 7 menerangkan DFA yang berasal dari parser rule untuk memvaliadasi sintaks if
dalam bahasa C. Token ’if’ berada di depan kemudian harus diikuti dengan token’(’ setelah itu diikuti oleh rule lain yang disebut
expression. Token berikutnya adalah ’)’
diikuti dengan statement. Statement ini bisa merupakan apa saja, bisa saja statement
tersebut adalah if, hal ini mengijinkan bahasa C untuk mempunyai nested if. Setelah
statement, ada token ’else’. Token setelah
’else’ adalah rule lain yaitu statement.
Seperti yang telah disinggung sebelumnya,
statement bisa apa saja, bisa juga if lain, pola ini yang mengijikan adanya bentuk else if dalam bahasa C.
Tujuan pertama dari Intent Recognition
adalah mencari kesalahan dalam kode sumber. Proses pencarian kesalahan terjadi dalam parser rule. Ketika DFA berusaha mencocokkan aturan dalam fungsi transisi (d) dengan token yang berhasil dikenali oleh lexer rule, DFA akan melaporkan kesalahan jika fungsi transisi tidak dipenuhi. Setiap kesalahan akan mempunyai kategori, hal ini untuk memudahkan penjelasan kesalahan oleh Intent Recognition dan memudahkan sistem perbaikan terotomasi dalam memperbaiki kesalahan.
Intent Recognition mempunyai tabel simbol yang mencatat semua simbol Identifier yang
valid dalam kode sumber. Ketika DFA
menemukan sebuah Identifier, Intent Recognizer
akan tahu apakah Identifier itu sedang didefinisikan atau sedang digunakan.
Jika Identifier sedang didefinisikan, maka
Intent Recognition akan menambahkan simbol
tersebut dalam tabel simbol. Jika Identifier
sedang digunakan, maka Intent Recognition akan mencari Identifier dalam simbol tabel. Jika
Identifier belum ada pada tabel simbol, maka telah terjadi kesalahan dalam kode program.
Algoritma transformasi token akan dipanggil untuk mencari kemungkinan apakah token Identifer bisa ditransformasikan menjadi token
lain yang ada dalam tabel simbol. Jika Identifier
berhasil ditransformasi menjadi Identifier yang cocok dengan tabel simbol, Identifier tersebut dicatat sebagai kesalahan yang bisa diperbaiki. Jika Identifier tidak berhasil ditransformasi menjadi Identifier yang cocok, maka Intent Recognition hanya akan memberikan penjelasan kesalahan dan mengkategorikannya sebagai kesalahan yang tidak dapat diperbaiki secara terotomasi. Cara ini memenuhi tujuan ketiga
Intent Recognition, y aitu mencatat kesalahan yang dapat diperbaiki secara terotomasi.
Intent Recognition mempunyai kemampuan
untuk menambahkan, menghapus satu token
untuk membuat kode sumber menjadi valid. Jenis kesalahan seperti ini juga dicatat oleh Intent
Recognition sebagai kesalahan yang dapat
diperbaiki secara terotomasi.
Sistem penjelas juga termasuk dalam Intent
Recognition. Sistem penjelas bertugas untuk
menjelaskan bagaimana kesalahan akan dijelaskan kepada siswa. Setiap kategori kesalahan akan mempunyai template penjelasan
yang sama. Menjelaskan setiap kesalahan dengan penjelasan yang berbeda merupakan pekerjaan yang sangat kompleks. Sistem penjelas menjalankan tujuan ketiga Intent Recognition: menjelaskan kesalahan dalam kode sumber.
Aturan utama yang harus dipenuhi oleh
Intent Recognition adalah menghindari propagasi kesalahan. Propagasi kesalahan adalah kesalahan yang diakibatkan oleh kesalahan sebelumnya. Propagasi kesalahan akan membuat Intent
Recognition menemukan terlalu banyak
kesalahan dan sistem penjelas menampilkan terlalu banyak kesalahan daripada seharusnya.
Intent Recognition mencatat semua token
baik yang valid atau tidak dalam tabel token. Tabel token diperlukan oleh sistem perbaikan terotomasi. Setiap token akan diberi nomor indeks yang unik. Misalnya untuk penghapusan satu token dan token tersebut banyak terdapat dalam kode sumber, diperlukan suatu identifier
unik untuk setiap token.
Algoritma Transformasi Token
Misalkan L adalah himpunan tidak kosong yang terdiri dari simbol-simbol yang digunakan dalam bahasa C. Asumsikan bahwa sebuah string
yang tidak terdapat dalam L dapat diturunkan dari string dalam L dengan melakukan serangkaian transformasi kesalahan. Modul
Intent Recognition mengenal empat buah buah tipe kesalahan sintaks:
a Penggantian sebuah simbol dengan simbol yang lainnya (TR).
b Penyisipan simbol (TI). c Penghapusan simbol (TD).
d Letak yang terbalik antara dua simbol (TS).
Keempat kesalahan di atas dapat direpresentasikan dalam empat transformasi TR,
TI, TD, dan TS. Transformasi-transformasi tersebut
dirumuskan sebagai berikut.
Misalkan x dan y adalah karakter yang ada dalam token, sedangkan a dan b adalah karakter yang akan ditambahkan atau dihapus dari token.
a xby ditransformasikan dengan penggantian satu huruf menjadi TR(xay) untuk a <> b b xay ditransformasikan dengan penyisipan
satu huruf menjadi TI(xy) untuk semua a c xy ditransformasikan dengan penghapusan
satu huruf menjadi TD(xay) untuk semua a
d xy ditransformasikan dengan pemindahan posisi menjadi TS(yx)
Misalnya, L={while}, dan terdapat string “Wihle”, ‘h’ dan ‘i’ adalah kesalahan letak yang terbalik (TS), sedangkan ‘W’ adalah kesalahan penggantian simbol dengan simbol yang lainnya (TR).
Wihle –TRà wihle –TSà while
Algoritma Pemeriksaan dan Pencatatan Kesalahan
Untuk melakukan perbaikan kesalahan Intent
Recognition mengambil langkah-langkah
algoritmik sebagai berikut, sebagian langkah diilhami oleh konsep Intent Recognition yang digagas oleh Franek (2003):
1. Lexer memeriksa kode sumber yang ditulis
siswa dan berusaha mengubahnya menjadi
token. Misalkan S adalah aliran karakter yang akan dirubah menjadi token T.
2. Jika T adalah Identifier,
a Parser akan memeriksa apakah parser
sedang dideklarasikan atau sedang digunakan.
b Jika sedang dideklarasikan, maka T akan dimasukkan dalam tabel simbol.
c Jika sedang digunakan T akan dicocokkan dengan Identifier dalam tabel simbol.
d Jika parser tidak menemukan T dalam tabel simbol, maka transformasi TR, TI,
TD dan TS akan dijalankan untuk
mendapatkan token yang valid.
e Jika transformasi berhasil, Intent
Recognition akan mencatat kesalahan
sebagai kesalahan yang dapat diperbaiki secara terotomasi. Kemudian panggil sistem penjelas untuk menampilkan kesalahan.
f Jika transformasi gagal cukup panggil sistem penjelas untuk menampilkan kesalahan, dan beri keterangan sebagai kesalahan yang bisa diperbaiki secara terotomasi.
3. Parser akan memvalidasi token
menggunakan parser rule.
a Jika valid maka token akan disimpan oleh
parser sebagai valid token.
b Jika tidak valid, lakukan percobaan untuk menghapus atau menambahkan satu
tidak Identifier ada
dalam tabel simbol?
token berhasil divalidasi oleh
parser?
Lexer memeriksa kode
sumber dan mengubah
karakter menjadi token
ya
Token diproses oleh
parser penghapusan satu token
dicatat oleh Intent Recognition
Token dimasukkan dalam
tabel token
Identifier yang valid
tidak Transfromasi berhasil?
ya
Token baru dibuat
dan dicatat oleh IR
kesalahan yang dapat diperbaiki secara terotomasi.
Proses pemeriksaan dan pencatatan kesalahan oleh Intent Recognition digambarkan pada Gambar 8.
5 Perancangan Sistem Perbaikan Terotomasi
Sistem perbaikan terotomasi bekerja sangat erat dengan Intent Recognition. Ketika Intent Recognition memeriksa kode sumber dan terjadi kesalahan dalam kode sumber, Intent Recognition
akan memeriksa apakah kesalahan bisa diperbaiki secara terotomasi. Proses perbaikan terotomasi dilaksanakan setelah Intent Recognition selesai memeriksa semua kode sumber.
Kesalahan yang bisa diperbaiki secara terotomasi dicatat oleh Intent Recognition. Kesalahan penulisan tokenIdentifier, yang dap at diperbaiki menggunakan algoritma transformasi
token dicatat dalam satu tabel. Sedangkan
kesalahan karena penambahan atau pengurangan satu token dicatat dalam tabel yang lain. Pemisahan ini untuk mempermudah proses perbaikan terotomasi.
Perbaikan kesalahan penulisan Identifier
dilakukan terlebih dahulu. Proses perbaikan sangat sederhana, menemukan nomor urut token
dalam tabel token, kemudian mengganti token
tersebut dengan token yang benar. Tidak ada perubahan nomor urut token.
Proses perbaikan kesalahan karena penambahan atau pengurangan satu token lebih rumit dibanding perbaikan kesalahan penulisan
Identifier. Jika kesalahannya karena penambahan satu token, proses perbaikan harus menemukan nomor urut token yang berlebih tersebut, kemudian menghapusnya. Proses pengapusan ini dicatat dalam tabel perubahan token, karena akan mempengaruhi nomor urut token. Sebaliknya jika kesalahannya karena ada satu token yang tidak lengkap, proses perbaikan terotomasi harus menemukan token terakhir sebelum token yang hilang. Kemudian menyisipkan satu token pada posisi yang telah ditentukan. Proses penyisipan juga dicatat dalam tabel perubahan token.
Gambar 8 Algoritma p emeriksaan dan pencatatan kesalahan oleh Intent Recognition.
Proses perbaikan terotomasi berjalan secara interaktif. Siswa dapat memutuskan untuk menjalankan proses perbaikan kesalahan terotomasi atau tidak. Pilihan yang bisa diambil oleh siswa ada tiga:
Jendela
b No: siswa menolak perbaikan terotomasi yang sedang dilaksanakan.
c Cancel: siswa membatalkan semua
perbaikan terotomasi yang akan dilaksanakan.
6 Perancangan Antarmuka
Antarmuka modul evaluasi digambarkan dalam Gambar 9:
Gambar 9 Perancangan Antarmuka Modul Evaluasi.
Gambar 9 memperlihatkan empat buah jendela utama:
a Jendala kode: menampilkan kode sumber jawaban siswa. Jendela kode merupakan
text editor yang mempunyai fasilitas seperti: copy, paste, cut, find, undo, redo, save dan nomor baris.
b Jendela project: menampilkan struktur data dari modul evaluasi, setiap soal ditampilkan dalam bentuk tree. Jendela
project juga menampilkan file .c hasil jawaban siswa atas setiap pertanyaan. c Jendela soal: menampilkan pertanyaan
secara lengkap, termasuk data
input/output yang digunakan oleh output grader.
d Jendela output: menampilkan penjelasan kesalahan kode sumber dan keterangan tentang event yang sedang terjadi dalam modul evaluasi.
Implementasi
1 Implementasi Struktur Penyimpanan Data
Struktur penyimpanan data yang dipilih adalah XML. Format XML yang fleksibel menjadi kelebihan utama XML dibanding format penyimpanan data lain, seperti basis data relasional.
Berikut ini adalah struktur dokumen XML yang digunakan dalam modul evaluasi untuk merepresentasikan satu buah soal:
1<ITS nama="Module pelatihan level 1"> 2 <soal id="1">
3 <nama>faktorial</nama>
4 <pertanyaan>buat sebuah aplikasi yang menghitung bilangan faktorial 5 </pertanyaan>
6 <sintaks-khusus> 7 <elemen>for</elemen> 8 <elemen>if</elemen> 9 </sintaks-khusus> 10 <jawaban-jawaban> 15 </jawaban-jawaban>
16 <tingkat-kesulitan>mudah </tingkat-kesulitan> 17 <waktu-mengerjakan>3
</waktu-mengerjakan> 18 <terjawab>tidak</terjawab> 19 <hasil-jawaban></hasil-jawaban> 20 <template-atas>
<![CDATA[
#include <stdio.h>; int main(){
int a, b; ]]>
21 </template-atas> 22 <template-bawah>
<![CDATA[
printf("%d",b); return 0; }
]]>
23 </template-bawah> 24</soal>
25</ITS>
Tag ITS adalah tag root dalam dokumen XML ini. Setiap dokumen ITS ini bisa diibaratkan satu modul latihan soal untuk setiap satuan pengajaran, misalny a per bab.
Dalam setiap modul latihan soal, terdapat beberapa soal yang harus diselesaikan oleh siswa. Dalam setiap definisi soal akan disertakan data, antara lain:
a Id soal. b Nama soal. c Pertanyaan.
d Sintaks khusus yang harus terdapat dalam jawaban siswa.
e Data untuk output grader.
g Waktu normal yang dibutuhkan siswa untuk mengerjakan soal (dalam satuan menit) h Status soal, apakah sudah terjawab atau
belum.
i Hasil jawaban siswa berupa kode sumber.
j Template atas dan template bawah yang
ditujukan untuk output grader.
Pengajar mendefinisikan dokumen soal sebagai bahan evaluasi sekaligus pembelajaran bagi siswa. Dokumen yang berbentuk XML ini idealnya harus divalidasi menggunakan XML
Schema atau DTD (Data Transformation
Diagram), namun untuk saat ini masih belum
dicakup dalam penelitian ini.
2 Implementasi Output Grader
Output grader diimplementasikan menjadi
class Grader. Di dalam class Grader terdapat dua buah methodcompile dan grade. Method compile bertugas mengkompilasi kode sumber bahasa C menjadi file executable, method compile mempunyai tipe kembalian boolean. Jika proses kompilasi berhasil, method compile
akan mengembalikan true, dan nilai false
dikembalikan jika proses kompilasi gagal.
Modul evaluasi memanggil method compile untuk menget ahui apakah terdapat kesalahan atau tidak dalam kode sumber. Jika
method compile mengembalikan nilai false, berarti terdapat kesalahan dalam kode sumber. Modul evaluasi selanjutnya akan memanggil
Intent Recognition untuk menganalisa kode
sumber.
Method grade digunakan untuk
menjalankan proses grading. Salah satu parameter input dari method grader adalah
object dari classSoal yang didalamnya terdapat data pasangan input dan output. Parameter lainnya tentu saja adalah file executable yang dihasilkan jika method compile
mengembalikan nilai true. Method grade akan mengeksekusi executable file dengan memasukkan data input, kemudian mengambil hasil output dari hasil eksekusi tersebut. Hasil
output akan dibandingkan dengan data output.
Jika sama, maka kode sumber yang ditulis siswa benar, jika berbeda artinya terdapat kesalahan logika dalam penulisan kode sumber.
Berikut ini ditampilkan contoh hasil keluaran dari output grader:
Start to test… *************
In: 2 Out: 4 Status: Correct In: 3 Out: 8 Status: Correct In: 4 Out: 16 Status: Correct In: 5 Out: 32 Status: Correct ************
Total: 4 test Correct: 100% Wrong: 0%
3 Implementasi Intent Recognition
ANTLR (ANother Tool for Language Recognition) adalah sebuah pustaka Java yang menyediakan alat untuk membuat language recognition, language generator dan translator. ANTLR menyediakan bahasa mark-up tingkat tinggi untuk mendefinisikan grammar dari sebuah bahasa, kemudian membuat lexer dan
parser untuk mengenali grammar dari bahasa tersebut. Bahasa mark-up tersebut adalah grammar specification.
Grammar specification merupakan
sekumpulan rule-rule yang mirip regular expression. Seperti yang telah dibahas dalam perancangan, terdapat dua jenis rule, yaitu lexer rule dan parser rule.
Lexer rule digunakan untuk mendefinisikan bagaimana memotong-motong karakter menjadi
token, berikut ini contoh implementasi dari lexer rule untuk mengenali Identifier seperti diterangkan DFA dalam Gambar 6:
IDENTIFIER
: Letter (Letter|'0'..'9')* ; mendefinisikan token dengan tipe Identifier.
Identifier adalah token yang terdiri dari kombinasi huruf a-z, A–Z, $ dan _. Dalam konsep bahasa, lexer rule digunakan untuk mengubah huruf menjadi kata.
Parser rule digunakan untuk memeriksa
apakah urutan dari token sudah sesuai dengan
grammar (tata bahasa) atau belum. Setiap
program tersebut melanggar tata bahasa yang sudah ditentukan.
Dalam konteks bahasa indonesia, mirip dengan pengertian: apakah suatu urutan kata
(token) sudah sesuai dengan kaidah Subjek
Predikat Objek Keterangan (grammar) .
Sebagai contoh, di bawah ini adalah parser rule untuk mengecek tata bahasa C untuk kondisi
if-else seperti diterangkan DFA dalam Gambar 7.
conditional_statement
: 'if' '(' expression ')' statement ('else' statement)?
;
Grammar specification akan diterjemahkan menjadi Java class menggunakan ANTLR tool generator. Hasil terjemahannya adalah dua buah
class: CLexer.java dan CParser.java. Setiap
parser rule akan diterjemahkan menjadi sebuah
public method dalam CParser.java dan setiap
lexer rule akan diterjemahkan menjadi public method dalam CLexer.java.
Gambar 10 adalah UML class diagram yang menggambarkan struktur class implementasi
Intent Recognition dan sistem perbaikan
terotomasi.
Class ParserFacade memegang kendali
proses pemeriksaan kode sumber. Method
parse dari class ParserFacade akan memanggil class CLexer dan CParser, kemudian memerintahkan keduanya untuk mulai memeriksa kode sumber. Kode untuk memanggil
lexer dan parser dalam classParserFacade:
1 CharStream inputStream =
new ANTLRFileStream(file.getPath()); 2 CLexer lexer = new CLexer(inputStream);
3 CommonTokenStream stream = new CommonTokenStream(lexer); 4 CParser parser = new CParser(stream); 5 parser.translation_unit();
Method translation_unit pada class
CParser di atas memerintahkan parser untuk mulai memeriksa kode sumber. Setiap kali parser
memeriksa kode sumber, method nextToken
dari CLexer dipanggil untuk mengambil token
berikutnya. Ketika parser rule gagal mengenali kode sumber, CParser akan membuat salah satu dari delapan subclass RecognitionException
yang ada dalam Tabel 1.
Gambar 10 UML class diagram Intent Recognition dan Sistem Perbaikan Terotomasi.
Class BaseRecognizer adalah superclass
dari CParser yang mempunyai method emitErrorMessage yang bertugas untuk menjelaskan kesalahan yang ada dalam kode sumber.
Tabel 1 Daftar Jenis Kesalahan yang Dikenali oleh Lexer dan Parser.
Jenis Kesalahan
Keterangan
Recognition Semua jenis kesalahan
merupakan subclass dari
Recognition.
Mismatched Token
Mengindikasikan bahwa token
yang dicari oleh parser tidak ada.
Mismatched
Tree Node M engindikasikan bahwa yang dicari untuk membentuk token
Abstract Syntax Tree tidak
ditemukan.
Failed
Predicate Hasil evaluasi
token oleh
semantic predicate gagal
Mismatched Set
Jenis
Kesalahan Keterangan
No Viable Alternatives
Kesalahan karena lookahead
yang didefinisikan tidak cukup panjang untuk menentukan antara dua alternatif. Dengan kata lain grammar yang didefinisikan bersifat ambigu.
Early Exit Parser sampai pada rule yang menyaratkan kecocokan dengan satu alternatif atau lebih ( (..)+ ), tetapi rule tidak dapat mencocokkan dengan apapun.
Mismatched Range
Lexer berusaha mencocokkan
karakter yang sedang aktif dengan range karakter, dan ternyata gagal.
Mismatched Not Set
Lexer berusaha mencocokkan kebalikan dari kumpulan simbol (~), tetapi gagal
Penjelasan terhadap kesalahan sangat sederhana, di mana setiap jenis kesalahan dijelaskan dengan minimal satu cara, sehingga minimal ada tujuh macam penjelasan kesalahan dalam kode sumber. D i bawah ini adalah cuplikan implementasi method
emitErrorMessage y ang menerangkan
kesalahan dengan jenis Mismatched Token.
1 if (e instanceof
MismatchedTokenException ) 2 {
3 MismatchedTokenException mte = MismatchedTokenException) e; 4 String tokenName="<unknown>"; 5 if ( mte.expecting == Token.EOF ) {
tokenName = "EOF"; 6 } else {
" seharusnya "+tokenName; 10 }
Class CParser juga memeriksa apakah
kesalahan bisa diperbaiki secara terotomasi. Seperti yang telah dibahas di bagian perancangan, terdapat dua jenis kesalahan yang dapat diperbaiki secara terotomasi.
Kesalahan pertama adalah kesalahan penulisan Identifier. Kesalahan ini termasuk dalam jenis kesalahan Failed Predicate. Jika
kesalahan Failed Predicate ditemukan, CParser
akan memanggil method getClosestToken
dari class TokenTransformationManager
untuk mendapatkan token Identifier yang paling mirip dengan token yang sedang diperiksa.
Method getClosestToken
mengimplementasikan algoritma transformasi
token. Empat proses transformasi token TR, TI,
TD, TS dilaksanakan terhadap token yang
diperiksa, kemudian dicocokkan dengan simbol tabel. Jika proses transformasi berhasil mencocokkan token yang sedang diperiksa dengan token-token yang berada dalam tabel simbol, maka kesalahan Failed Predicate dapat diperbaiki secara terotomasi. Informasi kesalahan tersebut dicatat dengan membuat object dari class TokenTransformation. Setelah informasinya dicatat, informasi tersebut disimpan dalam class TokenTransformationManager.
Kesalahan kedua adalah kesalahan
Mismatched Token. Kesalahan Mismatched
Token terjadi karena CParser berharap untuk menemukan suatu token tertentu ternyata yang ditemukan adalah jenis token yang lain. Misalnya setelah token ’(’ ditemukan, maka CParser
akan mengharapkan token ’)’ akan ditemukan pada titik tertentu dalam kode sumber. Jika ternyata yang ditemukan adalah token dengan jenis lainnya, maka kesalahan ini dikategorikan sebagai Mismatched Token. Tidak semua jenis kesalahan Mismatched Token dapat diperbaiki secara terotomasi. Kesalahan Mismatched Token
yang dapat diperbaiki dengan cara menambahkan atau menghapus satu token adalah kesalahan yang dapat diperbaiki secara terotomasi. Kesalahan Mismatched Token yang dapat diperbaiki dalam dua langkah penambahan atau penghapusan token, tidak dapat diperbaiki secara terotomasi. Class TokenCompletion mencatat informasi kesalahan dan class TokenCompletionManager menyimpan semua informasi tersebut.
4 Implementasi Sistem Perbaikan Terotomasi
Sistem perbaikan terotomasi berjalan setelah
Intent Recognition selesai memeriksa semua
kode sumber. Sistem perbaikan t erotomasi menggunakan informasi kesalahan dari class
TokenCompletionManager dan class
Proses perbaikan terotomasi dilaksanakan dalam dua tahap. Tahap pertama adalah memperbaiki kesalahan yang ada dalam class TokenTransformationManager. Informasi kesalahan tersebut akan dikirim ke class TokenChangeManager, kemudian class TokenChangeManager akan merubah token
yang ada dalam text editor. Proses perbaikan kesalahan Mismatched Token dalam
TokenTransformationManager sangat
sederhana. Token yang salah akan digantikan oleh token yang benar, tidak ada perubahan nomor indeks token, hanya pergantian teks biasa.
Tahap kedua adalah proses perbaikan kesalahan yang ada dalam
TokenCompletionManager. Informasi
kesalahan akan dikirimkan ke class
TokenChangeManager, kemudian akan diputuskan apakah perubahan yang terjadi merupakan penyisipan satu token atau penghapusan satu token, berdasarkan pada informasi yang terkandung dalam object TokenCompletion. Proses penyisipan atau penghapusan kesalahan direkam oleh
TokenChangeManager, hal ini dikarenakan terjadi perubahan nomor indeks dari tabel token. Penyisipan satu token akan menyebabkan indeks
token setelah penyisipan bertambah satu, dan penghapusan satu token akan menyebabkan indeks token setelah penghapusan berkurang satu. Jika perubahan indeks token ini tidak dihitung secara cermat, TokenChangeManager akan menyisipkan atau menghapus token di tempat yang salah.
Sistem perbaikan terotomasi mempunyai hubungan langsung dengan kode sumber yang ada dalam text editor. Setiap kali sistem perbaikan terotomasi merubah kode sumber, perubahan tersebut langsung terlihat pada text editor. Class javax.swing.text.Document
menyimpan semua text yang ditampilkan oleh
text editor. Jika isi dari class Document dirubah, maka tampilan dari texteditor juga berubah.
Di bawah ini kode yang digunakan oleh sistem perbaikan terotomasi untuk mengganti token yang salah dengan token yang benar pada
classDocument:
1 public static void transformToken( Document doc, int index,
String newToken){ 2 int listIndex =
getListIndex(doc, index);
3 int position =
getPosition(doc, index);
4 List tokens = getTokenList(doc); 5 String oldToken =
(String)tokens.get(listIndex); 6 doc.remove(position,
oldToken.length()); 7 doc.insertString(position,
newToken, null);
8 tokens.set(listIndex, newToken); 9 }
5 Proses Tutorial
Proses perbaikan kesalahan oleh Intent
Recognition, tidak dilakukan secara otomatis
untuk semua kesalahan, namun melibatkan siswa untuk melakukan klarifikasi atas perbaikan kesalahan yang dilakukan oleh Intent
Recognition. Hal ini akan menyebabkan hanya
perubahan yang disetujui oleh siswa yang akan benar-benar dilakukan.
Dengan demikian siswa diajak untuk berfikir bagaimana memperbaiki kesalahan dengan sesedikit mungkin bergantung pada Intent Recognition. Berikut ini dialog yang akan terjadi antara siswa dengan IR:
inr I,val=1
For ( I = 0 ; I <= 4 ; I++{ Val *= 2;
}
IR: “apakah maksud anda adalah keyword “int”?”
Siswa: Ya
Intent Recognition akan melakukan
perubahan terhadap string “inr” menjadi
“int” dan parser akan memvalidasi perubahan ini karena user telah mengklarifikasi perubahan. Hasil perbaikan:
int I,val=1
For ( I = 0 ; I <= 4 ; I++{ Val *= 2;
}
IR: “apakah maksud anda menambahkan “;” setelah “val=1” “?
Siswa: Ya Hasil perbaikan:
int I,val=1;
For ( I = 0 ; I <= 4 ; I++{ Val *= 2;
}
IR: “apakah maksud anda adalah keyword “for” ?“
Siswa: Ya Hasil perbaikan:
int I,val=1;