• Tidak ada hasil yang ditemukan

BAB 4 IMPLEMENTASI DAN EVALUASI

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB 4 IMPLEMENTASI DAN EVALUASI"

Copied!
55
0
0

Teks penuh

(1)

104

IMPLEMENTASI DAN EVALUASI

4.1 S pesifikasi Sistem dan Hardware

Berikut ini adalah spesifikasi hardware beserta software yang direkomendasikan untuk mengimplementasikan sistem online judge.

Tabel 15. Spesifikasi Hardware dan Software

Keterangan S pesifikasi

Sistem Operasi Ubuntu 10.10 Desktop / Server Edition

Software

• GNU GCC 4.4 • GNU G++ 4.4 • eJabberd 2.1

• Web Server ( NginX 1.0 / Apache 2.2 ) • PHP 5.3

• MySQL 5.1

• Sistem Online Judge Hardware

(2)

Secara rata-rata, sebuah soal dapat memakai kapasitas hard disk sebesar 50M B yang meliputi deskripsi soal (rata-rata 100KB), dan minimal 10 testcase (rata-rata 5M B per testcase), sehingga secara kasar sistem online judge dapat menampung soal sebanyak 10000 soal apabila kapasitas hard disk yang dimiliki oleh server sebesar 500GB.

4.2 Aplikasi Web

a. Halaman home

G ambar 51. Halaman home

Gambar 51 adalah tampilan halaman home. Pada halaman ini, terdapat daftar pengumuman dan daftar kontes-kontes mendatang.

(3)

b. Halaman volume list

G ambar 52. Halaman volume list

Gambar 52 adalah tampilan halaman volume list. Pada halaman ini, akan ditampilkan semua volume yang dapat dilihat oleh user. Terdapat dua jenis volume yaitu public dan private. User dapat melihat volume yang berjenis private jika user memiliki akses untuk melihat volume tersebut.

(4)

G ambar 53. Halaman user profile

Gambar 53 adalah tampilan halaman user profile. Pada halaman ini, user dapat melihat profile untuk user tertentu. Informasi yang dapat dilihat adalah nama asli, email (jika tidak diprivate), avatar (atau foto), daftar soal-soal yang sudah diselesaikan, daftar soal-soal-soal-soal yang sudah dikerjakan namun belum selesai, dan jumlah submission.

(5)

G ambar 54. Halaman register

Gambar 54 adalah tampilan halaman register. Pada halaman ini, user dapat melakukan registrasi. User harus memasukkan dengan benar field-field username, password, confirm password, email, dan full name. Field signature, dan school merupakan field opsional sehingga user dapat memilih untuk mengisinya atau tidak. Jika field yang harus diisi oleh user tidak diisi dengan benar, maka sistem akan menampilkan pesan kesalahan.

(6)

G ambar 55. Halaman list problem

Gambar 55 adalah tampilan halaman list problem. Pada halaman ini, terdapat daftar soal-soal yang ada pada volume yang dipilih. Untuk tiap soal, terdapat informasi jumlah user yang sudah menyelesaikan soal tersebut, dan accepted rate untuk soal tersebut.

f. Halaman search problem

(7)

Gambar 55 adalah tampilan halaman search problem. Pada halaman ini user dapat memilih kriteria pencarian dan memasukkan kata kunci pencarian untuk melakukan pencarian terhadap soal algoritma.

g. Halaman problem description

G ambar 57. Halaman problem description

Gambar 57 adalah tampilan halaman problem description. Pada halaman ini, terdapat informasi judul soal, time limit, memory limit, deskripsi soal, asal soal, dan pembuat soal.

(8)

G ambar 58. Halaman rank list

Gambar 58 adalah tampilan halaman rank list. Pada halaman ini, terdapat informasi ranking tiap username beserta nama lengkap pemilik username, jumlah soal yang sudah diselesaikan, dan jumlah submission.

(9)

G ambar 59. Halaman run list

Gambar 59 adalah tampilan halaman run list. Pada halaman ini, terdapat daftar submission seluruh user di online judge. Selain itu, terdapat field-field untuk melakukan filtering kepada daftar submission tersebut.

(10)

G ambar 60. Halaman submit solusi

Gambar 60 adalah tampilan halaman submit solusi. Pada halaman ini, terdapat field problem id, language, source, dan file. Field problem id harus diisi sesuai dengan id soal yang ingin dikumpulkan solusinya. Setelah itu field language harus dipilih sesuai dengan programming language yang digunakan. Kemudian, user dapat memilih untuk menulis source code ke dalam field source, atau memilih file source code untuk diupload.

(11)

G ambar 61. Halaman add problem

Gambar 61 adalah tampilan halaman add problem. Pada halaman ini, terdapat field-field yang wajib untuk diisi. Jika admin salah mengisi atau tidak mengisi salah satu field, maka akan ditampilkan pesan kesalahan.

(12)

G ambar 62. Halaman create contest

Gambar 62 adalah tampilan halaman create contest. Pada halaman ini, terdapat beberapa field yang harus diisi oleh admin. Ketika field "Number of problems" diisi, maka akan divalidasi dengan script Javascript dan ditampilkan field-field pada bagian "Contest problem" sebanyak jumlah problem yang dimasukkan pada field "Number of problems".

(13)

G ambar 63. Halaman admin menu

Gambar 63 adalah tampilan halaman admin menu. Pada halaman ini, terdapat link-link untuk melakukan hal-hal yang hanya dapat dilakukan oleh admin, seperti menambah soal, membuat kontes, dan lainnya.

