(note: posting pindahan dari blog sebelumnya)

Update: Dokumen skripsi lengkap saya bisa didownload dari repository IPB

http://repository.ipb.ac.id/handle/123456789/33139

Hari rabu kmaren gw ngadep pak marimin (Prof. Dr. Ir Marimin, M.Sc) memberikan progress report skripsi gw. karena gw narsis, jadi gw juga posting progress report skripsi gw di blog ini, hehehe, yha ini kan fungsi utama blog : bernarsis-narsis ria, bwahahha.

OK, pertama gw mo cerita dikit-dikit background dari skripsi ini, byar nanti nggak pada blank tentang apa yang gw ceritain selanjutnya.

Judulnya : Modul Evaluasi Sistem Pembelajaran Cerdas. Secara selintas ada dua buah sistem yang tersirat dalam judul skripsi gw, pertama dalah modul evaluasi dan kedua adalah sistem pembelajaran cerdas. Sistem yang gw buat terbatas pada satu modul saja, yaitu sistem evaluasi. Sedangkan sistem pembelajaran cerdas secara umum dikerjakan oleh dua orang peneliti sebelum gw: Pak Panji dan Anita.

Sistem Pembelajaran Cerdas

Komputer telah digunakan dalam dunia pendidikan lebih dari 20 tahun. Computer-based learning (CBT) dan Computer Aided Instruction (CAD) 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, tetapi hanya sebatas kondisi-kondisi sederhana yang dikandung oleh sistem. 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, dan mengajarkan materi sesuai dengan kemampuannya. Dengan cara seperti ini proses pembelajaran menjadi semakin efektif. Kemampuan memahami siswa adalah bagian dari “kecerdasan” sistem pembelajaran cerdas, 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. Didasarkan pada ilmu kognitif dan kecerdasan buatan.


Gambar 1. Arsitektur Sistem Pembelajaran Cerdas (Wasmana, 2005)

Sistem Pembelajaran Cerdas (Intelligence Tutoring System, ITS) adalah suatu sistem yang memanfaatkan teknik tingkat lanjut dalam mendeskripsikan dan meningkatkan proses pengajaran. Walaupun demikian pemahaman sistem pembelajaran cerdas telah berkembang menjadi suatu sistem yang mampu “memahami” dan berlaku selayaknya pengajar. Sistem pembelajaran cerdas memberikan fleksibilitas dalam mempresentasikan materi dan kemampuan memahami karakteristik siswa yang lebih besar.

Keunggulan sistem pembelajaran cerdas dibandingkan guru 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.

Bagian gw cuma sebatas modul evaluator, sistem pembelajaran cerdas yang selama ini telah dibuat hanya sebatas evaluasi hasil pembelajaran dengan menggunakan pertanyaan pilihan berganda. Evaluasi tersebut kurang memberikan gambaran sepenuhnya tentang kemampuan siswa, terutama kemampuan siswa dalam membuat program. Jadi tugas gw adalah melakukan evaluasi kemampuan siswa membuat program dengan meminta siswa untuk membuat siswa dan mengkoreksi kerjaanya, beres atau nggak.

Modul Evaluator

Modul evaluator 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 dengsn jawaban seharusnya dan memberikan nilai jika jawaban benar. Untuk kejadian jawaban salah, sistem evaluator akan memberikan penjelasan letak kesalahan yang dilakukan berdasarkan pilihan yang dilakukan siswa.


Gambar 2. Arsitektur Sistem Evaluator (Fatkhan , 2007)

Untuk mengevaluasi pekerjaan siswa, gw dapet ide menggunakan model soal seperti di Olimpiade komputer. Dimana panitia akan menyediakan grader untuk mengoreksi pekerjaan siswanya. Cara kerja grader ini sangat sederhana, setiap program yang dibuat ditetapkan format input dan outputnya, bisa menggunakan standard input (stdin) atau standard out(stdout), atau menggunakan input-output dari file. Kemudian program siswa akan dicompile, kemudian diberi input yang telah ditentukan, lalu output yang dihasilkan oleh siswa dibandingkan dengan output yang telah ditentukan, contohnya seperti ini nih :

