ULTIMATICS
WAHJUDI, SETYOTOMO
PIRANTI LUNAK OUTPUT ANALYZER UNTUK PROGRAM DALAM BAHASA C Januar Wahjudi, Willyanto Setyotomo Program Studi Teknik Informatika, Fakultas Teknologi Informasi dan Komunikasi Universitas Multimedia Nusantara Gading Serpong, Tangerang, INDONESIA
[email protected]
Abstract— Piranti Lunak Output Analyzer ini ditujukan untuk memudahkan mengoreksi program-program dalam bahasa C. Piranti lunak ini dibangun menggunakan bahasa C, dan mampu memeriksa kebenaran program-program C secara otomatis (automatic grader) berdasarkan data masukan sejenis, tanpa memeriksa gaya penulisan program maupun logika pemrograman. Hasil pemeriksaan dikelompokkan kedalam kategori program benar, program salah, program menghasilkan keluaran yang salah, atau program menghasilkan kesalahan saat dijalankan. Keywords— ouput analyzer, bahasa C, automatic grader
I.
LATAR BELAKANG
Salah satu tantangan didalam proses pengajaran suatu matakuliah pemrograman dasar adalah kecepatan dan keakuratan pemeriksaan program hasil karya yang dibuat oleh mahasiswa. Untuk setiap kasus yang diberikan, pengajar perlu memastikan bahwa program yang dihasilkan oleh mahasiswa berhasil melewati tahap pengecekan secara sintaks (proses kompilasi), selanjutnya bisa memberikan hasil keluaran (output) seperti yang diharapkan. Tentu saja setelah tahap tersebut pengajar tetap harus melakukan pemeriksaan kemampuan mahasiswa dalam memilih dan menerapkan algoritma secara benar dalam memecahkan masalah. Seorang mahasiswa haruslah mengalami banyak praktik mengerjakan program untuk mengasah keterampilannya. Hal ini menjadi masalah utama bagi pengajar matakuliah pemrograman dasar, karena setiap jenis soal memerlukan proses pemeriksaan sebanyak jumlah mahasiswa yang dididik. Diantaranya membuka program , memeriksa
syntax (dikompilasi), mengoperasikan program dengan data input tertentu, selanjutnya memeriksa keluaran dari program. Proses pemeriksaan sekumpulan program sejenis hasil karya mahasiswa disini, merupakan proses yang bersifat berulang (repetisi), contohnya seperti proses kompilasi. Program hasil pekerjaan mahasiswa dibuka satu per satu, kemudian dilakukan kompilasi. Kemudian masalah berikutnya adalah dalam hal ketelitian penilai dalam menganalisa hasil output atau keluaran dari program. Sesuatu yang lazim terjadi karena dihadapkan pada kuantitas yang besar, penilai mungkin melakukan beberapa kesalahan atau ketidaktelitian. Permasalahan diatas menjadi dasar dilakukannya suatu kajian sekaligus membuat suatu program yang dapat digunakan untuk mengatasi masalah-masalah diatas. Diharapkan penelitian ini dapat memberikan analisa hasil kompilasi dan memutuskan kebenaran suatu program dilihat dari sisi output-nya
52
PIRANTI LUNAK ...
ULTIMATICS
WAHJUDI, SETYOTOMO
Sebuah kasus atau soal pemrograman yang diberikan kepada mahasiswa akan dikerjakan oleh mahasiswa dalam satu kelas. Dalam satu kelas terdapat maksimal 40 mahasiswa dan dibimbing oleh seorang pengajar, sebaliknya pengajar bisa saja mengajar 2 sampai 3 kelas. Dengan demikian seorang pengajar akan memeriksa sekitar 80 sampai 120 program karya mahasiswa hanya untuk sebuah kasus. Dalam satu semester seorang pengajar bisa memberikan sekitar 40 sampai 50 kasus. Jika dilakukan perhitungan dengan angka minimum diatas, seorang pengajar akan menghabiskan waktu untuk memeriksa program sebanyak 2 kelas x 40 mahasiswa x 40 kasus = 3200 program. Jika memeriksa sebuah program membutuhkan 5 menit, maka bisa dihitung berapa waktu yang digunakan dalam satu semester untuk memeriksa program karya mahasiswa. Jumlah ini akan bertambah lagi, seandainya seorang mahasiswa boleh memperbaiki programnya dan mengirim kembali program yang telah diperbaiki. Betapa repotnya menjadi pengajar pemrograman dasar, karena salah satu kunci pengajaran adalah dengan banyak memberikan kasus atau soal latihan. Proses yang dilakukan untuk memeriksa sebuah program karya mahasiswa dibagi menjadi tiga bagian, yaitu : kompilasi, jalankan program dengan data sample, cocokkan keluaran dengan sample keluaran. Untuk pemeriksaan algoritma dalam program tidak dilakukan dalam penelitian ini. Masalah utama dalam penelitian ini adalah cara untuk melakukan proses kompilasi, menjalankan program dengan data sample, dan memeriksa keluaran dari program terhadap sample keluaran. Pada penelitian ini, contoh kasus diambil dari matakuliah pemrograman dasar, dimana program karya mahasiswa dibuat menggunakan bahasa C. Program-program karya mahasiswa untuk solusi kasus yang sama (selanjutnya disebut TestPrograms) dikelompokkan untuk digunakan sebagai masukan PIRANTI LUNAK ...
bagi program yang akan dibangun (selanjutnya disebut output analyzer). Hasil atau keluaran dari proses pengujian terhadap TestPrograms, dikelompokkan ke dalam 4 (empat) kategori, yaitu : 1. SE (Syntax Error) : kategori TestPrograms yang masih salah secara sintak 2. OE (Output Error) : kategori TestPrograms yang sudah benar secara sintak tetapi tidak menghasilkan output yang benar 3. RE (Runtime Error) : kategori TestPrograms yang sudah benar secara sintak tetapi menghasilkan kesalahan saat dijalankan. 4. AC (Accepted) : kategori TestPrograms yang sudah benar secara sintak dan menghasilkan output yang benar. Selanjutnya keluaran dari outputanalyzer bisa diubah menjadi nilai dan disimpan ke dalam keseluruhan. outputanalyzer akan melakukan proses ini secara batch artinya, TestPrograms dari para mahasiswa dikumpulkan dalam satu directory folder, dan outputanalyzer akan memprosesnya secara berturutan satu demi satu. This document is a template. An electronic copy can be downloaded from the conference website. For questions on paper guidelines, please contact the conference publications committee as indicated paper submission is available from the conference website.
II.
SISTEM PENGUJI PROGRAM SECARA OTOMATIS
Pemikiran tentang sistem pengujian secara otomatis terhadap program karya mahasiswa telah dikembangkan sejak tahun 1960 oleh Jack Hollingsworth (Hollingsworth, 1960). Saat itu program karya mahasiswa ditulis dalam bahasa assembly dan menggunakan punched card, keluaran
53
ULTIMATICS
WAHJUDI, SETYOTOMO
dari program berupa “salah” atau “benar” (Douce, C, et.al. 2005). Pada tahun 1965, George E. Forsythe and Niklaus Wirth dari Stanford University mengembangkan sistem pengujian program karya mahasiswa menggunakan bahasa Algol. Pada sistem ini untuk setiap program yang diuji harus disediakan program untuk menguji serta data uji, program dijalankan dan dicatat waktu operasi program. (Forsythe and Wirth, 1965). Pada tahun 1969, Hext and Winings (1969) mengajukan pengembangan dengan menguji output program karya mahasiswa berdasarkan input data tertentu dengan output yang seharusnya (Douce, C, et.al. 2005). Peter C. Isaacson and Terry A. Scott (1989) memperkenalkan pendekatan baru dimana mahasiswa bisa langsung mengetahui hasil program mereka (Douce, C, et.al. 2005). Kenneth A. Reek (1989) mengembangkan system bernama TRY dimana mahasiswa bisa menjalankan sistem ini dari command line (Douce, C, et.al. 2005). TRAKLA sistem mulai digunakan pada tahun 1991 oleh Helsinki University of Tecnology (Otto Sepala, 2004), sistem ini membandingkan keluaran (output) program karya mahasiswa. Urs von Matt dari University of Maryland mengembangkan sistem bernama Kassandra (von Matt, 1994) untuk menguji program secara otomatis. Sistem ini ditulis menggunakan bahasa matematika yaitu Matlab dan Maple. Kebenaran program yang diuji ditentukan dengan membandingkan data keluaran program yang diuji dan data yang seharusnya. University of Nottingham, United Kingdom meluncurkan CEILIDH sistem pada tahun 1994 yang mampu melakukan pengujian terhadap program bahasa C dan ForTran berdasarkan output program (Seppala, Otto,2004).
David Jackson and Michelle Usher (1997) mengembangkan sistem bernama ASSYST untuk menganalisis program C karya mahasiswa, meliputi
dalam waktu, dan kompleksitas program (Douce, C, et.al. 2005). Setelah munculnya ASSYST, menimbulkan ide untuk mengembangkan lebih lanjut sistem yang bisa menerima pengumpulan hasil karya mahasiswa, memberikan nilai secara otomatis, serta membuatkan laporan nilai. Pada tahun 1998, Mike Joy dan Michael Luck dari Warwick University, United Kingdom, meluncurkan versi pertama BOSS (kependekan dari BOSS Online Submission System) (Douce, C, et.al. 2005). BOSS memiliki sekumpulan program yang dijalankan dengan command line. Salah satu program adalah program bagi mahasiswa untuk memeriksa kebenaran programnya (dalam bahasa C) sebelum dikirim. Program lain lagi digunakan untuk mengirim program karya mahasiswa, ada juga program bagi pengajar untuk memberikan nilai karya mahasiswa. BOSS mengijinkan mahasiswa mengirimkan jawaban atas soal lebih dari sekali. (PeyShan Heng, et.al.,2005). BOSS masih digunakan sampai saat ini di Warwick University untuk pengajaran berbagai bahasa pemrograman (diantaranya C, C++, Java, Prolog). (Joy, M, et.al., 2005). Tahun 2004, diluncurkan TRAKLA2 di Helsinki University of Technology (Otto Seppala, 2004). Sistem ini menggunakan Graphical User Interface (GUI) untuk jawaban dari mahasiswa mengarah ke visual algorithm simulation. Selain itu sistem ini sudah memberikan feedback, mahasiswa bisa mengirimkan jawaban lebih dari sekali. Pada tahun 2005, diluncurkan Automated System for Assessment of Programming (ASAP) di Kingston University 2005 oleh Christopher Douce, David Livingstone, James Orwell, Steve Grindle and Justin Cobb (Douce, C, et.al. 2005). 54
PIRANTI LUNAK ...
ULTIMATICS
WAHJUDI, SETYOTOMO
Menurut Kirsti Ala-Mutka (Ala-Mutka, K., 2005), pendekatan pengujian program dikelompokkan dalam dua bagian besar, yaitu static analysis approaches dan dynamic analysis approaches. Static analysis approaches lebih mengarah kepada pengujian kode program, tanpa mengeksekusi program. Banyak hal yang bisa diuji dengan pendekatan ini, diataranya adalah gaya penulisan program, pendekteksian kesalahan sintaks dan semantic, analisis software metrics, analisis kesamaan struktur program, analisis kesamaan non struktural pada program. Dynamic Analysis Approaches lebih mengarah pada black box testing. Pada pengujian ini program diberi masukan tertentu sehingga menghasilkan keluaran. Keluaran tersebut akan dibandingkan dengan keluaran yang seharusnya. III. PEMBAHASAN
Gambar 1. Contoh soal 2. Mahasiswa mengerjakan program sesuai permasalahan dan menjalankan program sesuai
teks keluaran. Mahasiswa melakukan kompilasi program (misalnya contoh.c) dan menghasilkan mahasiswa menggunakan command line pada dos prompt dengan perintah input/output redirection. 3. Contoh untuk program dengan nama contoh.c : 4. D:\>contoh < contohinput.txt > output.txt 5. !
keluaran program mereka (yaitu output.txt) dengan contoh keluaran yang diberikan (yaitu contohoutput.txt). Mahasiswa akan berusaha untuk membuat program yang menghasilkan hasil yang sama dengan contoh keluaran yang diberikan. 6. Proses ini berulang terus dan pada akhirnya mahasiswa mengirimkan source code terakhir melalui e-mail kepada pengajar.
MASALAH
Proses pemberian tugas pada matakuliah Algoritma dan Pemrograman di Universitas Multimedia Nusantara dilakukan dengan beberapa soal. Proses disini dibagi menjadi 2 (dua) bagian, berdasarkan pelaku proses, yaitu proses dari sisi mahasiswa dan proses dari sisi pengajar. A.
Proses di sisi mahasiswa
Proses pengerjaan tugas oleh mahasiswa dan pengiriman tugas kepada pengajar, adalah sebagai berikut : 1. Tugas diberikan berupa teks berisi penjelasan masalah yang akan diatasi dengan program dalam bahasa C. Penjelasan masalah diberikan berupa 5 (lima) bagian, yaitu permasalahan, keterangan masukan yang diperlukan, keterangan keluaran yang diharapkan, contoh masukan dan contoh keluaran untuk contoh masukan. Contoh soal ditunjukkan pada gambar 1. PIRANTI LUNAK ...
Flowchart proses dari sisi mahasiswa adalah sebagai berikut :
55
WAHJUDI, SETYOTOMO
ULTIMATICS
pengujian menjadi “RE”, yaitu Runtime error. Contoh : D:\>contoh < contohinput.txt > output.txt 3. Membandingkan output.txt dengan $ status dicatat secara manual bahwa program masuk dalam kategori “AC”, yaitu accepted. Jika # atau runtime error, maka status adalah “OE”, yaitu output error. % & karya mahasiswa oleh pengajar adalah sebagai berikut :
Gambar 2. Flowchart Proses Sistem saat ini dari sisi mahasiswa B.
Proses dari Sisi Pengajar
Pada akhir batas waktu pengiriman program mahasiswa, pengajar akan mengumpulkan semua pekerjaan mahasiswa untuk soal yang sama pada sebuah folder. Pengajar membuat data uji (contohinput.txt dan contohoutput.txt) yang berbeda " # menguji ketelitian dari program, biasanya dengan membuatkan data dengan kasus yang krusial. Setelah program berada pada sebuah folder yang sama, dan sudah tersedia data uji, maka program siap diperiksa dan diberikan nilai. Adapun proses pemeriksaan adalah sebagai berikut : 1. Untuk setiap program hasil karya mahasiswa dilakukan proses kompilasi. Apabila terdapat syntax error, maka dicatat secara manual bahwa program karya mahasiswa tersebut mendapat status “SE”. 2. Bila berhasil melewati proses pertama diatas, # dengan input/output redirection pada dos prompt. Jika proses eksekusi gagal, ubah status hasil 56
Gambar 3. Flowchart Proses Sistem saat ini dari sisi pengajar Dari sistem yang ada pada saat ini, terdapat beberapa masalah, yaitu : 1. Jumlah mahasiswa yang makin bertambah, sedangkan matakuliah Algoritma dan Pemrograman membutuhkan banyak sekali latihan pemrograman, sehingga jumlah soal latihan makin banyak. Dengan demikian jumlah soal latihan berlipat ganda sejalan dengan pertambahan jumlah mahasiswa. 2. Proses penilaian atau pengujian program karya mahasiswa membutuhkan kecepatan dan PIRANTI LUNAK ...
ULTIMATICS
ketepatan tinggi untuk mengurangi kesalahan yang dilakukan oleh pengajar karena semua proses dilakukan secara manual.
WAHJUDI, SETYOTOMO
pengujian menjadi “RE”, yaitu Runtime error. Dan kembali ke proses nomor 5 diatas. 8. * ; ; (spasi), baris kosong, tab karakter, dan string Untuk mengatasi masalah diatas, maka dibangun atau karakter dari sistem. (misalnya “press any sebuah sistem pengujian program tugas mahasiswa key to continue”). File yang telah dibersihkan secara otomatis. Adapun sistem yang diusulkan pada diberi nama temp.txt, karena output.txt tahap penelitian ini adalah aplikasi program yang untuk setiap program akan disimpan sebagai secara otomatis menguji program karya mahasiswa dokumentasi hasil pemeriksaan. dengan pengujian black box. 9. ! $ sama, maka ubah status hasil pengujian pada IV. RANCANGAN SISTEM BARU array menjadi “OE”, yaitu output error. Jika Sistem baru dirancang sesuai dengan proses yang dilakukan pada sistem lama, yaitu : pengujian pada array menjadi “AC”, yaitu 1. Pemberian tugas masih menggunakan cara lama accepted. 2. Pemeriksaan program karya mahasiswa akan 10. Proses berulang kembali ke nomor 5, sampai dilakukan secara otomatis 3. Pencatatan nilai dilakukan secara otomatis 11. Tulis array of struct tentang hasil pengujian Tahapan sistem baru yang diusulkan adalah
? 1. Program karya mahasiswa disimpan pada @ folder yang sama untuk selanjutnya diubah menjadi laporan 2. Dibuatkan daftar program “.c” atau “.cpp” nilai. Flowchart rancangan usulan program diatas 3. ' ditunjukkan pada gambar 4. program pengkompilasi otomatis akan Dari rancangan program diatas, dibutuhkan 5 (lima) buah subprogram, yaitu : 4. Disediakan array of struct dengan 2 (dua) 1. Membuat daftar program, subprogram ini
dan status hasil pengujian. 2. Compile and Run secara otomatis 5. * 3. Membersihkan output program karya build program. mahasiswa, subprogram ini menerima input berupa 6. Jika proses compile gagal, ubah status hasil
pengujian menjadi “SE”, yaitu syntax error. Q ! Dan kembali ke proses nomor 5 diatas. menerima input temp.txt dan contohoutput.txt untuk 7. Jika proses compile berhasil, lanjutkan dengan dibandingkan, dan menghasilkan status kesamaan proses pengujian data dengan menjalankan X Z perintah untuk mengeksekusi program dengan 5. Membentuk daftar nilai secara otomatis input dari contohinput.txt, dan menyimpan
Jika proses eksekusi gagal, ubah status hasil PIRANTI LUNAK ... 57
WAHJUDI, SETYOTOMO
ULTIMATICS
2. Saat program dijalankan, program meminta Misalkan digunakan contoh kasus berikut ini.
Gambar 5. Contoh kasus soal !
| ;_Q||} output bernama out8.txt yang berisi “7”. Maka tampilan layar adalah sebagai berikut
Gambar 4. Flowchart Usulan Sistem Baru adalah : Z? yang akan diperiksa 2. Contohinput.txt dan contohoutput.txt, kedua # [ ]
program karya mahasiswa berdasarkan contohinput. txt Q ^ dibersihkan _ ` semua program karya mahasiswa
V.
Gambar 6. Tampilan layar output analyzer 3. Program akan men-generate daftar program ;} ;} ' program pengkompilasi otomatis akan mengacu
IMPLEMENTASI
Sistem dibangun dalam bahasa C/C++, diatas sistem operasi Windows XP. Program telah bisa digunakan dan cara penggunaan program aplikasi OutputAnalyzer adalah sebagai berikut : 1. Program karya mahasiswa disimpan pada folder yang sama
~
58
PIRANTI LUNAK ...
WAHJUDI, SETYOTOMO
ULTIMATICS
4. Disediakan array of struct dengan 2 (dua) status hasil pengujian. _ * dan build program. 6. Jika proses compile gagal, ubah status hasil pengujian menjadi “SE”, yaitu syntax error. Dan kembali ke proses nomor 4 diatas. 7. Jika proses compile berhasil, lanjutkan dengan proses pengujian data dengan menjalankan perintah untuk mengeksekusi program dengan input dari in8.txt, dan menyimpan keluaran dari eksekusi berekstensi “.out” (misalnya program0112.out). Jika proses eksekusi gagal, ubah status hasil pengujian menjadi “RE”, yaitu Runtime error. Dan kembali ke proses nomor 4 diatas. | * ; ; (spasi), baris kosong, tab karakter, dan string atau karakter dari sistem. (misalnya “press any key to continue”). File yang telah dibersihkan diberi nama temp.txt, karena output.txt untuk setiap program akan disimpan sebagai dokumentasi hasil pemeriksaan. ! | $ status hasil pengujian pada array menjadi “OE”, $ ubah status hasil pengujian pada array menjadi “AC”, yaitu accepted. 10. Proses berulang kembali ke nomor 5, sampai 11. Setelah proses selesai, maka isi array of struct tentang hasil pengujian ditulis ke dalam ? @ selanjutnya diubah menjadi laporan nilai. #
gambar 8.
PIRANTI LUNAK ...
59
~| Program ini telah digunakan untuk menguji tugas Algoritma dan Pemrograman pada Ganjil 2009/2010. Hasil pengelompokkan program ke dalam masing-masing kategori, yaitu AC, OE, RE, ? # daftar nilai dapat diubah dengan cepat menjadi daftar nilai. Program ini telah mempercepat proses pemeriksaan tugas karya mahasiswa, walaupun masih harus dilakukan pemeriksaan secara statis, yaitu dengan memeriksa alur program, gaya penulisan program dan lain – lain.. VI. SIMPULAN
Dari hasil penelitian dapat disimpulkan bahwa aplikasi ini bisa digunakan untuk membantu pengajar dalam memeriksa dan memberikan nilai tugas mahasiswa per tugas yang sejenis. Aplikasi ini bisa mendeteksi program karya mahasiswa dalam 4 (empat) kategori, yaitu Syntax Error, Output Error, Runtime Error, Accepted. Jenis program karya mahasiswa yang telah diuji hanya untuk kasus soal yang masih sederhana, belum melibatkan materi # lain seperti linked list, array dan lain – lain. Aplikasi ini hanya memeriksa secara black box.
ULTIMATICS
WAHJUDI, SETYOTOMO
Untuk pengembangan lebih lanjut, diharapkan REFERENSI bisa dikembangkan pengelompokan hasil karya [1] Douce, Christopher, David Livingstone, James mahasiswa yang lebih lanjut. Kelompok hasil karya Orwell, Steve Grindle and Justin Cobb, 2005, mahasiswa yang sedang dan akan dikembangkan A Technical Perspective on ASAP Automated adalah pemeriksaan untuk Running Time Limit. System for Assessment of Programming. Selain itu untuk pengembangan lebih lanjut [2] Forsythe, George L. and Niklaus Wirth, 1965, diarahkan kepada materi yang lebih lanjut seperti Automatic Grading Programs, Standford penggunaan array, linked list dan topik lainnya. University, United States of America. [3] $! ` ~ * 2005, The BOSS Online Submission and Assessment System, University of Warwick, United Kingdom. [4] Kirsti, Ala-Mutka, 2005, A Survey of Automated Assessment Approaches for Programming Assignment, Computer Science Education 15(June 2005):83-102. [5] Seppala, Otto, Lauri Malmi, 2004, Overview of tools and innovations on teaching introductory programming, data structures and algorithms in Helsinki University of Technology. [6] Von Matt, Urs, 1994, KASSANDRA : The Automatic Grading System, University of Maryland, Switzerland.
60
PIRANTI LUNAK ...