(14)

G ambar 64. Halaman list problem admin

Gambar 64 adalah tampilan halaman list problem admin. Pada halaman ini, admin dapat mengedit soal, menghapus soal, menambah testcase, mengedit testcase, dan mempublish soal.

o. Halaman edit profile

(15)

Gambar 65 adalah tampilan halaman edit profile. Pada halaman ini, user dapat mengganti password, school, signature, dan mengupload avatar (atau foto). Jika user ingin mengganti password, maka user harus mengisi field password, dan confirm password menjadi password baru.

p. Halaman login

G ambar 66. Halaman login

Gambar 66 adalah tampilan halaman login. Pada halaman ini, user dapat melakukan autentikasi kepada sistem dengan memasukkan username dan password. Username dan password yang dimasukkan akan divalidasi dengan data yang ada pada database. Jika data yang dimasukkan valid, maka user dapat login ke dalam sistem, jika data tidak valid maka sistem akan memberikan pesan kesalahan.

(16)

G ambar 67. Halaman list contest

Gambar 67 adalah tampilan halaman list contest. Pada halaman ini, terdapat daftar kontes-kontes yang akan datang, sedang berjalan, dan sudah berlalu. User dapat melakukan registrasi terhadap kontes-kontes yang akan datang, dan juga memasuki arena / halaman kontes yang sudah berlalu untuk membaca soal, dan melihat ranklist. Jika user sudah mendaftar pada kontes yang sedang berlangsung, maka user dapat masuk ke dalam arena / halaman kontes sebagai peserta.

(17)

G ambar 68. Halaman list user admin

Gambar 68 adalah tampilan halaman list user admin. Pada halaman ini, admin dapat melihat daftar user yang sudah terdaftar pada sistem online judge. Admin dapat melakukan edit privilege ataupun ban terhadap user tertentu.

(18)

G ambar 69. Halaman admin add testcase

Gambar 69 adalah tampilan halaman admin add testcase. Pada halaman ini, admin dapat melakukan upload testcase berupa dua buah file yaitu file input, dan file output. Kedua buah file ini akan diupload ke server online judge dan file ini diperlukan oleh judge untuk memeriksa kebenaran source code yang dikirim oleh user.

4.3 Implementasi Sistem Penilaian

4.3.1 Mengompilasi solusi

Kompilasi dilakukan dengan cara menjalankan compiler yang tepat untuk mengompilasi solusi berupa source code. Compiler dijalankan oleh sebuah program yang berfungsi sebagai sandbox untuk membatasi sumber daya yang dapat dipakai oleh compiler sehingga source code yang ketika dikompilasi menggunakan terlalu banyak sumber daya seperti waktu, dan memori dapat dihentikan secara paksa.

Berikut ini adalah pseudocode untuk menghentikan proses kompilasi ketika source code yang dikompilasi sudah menggunakan terlalu banyak sumber daya:

(19)

1 function KillAllProcess 2

3 FOREACH process_id in ProcessID 4 KILL process_id

5 END FOREACH 6

7 end function

Fungsi di atas akan menelusuri array ProcessID yang berisi seluruh process id dari proses-proses yang dijalankan oleh compiler dan untuk setiap process id tersebut dikirimkan kill signal untuk menghentikan proses tersebut.

Berikut ini adalah pseudocode untuk mengecek penggunaan sumber daya yang dipakai oleh compiler:

01 function checkMemoryAndTL( o ) 02

03 WHILE TRUE 04

05 FOREACH process_id in ProcessID 06

07 retrieve memory usage and time usage for this process_id 08

09 IF memory usage > o["memory_limit"] THEN 10 PRINT "CE"

11 KillAllProcess() 12 EXIT THREAD 13 END IF

14

15 IF time usage > o["timelimit"] THEN 16 PRINT "CTLE" 17 KillAllProcess() 18 EXIT THREAD 19 END IF 20 21 END FOREACH 22

23 now_time = get wall clock time 24

25 IF now_time - start_time > o["wallclock"] THEN 26 PRINT "CTLE" 27 KillAllProcess() 28 EXIT THREAD 29 END IF 30 31 SLEEP o["waittime"] 32 33 END WHILE 34 35 end function

(20)

proses kompilasi. Tidak hanya itu, waktu wallclock (waktu dunia nyata) pun perlu untuk dibandingkan sehingga jika melebihi batas waktu wallclock yang ditentukan maka akan dijalankan juga fungsi untuk menghentikan proses kompilasi.

Berikut ini adalah pseudocode untuk proses parent yang bertugas untuk mengawasi proses anak yang sedang berjalan:

001 function Monitor( o, cmd ) 002

003 insert PID to ProcessID 004 vis[PID] = true

005

006 start_time = get wall clock time

007 make thread and run function checkMemoryAndTL( o ) 008 009 count = 0 010 011 out = "" 012 013 WHILE TRUE

014 wait for the child process to report to parent 015

016 np = the child process that report 017

018 IF np < 0 THEN

019 IF error is interrupt THEN 020 continue 021 ELSE 022 out = "CE" 023 break 024 END IF 025 END IF 026

027 IF np not exists in ProcessID THEN 028 out = "CE"

029 break 030 031 END IF

(21)

032

033 IF child process np is finish THEN 034

035 IF child process np exit status is not 0 THEN 036 out = "CE"

037 break 038 END IF 039 count++ 040

041 ELSE IF child process np is killed by signal THEN 042

043 // Must check what signal

044 // if it is trap signal, then the child process 045 // is not killed and still running

046