buat sebuah aplikasi yang menghitung bilangan faktorial
 

input	output
0	1
1	1
2	2
3	6
4	24
5	120
6	720
7	5040
8	40320
9	362880

Kalau programnya dapat melalui tes ini yha nilainya 100 donk, kalau salah yha salah nilainya tergantung berapa tes yang benar dan berapa yang salah. Nah pertanyaanya sekarang, kalau kode siswanya salah sintaks, gimana? apa diserahkan saja sama siswanya untuk memperbaiki sendiri? kalo gitu keadaanya, dimana sisi inteligent dari sistem ini?. Nah disinilah sisi “intelligent” dari modul evaluator yang gw bikin. Kalau ada yang salah dengan kode programnya, Intent recognizer akan memeriksa kodenya, huruf per huruf. Pemeriksaan ini tentu saja memerlukan lexer dan parser.

Gw ga bikin lexer dan parser untuk bahasa C, kalau bikin sendiri gw bisa gila kali yha. Gw menggunakan tools untuk mengenerate lexer dan parser tersebut, namanya ANTLR (ANother TooL for Language Recognizer). Dibuat nyaris sendirian oleh profesor gila Terrence Parr selama kira-kira 15 tahun. Trus gw juga ga bikin grammar untuk Cnya, gw tinggal pake grammar C untuk ANTLR V3 yang dibuat, juga, oleh Terrence.

Pada tahap awal sekali perkembangan skripsi ini, gw bener-bener blank gimana caranya memeriksa kode program siswa. Walaupun begitu gw bener-bener nekat ambil topik ini, yha dasar keras kepala kali ya, atau saking bodohnya? <img src=)” title=”:))” /> whatever lah. Dulu gw berfikir untuk membuat recognizer kode program C menggunakan rule base software. Dengan rule-rule if-then gw bermaksud mengenali program bahasa C, tapi ini bener-bener langkah nekat, waktu itu terlintas di pikiran gw bahwa gw harus bikin ribuan rule untuk mengenali program bahasa C, gila ye?.