047 IF signal is not trap signal THEN 048 out = "CE"

049 break 050 END IF

051 ELSE IF child process np is stopped THEN 052

053 IF signal is trap signal THEN 054

055 IF event is fork and its varieties THEN 056

057 CID = get the child process id of process np 058 insert CID to ProcessID

059 let child process CID continue its process 060 let child process np continue its process 061

062 ELSE

063 checkScall( np )

064 let child process np continue its process 065 END IF

066

067 ELSE IF signal is not stop,cpu limit,output limit signal THEN

068

069 deliver the signal to child process np 070

071 ELSE IF signal is stop signal THEN 072 073 IF vis[np] THEN 074 075 out = "CE" 076 break 077 ELSE 078 079 vis[np] = true

080 let child process np continue its process 081 082 END IF 083 084 ELSE 085 086 out = "CE" 087 break

(22)

099 END IF

100 IF out = "CE" THEN KillAllProcess() 101 PRINT out

102 EXIT 103

104 end function 105

Baris 3 - 7 digunakan untuk memasukkan process id dari proses anak yang kita jalankan ke array ProcessID dan kemudian memberikan tanda bahwa anak proses dengan id PID sudah terdapat di dalam array ProcessID dan sedang berjalan. Setelah itu, parent akan mengambil waktu wallclock awal ketika program baru berjalan, dan menjalankan fungsi " checkM emoryAndTL" pada sebuah thread.

Baris 18 - 25 digunakan untuk melakukan pengecekan terhadap nilai error dari anak proses yang melapor kepada parent. Karena nilai np yang didapat merupakan nilai negatif, maka dilakukan pengecekan nilai error proses tersebut. Jika nilai error proses tersebut bukan merupakan interrupt maka keseluruhan proses kompilasi sudah selesai sehingga kita dapat menghentikan pengulangan.

Baris 27 - 31 digunakan untuk melakukan pengecekan keberadaan nilai variabel np pada array ProcessID. Jika nilai np yang didapatkan oleh parent tidak terdapat di dalam array ProcessID, maka proses kompilasi akan dihentikan secara paksa.

Baris 33 - 40 digunakan untuk melakukan pengecekan terhadap kelangsungan anak proses yang melapor kepada parent. Jika anak proses sudah berhenti maka nilai

(23)

yang dikembalikan oleh anak proses tersebut dapat diperiksa. Jika nilai yang dikembalikan bukan nol, maka terdapat kemungkinan bahwa proses tersebut mengalami crash.

Baris 41 - 49 digunakan untuk melakukan pengecekan apakah anak proses dihentikan secara paksa oleh signal dari sistem operasi. Jika signal yang menghentikan anak proses secara paksa bukan trap signal, maka anak proses tersebut sudah berhenti karena menggunakan sumber daya melebihi sumber daya yang disediakan oleh sistem operasi kepada anak proses tersebut.

Baris 51 - 70 digunakan untuk melakukan pengecekan terhadap anak proses ketika anak proses mendapatkan signal untuk berhenti. Baris 53 - 65 digunakan untuk melakukan pengecekan terhadap anak proses ketika anak proses berhenti dikarenakan trap signal. Trap signal digunakan oleh sistem operasi untuk sementara menghentikan anak proses sehingga parent dapat melakukan pengecekan yang diperlukan sebelum anak proses mengeksekusi sebuah system call. Ketika anak proses berhenti karena trap signal, maka dilakukan pengecekan terhadap system call yang akan dieksekusi oleh anak proses. Jika anak proses akan melakukan eksekusi system call fork beserta variasinya maka parent dapat mengambil process id anak proses baru dari nilai yang dikembalikan oleh system call sehingga process id anak proses baru dapat dimasukkan ke dalam array ProcessID. Jika anak proses tidak akan melakukan eksekusi system call fork beserta variasinya maka parent dapat mengecek system call yang akan dieksekusi oleh anak proses. Setelah itu, parent harus mengirim signal agar anak proses yang berhenti karena trap signal dapat melanjutkan prosesnya. Baris 67 - 70 digunakan untuk mengirimkan signal yang diterima oleh anak proses jika signal yang diterima oleh anak proses bukan

(24)

untuk berhenti yang diterima merupakan signal selain trap signal, stop signal, cpu limit signal, dan output limit signal maka proses kompilasi dihentikan.

Baris 100 digunakan untuk menghentikan seluruh proses anak jika terdapat kesalahan terhadap proses kompilasi. Kode pada baris 100 digunakan untuk memastikan agar seluruh proses anak sudah berhenti sebelum program sandboxing selesai.

Berikut ini adalah pseudocode untuk melakukan pemeriksaan terhadap system call yang dijalankan oleh anak proses:

01 function checkScall( nP ) 02

03 register = get process register of process nP 04

05 SWITCH register

06 CASE write system call

07 current_out = retrieve output byte 08

09 outByte = outByte + current_out // accumulate 10

11 IF outByte > outLimit THEN 12 PRINT "CE"

13 KillAllProcess() 14 EXIT

15

16 CASE .... // Define other system call 17

18 END SWITCH 19

20 end function

Baris 6 - 14 digunakan untuk mengecek jumlah output yang dikeluarkan oleh anak proses. Jika jumlah output yang dikeluarkan oleh anak proses melebihi dari batas yang

(25)

ditetapkan, maka proses kompilasi dihentikan secara paksa. Setelah baris 15, dapat didefinisikan system call lainnya yang ingin dicek.

4.3.2 Menjalankan Program

Program dijalankan dengan menggunakan program yang berfungsi sebagai sandbox untuk membatasi sumber daya yang dapat digunakan sehingga ketika program menggunakan terlalu banyak sumber daya seperti waktu, dan memori dapat dihentikan secara paksa.

Berikut ini adalah pseudocode untuk menghentikan program yang berjalan sudah menggunakan terlalu banyak sumber daya:

1 function KillProcess 2 KILL PID

3 end function

Fungsi di atas akan mengirimkan kill signal untuk menghentikan dengan process id PID tersebut.

Berikut ini adalah pseudocode untuk mengecek penggunaan sumber daya yang dipakai oleh program:

01 function checkMemoryAndTL( o ) 02

03 WHILE TRUE 04

05 retrieve memory usage and

06 time usage for process id PID 07

08 IF memory usage > o["memory_limit"] THEN 09 PRINT "MLE"

10 KillProcess() 11 EXIT THREAD 12 END IF

13

14 IF time usage > o["timelimit"] THEN 15 PRINT "TLE"

(26)

27 28 SLEEP o["waittime"] 29 30 END WHILE 31 32 end function

Fungsi di atas dijalankan dalam sebuah thread untuk melakukan pengecekan setiap beberapa milidetik. Pengecekan dilakukan dengan menghitung memori dan waktu CPU yang digunakan oleh process id PID. Kemudian memori dan waktu yang digunakan dibandingkan dengan batas memori dan waktu yang diperbolehkan. Jika melebihi batas sumber daya yang boleh digunakan maka akan dijalankan fungsi untuk menghentikan program secara paksa. Tidak hanya itu, waktu wallclock (waktu dunia nyata) pun perlu untuk dibandingkan sehingga jika melebihi batas waktu wallclock yang ditentukan maka akan dijalankan juga fungsi untuk menghentikan program secara paksa.

Berikut ini adalah pseudocode untuk proses parent yang bertugas untuk mengawasi proses anak yang sedang berjalan:

01 function Monitor( o, cmd ) 02

03 start_time = get wall clock time

04 make thread and run function checkMemoryAndTL( o ) 05 06 count = 0 07 08 out = "" 09 10 WHILE TRUE

11 wait for the child process to report to parent 12

13 np = the child process that report 14

(27)

15 IF np < 0 THEN

16 IF error is interrupt THEN 17 continue 18 ELSE 19 out = "RTE" 20 break 21 END IF 22 END IF 23

24 IF child process np is finish THEN 25 OUT = "OK"

26 break

27 ELSE IF child process np is killed by signal THEN 28 IF signal is not trap signal THEN

29 out = "RTE" 30 END IF

31 ELSE IF child process np is stopped THEN 32 IF signal is trap signal THEN

33 checkScall( np )

34 let child process np continue its process

35 ELSE IF signal is not stop,cpu limit,output limit signal THEN

36 deliver the signal to child process np 37 ELSE IF signal is stop signal THEN

38 out = "RTE" 39 ELSE 40 out = "RTE" 41 END IF 42 ELSE 43 out = "RTE" 44 END IF

45 IF out is not "" THEN break 46 END WHILE 47 48 KillProcess() 49 PRINT out 50 EXIT 51 52 end function

Baris 3 - 4 digunakan parent untuk mengambil waktu wallclock awal ketika program baru berjalan, dan menjalankan fungsi " checkM emoryAndTL" pada sebuah thread.

Baris 15 - 22 digunakan untuk melakukan pengecekan terhadap nilai error dari anak proses yang melapor kepada parent. Karena nilai np yang didapat merupakan nilai negatif, maka dilakukan pengecekan nilai error proses tersebut. Jika nilai error proses tersebut bukan merupakan interrupt maka program mengalami crash.

(28)

anak proses secara paksa bukan trap signal, maka anak proses tersebut sudah dihentikan secara paksa oleh sistem operasi karena menggunakan sumber daya melebihi sumber daya yang disediakan oleh sistem operasi.

Baris 31 - 42 digunakan untuk melakukan pengecekan terhadap anak proses ketika anak proses mendapatkan signal untuk berhenti. Baris 32 - 34 digunakan untuk melakukan pengecekan terhadap anak proses ketika anak proses berhenti dikarenakan trap signal. Trap signal digunakan oleh sistem operasi untuk sementara menghentikan anak proses sehingga parent dapat melakukan pengecekan yang diperlukan sebelum anak proses mengeksekusi sebuah system call. Ketika anak proses berhenti karena trap signal, maka dilakukan pengecekan terhadap system call yang akan dieksekusi oleh anak proses. Setelah itu, parent harus mengirim signal agar anak proses yang berhenti karena trap signal dapat melanjutkan prosesnya. Baris 35 - 36 digunakan untuk mengirimkan signal yang diterima oleh anak proses jika signal yang diterima oleh anak proses bukan merupakan stop signal, cpu limit signal, dan output limit signal. Baris 37 - 40 digunakan untuk untuk menandai bahwa maka proses program harus dihentikan.

Baris 48 digunakan untuk menghentikan seluruh proses anak untuk memastikan agar seluruh proses anak sudah berhenti sebelum program sandboxing selesai.

(29)

Berikut ini adalah pseudocode untuk melakukan pemeriksaan terhadap system call yang dijalankan oleh anak proses:

01 function checkScall( nP ) 02

03 register = get process register of process nP 04

05 SWITCH register

06 CASE write system call

07 current_out = retrieve output byte 08

09 outByte = outByte + current_out // accumulate 10

11 IF outByte > outLimit THEN 12 PRINT "OLE"