Gw blank banged harus digimanain ini topik skripsi, akhirnya gw memutuskan untuk kerja dulu dalam rangka membuka wawasan dan mencari ilmu, selain karena gw bener-bener dalam krisis finansial parah :(. Setengah tahun kerja di suatu perusahaan konsultan, gw merasa perkembangan gw ga terlalu signifikan. Suatu saat, gw memutuskan untuk mengikuti kursus java, disini gw ketemu endy. Kemudian gw pindah kerja ke LSM kehutanan untuk bikin software simulasi hutan, karena software simulasi itu ditulis pake java, dan domisili kantornya di bogor. Gw pikir sekalian kerja sekalian nylesein skripsi. Tapi kenyataan berkata lain, karena gw ga kunjung menemukan gimana cara untuk menyelesaikan skripsi gw ini, bahkan pembimbing gw menawarkan untuk cukup membuat algoritma sederhana untuk matching huruf per huruf antara kode program pekerjaan siswa dan kode program kunci jawaban yang disediakan sebelumnya. Tentu saja dengan algoritma ini, tidak bisa memeriksa variasi kode program yang diberikan oleh siswa, gw tidak setuju dengan ide ini.

Sampai suatu saat iseng-iseng gw menemukan artikelnya endy, tentang “Katak dalam tempurung”, disana dya menyebutkan tentang “di luar negeri sana, dosen tidak hanya sekedar mengoceh di dalam kelas menjelaskan Teori Automata. Dia membuat implementasi parser, menyumbangkan parser tersebut menjadi open source, dan tidak lupa memasang foto konyol di website parser tersebut”. Iseng-iseng gw buka linknya, dan tararara gw menemukan ANTLR :D . Setelah itu sedikit demi sedikit gw melihat-lihat apa yang bisa dilakukan ANTLR, dan memang ternyata cocok dengan apa yang gw mau.

Pada awalnya bekerja dengan ANTLR sungguh tidak menyenangkan, karena Terrence belum menyediakan IDE untuk develop aplikasi dengan ANTLR. Pertama gw harus bikin bahasa yang namanya Terrence Markup language, yang wujudnya mirip-mirip dengan Regular Expression, seperti ini nih :

class ExprParser extends Parser;
expr:   mexpr ((PLUS|MINUS) mexpr)*
    ;      
mexpr      
    :   atom (STAR atom)*
    ;    
atom:   INT 
    |   LPAREN expr RPAREN 
    ;
 

class ExprLexer extends Lexer;
options {
    k=2; // needed for newline junk
    charVocabulary='\u0000'..'\u007F'; // allow ascii
}
LPAREN: '(' ;
RPAREN: ')' ;
PLUS  : '+' ;
MINUS : '-' ;
STAR  : '*' ;
INT   : ('0'..'9')+ ;
WS    : ( ' '
        | '\r' '\n'
        | '\n'
        | '\t'
        )
        {$setType(Token.SKIP);}
      ;    		

Spesifikasi lexer dan parser diatas, secara umum disebut sebagai grammar dan disimpan dalam file dengan ekstensi .g (dot g). Kemudian gw harus mengenerate file ExprParser.java dan ExprLexer.java dari file grammar diatas menggunakan command line, seperti ini :

$ java antlr.Tool expr.g
ANTLR Parser Generator   Version 2.7.2   1989-2003 jGuru.com
$

Setelah proses generate parser dan lexer selesai, tentu saja langkah berikutnya harus mengcompile file yang sudah selesai digenerate tadi. Setelah proses compile sukses, baru program bisa digunakan dan dites menggunakan bahasa yang dispesifikasikan oleh file grammar diatas. Empat langkah tadi harus dilaksanakan secara manual tanpa ada IDE yang membantu sama sekali. Kalau terdapat kesalahan sintaks dalam file grammarnya atau proses generate file atau compile file gagal yha harus dimulai dari awal. Itu kalau kesalahanya kesalahan sintaks, nah kalau kesalahanya kesalahan logika? sedangkan tidak ada tools untuk debuging? :((

Tiga minggu yang lalu gw menemukan antlrworks di website resmi ANTLR. Jean Bovet dan, lagi-lagi, Terrence Parr ternyata udah membuat IDE untuk develop, visualize dan debug program ANTLR, Alhamdulillah, lu emang gila ya Terrence!!. Tools ini benar-benar membantu kerjaan gw, ga perlu lagi langkah-langkah generate lexer dan parser, compile lexer dan parser, mencoba program dengan manual!. Cukup tekan satu tombol debug, maka semua kerjaan itu dilakukan oleh antlrworks. Visualisasi tree parser juga ditampilkan oleh si Antlrworks ini, sehingga kita bisa dengan gampang melihat alur eksekusi program, dari satu rule ke rule yang lain.


Gambar 3. Antlrworks in action

Pada proses debug di AntlrWorks, kita bisa mamasukkan contoh kode program yang harus dikenali oleh si grammar. AntlrWorks akan memeriksa satu persatu huruf dalam kode program tersebut dengan menggunakan lexer dan parser yang digenerate dari file grammar. Setiap kali antlrworks melewati suatu rule dalam grammar, dya akan membuat satu node dalam parse tree visualization, pada akhirnya kita dapat memperoleh gambaran visual bagaimana alur rule-rule tersebut dieksekusi untuk mengenali kode program. Kalau ada kesalahan dalam kode program, ANLTR akan “melemparkan” RecognitionExeption, kita bisa memutuskan untuk meneruskan eksekusi atau berhenti sampai disini. Begitu seterusnya hingga semua huruf dalam kode program diperiksa.

Langkah berikutnya dari modul evaluator ini adalah menjelaskan kesalahan yang terjadi dalam kode program siswa. Sistem Penjelas bertugas untuk menjelaskan dengan sejelas-jelasnya dimana kesalahan tersebut terjadi. Penjelasan yang muncul berdasarkan hasil pemeriksaan kode program oleh lexer dan parser. Sistem penjelas ini, terkadang, tidak dipunyai oleh parser C pada umumnya. Pesan kesalaha parser C pada umumnya terlalu sederhana atau terlalu bertele-tele, dan tentu saja ditulis dalam bahasa inggris. Dari pengalaman gw, programmer yang masih newbies pasti saaaangat kesulitan membaca pesan kesalahan yang diberikan parser. Gw bermaksud untuk membuat sistem penjelas yang mengatasi kesulitan programmer newbies mencari kesalahan programnya. Salah satu strateginya adalah : satu pesan kesalahan per sekali melakukan parse kode program. Mungkin untuk sebagian programmer yang lumayan ahli hal ini menghambat kerjaan, tetapi ingat, ini tools untuk belajar, bukan tools untuk development :D

Penjelasan dari sistem penjelas tentu saja menggunakan bahasa indonesia, bukan bahasa inggris. Misalnya seperti ini :

terdapat token intt dalam pekerjaan anda, apakah yang anda maksud adalah int?

Tapi sampai saat ini, gw baru bisa translate pesan kesalahan paling sederhana dari ANTLR, belum ada tambahan pesan kesalahan yang signifikan. misalnya seperti ini :

baris 5 kolom 16 tidak ada alternatif yang cocok untuk input ‘intt’

Jadi bagian pintar untuk mencari keyword paling dekat dengan intt yaitu int belum gw implementasikan, but gw harap bisa gw implementasikan sebelum deadline skripsi gw di akhir Mei ini terlewati. Kalau blom bisa gw implementasikan, yha gw simpen untuk S2 nanti :D hehehe.

Selain sistem penjelas, bagian tersulit dari skripsi gw adalah membuat sistem perbaikan otomatis. Sistem perbaikan otomatis membantu siswa untuk memperbaiki kesalahanya secara otomatis. Setelah kode program diperiksa, ditemukan kesalaha di dalamnya, dijelaskan kesalahan yang terjadi, maka langkah terakhir adalah memperbaiki kesalahan, siswa bisa memperbaiki kesalahan secara manual atau dengan meminta bantuan pada sistem perbaikan otomatis. Nanti kalau sistem ini benar-benar sudah jadi, akan ada alur interaksi antara siswa dan sistem, alur interaksi ini biasa disebut sebagai “tutorial”. Berikut ini contoh tutorial yang terjadi antara sistem dan siswa :

Misalnya siswa diberi soal : “Tulis sebuah program yang menghitung nilai eksponensial 2N, dimana N adalah input program. Sebagai contoh, jika N=3 maka hasilnya adalah 23=2x2x2=8.”.

Kemudian siswa menjawab dengan kode seperti di bawah ini, yang ternyata terdapat banyak kesalahan didalamnya. Sistem perbaikan otomatis akan membantu siswa memperbaiki kesalahan secara interaktif lewat proses tutorial seperti ini :

inr I,val=1
For( I = 0 ; I <= 4 ; I++{
	Val *= 2;
}

ME : “apakah maksud anda adalah keyword “int”?”
Siswa : Ya

Modul Evaluator 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;
}

ME : “apakah maksud anda menambahkan “;” setelah “val=1″ “?
Siswa : Ya
Hasil perbaikan :

int I,val=1;
For ( I = 0 ; I <= 4 ; I++{
	Val *= 2;
}

ME : “apakah maksud anda adalah keyword “for” ?”
Siswa : Ya
Hasil perbaikan :

int I,val=1;
for ( I = 0 ; I <= 4 ; I++{
	Val *= 2;
}

ME : “apakah maksud anda menambahkan “)” diantara “I++” dan “{” “?
Siswa : Ya
Hasil perbaikan :

int I,val=1;
for ( I = 0 ; I <= 4 ; I++){
	Val *= 2;
}

ME : “apakah maksud anda adalah variabel “val” “?
Siswa : Ya
Hasil perbaikan :

int I,val=1;
for ( I = 0 ; I <= 4 ; I++){
	val *= 2;
}

Proses tutorial ini bersifat dinamik, siswa tidak harus mengikuti proses tutorial hingga semua kesalahan berhasil diperbaiki. Siswa bisa dengan mudah kembali ke teks editor untuk memperbaiki kesalahannya secara langsung tanpa menunggu ME melakukannya, kemudian memproses jawaban yang baru tersebut dari awal.

Ide perbaikan kesalahan sebenernya sudah ada, gw nyontek aja sih, cuman karena gw cuma menemukan papernya saja tanpa ada kode implementasinya, gw akhirnya bikin implementasi sendiri dari awal. Bagian tersulit dari program ini adalah menemukan cara membuat parser dan lexer, yha untunglah gw terbantu dengan adanya ANTLR. Kalau tertarik dengan paper yang idenya gw pake, bisa didapetin disinisana dan sono.


Gambar 4. Algoritma Perbaikan Kesalahan (Sykes & Franek, 2003)

Untuk membuat sistem seperti ini diperlukan antar muka sistem yang bagus sekali, tampilanya sebaiknya mirip dengan IDE, seperti Eclipse, netbeans atau visual studio. Gw dulu pada awalnya oprek-oprek C development toolkit punyanya si Eclipse, tapi mentok di sisi dokumentasi yang sangat sedikit. Setahun kemudian gw mulai oprek-oprek netbeans, trus ketemu netbeans platform. Gw langsung bergumam “aha!” ini yang gw cari, setelah baca-membaca akhirnya dua minggu terakhir ini gw menghasilkan program ini :


Gambar 5. Modul Evaluator Sistem Pembelajaran Cerdas (Fatkhan, 2007)

Mengingat gw mulai tanpa tahu apa-apa tentang netbeans platform, gw bisa bilang proses pengerjaan program diatas nggak terlalu bikin punggung gw sakit atau jari gw kriting. Kalau gw ga pake netbeans platform trus pengen dapet program dengan kualitas seperti diatas, kira-kira gw akan memerlukan waktu berbulan-bulan dan kode beribu-ribu baris. Dengan netbeans platform cukup 2 minggu dan ga lebih dari 200 baris kode, fantastis!!.

Awalnya gw pikir akan sangat susah membuat aplikasi dengan menggunakan netbeans platform, tetapi ternyata ga sesusah itu. Dokumentasi yang sangat melimpah, komunitas yang sangat aktif dan contoh program yang bertebaran di mana-mana, sangat membantu kerjaan gw. Tutorial yang sangat banyak dapat diperoleh di platform.netbeans.org, pertanyaan akan selalu dijawab di milisnya developer netbeans platform dev@openide.netbeans.org. Javadoc dan deskripsi API bisa dilihat di netbeans.org, kalau mau memperoleh Javadoc dan api secara lengkap bisa didownload dari netbeans update center dengan nama “API Documentation” menggunakan update center tools di netbeans.

Kalau ada yang berminat dengan dokumentasi skripsi gw secara lengkap, silahkan download di sini. Dan kalau ada yang berminat untuk melanjutkan, gw dengan senang hati akan membagi ilmu gw. Kalaupun nanti ga ada yang minat nerusin sepertinya gw punya niat untuk melanjutkan program ini sebagai tesis gw di s2 atau desertasi nanti kalau sempet ambil doktoral :D . Atau at least akan terus gw kembangin jadi project di sourceforge.net atau pun di dev.java.net, dengan menambah modul pembelajaran java misalnya. Yha semoga ada yang mau menggunakanya sebagai tools untuk mengajarkan bahasa pemrograman di kampusnya :D .