13 KillProcess() 14 EXIT

15

16 CASE .... // Define other system call 17

18 END SWITCH 19

20 end function

Baris 6 - 14 digunakan untuk mengecek jumlah output yang dikeluarkan oleh anak proses. Jika jumlah output yang dikeluarkan oleh anak proses melebihi dari batas yang ditetapkan, maka program dihentikan secara paksa. Setelah baris 15, dapat didefinisikan system call lainnya yang ingin dicek.

4.3.3 Mengecek Output

Setelah source code berhasil dikompilasi menjadi program dan program berhasil dijalankan maka dilakukan pengecekan terhadap hasil output yang dihasilkan oleh program. Pengecekan output dilakukan dengan memanggil sebuah program evaluator untuk menentukan kebenaran dari solusi yang dikirim. Evaluator akan menghasilkan tiga buah response, yaitu Accepted, Wrong Answer, dan Presentation Error.

Accepted dihasilkan ketika output program secara eksak sama dengan output yang dimiliki oleh judge. Ketika pengecekan dilakukan dan output program tidak secara eksak

(30)

Berikut ini merupakan pseudocode untuk melakukan pengecekan output secara eksak: 01 AC = TRUE 02 WHILE TRUE 03 tAC = TRUE 04

05 IF outJudge is not EOF AND

06 outContestant is not EOF THEN 07

08 charJudge = get a character from outJudge

09 charContestant = get a character from outContestant 10

11 IF charJudge is not same as charContestant THEN 12 tAC = FALSE

13 END IF

14 ELSE IF outJudge is EOF AND

15 outContestant is EOF THEN 16 17 break 18 ELSE 19 tAC = FALSE 20 END IF 21

22 IF tAC = FALSE THEN 23 AC = FALSE 24 END IF 25 IF AC = FALSE THEN 26 break 27 END IF 28 END WHILE

Baris 1 melakukan asumsi bahwa output program adalah sama dengan output judge. Hal ini dilakukan agar ketika output judge kosong dan output program juga kosong maka evaluator tetap mengeluarkan response accepted. Kemudian baris 6 - 13 digunakan untuk membandingkan sebuah karakter dari output judge dengan sebuah

(31)

karakter dari output program. Jika terdapat perbedaan karakter maka variabel tAC akan dirubah menjadi bernilai false. Baris 14 - 17 berguna untuk keluar dari perulangan karena output judge dan output program sudah tidak dapat dibaca. Baris 19 berfungsi untuk merubah nilai variabel tAC menjadi bernilai false jika salah satu dari output judge dan output program sudah tidak dapat dibaca. Baris 22 - 27 digunakan untuk mengubah nilai variabel AC menjadi false jika variabel tAC bernilai false sehingga jika variabel AC bernilai false maka perulangan akan dihentikan.

Berikut ini merupakan pseudocode untuk melakukan pengecekan output tanpa karakter newlines: 01 WHILE TRUE 02 tAC = TRUE 03 04 JudgeExist = FALSE 05 ContestantExist = FALSE 06

07 WHILE outJudge is not EOF

08 charJudge = get a character from outJudge 09

10 IF charJudge is not newline character THEN 11 JudgeExist = TRUE

12 break 13 END IF 14 END WHILE 15

16 WHILE outContestant is not EOF

17 charContestant = get a character from outContestant 18

19 IF charContestant is not newline character THEN 20 ContestantExist = TRUE

21 break 22 END IF 23 END WHILE 24

25 IF JudgeExist = TRUE AND ContestantExist = TRUE THEN 26 IF charJudge is not same as charContestant THEN 27 tAC = FALSE

28 END IF

29 ELSE IF JudgeExist = FALSE AND ContestantExist = FALSE THEN 30 break

31 ELSE

32 tAC = FALSE 33 END IF

(32)

eksak. Namun terdapat perbedaan pada baris 7 - 23 yang merupakan baris untuk mengambil karakter bukan newlines selanjutnya.

Berikut merupakan pseudocode keseluruhan program evaluator:

001 outJudge = OPEN JUDGE FILE

002 outContestant = OPEN CONTESTANT FILE 003

004 isPE = FALSE

005 IF problem can PE THEN isPE = TRUE 006 007 AC = TRUE 008 009 WHILE TRUE 010 011 tAC = TRUE 012

013 IF outJudge is not EOF AND

014 outContestant is not EOF THEN 015

016 charJudge = get a character from outJudge

017 charContestant = get a character from outContestant 018

019 IF charJudge is not same as charContestant THEN 020 tAC = FALSE

021 END IF

022 ELSE IF outJudge is EOF AND

023 outContestant is EOF THEN 024 025 break 026 ELSE 027 tAC = FALSE 028 END IF 029

030 IF tAC = FALSE THEN 031 AC = FALSE 032 END IF 033 IF AC = FALSE THEN 034 break 035 END IF 036 END WHILE 037

(33)

038 IF AC THEN 039 PRINT "AC" 040 ELSE

041 IF isPE = FALSE THEN 042 PRINT "WA" 043 ELSE 044 045 REWIND outJudge 046 REWIND outContestant 047 048 AC = TRUE 049 050 WHILE TRUE 051 tAC = TRUE 052 053 JudgeExist = FALSE 054 ContestantExist = FALSE 055

056 WHILE outJudge is not EOF

057 charJudge = get a character from outJudge 058

059 IF charJudge is not newline character THEN 060 JudgeExist = TRUE

061 break 062 END IF 063 END WHILE 064

065 WHILE outContestant is not EOF

066 charContestant = get a character from outContestant 067

068 IF charContestant is not newline character THEN 069 ContestantExist = TRUE

070 break 071 END IF 072 END WHILE 073

074 IF JudgeExist = TRUE AND ContestantExist = TRUE THEN 075 IF charJudge is not same as charContestant THEN 076 tAC = FALSE

077 END IF

078 ELSE IF JudgeExist=FALSE AND ContestantExist=FALSE THEN 079 break

080 ELSE

081 tAC = FALSE 082 END IF

083

084 IF tAC = FALSE THEN 085 AC = FALSE 086 END IF 087 088 IF AC = FALSE THEN 089 break 090 END IF 091 END WHILE 092 093 IF AC = TRUE THEN 094 PRINT "PE"

(34)

banyak memori. Hal ini dikarenakan program evaluator mengambil satu per satu karakter dari tiap output (output judge dan output program) dan membandingkannya. 4.4 Evaluasi

4.4.1 Evaluasi terhadap 8 Aturan Emas

Berikut ini merupakan evaluasi 8 aturan emas terhadap aplikasi web: 1. Berusaha untuk konsisten

Pada berbagai halaman aplikasi web online judge terlihat bahwa tampilan berbagai halaman tersebut selalu konsisten. Hal ini dapat dilihat melalui 2 buah gambar berikut yang merupakan sampel dari halaman-halaman yang ada pada aplikasi web online judge:

(35)

G ambar 70. Halaman home

G ambar 71. Halaman Problem List

M elalui Gambar 70 dan Gambar 71 dapat dilihat konsistensi dari layout website yang dipakai oleh aplikasi web online judge.

2. M emenuhi kegunaan universal

Halaman-halaman yang terdapat pada aplikasi web online judge dirancang dan dibuat untuk mendukung plasticity sehingga konten dari web online judge dapat

(36)

G ambar 72. Halaman home (Internet Explorer)

(37)

G ambar 74. Halaman home (Firefox)

G ambar 75. Halaman home (iPod Touch / iPhone)

Gambar 72, Gambar 73, Gambar 74, dan Gambar 75 memperlihatkan bahwa konten web online judge dapat dibuka pada berbagai jenis display dan browser. Web online judge pun memiliki halaman quick submit yang mempermudah user yang berpengalaman ketika ingin mengirim solusi.

(38)

G ambar 76. Halaman quick submit

3. M emberikan feedback yang informatif

Pada halaman login di aplikasi web online judge, feedback akan diberikan oleh sistem apabila user salah memasukkan informasi login.

G ambar 77. Halaman login

(39)

Pada halaman add problem di aplikasi web online judge terdapat dialog yang memberikan pesan sukses jika user berhasil menambah soal.

G ambar 78. Halaman add problem

5. Pencegahan kesalahan dan penanganan kesalahan yang sederhana

Pada halaman list problem admin di aplikasi web online judge terdapat pencegahan kesalahan menggunakan prompt ketika admin ingin menghapus sebuah soal. Penanganan kesalahan yang sederhana pun dapat dilihat pada halaman register ketika user memasukkan data yang salah, maka hanya field yang berisi data yang salah yang perlu untuk diisi ulang.

(40)

G ambar 80. Halaman register

Gambar 80 memperlihatkan ketika user gagal melakukan registrasi di halaman register, maka field-field dengan data yang sudah benar tidak perlu untuk diisi lagi.

6. M emungkinkan pembalikan aksi yang mudah

Pada halaman add problem admin di aplikasi web online judge terdapat field problem description yang mendukung text editing sehingga admin dapat menulis deskripsi soal seperti menulis diberbagai software text editing lainnya, dan memiliki fitur "undo" untuk melakukan pembalikan aksi ketika menulis deskripsi soal.

(41)

G ambar 81. Halaman add problem admin

7. M endukung pusat kendali internal

Pada halaman run list di aplikasi web online judge memungkinkan user untuk memilah informasi run list yang ingin dilihat sehingga user dapat melakukan filtering terhadap data yang ditampilkan pada halaman tersebut.

(42)

Tampilan aplikasi web online judge cukup sederhana dan tidak memiliki terlalu banyak menu / link. Link quick submit pun dihadirkan agar user tidak perlu mencari letak soal ketika ingin mengirim solusi.

G ambar 83. Halaman home

4.4.2 Uji Coba

Uji coba dilakukan dengan mengirim berbagai bentuk solusi kepada sistem online judge untuk melihat hasil yang dikeluarkan oleh online judge dan untuk mengetahui seberapa tahan sistem online judge terhadap serangan berbahaya dari luar.

Soal algoritma yang digunakan dalam uji coba ini adalah soal algoritma dengan judul soal "R2" dengan sepuluh test data yang mempunyai deskripsi sebagai berikut:

(43)

Problem R2

Time Limit : 1000 ms Memory Limit : 32 MB

The number S is called the mean of two numbers R1 and R2 if S is equal to (R1+R2)/2. Mirko’s birthday present for Slavko was two integers R1 and R2. Slavko promptly calculated their mean which also happened to be an integer but then lost R2! Help Slavko restore R2.

Input

The first and only line of input contains two integers R1 and S, both between -1000 and 1000.

Output

Output R2 on a single line.

Sample Input 11 15 4 3 Sample Output 19 2

Source : Croatian Open Competition In Informatics 2006

Uji coba pertama adalah dengan source code berikut:

1 int main() 2 {

3 printf("Hello World\n");

4 return 0;

(44)

1 #include "/dev/urandom" 2 #include <stdio.h> 3 4 int main() 5 { 6 printf("Hello World"); 7 return 0; 8 } 9

Source code di atas menambahkan baris #include "/dev/urandom" sehingga compiler akan melakukan lookahead dan membaca semua pesan sampah yang dihasilkan secara random oleh sistem operasi. Sistem online judge mengeluarkan hasil Compile Time Limit Exceeded.

Uji coba ketiga dengan source code berikut:

1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 0; 6 printf("%d\n", 5/a); 7 return 0; 8 } 9

Terdapat pembagian dengan nol pada source code di atas. Sistem online judge mengeluarkan hasil Run Time Error.

(45)

Uji coba keempat dengan source code berikut: 1 #include <stdio.h> 2 3 int main() 4 { 5 while (true); 6 return 0; 7 } 8

Terdapat baris while (true); yang mengakibatkan infinite loop dimana program tidak berhenti. Sistem online judge mengeluarkan hasil Time Limit Exceeded.

Uji coba kelima dengan source code berikut:

01 #include <stdio.h> 02 03 int x[10000005]; 04 05 int main() 06 {

07 for (int i = 0; i < 10000000; i++)

08 x[i] = (i*i + i + i)/2;

09 for (int i = 0; i < 20000000; i++)

10 int y = x[i/2];

11 int R1, S;

12 scanf("%d%d", &R1, &S);

13 printf("%d\n", 2*S - R1);

14 return 0;

15 } 16

Source code di atas mendeklarasikan dan menggunakan array dengan kapasitas 10000005 yang menggunakan memori sebanyak 4*10000005 byte, kurang lebih 40 M B. Sistem online judge mengeluarkan hasil Memory Limit Exceeded.

Uji coba keenam dengan source code berikut:

01 #include <stdio.h> 02

(46)

kali yang melebihi batas ukuran output file. Sistem online judge mengeluarkan hasil Output Limit Exceeded.

Uji coba ketujuh dengan source code berikut:

01 #include <stdio.h> 02

03 int main() 04 {

05 int R1, S;

06 scanf("%d%d", &R1, &S);

07 printf("%d\n", 2*S - R1 + 1);

08 return 0;

09 } 10

Source code di atas menggunakan algoritma yang salah. Sistem online judge mengeluarkan hasil Wrong Answer.

Uji coba kedelapan dengan source code berikut:

1 #include <stdio.h> 2 3 int main() 4 { 5 printf("19\n"); 6 printf("2\n"); 7 return 0; 8 } 9

(47)

Source code di atas berusaha mengeluarkan output sesuai dengan sample output tetapi karena test data yang digunakan bisa berbeda dengan sample maka sistem online judge mengeluarkan hasil Wrong Answer.

Uji coba kesembilan dengan source code berikut:

01 #include <stdio.h> 02

03 int main() 04 {

05 int R1, S;

06 scanf("%d%d", &R1, &S);

07 printf("%d \n", 2*S - R1);

08 return 0;

09 } 10

Source code di atas sudah menggunakan algoritma yang benar untuk menyelesaikan soal algoritma yang diuji coba tetapi hasil output yang dikeluarkan ditambahkan karakter spasi. Sistem online judge mengeluarkan hasil Presentation Error.

Uji coba kesepuluh dengan source code berikut:

01 #include <stdio.h> 02

03 int main() 04 {

05 int R1, S;

06 scanf("%d%d", &R1, &S);

07 printf("%d\n", 2*S - R1);

08 return 0;

09 } 10

Source code di atas sudah menggunakan algoritma yang benar dan melakukan output dengan benar. Sistem online judge mengeluarkan hasil Accepted.

(48)

9

Source code di atas melakukan pemanggilan anak proses secara terus menerus yang dapat menyebabkan sistem operasi menjadi crash dikenal dengan nama fork bomb. Sistem online judge dapat mengatasi hal ini dan mengeluarkan hasil Time Limit Exceeded.

Uji coba kedua belas dengan source code berikut:

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 system("rm -r /"); 7 return 0; 8 } 9

Source code di atas melakukan system call untuk menghapus semua file pada sistem. Sistem online judge dapat mengatasi hal ini dan mengeluarkan hasil Wrong Answer.

Uji coba ketiga belas dengan source code berikut:

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 system("ls -l"); 7 return 0;

(49)

8 } 9

Source code di atas melakukan system call untuk mengeluarkan daftar file yang terdapat pada sistem. Sistem online judge dapat mencegah hal ini dan mengeluarkan hasil Wrong Answer.

Uji coba keempat belas dengan source code berikut:

01 #include<cstdio> 02

03 int main() 04 {

05 FILE *f = fopen( "/home/onlinejudge/testcase/r2.out", "r");

06 char st[1000]; 07 while( fgets( st, 1000, f ) ) { 08 printf("%s", st ); 09 } 10 fclose(f); 11 return 0; 12 } 13

Source code di atas berusaha untuk membuka file output data yang tersedia kemudian mengeluarkan output sesuai dengan isi file output data tersebut. Sistem online judge dapat mengatasi hal ini dengan melarang pengaksesan file output data dan mengeluarkan hasil Run Time Error.

Tabel 16. Hasil Uji Coba

Nomor uji coba Aspek yang diuji Hasil penilaian sistem

online judge

1 Pengecekan compile error Compile Error

(50)

berlebihan

6 M engeluarkan output yang berlebihan

Output Limit Exceeded

7 Algoritma yang salah Wrong Answer

8 M engeluarkan sample

output

Wrong Answer

9 M engeluarkan spasi

berlebih pada solusi yang benar

Presentation Error

10 Algoritma yang benar Accepted

11 Fork bomb Time Limit Exceeded

12 M enghapus file pada sistem Wrong Answer

13 M engeluarkan daftar file pada sistem

(51)

14 M embuka file test output yang tersedia pada sistem online judge

Run Time Error

4.4.3 Stress Testing

Stress testing dilakukan dengan mengirim banyak solusi dan mengawas i penggunaan memori dan CPU yang digunakan oleh Submission manager yang menampung dan melakukan scheduling terhadap submission.

Tabel 17. Stress Testing

Jumlah Submission Memori (%) CPU (%)

10 0.6 0.0

100 0.6 0.3

1000 0.6 0.8

M elihat hasil yang didapat pada Tabel 17 dapat disimpulkan bahwa Submission manager dapat menangani jumlah submission yang banyak dengan baik dan mampu melakukan proses scheduling dengan tidak membebani memori dan CPU.

4.4.4 User Review

Setelah meluncurkan beta testing dan maka didapatkan review dari user seperti yang terlihat pada tabel:

(52)

friendly.

Risan Gradernya sudah bagus dan cukup robust.

Tampilan website sederhana dan sudah cukup baik. Performa website sudah baik, page load juga sudah cepat.

Felix Perdana Sistem grader untuk sementara ini

walaupun belum terlalu cepat namun penilaiannya sudah tepat sesuai dengan jenis source code yang disubmit

Tampilan website sederhana, namun user friendly sehingga sangat mudah digunakan, performa dari website juga sudah cukup cepat.

Harapan selanjutnya adalah dibuatnya fitur-fitur lain yang menarik yang berbeda dengan OJ-OJ yang sudah ada sebelumnya

(53)

Samuel Edwin OJ overall-nya sudah cukup baik.

Tampilan menurut saya sudah cukup untuk website sejenis OJ, tidak perlu terlalu bagus desainnya.

Fitur run list nya bagus, bisa disearch fitur quick submit-nya membantu supaya tidak perlu buka tab yang banyak di browser.

Problem list-nya masih sedikit (karena OJ nya masih baru), sehingga harus ditambah lagi.

Fitur search user-nya kalau bisa search-nya tidak exact keyword.

Winardi Kurniawan Dari segi tampilan sudah cukup bagus. Dari segi pengumpulan solusi juga sudah memudahkan user dengan cepat dapat melakukan submit.

Fiona Liausvia GUI: Sudah rapi, tampilan cukup simple, komposisi tidak membingungkan.

(54)

fitur-fitur yang dapat dikembangkan untuk ke depannya.

Saran:

- Isi website dapat dibuat lebih informatif dengan menampilkan statistik yang dapat memotivasi para coder untuk menjadi lebih kompetitif.

- Soal - soal dapat dikelompokkan dalam kategori - kategori algoritma tertentu yang memudahkan coder untuk berlatih sesuai dengan kemampuan yang ingin ditingkatkan.

Jeffrey Wijaya Secara performa OK.

Tampilan simple tapi sebaiknya semua menu ditempatkan di satu tempat.

(55)

sebelah kanan, sehingga akan lebih baik kalo ditempatkan di atas semua.

Overall JollyBee OJ sudah baik.

Dari review beberapa user yang mencoba sistem online judge didapatkan bahwa sistem online judge yang berjalan sudah robust, tampilan web online judge sederhana dan user friendly, penilaian yang dilakukan sistem online judge sudah tepat, dan performa website juga sudah cukup cepat.

Gambar

Tabel 15. Spesifikasi Hardware dan Software
Gambar 51 adalah tampilan halaman home. Pada halaman ini, terdapat  daftar pengumuman dan daftar kontes-kontes mendatang
Gambar 52 adalah tampilan halaman volume list. Pada halaman ini, akan  ditampilkan semua volume yang dapat dilihat oleh user
Gambar 53 adalah tampilan halaman user profile. Pada halaman ini,  user dapat melihat profile untuk user tertentu
+7

Referensi

Dokumen terkait

Berdasarkan hail penelitian yang telah dilakukan tentang tanaman siwalan di Dususn Pangabasen dan Bettangan Desa Gapura Timur yaitu masyarakat masih banyak yang

Jadual 38 Ujian Post Hoc HSD Tahap Kompetensi Pegawai Polis mengikut.. Kedudukan

Maka dari itu dibutuhkan jalinan kerjasama antara kami selaku pihak www.PernikMuslim.com (pihak pertama), dengan Anda selaku produsen atau pihak yang ingin memasarkan

Selain itu, Perubahan yang lebih mendasar dilakukan melalui amandemen atas Undang-Undang Dasar Tahun 1945 yang mencakup perubahan tentang konsepsi negara hukum sehingga menjadi

Data kuantitatif merupakan data yang digunakan untuk mengetahui ada tidaknya peningkatan kemampuan berpikir kreatif dan logis matematis siswa yang mendapat

Konsentrasi 226 Ra dan 232 Th dalam sedimen di Bangka Barat dan Selatan Sedimen laut Pulau Bangka berasal dari berbagai macam proses sedimentasi baik berasal dari limbah

Menurut Ismail Solihin (2009 : 193), mengemukakah bahwa pada dasarnya fungsi pengawasan merupakan suatu upaya untuk memastikan aktivitas yang dilakukan oleh seluruh

Metode ini adalah sebuah kerangka untuk mengambil keputusan dengan efektif atas persoalan yang kompleks dengan menyederhanakan dan mempercepat proses