Anda di halaman 1dari 333

APLIKASI TES ONLINE DENGAN ALGORITMA

FISHER-YATTES SHUFFLE

SKRIPSI

Disusun Sebagai Salah Satu Syarat untuk Memperoleh Gelar Sarjana Komputer
Dari Fakultas Ilmu Komputer Universitas Singaperbangsa Karawang

Oleh :

Dewi Admisari 1341177004227

PROGRAM STUDI TEKNIK INFORMATIKA


FAKULTAS ILMU KOMPUTER
UNIVERISTAS SINGAPERBANGSA KARAWANG
KARAWANG
2017

LEMBAR PENGESAHAN
APLIKASI TES ONLINE DENGAN ALGORITMA
FISHER-YATTES SHUFFLE

SKRIPSI
Disusun Sebagai Salah Satu Syarat untuk Memperoleh Gelar Sarjana Komputer
dari Fakultas Ilmu Komputer Universitas Singaperbangsa Karawang

oleh:
DEWI ADMISARI 1341177004227

disetujui
oleh:

Pembimbing I Pembimbing II

Jajam Haerul Jaman, SE., M.Kom. Aji Primajaya, M.Kom.


NIDN. 0010117808 NIDN. 0026048706

Karawang, 20 November 2017


Diketahui dan disahkan Oleh:
Dekan Fakultas Ilmu Komputer

Ade Andri Heriadi, S.Si., M.Kom.


NIDN. 0402047903

LEMBAR PENGESAHAN PENGUJI


APLIKASI TES ONLINE DENGAN ALGORITMA
FISHER-YATTES SHUFFLE

SKRIPSI
Disusun Sebagai Salah Satu Syarat untuk Memperoleh Gelar Sarjana Komputer
dari Fakultas Ilmu Komputer Universitas Singaperbangsa Karawang

oleh:
DEWI ADMISARI 1341177004227

disetujui
oleh:

Penguji I Penguji II

Riza Ibnu Adam, S.Si., M.Si. Hannie, S.Kom., M.Msi.


NIDN. 0006119002 NIDN. 0430088205

Karawang, 20 November 2017


Diketahui dan disahkan
Oleh:
Dekan Fakultas Ilmu Komputer

Ade Andri Heriadi, S.Si., M.Kom.


NIDN. 0402047903
ABSTRAK

APLIKASI TES ONLINE DENGAN ALGORITMA FISHER-


YATTES SHUFFLE

Dewi Admisari*
Teknik Informatika
Fakultas Ilmu Komputer Universitas Singaperbangsa Karawang, 2017
Pembimbing 1: Jajam Haerul Jaman, SE., M.Kom.**
Pembimbing 2: Aji Primajaya, M.Kom.**

Ujian semester merupakan kumpulan soal-soal pelajaran untuk evaluasi


siswa selama menempuh tengah semester ataupun akhir semester. Soal yang
diberikan berupa sebuah pertanyaan-pertanyaan dari mata pelajaran yang diberikan
oleh guru, pertanyaan tersebut dapat berupa pilihan ganda (PG), mencocokan,
ataupun essay. Namun guru memberikan soal tidak bervariasi setiap siswa
mendapatkan soal yang sama tidak ada pengacakan soal, karena keterbatasan waktu
yang dimiliki guru untuk melakukan pengacakan soal. Ujian semester dilakukan
oleh semua siswa pada sekolah tersebut, soal yang diberikan saat ujian guru
membuat soal yang sama, sehingga memungkinkan para siswa untuk melakukan
kecurangan melihat jawaban teman sendiri. Metodologi yang digunakan yaitu
rekayasa perangkat lunak dan menggunakan metode Software Development Life
Cycle (SDLC) dengan model prototype karena sesuai dengan penelitian yang akan
dilakukan dengan tahap penggunaan sistem yang relatif singkat. Proses pengacakan
soal dilakukan dengan menggunakan algoritma fisher-yattes shuffle. Berdasarkan
hasil kuesioner, aplikasi dapat memberikan memberikan informasi hasil ujian siswa,
melakukan pengacakan soal, dengan hasil dari rata-rata keseluruhan skor adalah
85.95%. Sehingga aplikasi ini sangat disetujui dapat menyelesaikan dalam
pelaksanaan ujian sekolah.

Kata Kunci : Algoritma Fisher-Yattes Shuffle, Prototype, Ujian

Alamat : * Dusun Sukagalih RT.11/04 Desa Telukjambe


Kec. Telukjambe Timur Kab. Karawang 41361,
dewi.admisari@student.unsika.ac.id
** Fakultas Ilmu Komputer UNSIKA

i
ABSTRACT

APPLICATION ONLINE TEST WITH ALGORITHM


FIHSER-YATTES SHUFFLE

Dewi Admisari*
Informatics Engineering Study Program
Computer Science Faculty University Singaperbangsa Karawang, 2017
Preceptor 1: Jajam Haerul Jaman, SE., M.Kom. **
Preceptor 2: Aji Primajaya, M.Kom. **

Exam is a set of questions to evaluate students' learning during their mid-term or


end of the term. Problem is given in the form of a questions from subjects given by
the teacher, these questions can be multiple-choice (PG), matching, or essay. But
the matter does not vary teachers give each student gets about the same no matter
randomization, because of time teachers have to carry out scrambling about. Exams
carried out by all students in the school, the exam questions given time teachers
make about the same, so as to enable the students to commit fraud see answer his
own friends. The methodology used is a software engineering and methods Software
Development Life Cycle (SDLC) with amodel prototype because according to
research to be conducted at the stage of use of the system is relatively short. The
randomization process is done by using an algorithm fisher-yattes shuffle. Based
on the results of the questionnaire, the application can provide information student
test results, perform randomization matter, with the result of the overall average
score is 85.95%. This application is approved so that you can complete in the
implementation of school exams.

Keyword : Algorithm Fisher-Yattes Shuffle, Exam, Prototype

Address : * Dusun Sukagalih RT. 11/04 Village


Telukjambe District East Telukjame Karawang 41361
dewi.admisari@student.unsika.ac.id ** Faculty of
Computer Science UNSIKA

KATA PENGANTAR

i
i
Assalaamu’alaikum wr. wb,

Puji syukur kehadirat Allah SWT yang telah memberikan rahmat dan hidayah-Nya
sehingga dapat menyelesaikan penelitian ini, sesuai dengan waktu yang telah
direncanakan, shalawat serta salam semoga dapat tercurahkan kepada Nabi Besar
Muhammad SAW. serta keluarga dan para sahabatnya yang selalu membantu
perjuangan beliau untuk menegakkan ajaran Allah SWT.
Penyusunan penelitian ini bertujuan untuk mengimplementasikan ilmu yang telah
di dapat dengan melakukan perancangan “APLIKASI TES ONLINE DENGAN
ALGORITMA FISHER-YATTES SHUFFLE”. Pembuatan penelitian ini
merupakan salah satu syarat untuk menyelesaikan tugas yang diberikan.
Proses penulisan penelitian ini, banyak pihak yang memberikan bantuan
baik itu batuan dalam segi moril maupun materil dan menyampaikan ucapan
terimakasih kepada:
1. Bapak Prof. Dr. H. Moh. Wahyudin Zarkasyi, S.E., MS., Ak., CPA., Mpd
selaku Rektor Universitas Singaperbangsa Karawang.
2. Bapak Ade Andri Hendriadi, S.Si., M.Kom selaku Dekan Fakultas Ilmu
Komputer yang senantiasa memberikan motivasu.
3. Bapak Aries Suharso, S.Si., M.Kom selaku Wakil Dekan Fakultas Ilmu
Komputer yang senantiasa mendampingi mahasiswa dalam proses
pembuatan skripsi.
4. Ibu Nina Sulityowati, ST., M.Kom selaku Ketua Program Studi Teknik
Informatika yang selalu mengarahkan, mendampingi dan memotivasi
mahasiswa dalam proses pembuatan skripsi ini.

5. Bapak Jajam Haerul Jaman, SE., M.Kom selaku Dosen Pembimbing yang
selalu penuh kesabaran, perhatian, dan mengarahkan serta memberi masukan
kepada penulis dalam penyusunan skripsi ini.

iii
6. Bapak Aji Primajaya, M.Kom selaku Dosen Pembimbing yang selalu penuh
kesabaran, perhatian, dan mengarahkan serta memberi masukan kepada
penulis dalam penyusunan skripsi ini.
7. Seluruh Dosen dan staf Fakultas Ilmu Komputer Universitas Singaperbangsa
Karawang.
8. Yang teristimewa kedua orangtuaku, Bapak Asman dan Ibu Mursilah serta
adik saya Rahmawati Ramadhan yang senantiasa memberikan kasih sayang,
dukungan baik moril maupun materil, nasehat dan doa sehingga perkuliahan
dan penyusunan karya tulis ilmiah ini dapat terlaksana dengan baik.
9. Rekan-rekan seperjuangan Univeristas Singaperbangsa Karawang
khususnya rekan-rekan mahasiswa kelas A Fakultas Ilmu Komputer yang
telah memberikan motivasi kepada penulis sehingga terwujudnya skripsi ini
10. Sahabat Asisten Laboratorium Fasilkom yang senantiasa memberikan doa
serta dukungan.

Pada akhirnya semua itu kembali kepada Allah SWT dan kesempurnaan
hanyalah milik-Nya, semoga penelitian ini dapat bermanfaat bagi semua pihak,
khususya bagi pembaca penelitian sebagai bahan acuan referensi penelitian
selanjutnya, semoga Allah SWT menilai semua kerja keras dan usaha dalam
pembuatan skripsi ini sebagai ibadah yang diridhoi oleh Allah SWT.

Wassalaamu’alaikum wr. wb.

Karawang, 02 November 2017

Penulis
DAFTAR ISI

i
v
ABSTRAK .............................................................................................................. i
ABSTRACT ........................................................................................................... ii
KATA PENGANTAR .......................................................................................... iii
DAFTAR ISI .......................................................................................................... v
DAFTAR GAMBAR .......................................................................................... viii
DAFTAR TABEL................................................................................................ xii
BAB 1 PENDAHULUAN ..................................................................................... 1

1.1. Latar Belakang.......................................................................................... 1

1.2. Rumusan Masalah .................................................................................... 3

1.3. Tujuan Penelitian ...................................................................................... 3

1.4. Manfaat Penelitian .................................................................................... 4

1.5. Batasan Masalah ....................................................................................... 4

1.6. Metodologi Penelitian .............................................................................. 5

1.6.1 Teknik Pengumpulan data ................................................................. 5

1.6.2 Metode Pengembangan Perangkat Lunak ......................................... 5

1.7. Sistematika Penulisan ............................................................................... 7

BAB 2 LANDASAN TEORI ................................................................................ 8

2.1. Aplikasi..................................................................................................... 8

2.2. Pelajaran ................................................................................................... 8

2.3. Tes .......................................................................................................... 10

2.4.1 Fungsi Tes ....................................................................................... 11

2.4.2 Klasifikasi Tes ................................................................................. 12

2.4.3 Ciri-Ciri Tes yang Baik ................................................................... 17

2.4. Online ..................................................................................................... 18


2.5. Algoritma ................................................................................................ 18

2.6.1. Algoritma Fisher-Yates Shuffle ...................................................... 19

2.6. Internet .................................................................................................... 21

2.7.1 Hypertext Transfer Protocol (HTTP) .............................................. 22

v
2.7.2 World Wide Web (WWW) ............................................................. 22

2.7.3 Pemrograman Website .................................................................... 22

2.7. Rekayasa Perangkat Lunak..................................................................... 25

2.8. Software Development Life Cycle (SDLC) ........................................... 25

2.9. Model Software Development Life Cycle (SDLC) ................................ 26

2.10.1 Model Prototipe ............................................................................... 26

2.10.2 Model Rapid Application Development (RAD) ............................. 28

2.10.3 Model Spiral .................................................................................... 29

2.10.4 Perbandingan Model ....................................................................... 30

2.10. Unified Modeling Language (UML)................................................... 31

2.11.1 Diagram UML ................................................................................. 31

2.11. Metode Pengumpulan Data ................................................................. 37

2.12. Basis Data ........................................................................................... 41

2.13.1 DBMS (Database Management System) ........................................ 41

2.13.2 SQL ................................................................................................. 42

2.13.3 MySQL ............................................................................................ 42

2.13. Pengujian Perangkar Lunak ................................................................ 43

2.14.1 Black Box Testing ........................................................................... 44

2.14.2 White Box Testing .......................................................................... 44

2.14. Penelitian Sebelumnya ........................................................................ 46

2.15. Penelitian Sekarang............................................................................. 52

BAB 3 OBJEK DAN METODOLOGI PENELITIAN .................................... 53


3.1 Objek Penelitian ..................................................................................... 53

3.1.1 Visi dan Misi SMA Sunan Gunung Jati Karawang ........................ 53

3.1.2 Tempat dan Waktu Penelitian ......................................................... 53

3.2 Metode Penelitian ................................................................................... 53

v
i
3.2.1 Metode Pengumpulan Data ............................................................. 53

3.3 Metode Penelitian ................................................................................... 55

3.4 Rancangan Penelitian ............................................................................. 55

3.4.1 Identifikasi Kebutuhan Pemakai ..................................................... 55

3.4.2 Membuat Prototipe .......................................................................... 56

3.4.3 Pengkodean Prototipe...................................................................... 58

3.4.4 Pengujian Prototipe ......................................................................... 58

BAB 4 HASIL DAN PEMBAHASAN ............................................................... 60

4.1 Hasil Penelitian ....................................................................................... 60

4.1.1 Identifikasi Kebutuhan Pemakai ..................................................... 60

4.1.2 Membuat Prototype ......................................................................... 63

4.1.3 Evaluasi Prototype .......................................................................... 99

4.1.4 Mengembangkan Veris Produk ..................................................... 100

4.1.5 Pengujian Sistem ........................................................................... 112

4.2 Pembahasan .......................................................................................... 135

BAB 5 KESIMPULAN DAN SARAN ............................................................. 138

5.1 Kesimpulan ........................................................................................... 138

5.2 Saran ..................................................................................................... 138

DAFTAR PUSTAKA ........................................................................................ 139

DAFTAR GAMBAR Gambar 2. 1 Pelajaran . Error! Bookmark not defined.


Gambar 2. 2 Flowchart Algoritma Fisher-Yates ShuffleI ...................................... 20
Gambar 2. 3 Ilustrasi Model Prototype .................................................................. 25
Gambar 2. 4 Model Rapid Application Development (RAD) ............................... 27
Gambar 2. 5 Model Spiral ...................................................................................... 29
Gambar 2. 6 Diagram-Diagram UML .................................................................... 30

vii
Gambar 2. 7 Notasi Diagram Aliran ...................................................................... 43
Gambar 2. 8 Logika Gabungan .............................................................................. 43
Gambar 3. 1 Diagram Rancangan Penelitian ......................................................... 53
Gambar 4. 1 Swimlane Sistem Berjalan ................................................................ 58
Gambar 4. 2 Use Case Diagram Aplikasi Ujian Online ........................................ 61
Gambar 4. 3 Activity Diagram Login .................................................................... 63
Gambar 4. 4 Activity Diagram Mengelola Bank Soal ........................................... 64
Gambar 4. 5 Activity Diagram Mengelola Data Hasil Ujian ................................ 65
Gambar 4. 6 Activity Diagram Mengelola Informasi Ujian .................................. 66
Gambar 4. 7 Activity Diagram Mengaktifkan Ujian ............................................. 67
Gambar 4. 8 Activity Diagram Mengelola Data Siswa ......................................... 67
Gambar 4. 9 Activity Diagram Mengelola Data User ........................................... 68
Gambar 4. 10 Activity Diagram Mengelola Data Kelas ........................................ 69
Gambar 4. 11 Activity Diagram Mengelola Kelas Ujian ...................................... 70
Gambar 4. 12 Activity Diagram Mengerjakan Ujian ............................................ 71
Gambar 4. 13 Sequence Diagram Login ................................................................ 72
Gambar 4. 14 Sequence Diagram Mengelola Data Soal........................................ 73
Gambar 4. 15 Sequence Diagram Mengelola Hasil Ujian ..................................... 74
Gambar 4. 16 Sequence Diagram Mengelola Informasi Ujian .............................. 75
Gambar 4. 17 Sequence Diagram Mengelola Aktifkan Ujian ............................... 76
Gambar 4. 18 Sequence Diagram Mengelola Data Siswa ..................................... 77
Gambar 4. 19 Sequence Diagram Mengelola Data User ....................................... 78
Gambar 4. 20 Sequence Diagram Mengelola Data Kelas...................................... 79
Gambar 4. 21 Sequence Diagram Mengelola Kelas Ujian .................................... 80
Gambar 4. 22 Sequence Diagram Mengerjakan Ujian .......................................... 80
Gambar 4. 23 Class Diagram ................................................................................. 82
Gambar 4. 24 Struktur Basis Data ......................................................................... 84
Gambar 4. 25 Rancangan Interface Login ............................................................. 86
Gambar 4. 26 Rancangan Interface Beranda Guru ................................................ 86
Gambar 4. 27 Rancangan Interface Soal................................................................ 87
Gambar 4. 28 Rancangan Interface Kelola Data Soal ........................................... 87
Gambar 4. 29 Rancangan Interface Tambah Soal Ujian........................................ 88

v
iii
Gambar 4. 30 Rancangan Interface Hasil Ujian ..................................................... 88
Gambar 4. 31 Rancangan Interface Halaman Utama Admin ................................. 89
Gambar 4. 32 Rancangan Interface Admin Kelola Ujian ...................................... 89
Gambar 4. 33 Rancangan Interface Admin Tambah Ujian .................................... 90
Gambar 4. 34 Rancangan Interface Aktifkan Ujian ............................................... 90
Gambar 4. 35 Rancangan Interface Kelola Data Siswa ......................................... 91
Gambar 4. 36 Rancangan Interface Tambah Data Siswa ....................................... 91
Gambar 4. 37 Rancangan Interface Kelola Data User ........................................... 92
Gambar 4. 38 Rancangan Interface Tambah Data User ......................................... 92
Gambar 4. 39 Rancangan Interface Kelola Data Kelas .......................................... 93
Gambar 4. 40 Rancangan Interface Tambah Data Kelas ....................................... 93
Gambar 4. 41 Rancangan Interface Kelola Data Kelas Perujian ........................... 94
Gambar 4. 42 Rancangan Interface Data Siswa dan Ujian .................................... 94
Gambar 4. 43 Rancangan Interface Daftar Ujian ................................................... 95
Gambar 4. 44 Rancangan Interface Mengerjakan Soal .......................................... 95
Gambar 4. 45 Rancangan Interface Petunjuk Mengerjakan (evaluasi 1) ............... 96
Gambar 4. 46 Form Login Admin dan Guru ........................................................ 101
Gambar 4. 47 Halaman Utama Guru .................................................................... 101
Gambar 4. 48 Halaman Menu Kelola Ujian ......................................................... 102
Gambar 4. 49 Halaman Bank Soal ....................................................................... 102
Gambar 4. 50 Form Input Soal ............................................................................. 103
Gambar 4. 51 Halaman Hasil Ujian ..................................................................... 103
Gambar 4. 52 Halaman Utama Admin ................................................................. 103
Gambar 4. 53 Halaman Data Ujian ...................................................................... 104
Gambar 4. 54 Halaman Input Ujian ..................................................................... 104
Gambar 4. 55 Halaman Aktifkan Ujian ............................................................... 105
Gambar 4. 56 Halaman Kelola Siswa .................................................................. 105
Gambar 4. 57 Halaman Tambah Siswa ................................................................ 105
Gambar 4. 58 Halaman Kelola User .................................................................... 106
Gambar 4. 59 Halaman Input User ....................................................................... 106
Gambar 4. 60 Halaan Kelola Kelas ...................................................................... 107
Gambar 4. 61 Halaman Input Kelas ..................................................................... 107

ix
Gambar 4. 62 Halaman Kelola Kelas Ujian......................................................... 107
Gambar 4. 63 Halaman Edit Kelas Ujian ............................................................ 108
Gambar 4. 64 Halaman Data Siswa dan Ujian .................................................... 108
Gambar 4. 65 Halaman Petunjuk Mengerjakan ................................................... 108
Gambar 4. 66 Halaman Ujian Siswa .................................................................... 109
Gambar 4. 67 Halaman Selesai Ujian .................................................................. 109
Gambar 4. 68 Cyclomatic Complexity Login ...................................................... 115
Gambar 4. 69 Cyclomatic Complexity Tambah Soal .......................................... 115
Gambar 4. 70 Cyclomatic Complexity Ubah Data Soal ...................................... 116
Gambar 4. 71 Cyclomatic Complexity Hapus Data Soal .................................... 117
Gambar 4. 72 Cyclomatic Complexity Cetak Soal .............................................. 117
Gambar 4. 73 Cyclomatic Complexity Menampilkan Hasil Ujian ...................... 118
Gambar 4. 74 Cyclomatic Complexity Aktifkan Ujian ....................................... 119
Gambar 4. 75 Cyclomatic Complexity Ubah Data Ujian .................................... 120
Gambar 4. 76 Cyclomatic Complexity Hapus Data Ujian ................................... 121
Gambar 4. 77 Cyclomatic Complexity Aktifkan Ujian ....................................... 121
Gambar 4. 78 Cyclomatic Complexity Tambah Data Siswa ............................... 122
Gambar 4. 79 Cyclomatic Complexity Ubah Data Siswa.................................... 123
Gambar 4. 80 Cyclomatic Complexity Hapus Data Siswa .................................. 124
Gambar 4. 81 Cyclomatic Complexity Reset Login Siswa ................................. 124
Gambar 4. 82 Cyclomatic Complexity Cetak Kartu Siswa ................................. 125
Gambar 4. 83 Cyclomatic Complaxity Tambah Data User ................................. 126
Gambar 4. 84 Cyclomatic Complexity Ubah Data User...................................... 127
Gambar 4. 85 Cyclomatic Complexity Tambah Data Kelas................................ 127
Gambar 4. 86 Cyclomatic Complaxity Ubah Data Kelas .................................... 128
Gambar 4. 87 Cyclomatic Complexity Hapus Data Kelas .................................. 129
Gambar 4. 88 Cyclomatic Complexity Ubah Kelas Ujian ................................... 130
Gambar 4. 89 Cyclomatic Complexity Ujian ...................................................... 132

x
DAFTAR TABEL

Tabel 2. 1 Perbandingan Fungsi Tes .................................................................... 12


Tabel 2. 2 Perhitungan dengan Algoritma Fisher-Yates Shuffle ......................... 20
Tabel 2. 3 Pseucode Algoritma Fisher-Yates Shuffle .......................................... 21
Tabel 2. 4 Perbandingan Model............................................................................ 30
Tabel 2. 5 Simbol-Simbol Class Diagram ............................................................ 33
Tabel 2. 9 Simbol-Simbol Use Case Diagram...................................................... 34
Tabel 2. 10 Simbol-Simbol Activity Diagram ..................................................... 35
Tabel 2. 11 Simbol-Simbol Sequence Diagram ................................................... 37
Tabel 4. 1 Kebutuan Sistem.................................................................................. 62
Tabel 4. 2 Definisi Aktor ...................................................................................... 64
Tabel 4. 3 Definisi Use Case ................................................................................ 65
Tabel 4. 4 Class Diagram ..................................................................................... 85
Tabel 4. 5 Class Diagram (lanjutan) ..................................................................... 86
Tabel 4. 6 Class Diagram (lanjutan) ..................................................................... 87
Tabel 4. 7 Struktur Data Tabel kelas .................................................................... 87
Tabel 4. 8 Struktur Data Tabel kelas_ujian .......................................................... 88
Tabel 4. 9 Struktur Data nilai ............................................................................... 88
Tabel 4. 10 Struktur Data siswa ........................................................................... 88
Tabel 4. 11 Struktur Data soal .............................................................................. 88
Tabel 4. 12 Struktur Data ujian ............................................................................ 89
Tabel 4. 13 Struktur Data user .............................................................................. 89
Tabel 4. 14 Hasil Pengacakan ............................................................................ 102
Tabel 4. 15 Hasil Pengacakan (lanjutan) ............................................................ 103
Tabel 4. 16 Pengujian Black Box ...................................................................... 113
Tabel 4. 17 Pengujian Black Box Testing (lanjutan) ......................................... 114
Tabel 4. 18 Pengujian Black Box Testing (lanjutan) ......................................... 115
Tabel 4. 21 White Box Login ............................................................................. 116
Tabel 4. 22 White Box Tambah Soal ................................................................. 117
Tabel 4. 23 White Box Ubah Data Soal ............................................................. 118
Tabel 4. 24 White Box Hapus Data Soal ............................................................ 119

xi
Tabel 4. 25 White Box Cetak Soal ..................................................................... 119
Tabel 4. 26 White Box Menampilkan Hasil Ujian ............................................. 120
Tabel 4. 27 White Box Aktifkan Ujian .............................................................. 121
Tabel 4. 28 White Box Ubah Data Ujian ........................................................... 122
Tabel 4. 29 White Box Hapus Data Ujian .......................................................... 123
Tabel 4. 30 White Box Aktifkan Ujian .............................................................. 123
Tabel 4. 31 White Box Tambah Data Siswa ...................................................... 124
Tabel 4. 32 White Box Ubah Data Siswa ........................................................... 125
Tabel 4. 33 White Box Hapus Data Siswa ......................................................... 126
Tabel 4. 34 White Box Reset Login Siswa......................................................... 126
Tabel 4. 35 White Box Cetak Kartu Siswa......................................................... 127
Tabel 4. 36 White Box Tambah Data User ........................................................ 128
Tabel 4. 37 White Box Ubah Data User ............................................................. 128
Tabel 4. 38 White Box Tambah Data Kelas ....................................................... 129
Tabel 4. 39 White Box Ubah Data Kelas ........................................................... 130
Tabel 4. 40 White Box Hapus Data Kelas .......................................................... 131
Tabel 4. 41 White Box Mengubah Kelas Ujian ................................................. 131
Tabel 4. 42 White Box Ujian .............................................................................. 132
Tabel 4. 43 Pengacakan Soal .............................................................................. 134
Tabel 4. 44 Bobot Nilai ...................................................................................... 135
Tabel 4. 45 Rekapitulasi Jawaban Kusioner ...................................................... 135
Tabel 4. 46 Hasil Presentase Jawaban ............................................................... 136
Tabel 4. 47 Penentuan Nilai Interval .................................................................. 136

x
ii
BAB 1 PENDAHULUAN

1.1. Latar Belakang


Di zaman yang serba modern ini, pesatnya teknologi informasi telah
mengharuskan kita untuk selalu mengikuti perkembangan dari setiap teknologi
yang terus bermunculan. Ditambah lagi dalam bidang pendidikan yang
menggunakan teknologi setiap tahunnya semakin bertambah.
Pendidikan adalah serangkaian kegiatan komunikasi yang bertujuan,
antara manusia dewasa dengan si anak didik secara tatap muka atau dengan
menggunakan media dalam rangka memberikan bantuan terhadap perkembangan
anak seutuhnya. Pendidikan dapat dilakukan di sekolah, rumah, maupun di
lingkungan sekitar. Pendidikan merupakan proses pembentukan
kecakapankecakapan yang fundamental secara intelektual dan emosional ke arah
alam dan sesama manusia. Dalam melakukan pendidikan di dalam sekolah
dibimbing oleh guru-guru yang mengajarkan pelajaran-pelajaran kepada murid-
murid.
Pelajaran adalah sebuah pengetahuan, keterampilan dan juga sebuah sikap
yang harusnya dimiliki oleh semua peserta didik di dalam memenuhi standart
pembelajaran kompetensi yang telah ditetapkan. Pada umumnya materi
pembelajaran bisa melalui komunikasi dan melalui alat seperti buku teks. Media
yang digunakan guru adalah media sarana buku, baik buku paket pelajaran maupun
buku LKS (Lembar Kerja Siswa) yang biasanya berisi materi-materi pelajaran
maupun soal-soal untuk membantu siswa untuk mengasah kemampuan siswa dalam
memahami materi pelajaran.
Sekolah dasar adalah jenjang anak dalam bentuk pendidikan formal
mereka diajarkan beberapa pelajaran yang khusus diberikan untuk siswa SMA itu
sendiri, seperti Matematika, Bahasa Indonesia, Pendidikan Agama Islam,
Keterampilan, dan lain sebagainya. Di dalam pelajaran-pelajaran tersebut diberikan
latihan soal-soal dan evaluasi seperti ulangan dan ujian di setiap akhir semester.
Namun dalam memberikan soal ulangan ataupun ujian semester setiap siswa
diberikan soal yang sama dengan siswa yang lainnya, itu dapat menimbulkan
kecurangan seperti
2

menyontek kepada teman sendiri karena soal yang diberikan sama dengan yang
lainnya.
SMA Sunan Gunung Jati Karawang termasuk kedalam Yayasan
Pendidikan Sunan Gunung Jati. Pada SMA Sunan Gunung Jati Karawang terdapat
beberapa mata pelajaran yang diajarakan didalamnya dan mengadakan ujian sama
seperti sekolah-sekolah pada umumna. Dalam ujian guru menggunakan media
kertas yang berisi soal-soal ujian dan kemudian dibagikan kepada siswa dan soal
yang diberikan sama dengan siswa lainnya.
Ujian semester merupakan kumpulan soal-soal pelajaran untuk evaluasi
siswa selama menempuh tengah semester ataupun akhir semester. Soal yang
diberikan berupa sebuah pertanyaan-pertanyaan dari mata pelajaran yang diberikan
oleh guru, pertanyaan tersebut dapat berupa pilihan ganda (PG), mencocokan,
ataupun essay. Namun guru memberikan soal tidak bervariasi setiap siswa
mendapatkan soal yang sama tidak ada pengacakan soal, karena keterbatasan waktu
yang dimiliki guru untuk melakukan pengacakan soal.
Pada saat ujian semester yang dilakukan pada sekolah kurang adanya
penyimpanan soal-soal, guru-guru membuat soal dan diberikan kepada kepala
sekolah untuk di cetak dan diperbanyak. Soal-soal yang diedarkan kepada siswa
berbentuk kertas sehingga memerlukan banyak kertas untuk di edarkan ke seluruh
kelas, dan untuk penilaian dari ujian tersebut guru harus memeriksa hasil pekerjaan
siswa dan memerlukan waktu yang lama untuk mengkoreksi hasil ujian dari semua
siswa sehingga kurang efektif untuk pemeriksaan hasil ujian.
Ujian semester dilakukan oleh semua siswa pada sekolah tersebut, soal yang
diberikan saat ujian guru membuat soal yang sama, sehingga memungkinkan para
siswa untuk melakukan kecurangan melihat jawaban teman sendiri. Masalah hal
kecurangan tersebut sekolah belum memiliki solusi yang bisa mengatasi
kecurangan tersebut baik dari sistemnya maupun proses dari pelaksanaan ujian
tersebut.
Algoritma Fisher-Yattes Shuffle adalah sebuah algoritma untuk
menghasilkan suatu permutasi acak dari suatu himpunan terhingga, dengan kata lain
untuk mengacak suatu himpunan tersebut. Algoritma fisher-yates shuffle
merupakan suatu algoritma untuk memberikan teknik pengacakan pada soal
3

sehingga soal yang keluar akan berbeda dan dapat dihasilkan tanpa pengulangan
atau duplikasi. Terdapat pula algortima pegacakan lain yang berguna untuk
pengacakan seperti algoritma naive shuffle namun dalam algoritma fisher-yattes
shuffle menghasilkan permutasi yang seimbang untuk n kali pengacakan.
Pengunaan algoritma Fisher-Yattes Shuffle untuk mengacak soal ujian sehingga
setiap siswa memiliki urutan soal ujian yang berberda.
Dari persoalan tersebut, maka penulis tertarik untuk mengambil judul dalam
penulisan penelitian ini adalah “Aplikasi Tes Online Dengan Algoritma
FisherYattes Shuffle”.

1.2. Rumusan Masalah


Dengan melihat latar belakang pada permasalahan diatas, maka masalah
penelitian ini dirumuskan sebagai berikut:
1. Kurang efektifnya evaluasi yang dilakukan dengan menggunakan
proses secara manual. Jadi muncul pertanyaan bagaimana agar
evaluasi yang dilakukan dapat berjalan dengan efektif?
2. Banyaknya plagiarisme atau kecurangan dengan menggunakan proses
secara manual. Sehingga muncul pertanyaan bagaimana cara untuk
mengurangi pelaku plagiarisme dan kecurangan saat evaluasi?
3. Belum adanya solusi plagiat dengan menggunakan proses secara
manual. Sehingga, bagaimana agar tidak terjadi plagiat dengan
menggunakan proses secara manual?
4. Belum adanya sistem yang dimiliki sekolah untuk mengurangi plagiat.
Sehingga, bagaimana cara sekolah untuk membuat sistem agar
mengurangi kegiatan plagiat?

1.3. Tujuan Penelitian


Adapun tujuan dari penlitian ini adalah sebaga berikut:
1. Dengan menggunakan sistem ujian tanpa menggunakan media kertas
sehingga proses dilakukan dapat dilakukan secara efektif.
2. Mengurangi plagiat atau kecurangan dalam ujian dengan melakukan
pengacakan soal pada masing-masing siswa.

3. Dibuatkan sebuah solusi untuk mengurangi plagiat yang dilakukan


oleh siswa saat ujian.
4

4. Dibuatkan sebuah sistem ujian dengan pengacakan soal yang


dilakukan oleh sistem, sehingga masing-masing siswa mendapatkan
soal yang acak satu dengan yang lainnya.

1.4. Manfaat Penelitian


Hasil dari penelitian ini diharapkan dapat bermanfaat baik secara teoritis
maupun praktis, dalam hal ini seluruh lapisan masyarakat maupun penulis sendiri.
1. Secara teoritis
Dapat mengetahui implementasi algoritma Fisher-Yates Shuffle dalam
pengacakan soal yang diterapkan dalam berbasis web.
2. Secara praktis
a. Bagi masyarakat
• Sebagai alat bantu untuk mengurangi kecurangan mencontek
saat melaksanakan ujian.
• Sebagai salah satu media pembelajaran dengan menggunakan
teknologi yang interaktif sehingga dapat mengefektifkan
pembelajaran.
b. Bagi penulis
Sebagai pemanfaatan ilmu komputer yang selama ini dipelajari oleh
penulis didalam materi perkuliahan.

1.5. Batasan Masalah


Dalam penulisan penelitian ini, pengacakan soal dirancang sebagai
berikut:
1. Aplikasi tes ini merupakan sistem ujian yang akan diimplementasikan
untuk guru dan siswa pada saat akan melakukan ujian.
2. Sistem dibangun berbasis web menggunakan Hypertext Preprocessor
(PHP), JavaScript dengan tools Notepad++ dan MySQL sebagai
database.

3. Menggunakan XAMPP dengan Apache sebagai web server dan


MySQL sebagai database server.
4. Soal menggunakan jenis pilihan ganda dan pilihan benar atau salah.
5

5. Perhitungan hasil ujian tidak dapat ditentukan oleh guru ataupun


admin hasil sudah dihitung oleh sistem dari banyaknya soal.
6. Siswa hanya bisa satu kali mengerjakan pada setiap mata pelajaran.

1.6. Metodologi Penelitian


1.6.1 Teknik Pengumpulan data
• Observasi
Pengumpulan data dengan observasi langsung atau dengan
pengamatan langsung adalah cara pengambilan data dengan
menggunakan mata tanpa ada pertolongan alat standar lain untuk
keperluan tersebut.
• Wawancara
Proses memperoleh keterangan untuk tujuan penelitian dengan cara
tanya jawab, sambil bertatap muka antara si penanya atau
pewawancara dengan si penjawab atau responden dengan
menggunakan alat yang dinamakan interview guide (panduan
wawancara).
• Quisioner
Kuesioner adalah daftar pertanyaan tertulis yang telah disusun
sebelumnya.

1.6.2 Metode Pengembangan Perangkat Lunak


Metodologi pengembangan system adalah suatu proses pengembangan
system yang formal dan presisi yang mendefinisikan serangkaian aktivitas, metode.

1.6.2.1 Metode Perancangan Sistem/Sofware


1. Pengumpulan kebutuhan
Pelanggan dan pengembang bersama-sama mendefinisikan format
seluruh perangkat lunak, mengidentifikasikan semua kebutuhan, dan
garis besar sistem yangakan dibuat.

2. Membangun prototyping
Membangun prototyping dengan membuat perancangan sementara
yang berfokus pada penyajian kepada pelanggan (misalnya dengan
membuat input dan format output)
6

3. Evaluasi protoptyping.
Evaluasi ini dilakukan oleh pelanggan apakah prototyping yang sudah
dibangunsudah sesuai dengan keinginann pelanggan. Jika sudah
sesuai maka langkah 4 akandiambil. Jika tidak prototyping direvisi
dengan mengulangu langkah 1, 2 , dan 3.
4. Mengkodekan system
Dalam tahap ini prototyping yang sudah di sepakati diterjemahkan ke
dalam bahasa pemrograman yang sesuai.
5. Menguji system.
Setelah sistem sudah menjadi suatu perangkat lunak yang siap pakai,
harus ditesdahulu sebelum digunakan. Pengujian ini dilakukan dengan
White Box, Black Box,Basis Path, pengujian arsitektur dan lain-lain
6. Evaluasi Sistem.
Pelanggan mengevaluasi apakah sistem yang sudah jadi sudah sesuai
denganyang diharapkan . Juka ya, langkah 7 dilakukan; jika tidak,
ulangi langkah 4 dan 5.
7. Menggunakan system.
Perangkat lunak yang telah diuji dan diterima pelanggan siap untuk
digunakan.

1.6.2.2 Metode Perancangan Database


Dalam perancangan database dalam penelitian ini menggunakan beberapa
aplikasi untuk membantu dalam pengerjaan ataupun pengelolaan data, seperti:
1. DBMS yang digunakan yaitu MySQL sebagai tempat penyimpanan
data, pengolahan data dalam jumlah yang besar.
2. Xampp untuk menjalankan localhost untuk membuka database mysql.
1.7. Sistematika Penulisan
Sistematika penulisan penelitian ini disusun untuk memberikan gambaran
umum tentang penelitian yang dijalankan. Adapun sistematika penulisannya adalah
sebagai berikut:
BAB 1 PENDAHULUAN
Bab ini berisi penjelasan mengenai latar belakang masalah, rumusan
masalah, batasan masalah, tujuan penelitian, manfaat penelitian,
metodologi penelitian, serta sistematika penulisan.
7

BAB 2 LANDASAN TEORI


Bab ini membahas mengenai teori-teori yang digunakan dalam
mengembangkan sistem, serta materi – materi pendukung lainnya.
BAB 3 OBJEK DAN METODE PENELITIAN
Bab ini menjelaskawn tentang gambaran umum SMA Sunan
Gunung Jati Karawang, tempat penelitian, menguraikan metode
yang digunakan, menguraikan rancangan penelitian, dan algoritma
yang digunakan.
BAB 4 HASIL DAN PEMBAHASAN
Bab ini berisi tentang hasil penelitian dan pembahasan dari jawaban
rumusan masalah.
BAB 5 PENUTUP
Bab ini berisi tentang kesimpulan atas keseluruhan isi dari uraian
pada bab-bab sebelumnya dalam penelitian ini dan berisi saran yang
membangun untuk penelitian selanjutnya.

BAB 2 LANDASAN TEORI

2.1. Aplikasi
Aplikasi adalah penggunaan atau penerapan suatu konsep yang menjadi
suatu pokok pembahasan. Aplikasi dapat diartikan juga sebagai program komputer
yang dibuat untuk menolong manusia dalam melaksanakan tugas tertentu
(Noviansyah, 2012).
Aplikasi software yang dirancang untuk suatu tugas khusus dapat
dibedakan menjadi dua jenis, yaitu:
1. Aplikasi software spesialis, program dengan dokumentasi tergabung
yang dirancang untuk menjalankan tugas tertentu.
2. Aplikasi software paket, suatu program dengan dokumentasi
tergabung yang dirancang untuk jenis masalah tertentu.
Aplikasi adalah suatu program perangkat lunak yang berjalan pada suatu
sistem tertentu yang berguna untuk membantu berbagai kegiatan yang dilakukan
oleh manusia. Aplikasi merupakan komponen yang bermanfaat sebagai media
8

untuk menjalankan pengolahan data ataupun berbagai kegiatan lainnya seperti


pembuatan ataupun pengolahan dokumen dan file.
Aplikasi merupakan sebuah siftware (perangkat lunak) yang bertugas sebagai front
end pada sebuah sistem yang dipakai untuk mengelolah berbagai macam data
sehingga menjadi sebuah informasi yang bermanfaat untuk penggunanya dan juga
sistem yang berkaitan.
Aplikasi atau perangkat lunak adalah instruksi langsung komputer untuk
melakukan pekerjaan dan dapat ditemukan di setiap aspek kehidupan modern,
seperi perangkat pemantauan medis dan pembangkit tenaga listrik sampai perangkat
hiburan, seperti video dan game Sobari Aplikasi berasal dari kata application yang
artinya penarapan, lamaran, penggunaan.

2.2. Pelajaran
Pelajaran adalah apa pun membaca atau dibacakan kepada guru dengan
murid atau peserta didik; sesuatu, sebagai bagian dari sebuah buku, ditugaskan
untuk murid yang akan belajar atau belajar pada satu waktu. Pelajaran adalah Apa
yang dipelajari atau diajarkan oleh upaya mengungkapkan; instruksi yang berasal
dari ajaran, pengalaman, pengamatan, atau pengurangan; sebuah ajaran; doktrin;
sebagai, untuk mengambil atau memberikan pelajaran menggambar.

Gambar 2. 1 Pelajaran
Sumber : Sinonimkata.com

Menurut A.J. Loveridge, ed., dalam judul Persiapan Naskah Buku


Pelajaran pada halaman 11 menjelaskan buku pelajaran adalah buku sekolah yang
memuat bahan yang telah diseleksi mengenai mata pelajaran tertentu, dalam bentuk
tertulis yang memenuhi syarat keadaan khusus dalam belajar dan mengajar, disusun
secara sistematis untuk diasimilasikan. Dalam kartu catatan, diberikan definisi
9

(sebuah segi dari topik) yang merupakan salah satu unsur dari kecapakan studi
(suatu cabang ilmu).
Buku teks pelajaran merupakan bahan ajar dan sumber belajar yang mudah
ditemukan dan digunakan. Pada umumnya buku pelajaran dikeluarkan atau
diterbitkan oleh penerbit-penerbit yang banyak menawarkan ke tiap-tiap institusi
pendidikan. Ini menjadikan satu institusi atau sekolah satu dengan yang lainnya
dapat menggunakan buku teks yang berbeda pada materi pelajaran dan tingkatan
kelas yang sama. Pemerintah juga menyelenggarakan program BSE (Buku Sekolah
Elektronik) dimana BSE merupakan buku teks pelajaran yang disediakan secara
gratis dan dapat diunduh (download) serta disebar luaskan tanpa pelanggaran hak
cipta. Penerbit yang ingin mengambil keuntungan dari buku BSE ini juga tidak
diperbolehkan menetapkan harga melebihi harga maksimal yang ditentukan.

Buku teks pelajaran memiliki banyak fungsi, tujuan dan kegunaan atau
manfaat dalam mendukung proses pembelajaran. Nasution dalam Prastowo
menyebutkan terdapat beberapa fungsi, tujuan dan manfaat atau kegunaan buku teks
pelajaran, yaitu:
1. Fungsi Buku Teks Pelajaran
• Sebagai bahan referensi atau bahan rujukan oleh peserta didik
• Sebagai bahan evaluasi
• Sebagai alat bantu pendidik dalam melaksanakan kurikulum
• Sebagai salah satu penentu metode atau teknik pengajaran yang akan
digunakan pendidik
• Sebagai sarana untuk peningkatan karir dan jabatan
2. Tujuan Buku Teks Pelajaran
• Memudahkan pendidik dalam menyampaikan materi pembelajaran
• Memberi kesempatan kepada peserta didik untuk mengulangi pelajaran
atau mempelajari pelajaran baru
• Menyediakan materi pembelajaran yang menarik bagi peserta didik
3. Manfaat atau Kegunaan Buku Teks Pelajaran
• Membantu peserta didik dalam melaksanakan kurikulum karena
disusun berdasarkan kurikulum yang berlaku
• Menjadi pegangan guru dalam menentukan metode pengajaran
• Memberi kesempatan bagi peserta didik untuk mengulangi pelajaran
atau mempelajari materi yang baru
10

• Memberikan pengetahuan bagi peserta didik maupun pendidik


• Menjadi penambah nilai angka kredit untuk mempermudah kenaikan
pangkat dan golongan
• Menjadi sumber penghasilan jika diterbitkan

2.3. Tes
Tes adalah prosedur yang sistematik guna mengukur sampe perilaku
seseorang. Sistematik juga memiliki pengertian obyektif, standart dan syarat-syarat
kualitas lainnya (Frederick, 1976).

Tes adalah pertanyaan-pertanyaan yang harus dijawab dan atau


perintahperintah yang harus dijalankan, yang mendasarkan harus bagaimana testee
menjawab pertanyaan-pertanyaan atau melakukan perintah-perintah itu, penyelidik
mengambil kesimpulan dengan cara membandingkan dengan standart atau testee
lainnya (Sumardi, 1984).
Tes adalah pengukuran terencana yang dipakai guru untuk mencoba
menciptakan kesempatan bagi para siswanya untuk memperlihatkan prestasi
mereka dalam kaitannya dengan tujuan yang telah di tentukan (Cangelosi, 1995).
Tes adalah suatu cara mengadakan penilaian yang berbentuk suatu tugas
atau serangkaian tugas yang harus dikerjakan oleh anak atau sekelompok anak
sehingga menghasilkan suatu nilai tentang tingkah laku atau prestasi anak tersebut,
yang dapat dibandingkan dengan nilai yang dicapai oleh anak-anak lain atau standar
yang ditetapkan (Nurkencana, 2006).

2.4.1 Fungsi Tes


Secara umum, ada dua macam fungsi yang dimiliki oleh tes, yaitu:
1. Sebagai alat pengkur terhadap peserta didik. Dalam hubungan ini tes
berfungsi mengukur tingkat perkembangan atau kemajuan yang telah
dicapai oleh peserta didik setelah mereka menempuh proses belajar
mengajar dalam jangka waktu tertentu.
2. Sebagai alat pengukur keberhasilan program pengajaran, sebab
melalui tes tersebut akan dapat diketahui sudah seberapa jauh program
pengajaran yang telah ditentukan, telah dapat dicapai.
Sedangkan menurut Suharsimi Arikunto dalam bukunya Dasar-Dasar
Evaluasi Pendidikan, fungsi tes dapat ditinjau dari tiga hal:
11

a. Fungsi untuk kelas.


b. Fungsi untuk bimbingan.
c. Fungsi unutk administrasi.

Adapun perbandingan dari ketiga fungsi tersebut adalah:

Tabel 2. 1 Perbandingan Fungsi Tes


Fungsi untuk kelas Fungsi untuk bimbingan Fungsi untuk administrasi

a. Mengadakan a. Menetukan arah a. Memberi petunjuk dalam


diagnosis pemberiaan dengan mengelompokkan siswa.
terhadap orang tua tentang b. Penempatan siswa baru.
b. kesulitan belajar anakanak mereka. c. Membantu siswa
siswa. b. Membantu siswa dalam memiliki kelompok.
Mengevaluasi celah antar menentukan pilihan. d. Menilai kurikulum.
c. bakat dengan c. Membantu siswa e. Memperluas hubungan
pencapaian. mencapai tujuan masyarakat (public
d. Menaikan tingka pendidikan dan relation).
prestasi. jurusan. f. Menyediakan informasi
Mengelompokkan siswa d. Memberikan untuk badan lain di luar
e. dalam kelas pada waktu kesempatan kepada sekolah.
metode kelompok. pembimbing, guru, fan
Merencanakan kegiatan orang tua dalam
memahami kesulitan
proses belajar mengajar
f. anak.
untuk siswa secara
perseorangan.
Menentukan siswa mana
g. yang memerlukan
bimbingan khusus.
Menetukan tingkat
pencapaian untuk setiap
anak.
Fungsi tes yang lain di kemukakan oleh Saifuddin Azwar dalam bukunya
Tes Prestasi, yaitu sebagai motivator dalam belajar. Walaupun nilai yang diperoleh
dalam tes hendaknya tidak dijadikan tujuan utama bagi siswa dalam belajar akan
tetapi tes dapat digunakan sebagai sarana peningkatan motivasi untuk belajar siswa.
Pengalaman menunjukkan bahwa siswa akan belajar lebih giat dan berusaha lebih
keras apabila mereka mengetahui bahwa di akhir program yang sedang ditempuh
akan diadakan tes untuk mengetahui nilai dan prestasi mereka.
12

2.4.2 Klasifikasi Tes


Secara umum tes dibedakan berdasarkan obyek pengukurannnya dapat
dibagi menjadi dua, yaitu tes kepribadian (personality test) dan tes hasil belajar
(Achievement test).
a. Tes Kepribadian (Personality Test)
Adalah tes yang dilaksanakan dengan tujuan mengungkap ciri-ciri khas
dari seseorang yang banyak sedikitnya bersifat lahiriyah, seperti gaya
bicara, cara berpakaian, nada suara, hobi atau kesenangan dan lain-lain.

Yang termasuk dalam jenis tes ini dan banyak digunakan dalam
kependidikan adalah:
1) Pengukuran sikap.
2) Pengukuran minat.
3) Pengukuran bakat.
4) Tes intelegensi.
b. Tes Hasil Belajar (Achievement Test)
Adalah tes yang dipergunakan untuk menilai hasil-hasil pelajaran yang
telah diberikan oleh guru kepada murid-muridnya, atau oleh dosen
kepada mahasiswanya, dalam jangka waktu tertentu. Menurut fungsinya
tes hasil belajar dapat dibedakan menjadi empat macam yaitu:
1) Tes Penempatan (Plecement Test)
Tes penempatan adalah tes untuk mengukur kemampuan dasar yang
dimiliki oleh anak didik; kemampuan tersebut dapat dipakai untuk
meramalkan kemampuan peserta didik pada masa mendatang,
sehingga kepadanya dapat dibimbing, diarahkan atau ditempatkan
pada jurusan yang sesuai dengan kemampuan dasarnya.
2) Tes Diagnostic
Adalah tes yang dilaksanakan untuk menentukan secara tepat, jenis
kesukaran yang dihadapi oleh para peserta didik dalam suatu mata
pelajaran tertentu. Dengan diketahuinya jenis-jenis kesukaran yang
dihadapi oleh peserta didik itu maka lebih lanjut akan dapat
dicarikan upaya berupa pengobatan (therapy) yang tepat. Tes
diagnostic juga bertujuan untuk menemukan jawaban atas
pertanyaan “Apakah peserta didik sudah dapat menguasai
13

pengetahuan yang merupakan dasar atau landasan untuk dapat


menerima pengetahuan selanjutnya?
3) Tes Formatif
Adalah tes hasil belajar yang bertujuan untuk mengetahui, sudah
sejauh manakah peserta didik “telah terbentuk” (sesuai dengan
tujuan pengajaran yang telah ditentukan) setelah mereka mengikuti
proses pembelajaran dalam jangka waktu tertentu. Tes formatif juga
bertujuan untuk mencari umpan balik (feedback), yang selanjutnya
hasil penilain tersebut dapat digunakan untuk memperbaiki proses
belajar mengajar yang sedang atau yang sudah dilaksanakan
4) Tes Sumatif
Adalah tes yang dilakukan untuk memperoleh data atau informasi
sampai dimana penguasaan atau pencapaian belajar siswa terhadap
bahan pelajaran yang telah dipelajarinya. Tes ini mengukur
keberhasilan belajar peserta didik secara menyeluruh, materi yang
diujikan seluruh pokok bahasan dan tujuan pengajaran dalam satu
program tahunan atau semesteran, masing-masing pokok bahasan
terwakili dalam butir-butir soal yang diujikan.
Klasifikasi tes hasil belajar menurut tingkatannya dapat dibedakan menjadi
sebagai berikut:
1) Tes Standart
Pengertian tes standart secara sempit adalah tes yang disusun oleh satu
tim ahli, atau disusun oleh lembaga yang khusus mennyelenggarakan
secara professional. Yang dituntut dalam tes standart bukan standart
prestasi peserta didik dari penguasaan materi yang diajarkan pada suatu
tingkat, lembaga pendidikan tertentu, melainkan adanya persamaan
performance pada kelompok peserta didik atau lembaga pendidikan
disebabkan adanya kesamaan tolak ukur. Tes standar ini merupakan tes
yang mengalami proses standardisasi, yaitu proses validasi dan
keandalan (reliability) sehingga tes tersebut benar-benar valid dan andal
untuk suatu tujuan dan bagi suatu kelompok tertentu.
2) Tes Nonstandart
14

Adalah tes yang disusun oleh seorang pendidik yang belum memiliki
keahlian professional dalam menyusun tes secara baik.
Sedangkan menurut bentuknya, tes dapat dibedalan menjadi 3 macam, yaitu
sebagai berikut:
1) Tes Tindakan
Adalah tes dimana respon atau jawaban yang dituntut dari peserta didik
berupa tindakan, tingkah laku konkrit. Alat yang dapat digunakan untuk
melakukan tes ini adalah observasi atau pengamatan terhadap tingkah
laku tersebut.
2) Tes Lisan
Tes lisan merupakan sekumpulan item pertanyaan dan atau pernyataan
yang disusun secara terencana, diberikan oleh seorang guru kepada para
siswanya tanpa media tulis. Dari segi persiapan dan cara bertanya tes
lisan dapat dibedakan menjadi dua, yakni:
a) Tes lisan bebas: artinya, penduduk dalam memberikan soal kepada
peserta didik tanpa menggunakan pedoman yang dipersiapkan
secara tertulis.
b) Tes lisan berpedoman: pendidik menggunakan pedoman tertulis
tentang apa yang akan ditanyakan kepada peserta didik.
3) Tes Tertulis
Yaitu tes yang terdiri dari serangkaian soal, pertanyaan (item) atau tugas
secara tertulis dan jawaban yang diberikan secara tertulis juga. Tes
tertulis secara umum dapat dibedakan menjadi 2 macam, yakni: a) Tes
subyektif
Tes subyektif, yang pada umumnya berbentuk esai (uraian). Tes
bentuk esai adalah sejenis tes kemajuan belajar yang memerlukan
jawaban yang bersifat pembahasan atau uraian kata-kata.
b) Tes obyektif
Yaitu tes yang terdiri dari butir-butir soal (item) yang dapat dijawab,
oleh testee dengan jalan memilih salah satu (atau lebih) diantara
beberapa kemungkinan jawaban yang telah dipasangkan dengan
masing-masing item dengan jalan menuliskan (mengisi) jawabannya
berupa kata-kata atau simbol-simbol tertentu pada tempat atau ruang
15

yang telah disediakan untuk masing-masing butir item yang


bersangkutan. Macam-macam tes obyektif adalah sebagai berikut:

(1) Tes melengkapi (completion test)


Adalah salah satu bentuk tes jawaban bebas, dimana butir-butir
soalnya berupa satu kalimat dimana bagian-bagian tertentu yang
dianggap penting dikosongkan, kepada testee diminta untuk
mengisi bagian-bagian yang ditiadakan tersebut.
(2) Tes benar-salah (true-false test)
Soal-soalnya berupa pernyataan-pernyataan (statement).
Statement tersebut ada yang benar dan ada yang salah. Orang
yang ditanya bertugas untuk menandai masing-masing
pernyataan itu dengan meligkari huruf B jika pernyataan itu
betul menurut pendapatnya dan melingkari huruf S jika
pernyataan itu salah.
Bentuk benar-salah ada dua macam (dilihat dari segi
mengerjakan/menjawab soal) yakni, dengan pembetulan yaitu
siswa siswa diminta membetulkan bila ia memilih jawaban yang
salah atau siswa hanya diminta untuk melingkari huruf B atau
tanpa memberikan jawaban yang betul (tanpa pembetulan).
(3) Tes pilihan ganda (multiple choice test)
Tes pilihan ganda terdiri atas suatu keterangan atau
pemberitahuan tentang suatu pengetahuan yang belum lengkap.
Dan untuk melengkapinya harus memilih satu dari beberapa
kemungkinan jawaban yang telah disediakan.
(4) Menjodohkan (matching test)
Tes bentuk menjodohkan merupakan bentuk khusus dari pilihan
jamak. Bentuk ini terdiri atas dua macam kolom paralel, tiap
kolom berisi statement yang satu menempati posisi sebagai soal
dan satunya sebagai jawaban, kemudian peserta didik diminta
untuk menjodohkan kesesuaian antar dua statement tersebut. Tes
ini sering digunakan untuk mengukur informasi tentang fakta;
pengertian; hubungan dan pengertian simbol tertentu.
16

(5) Rearrangement exercises


Yang dimaksud dengan Rearrangement exercises adalah bentuk
tes yang berupa rangkaian kalimat utuh dan benar, kemudian
diceraikan secara tidak beraturan, sehingga bentuk aslinya sulit
dikenali, peserta didik diminta menyusun kembali sesuai dengan
urutan yang benar. Bentuk tes ini banyak digunakan untuk mata
pelajaran bahasa Inggris.
Dilihat dari segi banyaknya orang yang mengikuti tes, tes dapat dibedakan
menjadi dua, yaitu:
1) Tes individual (individual test), yakni tes dimana tester
hanya berhadapan dengan satu orang testee saja.
2) Tes kelompok (group test), yakni tes dimana tester
berhadapan dengan lebih dari satu orang testee.
Dilihat dari segi waktu yang disediakan bagi testee untuk menyelesaikan
tes, tes dapat dibedakan menjadi dua golongan yaitu:
1) Power test, yaitu tes dimana waktu yang disediakan buat testee untuk
menyelesaikan tes tersebut tidak dibatasi.
2) Speed test, yaitu tes dimana waktu yang disediakan buat testee untuk
menyelesaikan tes tersebut dibatasi.

2.4.3 Ciri-Ciri Tes yang Baik


Suatu tes dapat dikatakan baik sebagai alat pengukur jika dapat memenuhi
syarat-syarat tes yang baik, di antara syarat-syarat tes tersebut adalah:
a. Validitas
Menurut Anastasi dalam Sumarna Surapranata, validitas adalah suatu
tingkatan yang menyatakan bahwa suatu alat ukur telah sesuai dengan
apa yang diukur.
b. Realibilitas
Reliabilitas juga dapat diartikan sama dengan konsistensi atau
keajegan. Suatu instrument evaluasi, dikatakan memenuhi nilai
reliabilitas tinggi, apabila tes,yang dibuat mempunyai hasil yang
konsisten dalam mengukur yang hendak diukur.
17

c. Obyektivitas
Adalah kualitas yang menunjukkan identitas atau kesamaan dari
skorskor atau diagnosis-diagnosis yang diperoleh dari data yang sama
dari penskor-penskor kompeten yang sama.
d. Praktibilitas
Sebuah tes dikatakan memiliki praktibilitas yang tinggi apabila tes
tersebut bersifat praktis, mudah mengadministrasikannya, praktis
disini juga termasuk dalam pelaksanaan, pemeriksaan dan juga
pemberian petunjuk-petunjuk yang jelas sehingga dapat
diberikan/diwakili oleh orang lain.
e. Ekonomis
Yang dimaksud ekonomis disini ialah bahwa pelaksanaan tersebut
tidak membutuhkan ongkos atau biaya yang mahal, tenaga yang
banyak, dan waktu yang lama.

2.4. Online
Menurut Dedik Kurniawan online adalah sebuah kegiatan yang
menggunakan fasilitas internet untuk melakukan segala kegiatan yang dapat
dilakukan secara online seperti halnya bisnis, daftar kuliah, searching, stalking,
mencari berita dan lain sebagainya.
Menurut Jasmadi dan Solusindo online juga bisa digunakan untuk sebuah
komunitas. Dan itu dapat diartikan menjadi sebuah tempat berbagi informasi
dimana bisa menyumbangkan kemampuan untuk membuat komunitas yang solid
melalui via internet.
Menurut Yudhi Wicaksono online juga bisa menjadi media untuk berbisnis
yang menjadikan pemahaman online sebagai kegiatan jual beli dalam sambungan
internet dan fitur belanja online yang sudah tersedia.

2.5. Algoritma
Algoritma adalah urutan langkah-langkah untuk memecahkan suatu
masalah. Terdapat beberapa definisi lain dari algoritma, tetapi pada prinsipnya
senada dengan definisi yang diungkapkan di atas yang kita kutip dari berbagai
literatur, antara lain:
18

1. Algoritma adalah langkah-langkah komputasi yang mengubah data


masukan menjadi keluaran.
2. Algoritma adalah deretan intruksi yang jelas untuk memecahkan
masalah, yaitu untui memperoleh keluaran yang diinginkan dari suatu
masukan dalam waktu yang terbatas.
3. Algoritma adalah prosedur komputasi yang terdefinisi dengan baik yang
menggunakan beberapa nilai sebagai masukan dan menghasilkan
beberapa nilai sebagai keluaran. Jadi, algoritma adalah deretan langkah
komputasi yang mentransformasikan masukan menjadi keluaran
(Munir, 2011).

2.6.1. Algoritma Fisher-Yates Shuffle


Fisher-Yates shuffle (diambil dari nama Ronald Fisher dan Frank Yates)
atau juga dikenal dengan nama Knuth shuffle (diambil dari nama Donal Knuth),
adalah sebuah algoritma untuk menghasilkan suatu permutasi acak dari suatu
himpunan terhingga, dengan kata lain untuk mengacak suatu himpunan tersebut.
Fisher-Yates shuffle jika diimplementasikan dengan benar, maka hasil dari
algoritma ini tidak akan berat sebelah, sehingga setiap permutasi memiliki
kemungkinan yang sama (Ade-Ibijola, 2012).
Misalkan dalam permainan kartu Blok Bakarada 10 kartu yang akan
diacak, maka array-nya adalah urutan kartu = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]. Array
tersebut dimasukkan kedalam prosedur shuffle dimana proses pengacakan terjadi.
Array tersebut didapat panjang array yang kemudian dimasukkan ke dalam
variabel m (m=10) (Ade-Ibijola, 2012).
Langkah-langkah pengacakan soal dengan Fisher-Yates Shuffle adalah
sebagai berikut:
1. Ambil satu elemen secara acak dari elemen yang tersisa.
Pengambilan elemen acak adalah berdasarkan elemen yang tersisa.
Misalkan jika m =10, maka elemen acak yang boleh diambil adalah
10(array[0...9]).

2. Tukar dengan elemen saat ini.


19

Penukaran dilakukan dengan memasukkan elemen saat ini ke dalam


suatu variabel baru bernama t. Elemen saat ini (array[m]) diisi nilai dari
elemen acak tadi (array[i]). Dan elemen acak (array[i]) diisi nilai dari
variabel t.
3. Ulangi selama masih ada elemen yang tersisa
Tahap ketigas dilakukan pengulangan sebanyak 10 kali untuk mengacak
urutan soal tersebut.
Tabel 2. 2 Perhitungan dengan Algoritma Fisher-Yates Shuffle
t Array yang sudah fix Isi array setelah di swap
m I Array[i] /array[m] array array
[0,1,2,3,4,5,6,7,8,9] [0,1,2,3,4,5,6,7,8,9]
10 6 6 9 6 0, 1, 2, 3, 4, 5, 9, 7, 8,6
9 0 0 8 0, 6 8, 1, 2, 3, 4, 5, 9, 7, 0, 6
8 1 1 7 1, 0, 6 8, 7, 2, 3, 4, 5, 9, 1, 0, 6
7 2 2 9 2, 1, 0, 6 8, 7, 9, 3, 4, 5, 2, 1, 0, 6
6 2 9 5 9, 2, 1, 0, 6 8, 7, 5, 3, 4, 9, 2, 1, 0, 6
5 1 7 4 7, 9, 2, 1, 0, 6 8, 4, 5, 3, 7, 9, 2, 1, 0, 6
4 1 4 3 4, 7, 9, 2, 1, 0, 6 8, 3, 5, 4, 7, 9, 2, 1, 0, 6
3 1 3 5 3, 4, 7, 9, 2, 1, 0, 6 8, 5, 3, 4, 7, 9, 2, 1, 0, 6
2 1 5 5 5, 3, 4, 7, 9, 2, 1, 0, 6 8, 5, 3, 4, 7, 9, 2, 1, 0, 6
1 0 8 8 8, 5, 3, 4, 7, 9, 2, 1, 0, 6 8, 5, 3, 4, 7, 9, 2, 1, 0, 6
Permutasi yang didapatkan adalah 8,5,3,4,7,9,2,1,0,6. Kolom m
menunjukan index elemen saat ini. Kolom i menunjukkan range yang diperoleh (m).
Kolom array[i] menunjukkan nilai yang terdapat pada array ke-i. Kolom t
menujukkan nilai yang terdapat pada array ke-m (elemen saat ini). Array yang
sudah fix menujukkan array yang sudah tidak boleh ditukar kembali nilainya,
jumlahnya bertambah seiring bertambahnya iterasi. Kemudian kolom array yang
sudah di swap menujukkan isi array setelah elemennya ditukar/swap ada setiap
iterasi. Untuk flowchart dari algoritma Fisher-Yates shuffle dapat dilihat pada
gambar dibawah ini:
20

Gambar 2. 2 Flowchart Algoritma Fisher-Yates ShuffleI

Dari flowchart terlihat bahwa pengacakan akan selesai jika seluruh array
telah diavak. Fisher-Yates shuffle dihasilkan urutan array yang diacak. Untuk
pseudo code nya dapat dilhat pada tabel dibawah ini:
Tabel 2. 3 Pseucode Algoritma Fisher-Yates Shuffle
No Algoritma Pseudocode
1 Ketikan masih ada elemen While (m) {
tersisa untuk diacak
2 Ambil elemen secara acak dari i=Math.floor(Math.random()*m—);
elemen yang tersisa
3 Kemudian tukar dengan elemen t = array [m];
saat ini array[m] = array[i];
array[i] = t;
}
2.6. Internet
Internet (Internetconnected Networok) merupakan jaringan (network)
komputer yang terdiri dari ribuan jaringan komputer independent yang
dihubungkan satu dengan yang lainnya. Internet secara umum merujuk kepada
gabungan jaringan komputer yang berkomunikasi menggunakan sistem pertuturan
yang sama dikenali sebagai TCP/IP (Transmission Control Protocol/ Internet
Protocol). Ia berfungsi sebagai satu rangkaian yang besar menghubungkan bada
pemerintahan, komersial, institusi penddikan dan individu di seluruh dunia
(Jogiyanto, 2005).
21

2.7.1 Hypertext Transfer Protocol (HTTP)


Hypertext Transfer Protocol (HTTP) sebuah sever penyedia informasi
menggunakan protocol standar TCP (Transmission Control Protocol). Transaksi
yang khas dari HTTP adalah klien melakukan koneksi dengan server HTTP, dan
melakukan permintaan untuk sumber yang diinginkan dan menunggu respon dari
server HTTP, dan melakukan permintaan untuk sumber yang diinginkan dan
menunggu respon dari server. Setelah menerima permintaan klien dan mengirimkan
respon dan menutup koneksi. Respon dapat berupa sumber yang diinginkan atau
dapat juga hasil dari eksekusi dalam kasus resource yang diinginkan adalah sebuah
sumber yang dapat dieksekusi (Jogiyanto, 2005).

2.7.2 World Wide Web (WWW)


World Wide Web yang dikenal juga dengan Web atau WWW atau W3
dikembangkan pada tahun 1990 di CERN (Laboraturiom Fisika Partikel) di Swiss.
Web adalah sistem pengiriman dokumen terbesar yang berjalan di Internet
(Jogiyanto, 2005).
Web dikembangkan di CERN (EUROPEAN CENTER NUCLEAR
RESEARCH), suatu lembaga bagi penelitian fisika energi tinggi di Geneva Swiss.

2.7.3 Pemrograman Website


Aplikasi web adalah aplikasi yang disimpan dan dieksekusi di lingkungan
web server. Setiap permintaan yang dilakukan user melalui aplikasi klien (web
browser) akan direspon oleh aplikasi web dan hasilnya akan dikembalikan lagi
terhadap user (Raharjo, 2010).

2.7.3.1 HTML
HTML merupakan bahasa yang digunakan untuk menulis halaman web.
Biasanya mempunyai ekstensi .htm, .html, atau .shtml. HTML tersusun atas-atas
tag-tag digunakan untuk menentukan tampilan dari dokumen HTML yang
diterjemahkan oleh browser. Tag HTML tidak case sensitive. Jadi bisa
menggunakan <HTML> atau <html>. Keduanya menghasilkan output yang sama.
HTML berawal dari bahasa SGML (Standard Generalized MarkUp
Language) yang penulisannya disederhanakan. HTML dapat dibaca oleh bebagai
macam platform. HTML juga merupakan bahasa pemrograman yang fleksibel,
22

dapat disisipi/digabungkan dengan bahasa pemrograman lain, seperti PHP, ASP,


JSP, JavaScript, dan lainnya. Jika ada kesalahan pada penulisan HTML, broser tidak
akan memperlihatkan syntax error, tetapi hanya tidak menampilkannya.
HTML terus berkembang seiring perkembangan browser.
Kerangka dasar dokumen HTML:
<HTML>
<HEAD>
Deskripsi dokumen
</HEAD>

<BODY>
Isi dokumen
</BODY>
</HTML>

2.7.3.2 CSS
CSS (Cascading Style Sheets) banyak digunakan untuk memperluas
kemampuan HTML dalam memformat dokumen web atau untuk mempercantik
tampilan web, bahkan untuk pemosisian dan layouting halaman web. Dengan
mendifinisikan suatu style sekali saja maka style itu akan dapat digunakan berulang
kali.
CSS telah didukung kebanyakan browser, terutama versi baru sehingga
penempatan layout menjadi lebih fleksibel. Membuat HTML menggunakan tag
minimal berpengaruh terhadap ukuran file, dapat menampilkan konten utama
terlebih dahulu seperti gambar dan yang lain dapat ditampilkan sesudahnya. Selain
itu penggunaan CSS pada file terpisah dapat mempermudah pengubahan tampilan
situs secara keseluruhan.

Kerangka dasar CSS yang penulisan kodenya disisipkan pada tag HTML
adalah:
<STYLE TYPE = “text/css”>
<!—
Nama_tag {properti_1:nilai_1; ... ;
properti_nilai_n;}
-->
23

</STYLE>

2.7.3.3 PHP (Hypertext Processor)


PHP (Hypertext Preprocessor) adalah pemrograman interpreter yaitu
proses penerjemahan baris kode sumber menjadi kode mesin yang dimengerti
komputer secara langsung pada saat baris kode dijalankan. PHP disebut sebagai
pemrograman Server Side Programming, hal ini dikarenakan seluruh prosesnya
dijalankan pada server. PHP adalah suatu bahasa dengan hak cipta terbuka atau juga
yang dikenal dengan istilah Open Source (Sibero, 2013).

2.7.3.4 JavaScript
JavaScript mulanya bernama LiveScript, dikembangkan pertama kali
tahun 1995 di Netscape Communication. Pada akhir tahun 1995 Netscape
Communication dan Sun Microsystem berkolaborasi dan mengganti nama
LiveScript menjadi JavaScript.
JavaScript adalah bahasa skrip yang ditempatkan pada kode HTML, dan
diproses pada sisi klien. Dengan adanya bahasa ini maka kemampuan dokumen
HTML menjadi lebih luas. Sebagai contoh, digunakan untuk validasi masukan pada
formulir sebelum diproses ke tahap selanjutnya. Bisa untuk membuat permainan
interaktif dan juga bisa untuk menambah desain web. Contoh program JavaScript:
<SCRIPT LANGUAGE =”JavaScript”>
<!--
document.write(“ASEP HERMAN SUYANTO<BR>”);
document.write(“Penulis Buku Desain Web”);
//-->
<SCRIPT>
2.7. Rekayasa Perangkat Lunak
Rekayasa Perangkat Lunak (RPL atau SE [Software Engineering]) adalah
satu bidan profesi yang mendalami cara-cara pengembangan perangkat lunak
termasuk pembuatan, pemeliharaan, manajemen organisasi perangkat lunak, dan
sebagainya (Simarmata J. , 2012).
Rekayasa perangkat lunak (software engineering) merupakan
pembangunan dengan menggunakan prinsip atau konsep rekayasa dengan tujuan
menghasilkan perangkat lunak yang bernilai ekonomi yang dipercaya dan bekerja
24

secara efisien menggunakan mesin. Perangkat lunak banyak dibuat dan pada
akhirnya sering tidak digunakan karena tidak memenuhi kebutuhan pelanggan atau
bahkan karena masalah non-teknis seperti keengganan pemakai perangkat lunak
(user) untuk mengubah cara kerja dari manual ke otomatis, atau ketidakmampuan
user menggunakan komputer. Oleh karena itu, rekayasa perangkat lunak
dibutuhkan agar perangkat lunak yang dibuat tidak hanya menjadi perangkat lunak
yang tidak terpakai (Rosa A.S., 2013)

2.8. Software Development Life Cycle (SDLC)


SDLC dimulai dari tahun 1960-an, untuk mengembangkan sistem skala
usaha besar secara fungsional untuk para konglomerat pada zaman itu. Sistemsistem
yang dibangun mengelola informasi kegiatan dan rutinitas dari
perusahaanperusahaan yang berpotensi memiliki data yang besar dalam
perkembangannya (Rosa A.S., 2013).
SDLC atau Software Development Life Cycle atau sering disebut juga
System Development Life Cycle adalah proses mengembangkan atau mengubah
suatu sistem perangkat lunak dengan menggunakan model-model dan metodologi
yang digunakan orang untuk mengembangkan sistem-sistem perangkat lunak
sebelumnya.
Tahapan-tahapan yang ada pada SDLC secara global adalah sebagai
berikut:
1. Inisiasi (Initiation)
2. Pengembangan konsep sistem (System Concept Development)
3. Perencanaan (Planning)
4. Analisis kebutuhan (Requirement analisis)
5. Desain (Desigin)
6. Pengembangan (Development)
7. Integrasi dan pengajuan (Integration and test)
8. Implementasi (Implementation)
9. Operasi dan pemeliharaan (Operation and maintenance)
10. Disposisi (Disposition).
25

2.9. Model Software Development Life Cycle (SDLC)


Software Development Life Cycle (SDLC) memiliki beberapa model
dalam penerapan tahapan prosesnya yaitu model prototipe, rapid application
development, dan spiral.

2.10.1 Model Prototipe


Model prototipe (Prototype Model) dimulai dari mengumpulkan
kebutuhan pelanggan terhadap perangkat lunak yang akan dibuat. Lalu dibuatlah
program prototype agar pelanggan lebih terbayang dengan apa yang sebenarnya
diinginkan. Program prototipe biasanya merupakan program yang belum jadi.
Program ini biasanya menyediakan tampilan alur simulasi perangkat lunak sehingga
tampak seperti perangkat lunak yang sudah jadi. Program prototipe ini dievaluasi
oleh pelanggan atau user sampai ditemukan spesifikasi yang sesuai dengan
keinginan pelanggan atau user (Rosa A.S., 2013).

Gambar 2. 3 Ilustrasi Model Prototype


Sumber: (Hakim, 2012)

Proses pada model prototyping bisa dijelaskan sebagai berikut:


1. Pengumpulan kebutuhan: developer dan klien bertemu dan
menentukan tujuanumum, kebutuhan yang diketahui dan gambaran
bagian-bagian yang akandibutuhkan berikutnya. Detil kebutuhan
mungkin tidak dibicarakan disini, pada awal pengumpulan kebutuhan
2. Perancangan : perancangan dilakukan cepat dan rancangan mewakili
semua aspek software yang diketahui, dan rancangan ini menjadi dasar
pembuatan prototype.
3. Evaluasi prototype: klien mengevaluasi prototype yang dibuat dan
digunakan untuk memperjelas kebutuhan software.
26

Perulangan ketiga proses ini terus berlangsung hingga semua kebutuhan


terpenuhi. Prototype dibuat untuk memuaskan kebutuhan klien dan untuk
memahami kebutuhan klien lebih baik. Untuk memodelkan sebuah perangkat lunak,
metode prototyping memiliki tahapan-tahapan didalam proses pengembangannya.
Tahapan inilah yang menentukan keberhasilan dari sebuah software. Pengembang
perangkat lunak harus memperhatikan tahapan dalam metode prototyping agar
aplikasi dapat diterima oleh pemakai. Dan tahapantahapan dalam prototyping
tersebut adalah sebagai berikut :
1. Pengumpulan Kebutuhan
Pelanggan dan pengembang bersama-sama mendefinisikan format
seluruh perangkat lunak, mengidentifikasi semua kebutuhan dan garis
besar sistem yang akan dibuat.
2. Membangun Prototype
Membangun prototype dengan membuat perancangan sementara yang
berfokus pada penyajian kepada pelanggan.
3. Evaluasi Prototype
Evaluasi ini dilakukan oleh pelanggan apakah prototype yang sudah
dibangun sudah sesuai dengan keinginan pelanggan. Jika sesuai maka
tahap 4 akan diambil, jika tidak maka prototype direvisi dengan
mengulang tahap 2 dan tahap 3.

4. Pengkodean Sistem
Dalam tahap ini prototype yang sudah disepakati diterjemahkan ke
dalam bahasa pemrograman yang sesuai.
5. Pengujian Sistem
Setelah sistem menjadi suatu perangkat lunak yang siap pakai, harus
diuji terlebih dahulu sebelum digunakan. Pengujian ini dilakukan
dengan whitebox dan blackbox.
6. Menggunakan Sistem
Perangkat lunak yang telah diuji dan diterima pelanggan untuk
digunakan (Hakim, 2012).
27

2.10.2 Model Rapid Application Development (RAD)

Gambar 2. 4 Model Rapid Application Development (RAD)

Rapid Application Development (RAD) adalah model proses


pengembangan peragkat lunak yang bersifat inkremental terutama untuk waktu
pengerjaan yang pendek. Model RAD adalah adaptasi dari model air terjun versi
kecepatan tinggi dengan menggunakan model air terjun untuk pengembangan setiap
komponen perangkat lunak (Rosa A.S., 2013).
Tahapan-tahapan pengembangan pada model RAD sebagai berikut :
1. Pemodelan Bisnis
2. Pemodelan Data
3. Pemodelan Proses
4. Pembuatan Aplikasi
5. Pengujian dan Pergantian
Model RAD memiliki kelemahan sebagai berikut :
1. Untuk pembuatan sistem perangkat lunak dengan skala besar maka
model RAD akan memerlukan sumber daya manusia yang cukup
besar untuk membentuk tim-tim yang mengembangkan komponen.
2. Jika tidak ada persetujuan untuk mengembangkan perangkat lunak
secara dengan cepat (rapid) maka proyek dengan model ini akan gagal
karena hanya akan bingung dengan mendefinisikan kebutuhan
pelanggan (customer) atau user.
28

3. Jika sistem perangkat lunak yang akan dibuat tidak bisa dimodulkan
(dibagi-bagi menjadi beberapa komponen) maka model RAD tidak
dapat digunakan untuk membuat sistem perangkat lunak ini karena
terlalu banyak campur tangan antar tim.
4. Model RAD tidak cocok digunakan untuk sistem perangkat lunak
yang memiliki resiko teknis sangat tinggi, misalnya menggunakan
teknologi baru yang belum banyak dikenal dan dikuasai pengembang.
Model RAD cocok diterapkan apabila memenuhi kriteria proyek
sebagai berikut :
1. Anggota tim sudah berpengalaman mengembangkan perangkat lunak
yang sejenis.
2. Pengembang sudah memiliki komponem-komponen sistem yang bisa
digunakan kembali pada proyek tersebut.

2.10.3 Model Spiral


Model spiral (spiral model) memasangkan iteratif pada model prototipe
dengan kontrol dan aspek sistematik yang diambil dari model air terjun. Model
spiral menyediakan pengembangan dengan cara cepat dengan perangkat lunak yang
memiliki versi yang terus bertambah fungsinya (increment).
Pada iterasi awal maka yang dihasilkan adalah prototipe sedangkan pada
iterasi akhir yang dihasilkan adalah perangkat lunak yang sudah lengkap. Model
spiral dibagi menjadi beberapa kerangka aktifitas atau disebut juga wilayah kerja
(task region). Banyaknya wilayah kerja biasanya diantara tiga sampai enam wilayah
sebagai berikut :
1. Komunikasi dengan pelanggan (customer communication)
2. Perencanaan (planning)
3. Analisis resiko (risk analysis)
4. Rekayasa (engineering)
5. Konstruksi dan Peluncuran (construction and release)
6. Evaluasi pelanggan (customer evaluation)
29

Gambar 2. 5 Model Spiral

2.10.4 Perbandingan Model


Berikut tabel perbandingan Model Prototipe, Spiral, dan Rapid Application
Development (RAD):

Tabel 2. 4 Perbandingan Model


Indikator
Metodologi
Rekayasa Ruang Lingkup Waktu (Time) Biaya
Proses
(Scope) (Cost
Prototipe Cocok untuk Membuat cetak Singkat karena Dengan waktu
pengembangan biru (blue print) aplikasi didesain yang singkat
perangkat sistem yang dapat langsung sehingga
lunak kemudian dapat dievaluasi oleh membutuhkan
berskala keci dievaluasi oleh user sedikit biaya
user
Rapid Cocok untuk Sistem dibagi Lebih singkat Dengan waktu
Application pengembangan menjadi beberapa karena yang lebih
Development perangkat lunak modul yang menggunakan singkat
(RAD) berskala kecil dikerjakan pendekatan sehingga
hingga menengah beberapa tim kontruksi membutuhkan
berbasis biaya yang
komponen lebih kecil

Spiral Cocok untuk Sistem dikerjakan Lebih lama Dengan waktu


pengembangan secara sekuensial karena yang lebih
perangkat (berurutan) menggunakan lama sehingga
lunak metode membutuhkan
berskala besar perulangan biaya yang
sistematis lebih mahal
(iteratif)
30

2.10. Unified Modeling Language (UML)


Pada perkembangan teknik pemrograman berorientasi objek muncullah
sebuah standarisasi bahasa pemodelan untuk pembangunan perangkat lunak yang
dibangun dengan menggunakan teknik pemrograman berorientasi objek, yaitu
Unified Modeling Language (UML). UML muncul karena adanya kebutuhan
pemodelan visual untuk menspesifikasikan, menggambarkan, membangun dan
dokumentasi dari sistem perangkat lunak. UML merupakan bahasa visual untuk
pemodelan dan komunikasi mengenai sebuah sistem dengan menggunakan diagram
dan teks-teks pendukung (Rosa A.S., 2013).

2.11.1 Diagram UML


Diagram UML dikelompokkan dalam 3 kategori. Pembagian kategori dan
macam-macam diagram tersebut dapat dilihat pada gambar dibawah ini:

Gambar 2. 6 Diagram-Diagram UML

2.11.1.1 Class Diagram


Class Diagram atau diagram kelas menggambarkan struktur sistem dari
segi pendefinisian kelas-kelas yang akan dibuat untuk membangunkan sistem.
31

Kelas memiliki apa yang disebut atribut dan metode atau operasi.
1. Attribut merupakan variable-variable yang dimiliki oleh suatu kelas.
2. Operasi atau metode adalah fungsi-fungsi yang dimiliki oleh suatu
kelas.
Kelas-kelas yang ada pada struktur sistem harus dapat melakukan
fungsifungsi sesuai dengan kebutuhan sistem. Susunan struktur kelas yang baik
pada diagram kelas sebaiknya memiliki jenis-jenis berikut :
1. Kelas main
Kelas yang memiliki fungsi awal dieksekusi ketika sistem dijalankan
2. Kelas yang menangani tampilan sistem
Kelas yang mendefinisikan dan mengatur tampilan ke pemakai.
3. Kelas yang diambil dari pendefinisian use case
Kelas yang menangani fungsi-fungsi yang harus ada diambil dari
pendefinisian use case.
4. Kelas yang diambil dari pendefinisian data.
Kelas yang digunakan untuk memegang atau membungkus data menjadi
sebuah kesatuan yang diambil maupun akan disimpan ke basis data.
Jenis-jenis kelas di atas juga dapat digabungkan satu sama lain sesuai
dengan pertimbangan yang dianggap baik asalkan fungsi-fungsi yang sebaiknya ada
pada struktur kelas tetap ada. Susunan kelas juga dapat ditambahkan kelas utilitas
seperti koneksi ke basis data, membaca file teks dan lain sebagainya sesuai
kebutuhan.
Dalam mendefinisikan metode yang ada di dalam kelas perlu
memperhatikan apa yang disebut dengan cohesion dan coupling. Cohesion adalah
ukuran seberapa dekat keterkaitan instruksi di dalam sebuah metode terkait satu
sama lain sedangkan coupling adalah ukuran seberapa dekat keterkaitan instruksi
antara metode yang satu dengan metode yang lain dalam sebuah kelas. Sebagai
aturan secara umum maka sebuah metode yang dibuat harus memiliki kader
cohesion yang kuat kada coupling yang lemah (Rosa A.S., 2013).
Berikut adalah symbol-simbol yang ada pada class diagram :

Tabel 2. 5 Simbol-Simbol Class Diagram


Simbol Deskripsi
32

Kelas pada struktur sistem

Relasi antar kelas dengan makna umum, asosiasi biasanya juga


disertai dengan multiplicity

Relasi antar kelas dengan makna generalisasispesialisasi


(umum khusus)

Relasi antar kelas dengan makna kelas yang satu digunakan


oleh kelas yang lain, asosiasi biasanya juga disertai dengan
multiplicity

Relasi antar kelas dengan makna kebergantungan antar kelas

Semua-bagian (whole-part)

Sumber : Rosa A.S, 2011

2.11.1.2 Use Case Diagram


Use case diagram atau diagram use case merupakan pemodelan untuk
kelakuan (behavior) sistem informasi yang akan dibuat. Use case mendeskripsikan
sebuah interaksi antara satu atau lebih aktor dengan sistem informasi yang akan
dibuat. Secara kasar, use case digunakan untuk mengetahui fungsi apa saja yang ada
di dalam sebuah sistem informasi dan siapa saja yang berhak menggunakan fungsi-
fungsi itu (Rosa A.S., 2013).
Berikut adalah symbol-simbol yang ada pada use case diagram :

Tabel 2. 6 Simbol-Simbol Use Case Diagram


Simbol Deskripsi

Orang, proses atau sistem lain yang berinteraksi dengan


sistem informasi yang akan dibuat di luar sistem informasi
yang akan dibuat itu sendiri, jadi walaupun simbol dari
aktor adalah gambar orang, tapi aktor belum tentu
merupakan orang; biasanya dinyatakan menggunakan
kata benda di awal frase nama aktor.
33

Fungsionalitas yang disediakan sistem sebagai unit-unit


yang saling bertukar pesan antar unit atau aktor; biasanya
dinyatakan dengan menggunakan kata kerja di awal frase
nama use case
Menjelaskan cakupan dari sistem yang dibuat serta
berguna sebagai batasan dari sistem tersebut.

Komunikasi antara aktor dan use case yang berpartisipasi


pada use case atau use case memiliki interaksi dengan
aktor.

Relasi use case tambahan ke sebuah use case dimana use


case yang ditambahkan dapat berdiri sendiri walau tanpa
use case tambahan itu; mirip dengan prinsif inheritance
pada pemrograman berorientasi objek; biasanya use case
tambahan memiliki nama depan yang sama dengan use
case yang ditambahkan
Hubungan generalisasi dan spesialisasi (umum-khusus)
antara dua buah use case dimana fungsi yang satu adalah
fungsi yang lebih umum dari lainnya

Relasi use case tambahkan ke sebuah use case dimana use


case yang ditambahkan memerlukan use case ini untuk
menjalankan fungsinya atau sebagai syarat dijalankan use
case ini.

2.11.1.3 Activity Diagram


Activity Diagram atau diagram aktifitas yang menggambarkan workflow
(aliran kerja) atau aktivitas dari sebuah sistem proses bisnis. Yang perlu
diperhatikan disini adalah bahwa diagram aktifitas menggambarkan aktifitas sistem
bukan apa yang dilakukan aktor, jadi aktifitas yang dapat dilakukan oleh sistem.
1. Rancangan proses bisnis dimana setiap urutan aktifitas yang
digambarkan merupakan proses bisnis sistem yang didefinisikan.
2. Urutan atau pengelompokan tampilan dari sistem/user interface dimana
setiap aktivitas dianggap memiliki sebuah rancangan antar muka
tampilan.
3. Rancangan pengujian dimana setiap aktifitas dianggap memerlukan
sebuah pengujian yang perlu didefinisikan kasus ujianya (Rosa A.S.,
2013).
Berikut adalah symbol-simbol yang ada pada activity diagram :

Tabel 2. 7 Simbol-Simbol Activity Diagram


Simbol Deskripsi
34

Menjelaskan proses dimulainya suatu alur kerja sistem.

Menjelaskan proses akhir dari alur kerja suatu sistem.

Menjelaskan isi dari alur kerja suatu sistem. Simbol ini


diawali dengan kata kerja.

Menjelaskan adanya beberapa pilihan yang terdapat pada


sistem tersebut.

Menjelaskan pengelompokan dari organisasi bisnis dalam


suatu sistem.

Menjelaskan penggabungan dari suatu action yang terdapat


pada suatu sistem menjadi satu.

Menjelaskan alur dari suatu aktivitas yang dilakukan

2.11.1.4 Sequence Diagram


Sequence Diagram atau diagram sekuen menggambarkan kelakuan objek
pada use case dengan mendeskripsikan waktu hidup objek dan message yang
dikirimkan dan diterima antar objek. Oleh karena itu untuk menggambarkan
diagram sekuen maka harus diketahui objek-objek yang terlibat dalam sebuah use
case beserta metode-metode yang dimiliki kelas yang diinstansiasi menjadi objek
itu. Membuat diagram sekuen juga dibutuhkan untuk melihat skenario yang ada
pada use case.
Banyaknya diagram sekuen yang harus digambar adalah minimal sebanyak
pendefinisian use case yang memilki proses sendiri atau jalannya pesan sudah
35

dicakup pada diagram sekuen sehingga semakin banyak use case yang didefiniskan
maka diagram sekuen yang harus dibuat juga semakin banyak (Rosa A.S., 2013).

Tabel 2. 8 Simbol-Simbol Sequence Diagram


Simbol Deskripsi

Menjelaskan pengguna dalam suatu sistem.

Menjelaskan sebagai alur dari sistem juga sebagai


penghubung antar obyek yang diberi nomor urutan.

Menjelaskan awal dan akhir suatu perintah pada


sistem.

Menjelaskan sebuah gambaran suatu form.

Menjelaskan hubungan suatu kegiatan yang dilakukan


sistem.

Menjelaskan penghubung antar boundary.

Menjelaskan suatu kegiatan pada sistem.

2.11. Metode Pengumpulan Data


Hal pertama yang dilakukan dalam analisis sistem adalah melakukan
pengumpulan data. Ada beberapa teknik pengumpulan data yang penulis gunakan
sebagai berikut :
1. Metode Observasi
2. Teknik Wawancara (Rosa A.S., 2013).
3. Teknik Kuisioner (Sugiyono, 2012).
36

2.12.1 Metode Observasi


Pengumpulan data dengan menggunakan observasi
mempunyai keuntungan yaitu :
1. Analisis dapat melihat langsung bagaimana sistem lama berjalan.
2. Mampu menghasilkan gambaran lebih baik jika dibandingkan dengan
teknik lainya.
Sedangkan kelemahan dengan menggunakan metode observasi adalah :
1. Membutuhkan waktu cukup lama karena jika observasi waktunya
sangat terbatas maka gambaran sistem secara keseluruhan akan sulit
untuk diperoleh.
2. Orang-orang yang sedang diamati biasanya perilakunya akan terlihat
berbeda dengan perilaku sehari-hari (cenderung berusaha terlihat
baik). Hal ini akan menyebabkan gambaran yang diperoleh selama
observasi akan berbeda dengan perilaku sehari-hari.
3. Dapat mengganggu pekerjaan orang-orang pada bagian yang sedang
diamati.
Berikut ini adalah petunjuk untuk melakukan observasi :
1. Tentukan hal-hal apa saja yang akan diobservasi agar kegiatan
observasi menghasilkan sesuai dengan yang diharapakan.
2. Mintalah ijin kepada orang yang berwenang pada bagian yang akan
diobservasi.
3. Berusaha sesedikit mungkin agar tidak mengganggu pekerjaan orang
lain.
4. Jika ada yang tidak mengerti, cobalah bertanya. Jangan membuat
asumsi sendiri (Rosa A.S., 2013).

2.12.2 Teknik Wawancara


Pengumpulan data dengan menggunakan wawancara mempunyai
beberapa keuntungan sebagai berikut :
1. Lebih mudah dalam menggali bagian sistem mana yang dianggap baik
dan bagian mana yang dianggap kurang baik.

2. Jika ada bagian tertentu yang perlu untuk digali lebih dalam, dapat
langsung menanyakan kepada narasumber.
37

3. Dapat menggali kebutuhan user secara lebih jelas.


4. User dapat mengungkapkan kebutuhannya secara lebih bebas. Selain
mempunyai beberapa kelebihan tersebut, teknik wawancara juga
mempunyai beberapa kelemahan.
Berikut ini adalah beberapa kelemahan dari metode wawancara sebagai
berikut :
1. Wawancara akan sulit dilakukan jika narasumber kurang dapat
mengungkapkan kebutuhannya.
2. Pertanyaan dapat menjadi titik tidak terarah, terlalu fokus pada hal-hal
tertentu dan mengabaikan bagian lain.
Bagian ini adalah beberapa panduan dalam melakukan kegiatan
wawancara agar memperoleh daya yang diharapkan.
1. Buatlah jadwal wawancara dengan narasumber dan baritahulah
maksud dan wawancara tersebut.
2. Buatlah panduan wawancara yang akan dijadikan arahan agar
pertanyaan dapat fokus kepada hal-hal yang dibutuhkan.
3. Gunakan pernyataan yang jelas dan mudah dipahami.
4. Cobalah untuk menggali mengenai kelebihan dan kekurangan sistem
yang telah berjalan sebelumnya.
5. Bisa berimprovisasi dengan mencoba menggali bagian-bagian
tertentu yang penting.
6. Catat hasil wawancara tersebut (Rosa A.S., 2013).

2.12.3 Teknik Kuesioner (Angket)


Kuesioner meruakan teknik pengumpulan data yang dilakukan dengan cara
memberi seperangkat pertanyaan atau pernyataan tertulis kepada responden untuk
dijawabnya. Kuesioner merupakan teknik pengumpulan data yang efisien bila
peneliti tahu dengan pasti variable yang akan diukur dan tahu apa yang bias
diharapkan dari responden. Selain itu, kuesioner juga cocok digunakan bila jumlah
responden cukup besar dan tersebar di wilayah yang luas. Kuesioner dapat berupa
pertanyaan/pernyataan tertutup atau dikirim melalui pos, internet.
Terdapat beberapa prinsip penulisan angket yaitu:
38

1. Isi dan tujuan pertanyaan berbentuk pengukuran harus dilakukan


dengan teliti, setiap pertanyaan harus skala pengukuran dan jumlah
itemnya mencukupi untuk mengukur variable yang diteliti
2. Bahasa yang digunakan dalam penulisan kuesioner (angket) harus
disesuaikan dengan kemampuan berbahasa responden.
3. Tipe dan bentuk pertanyaan dalam angket dapat terbuka atau tertutup,
(kalau dalam wawancara: terstruktur dan tidak terstruktur), dan
bentuknya dapat menggunakan kalimat positif atau negatif.
Pertanyaan terbuka adalah, petanyaan yang mengharapkan responden
untuk menuliskan jawabannya berbentuk uraian tentang suatu hal.
Pertanyaan tertutup adalah, pertanyaan yang akan membantu
responden untuk menjawab dengan cepat, dan juga memudahkan
peneliti dalam melakukan analisis data terhadap seluruh angket yang
telah terkumpul
4. Pertanyaan tidak mendua sehinggan menyulitkan responden untuk
memberikan jawaban.
5. Tidak menanyakan yang sudah lupa atau pertanyaan yang
memerlukan jawaban dengan berfikir berat
6. Pertanyaan tidak menggiring ke jawaban yang baik maupun yang
jelek saja.
7. Panjang pertanyaan dalam angket sebaiknya tidak terlalu panjang.
8. Urutan pertanyaan dimulai dari yang umum menuju ke hal yang
spesifik
9. Prinsip pengukuran angket yang diberikan kepada responden harus
dapat mengukur variable yang akan diteliti.
10. Penampilan fisik angket sebaiknya di cetak di kertas yang bagus agar
mendapatkan respon menarik oleh responden.

2.12.3.1 Skala Likert


Skala likert merupakan skala yang mengukur kesetujuan atau
ketidaksetujuan seseorang terhadap serangkaian pernyataan berkaitan dengan
keyakinan atau perilaku mengenai suatu obyek teretentu. Sebenarnya skala likert
merupakan skala ordinal akan tetapi dalam penilitian-penelitian bisnis khususnya
pemasaran seringkali dimodifikasi dan asumsikan sebagai skala interval.
39

Biasanya format skala likert merupakan perpaduan antara kesetujuan dan


ketidak setujuan, skala ini dikembangkan oleh Rensis Likert sehingga dikenal
dengan skala likert. Skala ini umumnya menggunakan penilaian yaitu: Sangat
Tidak Setuju, Tidak Setuju, Netral, Setuju, dan Sangat Setuju.

2.12. Basis Data


Sistem basis data adalah sistem terkomputerisasi yang tujuan utamanya
adalah memelihara data yang sudah diolah atau informasi dan membuat informasi
tersedia saat dibutuhkan. Pada intinya basis data adalah media untuk menyimpan
data agar dapat diakses dengan mudah dan cepat. Sistem informasi tidak dapat
dipisahkan dengan kebutuhan akan basis data apapun bentuknya, entah berupa file
teks ataupun Database Management System (DBMS). Kebutuhan basis data dalam
sistem informasi meliputi:
• Memamasukkan, menyimpan, dan mengambil data
• Membuat laporan berdasarkan data yang telah disimpan

2.13.1 DBMS (Database Management System)


DBMS (Database Management System) atau dalam bahasa Indonesia
sering disebut sebagai Sistem Manajemen Basis Data adalah suatu sistem aplikasi
yang digunakan untuk menyimpan, mengelola, dan menampilkan data. Suatu sistem
aplikasi disebut DBMS jika memenuhi persyaratan minimal sebagai berikut:
• Menyediakan fasilitas untuk mengelola akses data
• Mampu menangani integritas data
• Mampu menangani integritas data
• Mampu menangani backup data (Rosa A.S., 2013).
2.13.2 SQL
SQL (Structured Query Language) adalah bahasa yang digunakan untuk
mengelola data pada RDBMS. SQL awalnya dikembangkan berdasarkan teori
aljabar relasional dan kalkulus (Rosa A.S., 2013).

2.13.3 MySQL
MySQL merupakan salah satu database kelas dunia yang sangat cocok bila
dipadukan dengan bahasa pemrograman PHP. MySQL bekerja menggunakan
40

bahasa SQL (Structure Query Language) yang merupakan bahasa standar yang
digunakan untuk manipulasi database.
Ada beberapa alasan yang menjadikan database MySQL sangat diminati
oleh para programmer, diantaranya :
1. Bersifat open source
2. Menggunakan bahasa SQL (Structure Query Language), yang
merupakan standar bahasa dalam pengolahan data.
3. Performance dan reliable, pemrosesan database-nya sangat cepat dan
stabil.
4. Sangat mudah dipelajari (ease of use)
5. Memiliki dukungan (group) pengguna MySQL
6. Lintas platform, dapat digunakan pada berbagai Sistem Operasi berbeda.
7. Multiuser, dimana MySQL dapat digunakan oleh banyak user dalam
waktu yang bersamaan tanpa mengalami konflik.
8. Dan masih banyak lagi (Saputra, 2012).

2.13.3.1 DDL (Data Definition Language)


DDL merupakan perintah-perintah yang biasa digunakan administrator
database untuk mendefinisikan skema dan subskema database. Data Definition
Language (DDL) mempunyai fungsi utama untuk mendefinisikan data dalam
database secara logika, diantaranya yaitu:
1. Digunakan untuk mendefinisikan karakteristik dari record (meliputi
nama, tipe dan lebar dari field), untuk menentukan kunci field
menyediakan cara untuk menentukan hubungan dengan data di file
lain, untuk mengubah struktur dari record.

2. DDL digunakan untuk mendefinisikan, mengubah, serta menghapus


basis data dari objek-objek yang diperlukan dalam basis data,
misalnya tabel. Perintah yang termasuk DDL:
a. CREATE untuk membuat, termasuk diantaranya membuat
database dan tabel baru.
b. ALTER untuk mengubah struktur tabel yang telah dibuat.
c. DROP untuk meghapus database dan tabel. (Sutejo, 2013)
41

2.13.3.2 DML (Data Manipulation Language)


DML merupakan perintah-perintah yang memungkinkan pengguna
melakukan akses dan manipulasi data sebagaimana yang telah diorganisasikan
sebelumnya dalam model data yang tepat. Data Manipulation Language digunakan
untuk memanipulasi database yang telah didefinisikan dengan DDL. Perintah yang
termasuk DML:
1. INSERT untuk menyisipkan atau memasukan dalam tabel.
2. UPDATE untuk memperbaharui data lama menjadi data terkini.
3. DELETE untuk menghapus data dari tabel.
4. SELECT untuk mengambil data atau menampilkan data dari satu tabel
atau beberapa tabel. (Sutejo, 2013)

2.13.3.3 DCL (Data Control Language)


DCL merupakan perintah-perintah yang digunakan untuk mengontrol data.
Perintah yang termasuk DCL:
1. GRAND untuk memberikan hak atau izin akses oleh administrator
server kepada user.
2. REVOKE untuk menghilangkan atau mencabut hak akses yang telah
diberikan kepada user oleh administrator. (Sutejo, 2013)

2.13. Pengujian Perangkar Lunak


Menurut (Rizky, 2012) dalam bukunya “Konsep Dasar Rekayasa
Perangkat Lunak” menyatakan bahwa pengujian atau testing adalah sebuah proses
yang diejawantahkan sebagai siklus hidup dan merupakan bagian dari proses
rekayasa perangkat lunak secara terintegrasi demi memastikan kualitas dari
perangkat lunak serta memenuhi kebutuhan teknis yang telah disepakati dari awal
(Rosa A.S., 2013).

2.14.1 Black Box Testing


Menurut (Rizky, 2012) dalam bukunya “Konsep Dasar Rekayasa
Perangkat Lunak” menyatakan bahwa black box testing adalah tipe testing yang
memperlakukan perangkat lunak yang tidak diketahui kinerja internalnya. Sehingga
para tester memandang perangkat lunak seperti itu layaknya sebuah “kotak hitam”
42

yang tidak penting dilihat isinya, tapi cukup dikenai proses testing dibagian luar
(Rosa A.S., 2013).
Pengujian black box berfokus pada persyaratan fungsional yang
memungkinkan perekayasa perangkat lunak mendapatkan serangkaian kondisi
input yang sepenuhnya menggunakan persyaratan fungsional untuk suatu program,
Roger menegaskan bahwa pengujian black-box berusaha menemukan kesalahan
dalam kategori sebagai berikut (Pressman R. S., 2012):
a. Fungsi-fungsi yang tidak benar atau hilang
b. Kesalahan interface
c. Kesalahan dalam struktur data atau akses database eksternal
d. Kesalahan kinerja
e. Inisialisasi dan kesalahan terminasi

2.14.2 White Box Testing


Menurut (Rizky, 2012) dalam bukunya “Konsep Dasar Rekayasa
Perangkat Lunak” menyatakan bahwa white box testing secara umum merupakan
jenis testing yang lebih terkonsentrasi terhadap isi dari perangkat lunak itu sendiri.
Jenis ini lebih banyak berkonsentrasi kepada source code dari perangkat lunak yang
dibuat, sehingga membutuhkan proses testing yang jauh lebih lama dan lebih
“mahal” dikarenakan membutuhkan ketelitian dari para tester serta kemampuan
teknis pemrograman bagi para testernya (Rosa A.S., 2013).
Pengujian white box, yang kadang-kadang disebut pengujian glass-box,
adalah metode desain test case yang menggunakan struktur kontrol desain
prosedural untuk memperoleh test case. Dengan menggunakan metode pengujian
white box, perekayasa sistem dapat melakukan test case yang :

1. Memberikan jaminan bahwa semua jalur independen pada suatu


modul telah digunakan paling tidak satu kali;
2. menggunakan semua keputusan logis pada sisi true dan false;
3. mengeksekusi semua loop pada batasan mereka dan pada batas
operasional mereka;
4. menggunakan struktur data internal untuk menjamin validitasnya.

Adapun teknik pengujian white-box, yaitu Pengujian Basis Path yang


diusulkan pertama kali oleh Tom McCabe. Metode basis path ini memungkinkan
43

desainer test case mengukur kompleksitas logis dari desain prosedural dan
menggunakannya sebagai pedoman untuk menetapkan basis set dari jalur eksekusi
(Pressman R. S., 2012).
Pengujian basis path adalah teknik pengujian white-box yang diusulkan
pertama kali oleh Tom McCabe. Metode basis path ini memungkinkan desainer test
case mengukur kompleksitas logis dari desain prosedural dan menggunakannya
sebagai pedoman untuk menetapkan basis set dari jalur eksekusi. Test case yang
dilakukan untuk menggunakan basis set tersebut dijamin untuk menggunakan setiap
statemen di dalam program paling tidak sekali selama pengujian.

Gambar 2. 7 Notasi Diagram Aliran

Kompleksitas silkomatis adalah metriks perangkat lunak yang


memberikan pengukuran kuantitatif terhadap kompleksitas logis suatu program.
Bila metriks ini digunakan dalam konteks metode pengujian basis path, maka nilai
yang terhitung untuk kompleksitas sikiomatis menentukan jumlah jalur independen
dalam basis set suatu program dan memberi batas atas bagi jumlah pengujian yang
harus dilakukan untuk memastikan bahwa semua statemen telah dieksekusi
sedikitnya satu kali.

Gambar 2. 8 Logika Gabungan

Kompleksitas dihitung dalam salah satu dari tiga cara berikut :


44

1. Jumlah region grafik alir sesuai dengan kompleksitas siklomatis


2. Komplesitas siklomatis, V(G), untuk grafik alir G ditentukan sebagai
V(G) = E – N + 2, dimana E adalah jumlah edge grafik alir dan N
adalah jumlah simpul grafik alir.
3. Kompleksitas siklomatis, V(G), untuk grafik alir G juga ditentukan
sebagai V(G) = P + 1, dimana P adalah jumlah simpul predikat yang
diisikan dalam grafik alir G

2.14. Penelitian Sebelumnya


1. Penelitian Ke-1
Judul : APLIKASI PEMBELAJARAN AGAMA ISLAM UNTUK
ANAK-ANAK BERBASIS ANDROID
MENGGUNAKAN ALGORITMA FISHER-
YATES SHUFFLE
Penulis : Cul Meltari, Huzaeni
Ringkasan : Perkembangan teknologi yang cukup pesat terlihat pada
teknologi mobile. Perkembangan teknologi mobile sangat membantu
dalam menyelesaikan masalah, terutama bagi yang memiliki
kesibukan lebih dan mobilitas tinggi. Dengan adanya teknologi
mobile dapat meminimalisasi penggunaan buku sebagai media
belajar, karena dengan teknologi inilah maka tidak perlu lagi
membawa banyak buku untuk keperluan belajar. Oleh karena itu
penulis tertarik membuat suatu aplikasi pembelajaran agama Islam
untuk anak-anak berbasis Android menggunakan algoritma
fisheryates shuffle. Aplikasi ini memberikan suatu solusi
pembelajaran yang dapat membantu masyarakat, khususnya para
orang tua yang ingin mengajarkan ilmu agama Islam kepada anaknya
tanpa harus membeli buku dan diharapkan dengan adanya aplikasi ini
dapat membantu user dalam melakukan pembelajaran dengan mudah
dan praktis karena dapat dilakukan dimana saja. Didalam aplikasi ini
user dapat mempelajari wudhu, tayamum, shalat, doa sehari-hari dan
beberapa materi Islam dasar seperti rukun iman, rukun Islam dan sirah
an-nabawiah serta dilengkapi dengan latihan soal materi. Pada setiap
bacaan doa di dalam aplikasi ini dilengkapi dengan sound dan soal
45

latihan ditampilkan secara acak dengan menggunakan algoritma


fisher-yates shuffle. Algoritma fisher-yates shuffle merupakan suatu
algoritma yang memberikan teknik pengacakan pada soal sehingga
soal yang keluar akan berbeda dan bisa dihasilkan tanpa duplikasi.
Aplikasi ini dibuat dengan menggunakan bahasa pemrograman Java
serta software pendukung lainnya seperti Android SDK, Eclipse.
Pengujian aplikasi yang dilakukan dengan menjalankan user interface
dan memberikan kuesioner terhadap user yaitu siswa/i dan guru
agama Islam. Dari hasil pengujian, dapat ditarik kesimpulan bahwa
algoritma dalam aplikasi ini dapat diterapkan dengan benar, tingkat
kemunculan soal yang paling sering muncul adalah 40% dan paling
sedikit muncul adalah 8% dan berdasarkan pengujian kuesioner 65%
responden siswa/i menyatakan aplikasi ini sudah memenuhi untuk
anak-anak dan 75% responden guru agama Islam menyatakan bahasa
yang digunakan dalam aplikasi ini mudah dimengerti.
Kesimpulan :
Berdasarkan uraian hasil dan pembahasan terhadap aplikasi, maka
dapat disimpulkan bahwa :

1. Berdasarkan permutasi dari 50 soal, algoritma fisher-yates shuffle


dalam aplikasi ini dapat diterapkan dengan benar untuk mengacak
soal latihan.
2. Tingkat kemunculan soal nomor urut ke-5 adalah 40%,
sedangkan soal dengan nomor urut ke-23 dan ke-38 adalah 8%.
3. Hasil pengujian sistem berdasarkan pembagian kuesioner kepada
20 responden siswa/i kelas IV MIN Kutablang didapatkan bahwa
65% responden menyatakan aplikasi ini sudah memenuhi untuk
anak-anak.
4. Sedangkan hasil pengujian sistem dengan pembagian kuesioner
kepada 20 responden guru agama Islam didapatkan bahwa 75%
responden menyatakan bahasa yang digunakan dalam aplikasi ini
mudah dimengerti.

2. Penelitian Ke-2
46

Judul : Perancangan Aplikasi Quiz Menggunakan


Metode Pengacakan Linear Congruential Generator
(LCG) Berbasis Android
Penulis : Riki Wahyudi, Hendra Handoko Syahputra
Pasaribu
Ringkasana : Sebuah aplikasi quiz yang memiliki unsur Mobile
Learning (M–Learning) yang ada dalam smartphone tentu dapat
memberikan hiburan yang menarik kepada pengguna, serta dapat
memberikan media pembelajaran untuk menambah wawasan tentang
ilmu pengetahuan. Quiz merupakan bentuk permainan atau pikiran
dimana pemain (sebagai individu atau dalam tim) berusaha untuk
menjawab pertanyaan dengan benar dalam mencapai satu tujuan
dalam
pembelajaran. Pada aplikasi ini pengguna akan diberi pertanyaan
tentang ilmu pengetahuan umum, sehingga pengguna dipaksa untuk
berfikir dalam menjawab pertanyaan tersebut. Metode yang
digunakan dalam perancangan aplikasi ini adalah metode Linear
Congruential Generator (LCG) dan metode String Matching (SM),
dimana metode LCG berfungsi untuk mengacak pertanyaan yang ada
pada aplikasi secara random, sedangkan metode String Matching
(SM) berfungsi untuk pencocokan jawaban yang dipilih “true and
false”.
Kesimpulan :
Berdasarkan uraian dan pengujian yang telah dilakukan maka dapat di
ambil kesimpulan yaitu Aplikasi Quiz ini dirancang dengan terfokus
pada penyajian soal yang berupa soal pilihan ganda serta dengan
tampilan user interface yang mudah dipahami sehingga pengguna
akan mudah mengerti untuk menggunakan aplikasi ini. Metode Linear
Congruential dapat melakukan pengacakan soal dengan kombinasi
konstanta yang tepat maka akan dihasilkan pengacakan soal yang
benar-benar acak.
3. Penelitian Ke-3
47

Judul : MODIFIKASI METODE LINEAR


CONGRUENTIAL GENERATOR UNTUK
OPTIMALISASI HASIL ACAK
Penulis : I Made Divya Biantara, I Made Sudana, Alfa Faridh
Suni, Suryono, Arimaz Hangga
Ringkasan : Pelaksanaan ujian secara konvensional
dianggap kurang efektif dan efisien karena membutuhkan biaya yang
besar dan waktu yang lama dalam pelaksanaannya sehingga perlu
dilakukan perbaikan dengan mengubah sistem ujian menjadi
komputerisasi. Dalam setiap pelaksanaan ujian perlu memperhatikan
tindak kecurangan yang dilakukan siswa berupa mencontek dan kerja
sama bertukar jawaban. Penelitian ini bertujuan untuk memberikan
soal acak yang berbeda kepada setiap siswa dengan menggunakan
metode Linear Congruential Generator (LCG). Akan tetapi
penggunaan metode LCG masih memiliki kelemahan dimana hasil
pengacakan mudah ditebak sehingga perlu adanya optimalisasi
pengacakan yaitu menggunakan dua LCG dan bantuan matrik yang
menjadi metode Coupled Linear Congruential Generator (CLCG).
Metode modifikasi CLCG menghasilkan pengacakan yang lebih baik
dan pola yang lebih rumit dibandingkan dengan metode LCG.
Kesimpulan :
Hasil simulasi menunjukkan metode Couple Linear Congruential
Generator memiliki pola pengacakan yang lebih rumit dibandingkan
metode Linear Congruential Generator. Pola pengacakan dipengaruhi
oleh nilai dan banyaknya pemberian kombinasi nilai pada variabel
dan. Semakin banyak kombinasi nilai variabel dan maka semakin
banyak pengacakan yang dihasilkan. Selain itu, semakin banyak nilai
variabel
maka semakin rumit pola pengacakan yang dihasilkan. Karena
dimodifikasi menggunakan matrik sehingga hanya pada kondisi
tertentu dimana jumlah soal yang diacak harus sama dengan jumlah
elemen yang terdapat dalam matrik. Apabila diimplementasikan dalam
pengacakan soal dianjurkan menggunakan metode Coupled Linear
48

Congruential Generator dikarenakan pola dan hasil pengacakan yang


lebih bagus.
4. Penelitian ke-4
Judul : Penerapan Algoritma Fisher-Yates Pada Aplikasi
The Lost Insect Untuk Pengenalan Jenis Serangga
Berbasis Unity 3D
Penulis : Ryan Nugraha, Edo Exridores, Hendri Sopryadi Ringkasan
: Fisher-Yates shuffling atau biasa dikenal dengan Algoritma Fisher-
Yates saat ini telah banyak digunakan dalam proses pengembangan
suatu penelitian. Metode pengacakan ini termasuk metode
pengacakan yang baik pada pengembangan suatu aplikasi.
Implementasi algoritme tersebut di dalam aplikasi ini didasari juga
pada masalah yang terjadi sehari-hari, yaitu kurangnya minat anak –
anak untuk mengenal berbagai jenis serangga. Sehingga
dibutuhkanlah suatu aplikasi pengenalan jenis serangga bagi
anakanak yang tidak menjenuhkan yakni, dengan membuat game
pembelajaran serangga. Aplikasi yang dibangun adalah The Lost
Insect bertemakan pengenalan serangga dengan metode petualangan
pada habitat serangga dan pengacakan soal berbasis Fisher-Yates.
Selain itu aplikasi The Lost Insect dibangun untuk menggali minat
belajar anak-anak terhadap pengenalan jenis serangga. Aplikasi ini
juga dibangun dengan menggunakan metodologi RAD (Rapid
Application Development) dikarenakan waktu pengerjaan aplikasi
yang relatif singkat. Berdasarkan dari hasil pengujian dengan
persentase tingkat aplikasi dapat dengan mudah digunakan dengan
perolehan persentase mencapai 66,25 % dan kepuasan penggunaanya
mencapai 80 %.
Kesimpulan :
Pada bab ini dipaparkan kesimpulan berdasarkan hasil proses
pengembangan dan pengimplementasian, yaitu :
1. Pengacakan dengan Algoritme Fiher-Yates dapat digunakan pada
aplikasi The Lost Insect.
2. Aplikasi dapat memenuhi tujuan awal yaitu berdasarkan hasil
pengujian melalui kuesioner yang ada, aplikasi dapat membantu
49

anak-anak dalam mengenali serangga dengan persentase tingkat


kepuasan pemakainya mencapai 80 %, dan aplikasi dapat dengan
mudah digunakan dengan perolehan persentase mencapai
66,25%.
5. Penelitian Ke-5
Judul : GAME EDUKASI PENCOCOKAN GAMBAR
PAHLAWAN INDONESIA MENGGUNAKAN
ALGORITMA FISHER-YATES
Penulis : Ferizal, Herdiansyah, Piko Listrio
Ringkasan : Fisher-Yates shuffling atau biasa dikenal dengan
Algoritma Fisher-Yates saat ini telah banyak digunakan dalam proses
pengembangan suatu penelitian. Metode pengacakan ini termasuk
metode yang baik pada pengembangan suatu aplikasi. Implementasi
algoritme tersebut di dalam aplikasi ini didasari juga pada masalah
yang terjadi sehari-hari, yaitu kurangnya minat anak– anak untuk
mengenal Pahlawan Indonesia. Sehingga dibutuhkanlah suatu aplikasi
pengenalan Pahlawan bagi anak-anak yang tidak menjenuhkan yakni,
dengan membuat game pembelajaran Pahlawan Indonesia. Aplikasi
yang dibangun adalah Game Edukasi Pencocokan
Gambar bertemakan Pahlawan Indonesia dengan metode UML
(Unified Modelling Language) dan pengacakan berbasis FisherYates.
Selain itu aplikasi pencocokan gambar dibangun untuk menggali
pengetahuan anak-anak terhadap Pahlawan Indonesia. Kesimpulan :
Berdasarkan hasil pengujian algoritma FisherYates yang diterapkan
pada permainan acak gambar didapatkan kesimpulan bahwa algoritma
ini dapat berjalan dengan baik di dalam aplikasi akan tetapi jumlah
data yang diacak sangat mempengaruhi hasil dari pengacakan yang
dilakukan oleh algoritma.

2.15. Penelitian Sekarang


Penelitian yang akan dilakukan saat ini:
1. Metode pengembangan software yang digunakan adalah SDLC
dengan pendekatan Prototype.
50

2. Objek dalam penelitian ini adalah SMA Sunan Gunung Jati


Karawang.
3. Software dan tools yang akan digunakan yaitu Notepad++, Xampp,
dan untuk pemodelan menggunakan Microsoft Visio.
4. Bahasa pemrograman menggunakan PHP, HTML, JavaScript.
Hasil penelitian yang akan didapat adalah sebuah aplikasi yang dapat
mengelola pengacakan soal yang ada di SMA Sunan Gunung Jati Karawang.
Dengan fasilitas Pengisian Soal, Penilaian, Input Soal, dan Bank Soal.
BAB 3 OBJEK DAN METODOLOGI PENELITIAN
3.1 Objek Penelitian
Objek penelitian yang akan diteliti adalah evaluasi siswa yang dilakukan
di SMA Sunan Gunung Jati Karawang.

3.1.1 Visi dan Misi SMA Sunan Gunung Jati Karawang


1. Visi Sekolah :
Unggul dan Berprestasi (UBER)
2. Misi Sekolah :
a. Meningkatkan kualitas kegiatan belajar mengajar.
b. Meningkatkan prestasi siswa bidang akademik dan
ekstrakulikuler.
c. Mengimplementasikan iptek yang kompetitif dalam era
globalisasi.

3.1.2 Tempat dan Waktu Penelitian


1. Tempat penelitian
Tempat penelitian dilakukan di SMA Sunan Gunung Jati Karawang.
2. Waktu penelitian
Waktu penelitian dilakukan yaitu pada bulan November 2016 sampai
dengan selesai.

3.2 Metode Penelitian


3.2.1 Metode Pengumpulan Data
Metode yang digunakan penulis dalam pengumpulan data adalah dengan
cara mengumpulkan data dari sumber data primer dan sumber data sekunder,
sebagai berikut:

3.2.1.1 Sumber Data Primer


Sumber data primer merupakan data yang didapat langsung dari objek
yang sedang diteliti, cara yang digunakan untuk mengumpulkan data primer adalah
sebagai berikut:
52

53
1. Observasi
Observasi merupakan salah satu metode pengumpulan data dengan
langsung terjun ke lapangan untuk mengamati permasalahan yang
terjadi secara langsung ditempat kejadian. Adapun observasi yang
akan dilakukan oleh penulis di SMA Sunan Gunung Jati Karawang:
- Mengamati permasalahan-permasalahan yang ada pada SMA
Sunan Gunung Jati Karawang:
- Melakukan pencatatan permasalahan yang ada
- Mengamati proses sistem yang berjalan pada SMA Gunung Jati
Karawang
2. Riset Lapangan
Data yang diambil secara langsung pada objek permasalahan yang
berkaitan dengan penilitian ini adalah melalui: a. Wawancara
Metode wawancara merupakan sesi tanya jawab yang dilakukan
penulis untuk mewawancarai, penulis berperan sebagai
pewawancara yang mewawancarai pihak-pihak yang
berhubungan dengan penelitian yang penulis lakukan. Penulis
akan melakukan wawancara langsung di SMA Sunan Gunung
Jati Karawang mengenai permasalahan yang dibahas mengenai
evaluasi siswa. Adapun
- Memberikan pertanyaan langsung antar muka kepada kepala
sekolah dan guru.
- Menanyakan apa saja yang dibutuhkan sesuai dengan
penelitian yang dilakukan.
b. Studi Literatur
Metode ini adalah metode untuk mempelajari buku-buku dan
peferensi yang berkaitan dengan teori-teori yang ada dalam
penelitian.

3.3 Metode Penelitian


Metode penelitian yang digunakan dalam pengembangan desain dan
implementasi rancang bangun aplikasi tes online yaitu System Development Life
Cycle (SDLC). Penelitian menghasilkan produk perangkat lunak yang
menggunakan web dan dilengkapu dengan dokumentasi sistem yang lengkap
53

beserta alat pendukungnya yang diimplementasikan pada SMA Sunan Gunung Jati
Karawang.

3.4 Rancangan Penelitian


Rancangan penelitian menggunakan metode rekayasa perangkat lunak
dengan menggunakan metodologi System Development Life Cycle (SDLC) yaitu
dengan model prototipe dan alur penelitian sebagai berikut:

Gambar 3. 1 Diagram Rancangan Penelitian

3.4.1 Identifikasi Kebutuhan Pemakai


Penelitian diawali dengan melakukan identifikasi kebutuhan pemakai.
Sebelum mengidentifikasi kebutuhan pemakai diperlukan analisis terhadap sistem
yang berjalan. Analisis kebutuhan sistem dilakukan untuk mengidentifikasi data apa
saja yang dibutuhkan serta kebutuhan fungsional dan non-fungsional dari sistem
yang akan dibangun. Metode pengumpulan data yang digunakan pada tahap ini
yaitu studi kepustakaan (library research), wawancara, observasi, dan kuesioner.
54

3.4.1.1 Studi Kepustakaan


Studi kepustakaan dilakukan sebelum melakukan penelitian untuk mencari
informasi yang relevan dengan masalah yang akan diteliti, mencari landasan teori
sebagai pedoman bagi pendekatan pemecahan masalah. Selama penelitian
berlangsung, studi kepustakaan dilakukan untuk mengumpulkan
informasiinformasi yang lebih khusus mengenai masalah yang diteliti. Semua
pengumpulan informasi diperoleh dengan cara menggali informasi dari berbagai
literatur.

3.4.1.2 Wawancara
Identifikasi kebutuhan sistem dilakukan dengan wawancara kepada kepala
sekolah SMA Sunan Gunung Jati Karawang. Hasil yang diharapkan dari
wawancara tersebut yaitu dapat menjawab kebutuhan data, kebutuhan fungsional,
dan non-fungsional sistem.

3.4.1.3 Observasi
Pada penelitian ini penulis mengamati secara langsung proses berjalannya
kegiatan belajar dan evaluasi siswa di SMA Sunan Gunung Jati Karawang guna
melakukan analisis terhadap sistem yang berjalan sehingga dapat dilakukan
identifikasi masalah, dan identifikasi solusi dari masalah.

3.4.2 Membuat Prototipe


3.4.2.1 Desain Prototipe (Design)
Desain prototipe dibuat menggunakan bahasa pemodelan UML dengan
empat diagram yang digunakan, yaitu use case diagram, activity diagram, sequence
diagram, class diagram, dan desain interfaces. Menggunakan StarUML sebagai
tools yang digunakan dalam pemodelannya.

a. Use Case Diagram (Diagram Use Case)


Berdasarkan hasil dari tahap identifikasi, diagram use case dibuat untuk
menggambarkan fungsi kerja sistem dari sudut pandang pengguna.
Adapun skenario dibuat setelah diagram use case terbentuk berdasarkan
diagram tersebut guna menjabarkan setiap langkah dari perilaku sistem.
Tahapan yang dilakukan pada diagram use case, yaitu:
1. Penentuan actor
2. Perancangan use case
55

3. Penentuan relasi
b. Activity Diagram (Diagram Activity)
Diagram activity digunakan untuk menggambarkan aktifitas-aktifitas
yang terjadi dan bergantung satu sama lain sehingga dapat diketahui
objek mana yang bertanggung jawab terhadap suatu aktifitas. Tahapan
yang dilakukan, yaitu :
1. Aktor direpresentasikan sebagai swimlane
2. Aktifitas dimulai dari satu swimlane dengan simbol initial state
(state awal)
3. Aktifitas dari satu swimlane terhubung dengan aktifitas swimlane
yang lain
4. Aktifitas diakhiri dengan simbol final state (state akhir)
c. Sequence Diagram (Diagram Sekuen)
Pada tahap ini kemudian model diagram use case yang telah dibuat
dikembangkan menjadi desain yang spesifik. Memodelkan perilaku
objek dalam sebuah use case. Tahapan yang dilakukan, yaitu :
1. Setiap use case dibuat menjadi diagram sekuen
2. Aktor yang digunakan sama dengan aktor yang ada pada diagram
use case.
3. Mengidentifikasi objek-objek yang terlibat dalam sebuah use case.
4. Mengidentifikasi metode-metode yang ada pada masing-masing
objek.
5. Mengidentifikasi pesan yang dikirimkan antar objek.
d. Class Diagram (Digram Class)
Diagram class digunakan untuk mendapatkan struktur basis data
sehingga dapat menjadi acuan dalam pembuatan sistem sebelum proses
pengkodean dilakukan. Tahapan yang dilakukan, yaitu :
1. Class pada objek diagram sekuen merupakan class pada diagram
class.
2. Class yang merupakan tabel pada database terdiri dari atribut dan
metode, sedangkan yang lain tidak.
3. Pesan tipe call pada objek diagram sekuen merupakan metode pada
class tersebut.
4. Menentukan asosiasi antar class.
e. Desain Interface
56

Interface atau antarmuka dalam pengembangan perangkat lunak


diperlukan untuk menjembatani interaksi pengguna dan perangkat lunak
(software) yang dibangun terutama aplikasi berbasis GUI (Graphical
User Interface).

3.4.3 Pengkodean Prototipe


Setelah desain prototipe dibentuk, desain diterjemahkan ke dalam program
dan dibuat dengan menggunakan Notepad++ sebagai tools bahasa pemrograman
web. Menggunakan MySQL sebagai database dan menggunakan tools XAMPP
untuk menjalankan atau membuka MySQL.

3.4.4 Pengujian Prototipe


Pengujian prototipe dilakukan dengan 2 tahap, yaitu Black box Testing dan
White Box Testing.
a. Black box Testing
Pengujian ini dilakukan penulis dengan cara menjalankan aplikasi dan
memasukkan input terhadap aplikasi serta memeriksa output aplikasi
apakah sudah sesuai dengan yang diharapkan.
b. White Box Testing
Pada white box testing, metode pengujian yang digunakan yaitu metode
basis path yang memungkinkan desainer test case mengukur
kompleksitas logis dari desain prosedural dan menggunakannya sebagai
pedoman untuk menetapkan basis set dari jalur eksekusi. Tahapan dalam
pengujian white box yaitu :
1. Membuat suatu notasi sederhana dalam bentuk diagram alir / grafik
alir
2. Memetakan grafik alir tersebut ke dalam grafik alir yang sesuai
3. Membuat metriks perangkat lunak yang memberikan pengukuran
kuantitatif terhadap kompleksitas logis suatu program atau dapat
disebut kompleksitas siklomatis.
Nilai yang terhitung untuk kompleksitas siklomatis menentukan jumlah
jalur independen dalam basis set suatu program yang memberi batas atas bagi
jumlah pengujian yang harus dilakukan untuk memastikan bahwa semua statemen
telah dieksekusi sedikitnya satu kali.
BAB 4 HASIL DAN PEMBAHASAN

4.1 Hasil Penelitian


Pada bab ini akan menjelaskan hasil dan pembahasan dari rancangan
penelitian yang ada pada bab sebelumnya, dengan menggunakan metode SDLC
(System Development Life Cycle) model prototipe yang terdiri dari tujuh tahapan,
yaitu: pengumpulan kebutuhan dan analisis, membangun prototipe, perubahan
desain dan prototipe, pelanggan puas, pengembangan skala besar.

4.1.1 Identifikasi Kebutuhan Pemakai


Identifikasi kebutuhan pemakai dilakukan untuk mendifinisikan
kebutuhan sistem yang akan dibuat berdasarkan keinginan user. Berdasarkan dari
hasil wawancara dan observasi penulis mendapatkan data terkait dengan analisis
sistem yang berjalan, identifikasi masalah, usulan penyelesaian masalah, dan
identifikasi kebutuhan sistem pada SMA Sunan Gunung Jati Karawang.

4.1.1.1 Analisis Sistem yang Berjalan


Pada sistem yang berjalan saat ini, untuk melakukan ujian sekolah dimana
guru diharuskan membuat soal yang sebelumnya diberikan surat edaran oleh kepala
sekolah untuk memberikan informasi format soal, waktu terakhir pengumpulan soal
yang dibuat. Setelah guru menerima edaran soal maka guru membuat soal sesuai
dengan ketentuan dari surat edaran, kemudian setelah selesai membuat soal maka
diberikan kepada staff TU untuk kemudian diketik ulang kemudian dicetak dan
diperbanyak sesuai dengan jumlah siswa. Setelah diperbanyak maka diberikan
kepada guru pengampuh mata pelajarannya pada saat ujian berlangsung. Analisis
sistem yang berjalan di gambarkan pada gambar 4.1 sebagai berikut:
58

60

Gambar 4. 1 Swimlane Sistem Berjalan

4.1.1.2 Identifikasi Masalah


Berdasarkan hasil observasi langsung pada saat proses ujian di sekolah dan
juga melakukan wawancara kepada kepala sekolah SMA Sunan Gunung Jati
Karawang, dan beberapa pihak, ternyata proses pembuatan soal ujian mengalami
permasalahan yang sering dihadapi sebagai berikut:
1. Tidak adanya sistem yang dapat mempermudah guru dalam pembuatan
soal.
2. Banyak siswa yang melakukan kecurangan dengan siswa yang lain
karena soal yang diberikan sama dengan siswa yang lainnya.
3. Memerlukan banyak waktu untuk guru membuat bervariasi soal.
59

4. Memerlukan banyak waktu untuk melakukan penilaian hasil ujian siswa,


sering terjadi kesalahan dalam penilaian hasil ujian karena terlalu
banyaknya jumlah siswa.

4.1.1.3 Usulan Penyelesaian Masalah


Berdasarkan permasalahan yang ada maka dibutuhkan sistem yang dapat
mengatasi permasalahan tersebut. Usulan penyelesaian masalah sebagai berikut:
1. Dibuatkan sistem yang dapat mempermudah guru dalam pembuatan soal.
2. Setiap siswa diberikan soal yang berbeda-beda agar tidak terjadi
kecurangan saat pelaksanaan ujian.
3. Menggunakan sistem pengacakan agar soal dapat diacak menggunakan
sistem sehingga tidak perlu memerlukan waktu yang lama.
4. Guru tidak perlu meriksa hasil ujian siswa, karena sistem akan langsung
memberikan hasilnya secara otomatis dan guru tidak perlu lagi
memeriksanya.

4.1.1.4 Identifikasi Kebutuhan Sistem


Dalam melakukan identifikasi kebutuhan sistem, penulis mendapatkan
gambaran kebutuhan sistem pada SMA Sunan Gunung Jati seperti berikut:
Tabel 4. 1 Kebutuan Sistem
User Kebutuhan Fungsional
Guru 1. Melakukan login
2. Mengelola data soal
3. Mengelola data hasil ujian
4. Mengaktifkan ujian
5. Mengelola data siswa
Admin 1. Melakukan login
2. Mengelola data ujian
3. Mengaktifkan ujian
4. Mengelola data siswa
5. Mengelola data user
6. Mengelola data kelas
Siswa 1. Melakukan login
2. Mengerjakan soal ujian
4.1.1.5 Analisis Kebutuhan Software
Berdasarkan pada tahapan penentuan aplikasi yang digunakan untuk membuat
aplikasi tes online didapat kebutuhan software sebagai berikut:
1. XAMPP digunakan untuk menguhubungkan ke database.
60

2. Notepad++ digunakan untuk mengembangkan perangkat lunak dan


mendukung bahasa pemrogram yang memungkinkan untuk membuat
aplikasi berbasi web.
3. Visio digunakan untuk membuat diagram UML.
4. ClickCharts digunakan untuk membuat cyclomatic complexity pada white
box testing.
5. Browser digunakan untuk menjalankan aplikasi.

4.1.1.6 Analisis Kebutuhan Hardware


Perangkat keras yang digunakan dalam penelitian ini yaitu:
1. Laptop dengan spesifikasi:
a. RAM 2GB
b. HDD 500GB
2. Mouse
3. Perangkat pengguna yaitu memiliki browser yang dapat menampilkan
Javascript.

4.1.2 Membuat Prototype


Pada tahap ini pembuatan prototipe dibagi menjadi 2 tahapan yaitu desain
UML dan desain interface.

4.1.2.1 Desain UML


Setelah dilakukan identifikasi kebutuhan sistem kemudian prototype di
desain dalam bentuk usecase diagram, activity diagram, sequence diagram dan
class diagram.
1. Use Case Diagram
Use Case diagram digunakan penulis untuk memetakan interkasi
langsung antara actor yaitu pemilik dan kasir dengan sistem.
61

Gambar 4. 2 Use Case Diagram Aplikasi Ujian Online

a. Definisi Aktor
Berikut definisi aktor pada aplikasi ujian online
Tabel 4. 2 Definisi Aktor
No Aktor Deskripsi
1 Guru Pengguna yang bertugas untuk mengelola soal ujian,
mengelola data hasil ujian, mengelola data siswa,
dan mengaktifkan ujian.
2 Admin Pengguna yang bertugas untuk mengelola data ujian,
mengaktifkan ujian, mengelola data siswa,
mengelola data user, kelola data kelas ujian, dan
mengelola data kelas.
3 Siswa Pengguna yang dapat mengerjakan soal ujian yang
ditampilkan.
b. Definisi Use Case
Berikut definisi use case pada aplikasi ujian online:

Tabel 4. 3 Definisi Use Case


No Use Case Deskripsi
1 Login Merupakan proses pemeriksaan hak akses dalam
penggunaan aplikasi. Setiap user wajib melakukan
login
62

2 Mengelola Bank Mengelola bank soal merupakan gabungan dari


Soal empat proses yang berkaitan dengan data soal yaitu
memasukan data soal, mengubah data soal,
menghapus data soal, dan mencetak data soal
sehingga guru bisa mengetahui apa saja soal yang
ada.
3 Mengelola data Kelola data hasil ujian merupakan gabungan dari dua
hasil ujian proses yang berkaitan dengan data hasil ujian yaitu
melihat hasil ujian dan cetak hasil ujian sehingga
guru bisa mengetahui hasil dari ujian di SMA Sunan
Gunung Jati Karawang
4 Mengelola Kelola data ujian merupakan gabungan dari tiga
Informasi data ujian proses yang berkaitan dengan data ujian yaitu
tambah data ujian, ubah data ujian, dan hapus data
ujia sehingga admin dapat mengetahui data ujian apa
saja yang ada pada SMA Sunan Gunung Jati
Karawang
5 Mengaktifkan ujian Merupakan proses untuk mengaktifkan ujian atau
untuk menon-aktifkan ujian pada saat ujian telah
selesai dilaksanakan
6 Mengelola data Kelola data siswa merupakan gabungan dari lima
siswa tahapan yang berkaitan dengan data siswa yaitu
tambah data siswa, ubah data siswa, hapus data
siswa, reset login siswa dan cetak kartu siswa
sehingga admin dapat mengetahui data siswa yang
ada pada SMA Sunan Gunung Jati
7 Mengelola data Kelola data user merupakan gabungan dari tiga
user tahapan yang berkaitan dengan data user yaitu
tambah data user, ubah data user, dan hapus data
user sehingga admin dapat mengetahui siapa saja
yang menjadi user.
8 Mengelola data Kelola data kelas merupakan gabungan dari tiga
kelas tahapan yang berkaitan dengan data kelas yaitu
tambah data kelas, ubah data kelas, dan hapus data
kelas sehingga admin dapat mengetahui kelas apa
saja yang ada di SMA Sunan Gunung Jati Karawang
9 Mengelola kelas Kelola kelas ujian merupakan fungsi untuk memilih
ujian kelas mana yang akan mengikuti ujian
10 Mengerjakan ujian Mengerjakan ujian merupakan soal-soal yang
ditampilkan akan dikerjakan oleh siswa.

2. Activity Diagram
Berikut ini merupakan activity diagram atau diagram aktifitas yang
terdapat pada aplikasi pencatatan transaksi:
63

Gambar 4. 3 Activity Diagram Login

Gambar 4.3 menjelaskan user memasukan username dan password


pada halaman login. Sistem akan melakukan validasi apakah
username dan password valid atau tidak. Jika data yang dimasukkan
valid maka akan menampilkan halaman utama. Jika tidak maka akan
diminta memasukkan username dan password yang benar.
64

Gambar 4. 4 Activity Diagram Mengelola Bank Soal


Gambar 4.4 menjelaskan mengenai menu mengelola bank
soal yang mana menu ini hanya untuk guru. Pada menu mengelola
bank soal terdapat beberapa fungsi seperti tambah soal dimana guru
memasukkan data soal lalu sistem akan menyimpannya kedalam
database, fungsi ubah dimana guru memilih data yang akan dirubah
kemudian merubahnya dan sistem akan melakukan update pada
database, fungsi hapus dimana guru memilih data yang akan dihapus
dan sistem akan menghapus data tersebut dari database.
65

Gambar 4. 5 Activity Diagram Mengelola Data Hasil Ujian


Gambar 4.5 menjelaskan mengenai menu mengelola data
hasil ujian dimana menu ini hanya bisa diakses oleh guru. Pada menu
dipilih terlebih dahulu kelas mana yang akan dilihat hasil ujiannya.
Setelah itu makan sistem akan menampilkan data-data hasil ujian yang
telah dikerjakan oleh siswa dan terdapat pula fungsi cetak untuk
mencetak hasil ujian.
66

Gambar 4. 6 Activity Diagram Mengelola Informasi Ujian


Gambar 4.6 menjelaskan mengenai menu mengelola
informasi ujian yang berisi judul ujian, kelas, tanggal dilaksanakannya
ujian yang mana menu ini hanya untuk admin. Pada menu mengelola
informasi ujian terdapat beberapa fungsi seperti tambah data ujian
dimana admin memasukkan data ujian lalu sistem akan
menyimpannya kedalam database, fungsi ubah dimana admin
memilih data yang akan dirubah kemudian merubahnya dan sistem
akan melakukan update pada database, fungsi hapus dimana admin
memilih data yang akan dihapus dan sistem akan menghapus data
tersebut dari database.
67

Gambar 4. 7 Activity Diagram Mengaktifkan Ujian


Gambar 4.7 menjelaskan mengenai menu mengaktifkan
ujian dimana menu ini dapat diakses oleh guru dan admin. Pada menu
ini apabila terdapat ujian sesuai dengan tanggal dilaksanakannya maka
akan muncul nama-nama kelas yang mengikuti ujian tersebut, user
dapat mengaktifkan atau men-nonaktifkan ujian tersebut.

Gambar 4. 8 Activity Diagram Mengelola Data Siswa


Gambar 4.8 menjelaskan mengenai menu mengelola data siswa yang
mana menu ini dapat diakses oleh admin dan guru. Pada menu
mengelola data siswa terdapat beberapa fungsi seperti tambah data
siswa dimana user memasukkan data ujian lalu sistem akan
68

menyimpannya kedalam database, fungsi ubah dimana user memilih


data yang akan dirubah kemudian merubahnya dan sistem akan
melakukan update pada database, fungsi hapus dimana user memilih
data yang akan dihapus dan sistem akan menghapus data tersebut dari
database, serta terdapat fungsi cetak kartu yang akan mencetak kartu
ujian yang sesuai dengan data kelas yang dipilih.

Gambar 4. 9 Activity Diagram Mengelola Data User


Gambar 4. 9 menjelaskan mengenai menu mengelola data user yang
mana menu ini hanya untuk admin. Pada menu mengelola data user
terdapat beberapa fungsi seperti tambah data user dimana admin
memasukkan data user lalu sistem akan menyimpannya kedalam
database, fungsi ubah dimana admin memilih data yang akan dirubah
kemudian merubahnya dan sistem akan melakukan update pada
database, fungsi hapus dimana admin memilih data yang akan
dihapus dan sistem akan menghapus data tersebut dari database.
69

Gambar 4. 10 Activity Diagram Mengelola Data Kelas

Gambar 4. 10 menjelaskan mengenai menu mengelola


data kelas yang mana menu ini hanya untuk admin. Pada menu
mengelola data kelas terdapat beberapa fungsi seperti tambah data
kelas dimana admin memasukkan data kelas lalu sistem akan
menyimpannya kedalam database, fungsi ubah dimana admin
memilih data yang akan dirubah kemudian merubahnya dan sistem
akan melakukan update pada database, fungsi hapus dimana admin
memilih data yang akan dihapus dan sistem akan menghapus data
tersebut dari database.
70

Gambar 4. 11 Activity Diagram Mengelola Kelas Ujian


Gambar 4. 11 menjelaskan mengenai kelola kelas ujian,
dimana pada menu ini hanya admin yang bisa mengaksesnya. Pada
menu kelola kelas ujian hanya dapat mengubah data kelas apa aja yang
mengikuti ujian dari mata pelajaran yang dipilih.
71

Gambar 4. 12 Activity Diagram Mengerjakan Ujian

Gambar 4.12 merupakan aktifitas siswa untuk


melakukan ujian, siswa terlebih dahulu login dengan nis dan
password. Setelah siswa berhasil login, jika tanggal yang dijadwalkan
ada maka ujian aktif, jika tidak sesuai tanggal maka hanya ada
informasi belum ada ujian yang aktif. Jika ujian aktif maka akan
muncul identitas siswa dan selanjutnya akan muncul persyaratan ujian
yang mana harus disetujui oleh siswa. Setelah itu siswa bisa
mengerjakan soal sesuai dengan waktu yang telah disediakan di
sistem. Setelah selesai mengerjakan makan siswa tidak bisa
mengerjakan lagi, dan segera dihitung hasilnya oleh sistem dan
disimpan kedalam database.

3. Sequence Diagram
Berikut ini merupakan sequence diagram yang terdapat pada aplikasi
ujian online:
72

Gambar 4. 13 Sequence Diagram Login

Gambar 4.13 menjelaskan semua user mengakses halaman awal


aplikasi yaitu halaman login. Pada halaman login, user memasukan
username dan password. Username dan password yang telah di input
akan di validasi pada proses login. Jika username dan password benar
maka user akan masuk ke dalam halaman guru, admin, atau siswa
tergantung dari status user mereka. Jika username dan password salah
maka akan muncul pesan kesalahan.
73

Gambar 4. 14 Sequence Diagram Mengelola Data Soal


Gambar 4.14 menjelaskan mengelola data soal dimana saat
membuka aplikasi tersebut sistem akan menampilkan data soal yang
ada di database. Dan terdapat beberapa fungsi seperti, fungsi tambah
dimana guru memasukkan data soal dan sistem akan menyimpannya
ke dalam database, fungsi ubah dimana guru memilih data yang ingin
diubah dan mengubah data tersebut lalu sistem akan update data
tersebut, fungsi hapus dimana guru memilih data yang dihapus dan
sistem akan menampilkan pesan konfirmasi jika memilih ya maka
sistem akan menghapus data tersebut.
74

Gambar 4. 15 Sequence Diagram Mengelola Hasil Ujian

Gambar 4. 15 menjelaskan mengelola hasil dimana admin


membuka aplikasi dan sistem akan menampilkan hasil ujian dari kelas
yang dibuka dan terdapat pula cetak yang berfungsi untuk mencetak
data yang ditampilkan.
75

Gambar 4. 16 Sequence Diagram Mengelola Informasi Ujian

Gambar 4.16 menjelaskan mengelola data informasi ujian dimana saat


membuka aplikasi tersebut sistem akan menampilkan data ujian yang
ada di database. Dan terdapat beberapa fungsi seperti, fungsi tambah
dimana admin memasukkan data ujian dan sistem akan
menyimpannya ke dalam database, fungsi ubah dimana admin
memilih data yang ingin diubah dan mengubah data tersebut lalu
sistem akan update data tersebut, fungsi hapus dimana admin memilih
data yang dihapus dan sistem akan menampilkan pesan konfirmasi
jika memilih ya maka sistem akan menghapus data tersebut.
76

Gambar 4. 17 Sequence Diagram Mengelola Aktifkan Ujian


Gambar 4. 17 menjelaskan mengelola aktifkan ujian dimana
sistem akan menampilkan data-data ujian dari database. Pada halaman
mengaktifkan ujian admin/guru dapat mengaktifkan ujian yang akan
diaktifkan dan sistem akan mengaktifkan ujian tersebut.
77

Gambar 4. 18 Sequence Diagram Mengelola Data Siswa


Gambar 4.18 menjelaskan mengelola data siswa dimana
saat membuka aplikasi tersebut sistem akan menampilkan data siswa
yang ada di database. Dan terdapat beberapa fungsi seperti, fungsi
tambah dimana guru/admin memasukkan data siswa dan sistem akan
menyimpannya ke dalam database, fungsi ubah dimana guru/admin
memilih data yang ingin diubah dan mengubah data tersebut lalu
sistem akan update data tersebut, fungsi hapus dimana guru/admin
memilih data yang dihapus dan sistem akan menampilkan pesan
konfirmasi jika memilih ya maka sistem akan menghapus data
tersebut.
78

Gambar 4. 19 Sequence Diagram Mengelola Data User


Gambar 4.19 menjelaskan mengelola data user dimana
saat membuka aplikasi tersebut sistem akan menampilkan data user
yang ada di database. Dan terdapat beberapa fungsi seperti, fungsi
tambah dimana admin memasukkan data user dan sistem akan
menyimpannya ke dalam database, fungsi ubah dimana admin
memilih data yang ingin diubah dan mengubah data tersebut lalu
sistem akan update data tersebut, fungsi hapus dimana admin memilih
data yang dihapus dan sistem akan menampilkan pesan konfirmasi
jika memilih ya maka sistem akan menghapus data tersebut.
79

Gambar 4. 20 Sequence Diagram Mengelola Data Kelas

Gambar 4.20 menjelaskan mengelola data kelas dimana saat


membuka aplikasi tersebut sistem akan menampilkan data kelas yang
ada di database. Dan terdapat beberapa fungsi seperti, fungsi tambah
dimana admin memasukkan data kelas dan sistem akan
menyimpannya ke dalam database, fungsi ubah dimana admin
memilih data yang ingin diubah dan mengubah data tersebut lalu
sistem akan update data tersebut, fungsi hapus dimana admin memilih
data yang dihapus dan sistem akan menampilkan pesan konfirmasi
jika memilih ya maka sistem akan menghapus data tersebut.
80

Gambar 4. 21 Sequence Diagram Mengelola Kelas Ujian


Gambar 4. 21 menjelaskan mengenai halaman kelas ujian,
pada halaman ini dapat diakses oleh admin. Pada halaman kelas ujian
sistem akan menampilkan data kelas_ujian yang ada. Pada halaman
ini hanya ada fungsi ubah data kelas ujian.

Gambar 4. 22 Sequence Diagram Mengerjakan Ujian


Gambar 4.22 menjelaskan alur untuk siswa mengerjakan soal ujian.
Siswa mengakses halaman ujian kemudian siswa sistem akan cek
apakah ada ujian yang aktif ataua tidak, bila aktif maka sistem akan
menampilkan informasi data siswa. Setelah itu sistem akan
menampilkan soal-soal dan siswa menjawab soal-soal tersebut. Bila
81

sudah selesai maka sistem akan menyimpan data dan menyimpan


hasil ujian ke dalam database.
82

4. Class Diagram
Berikut ini merupakan class diagram yang terdapat pada database
aplikasi yang terdapat pada gambar 4.32

Gambar 4. 23 Class Diagram

Berikut adalah keterangan class diagram terdapat pada tabel :


Tabel 4. 4 Class Diagram
Nama Kelas Keterangan
Main Merupakan kelas main
Interface Merupakan kelas yang menangani
tampilan
Login Merupakan kelas proses yang diambil dari
pendefinisian use case Login
Connection Merupakan kelas utilitas untuk koneksi ke
basis data dan melakukan query

Tabel 4. 5 Class Diagram (lanjutan)


Nama Kelas Keterangan
83

MengelolaSoal Merupakan kelas yang diambil dari


pendefinisian use case mengelola soal
yang didalamnya juga menangani tambah
data, edit data, hapus data dan melihat
data.
Soal Merupakan kelas data yang digunakan
untuk memproses pengaksesan terhadap
tabel soal
MengelolaHasil Merupakan kelas yang diambil dari
pendefinisian use case mengelola hasil
yang didalamnya menangani melihat data
dan mencetak data.
Nilai Merupakan kelas data yang digunakan
untuk memproses pengaksesan terhadap
tabel nilai
MengelolaUjian Merupakan kelas yang diambil dari
pendefinisian use case mengelola ujian
yang didalamnya menangani menangani
tambah data, edit data, hapus data,
mencetak data dan melihat data.
Ujian Merupakan kelas data yang digunakan
untuk memproses pengaksesan terhadap
tabel ujian.
MengelolaSiswa Merupakan kelas yang diambil dari
pendefinisian use case mengelola siswa
yang didalamnya menangani menangani
tambah data, edit data, hapus data,
mencetak data dan melihat data.
Siswa Merupakan kelas data yang digunakan
untuk memproses pengaksesan terhadap
tabel siswa.
MengelolaUser Merupakan kelas yang diambil dari
pendefinisian use case mengelola user
yang didalamnya menangani menangani
tambah data, edit data, hapus data, dan
melihat data.
User Merupakan kelas data yang digunakan
untuk memproses pengaksesan terhadap
tabel user.
MengelolaKelas Merupakan kelas yang diambil dari
pendefinisian use case mengelola kelas
yang didalamnya menangani menangani
tambah data, edit data, hapus data, dan
melihat data.

Tabel 4. 6 Class Diagram (lanjutan)


Nama Kelas Keterangan
84

Kelas Merupakan kelas data yang digunakan


untuk memproses pengaksesan terhadap
tabel kelas.
MengelolaKelasUjian Merupakan kelas yang diambil dari
pendefinisian use case mengelola kelas
ujian yang didalamnya hanya menangani
menangani edit data.
Kelas_ujian Merupakan kelas data yang digunakan
untuk memproses pengaksesan terhadap
tabel kelas_ujian.
Berdasarkan class diagram yang dibuat, maka tabel yang terbentuk
adalah:

Gambar 4. 24 Struktur Basis Data

Berikut adalah struktur basis data aplikasi tes online:


Tabel 4. 7 Struktur Data Tabel kelas
Nama field Tipe data Ukuran Keterangan
id_kelas Int 5 Primary Key
kelas varchar 20 Nama kelas

Tabel 4. 8 Struktur Data Tabel kelas_ujian


Nama field Tipe data Ukuran Keterangan
id_ujian int 10 Primary Key
id_kelas int 5 Foreign Key
aktif enum ‘Y’,’N’ Menyatakan ujian aktif
atau tidak
Tabel 4. 9 Struktur Data nilai
85

Nama field Tipe data Ukuran Keterangan


id_nilai int 10 Primary Key
nis varchar 20 Foreign Key
id_ujian int 10 Foreign Key
acak_soal text Pengacakan
jawaban text 10 Kunci jawaban
sisa_waktu text 5 Sisa waktu yang sudah
dikerjakan
jml_benar int 5 Total jawaban benar
nilai varchar 5 Hasil dari jawaban benar
Tabel 4. 10 Struktur Data siswa
Nama field Tipe data Ukuran Keterangan
nis Varchar 20 Primary Key
nama Varchar 30 Nama siswa
password Varchar 30 Password siswa
id_kelas Int 5 Foreign Key
status varchar 20 Status untuk login
Tabel 4. 11 Struktur Data soal
Nama field Tipe data Ukuran Keterangan
id_soal int 10 Primary Key
id_ujian int 10 Foreign Key
soal text Soal
pilihan_1 text Pilihan jawaban 1
pilihan_2 text Pilihan jawaban 2
pilihan_3 text Pilihan jawaban 3
pilihan_4 text Pilihan jawaban 4
pilihan_5 text Pilihan jawaban 5
kunci int 2 Kunci jawaban

Tabel 4. 12 Struktur Data ujian


Nama field Tipe data Ukuran Keterangan
id_ujian int 10 Primary Key
judul Varchar 10 Judul ujian
nama Varchar Nama mata pelajaran
tanggal Date 2 Tanggal ujian
waktu Int 5 Waktu ujian
jml_soal Int Jumlah soal ujian
id_user Int 10 Foreign Key
Tabel 4. 13 Struktur Data user
Nama field Tipe data Ukuran Keterangan
id_user Int 10 Primary Key
nama varchar 30 Nama guru
username varchar 30 Username guru
86

password varchar 30 Password guru


level varchar 20 Level kategori
4.1.2.2 Desain Interface
Desain interface merupakan desain antarmuka aplikasi yang akan dibuat.
Berikut ini adalah gambaran dari aplikasi ujian online:
1. Form Login

Gambar 4. 25 Rancangan Interface Login

Pada gambar 4.24 merupakan desain untuk form login, dimana


terdapat label username dan password lalu terdapat button yaitu login.
2. Guru
a. Halaman utama guru

Gambar 4. 26 Rancangan Interface Beranda Guru

Gambar 4.25 menunjukkan halaman utama guru, terdapat beberapa


sub menu, diantaranya beranda, soal, dan keluar.
b. Halaman Soal
87

Gambar 4. 27 Rancangan Interface Soal

Gambar 4.26 merupakan rancangan desain kelola soal dimana


pada konten atau isi terdapat, tabel data soal mata pelajaran,
button edit untuk mengedit soal yang ada dan untuk
menambahkan soal baru, serta button kelas yang digunakan untuk
melihat hasil ujian siswa.

c. Halaman Kelola Soal

Gambar 4. 28 Rancangan Interface Kelola Data Soal


Gambar 4.27 merupakan tampilan kelola data soal,
terdapat button cetak soal, button tambah, terdapat tabel
mengenai data ujian mata pelajaran ujian, serta tabel data soal
yang telah di input.
d. Halaman Tambah Soal Ujian
88

Gambar 4. 29 Rancangan Interface Tambah Soal Ujian

Gambar 4.28 merupakan tampilan tambah soal ujian,


terdapat text area serta tools untuk mengatur format penulisan
informasi, terdapat combobox untuk memilih jawaban yang dari
pilihan yang sudah diinputkan, terdapat button simpan dan button
close.

e. Halaman Hasil Ujian

Gambar 4. 30 Rancangan Interface Hasil Ujian

Gambar 4.29 merupakan tampilan hasil ujian,


terdapat tabel yang menampilkan data hasil ujian siswa, dan
terdapat 3 button yaitu copy, excel, pdf dimana button tersebut
untuk mengkspor hasil ujian.
3. Admin
a. Halaman Utama Admin
89

Gambar 4. 31 Rancangan Interface Halaman Utama Admin

Pada gambar 4.30 menunjukkan halaman utama admin,


terdapat sub menu, diantaranya beranda, soal, aktifkan ujian,
siswa, user, kelas, kelas ujian dan keluar.

b. Kelola Ujian

Gambar 4. 32 Rancangan Interface Admin Kelola Ujian


Gambar 4.31 merupakan halaman admin untuk
mengelola data ujian, terdapat button tambah, tabel data ujian,
button edit serta button hapus.
c. Tambah Data Ujian
90

Gambar 4. 33 Rancangan Interface Admin Tambah Ujian


Gambar 4.32 merupakan halaman tambah data ujian,
terdapat beberapa text input yang terdiri dari, judul, nama mapel,
tanggal, waktu (menit), jml. soal, pengampu serta terdapat 2
button yaitu simpan dan close.

d. Aktifkan ujian

Gambar 4. 34 Rancangan Interface Aktifkan Ujian


Gambar 4.33 merupakan halaman aktifkan ujian,
dimana terdapat tabel data ujian yang terdapat button yang
dituliskan berdasarkan nama kelas yang untuk di aktifkan hanya
mengklik nama kelasnya.
e. Kelola siswa
91

Gambar 4. 35 Rancangan Interface Kelola Data Siswa

Gambar 4.34 merupakan halaman kelola data siswa, dimana


terdapat beberapa button yaitu cetak kartu, import, tambah, edit,
hapus, serta terdapat tabel data.

f. Tambah data siswa

Gambar 4. 36 Rancangan Interface Tambah Data Siswa


Gambar 4.35 merupakan halaman untuk menambahkan
data siswa, dimana terdapat beberapa text input yang terdiri dari
NIS, nama siswa, dan kelas serta terdapat pula button yaitu
simpan dan close.
g. Kelola user
92

Gambar 4. 37 Rancangan Interface Kelola Data User

Gambar 4.36 merupakan halaman untuk kelola data


user, dimana terdapat button tambah, edit dan hapus. serta tabel
data user.

h. Tambah data user

Gambar 4. 38 Rancangan Interface Tambah Data User


Gambar 4.37 merupakan halaman tambah data user,
terdapat beberapa text input yaitu nama, username, password,
level, serta terdapat button simpan dan close.
i. Kelola data kelas
93

Gambar 4. 39 Rancangan Interface Kelola Data Kelas

Gambar 4.38 merupakan tampilan kelola data kelas,


terdapat tabel data kelas serta button tambah, edit, dan hapus.

j. Tambah data kelas

Gambar 4. 40 Rancangan Interface Tambah Data Kelas


Gambar 4.39 merupakan halaman tambah data kelas,
terdapat satu text input yaitu nama kelas, serta terdapat 2 button
yaitu simpan dan close.
k. Kelola data kelas per ujian
94

Gambar 4. 41 Rancangan Interface Kelola Data Kelas Perujian

Gambar 4.40 merupakan halaman kelola data kelas perujian


dimana terdapat tabel data ujian, button yang disesuaikan dengan
nama kelas yang mengikuti ujian, dan button edit untuk
menambahkan kelas atau menghapus kelas.

4. Siswa
a. Data Siswa dan Ujian

Gambar 4. 42 Rancangan Interface Data Siswa dan Ujian


Gambar 4.41 merupaka tampilan halaman siswa jika
berhasil login, terdapat informasi mengenai data peserta ujian dan
terdapat sebuah button masuk ujian untuk memulai ujian.
b. Daftar Ujian
95

Gambar 4. 43 Rancangan Interface Daftar Ujian

Gambar 4.42 merupakan tampilan daftar ujian


dimana terdapat tabel data ujian, dan terdpat button pada setiap
mata pelajaran.

c. Mengerjakan Soal

Gambar 4. 44 Rancangan Interface Mengerjakan Soal

Gambar 4.43 merupakan tampilan mengerjakan soal,


terdapat judul mata pelajaran, waktu yang berhitung mundur
sesuai dengan waktu yang ditentukan, soal, pilihan ganda, jumlah
soal, button sebelumnya, ragu-ragu, dan selanjutnya.
96

4.1.3 Evaluasi Prototype


Evaluasi prototype ini dilakukan dengan guru-guru untuk mendapatkan
kesepakatan dalam perancangan. Adapun perancangan desain yang mengalami
evaluasi diantaranya adalah rancangan interface ujian siswa mengalami perubahan
dengan menambahkan interface petunjuk mengerjakan sebelum mengerjakan ujian.
Berikut adalah perubahan perancangan setelah dievaluasi:
1. Evaluasi desain interface petunjuk mengerjakan
Evaluasi dilakukan karena terdapat penambahan pada rancangan ujian
siswa yaitu dengan menambahkan nterface petunjuk mengerjakan
sebelum mengerjakan soal. Perubahan rancangan interface ujian siswa
dapat dilihat pada gambar 4.44.

Gambar 4. 45 Rancangan Interface Petunjuk Mengerjakan (evaluasi 1)

Perbaikan prototype hanya dilakukan pada evaluasi prototype di


putaran pertama, karena pada putara kedua tidak ada perubahan hasil evaluasi
sehingga dapat dilanjutkan pada tahap berikutnya.

4.1.4 Mengembangkan Veris Produk


Pada tahap mengembangkan versi produk terdapat 3 langkah yaitu metode
pengacakan soal, coding, dan testing.

4.1.4.1 Penilaian Hasil Ujian


Dalam proses perhitungan hasil ujian dilakukan secara otomatis oleh
sistem dari hasil jawaban yang benar pada soal kemudian hasil jawaban tersebut
97

akan diproses oleh sistem sesuai dengan jumlah soal yang diberikan. Adapun
perhitungannya sebagai berikut:
𝐽𝑢𝑚𝑙𝑎ℎ 𝑗𝑎𝑤𝑎𝑏𝑎𝑛 𝑏𝑒𝑛𝑎𝑟
× 100
𝐽𝑢𝑚𝑙𝑎ℎ 𝑠𝑜𝑎𝑙
Hasil dari perhitungan tersebut yang nantinya akan menjadi hasil dari ujian
yang siswa kerjakan dan akan tampil pada halaman hasil guru.

4.1.4.2 Pengacakan Soal


Proses pengacakan dilakukan dengan menggunakan algoritma FisherYattes
Shuffle. Tahapannya sebagai berikut:
1) Ambil satu elemen secara acak dari elemen yang tersisa.
Pengambilan elemen acak adalah berdasarkan elemen yang tersisa.
Misalkan jika m =10, maka elemen acak yang boleh diambil adalah
10(array[0...9]).
2) Tukar dengan elemen saat ini.
Penukaran dilakukan dengan memasukkan elemen saat ini ke dalam
suatu variabel baru bernama t. Elemen saat ini (array[m]) diisi nilai dari
elemen acak tadi (array[i]). Dan elemen acak (array[i]) diisi nilai dari
variabel t.
3) Ulangi selama masih ada elemen yang tersisa
Tahap ketigas dilakukan pengulangan sebanyak 10 kali untuk mengacak
urutan soal tersebut.
Contoh:
Misalkan dalam 30 soal yang akan diacak terhadap 20 siswa, maka
arraynya adalah urutan soal = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]. Array tersebut
dimasukkan kedalam prosedur shuffle dimana proses pengacakan terjadi.
102

Tabel 4. 14 Hasil Pengacakan

Soal

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

No
1 11 8 6 13 5 12 26 28 2 24 1 3 21 15 22 16 23 19 7
14 20 10 25 18 20 17 4 27 29 9
2 29 3 6 15 28 25 26 1 8 5 17 2 11 9 16 18 7 21 22
13 27 24 12 14 23 5 20 30 19 10
3 18 22 10 11 19 2 7 3 4 16 12 27 9 23 25 5 20 14 24
15 6 26 30 1 17 8 29 13 28 21
4 8 12 25 3 24 29 26 30 7 13 19 6 18 22 1 5 28 4 6
27 10 11 17 21 16 14 2 23 20 15
5 25 20 2 6 9 1 10 11 28 21 30 13 27 23 15 19 24 3 14 5
22 8 4 17 12 18 16 26 7 29
6 8 28 12 18 4 19 22 7 17 15 13 25 20 5 11 21 2 30 23 1
6 14 3 10 29 16 9 24 26 27 7 27 15 21 7 1 22 14 2
24 8 19 16 30 17 26 11 29 13 3 6 20 9 4 18 28 25
12 23 10 5
8 15 3 14 13 20 17 19 6 22 18 29 12 1 2 9 5 8 23 4
16 10 30 7 21 11 24 25 26 28 27
9 24 30 5 27 26 3 21 11 18 29 22 14 17 8 15 28 16 10 23 9
20 2 6 19 7 12 4 25 1 13
10 11 15 19 13 25 6 27 16 12 24 4 8 29 1 30 22 2 18 23 7
28 17 14 5 20 21 26 3 9 10
11 20 2 26 22 14 27 30 10 19 7 23 16 8 28 29 5 4 25 21 9
15 3 24 12 1 18 11 13 17 6
12 18 17 26 7 4 30 29 9 21 1 13 16 23 10 25 20 24 19 27
22 6 8 12 28 3 11 14 15 5 2
13 16 24 18 2 20 9 13 19 29 14 30 17 21 28 8 11 6 25 27
15 3 10 22 4 7 1 23 5 26 12 14 8 13 9 17 12 18 22
30 24 2 7 19 15 23 11 4 16 3 10 14 20 25 6 29 27
21 28 26 1 5
15 8 17 5 2 27 23 19 10 29 20 18 26 11 7 16 30 14 1 28 3
6 9 24 13 22 4 12 21 25 15
16 8 26 29 2 25 27 15 10 18 19 3 4 9 12 14 17 6 20 1
23 7 30 28 24 5 11 22 21 16 13
17 15 27 13 11 5 8 22 16 24 3 18 21 1 30 12 10 2 7 26
23 29 9 28 20 6 25 4 17 14 19
18 13 28 19 10 29 9 6 7 3 5 18 17 14 8 26 31 1 4 20
27 16 15 2 12 21 11 24 23 25 22
19 29 14 8 5 24 7 6 15 23 28 3 30 4 13 10 21 26 12 2
17 25 19 16 18 22 1 11 20 9 27
20 16 29 23 11 28 22 1 3 19 2 10 24 25 5 17 6 7 26 20 8
14 27 13 9 18 12 4 21 30 15

103

Tabel 4. 15 Hasil Pengacakan (lanjutan)


Data
sering 8 3 6 13 5 22 26 10 24 5 18 16 21 23 16 5 2 19 23 14 20 9 12 18 20 11 4 23 28 15
muncul
Jumlah
data
5 2 2 3 2 2 3 3 3 2 3 3 2 3 2 4 3 2 3 2 4 3 2 3 2 3 4 3 2 3
yang
keluar
101

4.1.4.3 Coding
Pada tahap ini, desain prototype yang diterjemahkan ke dalam baris
program dengan bahasa pemrograman PHP dan untuk basis data menggunajan
MySQL. Berikut adalah tampilan interfcae aplikasi ujian online dengan algoritma
Fisher-Yattes Shuffle sebagai pengacakan soal:
1. Halaman login

Gambar 4. 46 Form Login Admin dan Guru

Pada gambar 4.46 merupakan form login yang telah dibuat, dimana
dapat diakses oleh admin dan guru, terdapat username, password, dan
button Login Administrator.
2. Beranda guru

Gambar 4. 47 Halaman Utama Guru

Gambar 4.47 adalah halaman utama guru yang telah dibuat, terdapat
menu ujian dan logout untuk kembali ke halaman login.

3. Halaman menu kelola ujian


102

Gambar 4. 48 Halaman Menu Kelola Ujian

Gambar 4.48 yaitu halaman untuk menampilkan mengenai data ujian


dan terdapat button edit untuk menambahkan soal, merubah soal, dan
menghapus soal. Terdapat pula button kelas ujian dimana untuk
melihat hasil ujian siswa.
4. Halaman bank soal

Gambar 4. 49 Halaman Bank Soal

Gambar 4.49 adalah halaman bank soal dimana soal yang telah dibuat
akan tampil pada halaman tersebut. Terdapat pula button import, cetak
soal, tambah untuk menambahkan data soal.

5. Form input soal


103

Gambar 4. 50 Form Input Soal

Gambar 4.50 adalah form input soal, guru akan mengisi soal dan
pilihan, terdapat 5 pilihan jawaban serta kunci jawaban yang benar.
6. Halaman hasil ujian

Gambar 4. 51 Halaman Hasil Ujian

Gambar 4.51 adalah halaman hasil ujian yang terdapat pada menu
ujian, nilai yang muncul berdasarkan ujian yang telah dilakukan siswa
dan otomatis ditampilkan pada halaman hasil ujian.
7. Halaman utama admin

Gambar 4. 52 Halaman Utama Admin

Gambar 4.52 adalah halaman utama admin yang telah dibuat, terdapat
beberapa menu, diantaranya: ujian, aktifkan ujian, siswa, user, kelas,
kelas ujian, dan logout untuk kembali ke halaman login.
104

8. Halaman data ujian

Gambar 4. 53 Halaman Data Ujian

Gambar 4.53 adalah halaman untuk menampilkan data ujian, dimana


admin dapat melihat data ujian yang terdapat pada database, admin
juga dapat menambahkan, mengedit atau menghapus data ujian.
9. Halaman input ujian

Gambar 4. 54 Halaman Input Ujian

Gambar 4.54 adalah form input ujian yang akan diisi oleh admin, data
tersebut yang nantinya akan diisi soal-soal oleh guru.
10. Halaman aktifkan ujian
105

Gambar 4. 55 Halaman Aktifkan Ujian

Gambar 4.55 adalah halaman untuk mengaktifkan atau


mennonaktifkan ujian, dimana admin hanya mengklik nama kelas
yang akan di aktifkan.
11. Halaman kelola siswa

Gambar 4. 56 Halaman Kelola Siswa

Gambar 4.56 merupakan tampilan kelola data siswa yang telah dibuat,
dimana admin dapat melihat data siswa yang terdapat pada database,
admin juga dapat menambahkan, mengedit atau menghapus data
siswa.
12. Halaman input data siswa

Gambar 4. 57 Halaman Tambah Siswa

Gambar 4.57 adalah form input siswa yang akan diisi oleh admin, data
tersebut yang nantinya akan diisi data-data siswa oleh admin.
106

13. Halaman kelola user

Gambar 4. 58 Halaman Kelola User

Gambar 4.58 merupakan tampilan kelola data user yang telah dibuat,
user disini adalah sebagai guru, dimana admin dapat melihat data user
yang terdapat pada database, admin juga dapat menambahkan,
mengedit atau menghapus data user.
14. Halaman input user

Gambar 4. 59 Halaman Input User

Gambar 4.59 adalah form input user yang akan diisi oleh admin, data
tersebut yang nantinya akan diisi data-data user yang mana user
tersebut adalah guru yang diinmputkan oleh admin.
15. Halaman kelola kelas
107

Gambar 4. 60 Halaan Kelola Kelas


Gambar 4.60 merupakan tampilan kelola data kelas yang telah dibuat,
dimana admin dapat melihat data kelas yang terdapat pada database,
admin juga dapat menambahkan, mengedit atau menghapus data
kelas.
16. Halaman input kelas

Gambar 4. 61 Halaman Input Kelas

Gambar 4.61 adalah form input kelas yang akan diisi oleh admin, data
tersebut yang nantinya akan diisi nama kelas oleh admin.

17. Halaman kelola kelas ujian

Gambar 4. 62 Halaman Kelola Kelas Ujian

Gambar 4.62 merupakan tampilan kelola data kelas ujian yang telah
dibuat, dimana admin dapat melihat data kelas ujian yang dimana
berisi nama ujian dan kelas mana yang akan mengikuti ujian sesuai
dengan mata pelajaran. Pada halaman ini admin hanya bisa mengedit
data kelas yang mengikuti ujian.
18. Halaman edit kelas ujian
108

Gambar 4. 63 Halaman Edit Kelas Ujian

Gambar 4.63 merupakan tampilan edit kelas ujian yang telah dibuat,
pada halaman ini menampilkan semua data kelas yang ada, dan admin
memilih kelas mana yang mengikuti ujian sesuai dengan mata
pelajaran yang dipilih.
19. Halaman data siswa dan ujian

Gambar 4. 64 Halaman Data Siswa dan Ujian

Pada gambar 4.64 merupakan tampilan data siswa setelah login


dengan username dan password yang telah diberikan serta terdapat
data ujian yang akan dilakukan.
20. Halaman petunjuk mengerjakan

Gambar 4. 65 Halaman Petunjuk Mengerjakan

Pada gambar 4.65 merupakan tampilan petunjuk mengerjakan ujian,


terdapat aturan-aturan pada saat pelaksanaan ujian, dan terdapat
checkbox dimana harus diceklis untuk mulai mengerjakan ujian.
21. Halaman ujian siswa
109

Gambar 4. 66 Halaman Ujian Siswa

Pada gambar 4.66 merupakan tampilan saat siswa mengerjakan ujian,


terdapat soal dan pilihan jawaban yang akan di pilih serta jumlah soal
yang akan tersedia.
22. Halaman selesai ujian

Gambar 4. 67 Halaman Selesai Ujian

Pada gambar 4.67 merupakan tampilan pada saat selesai


melaksanakan ujian dan terdapat checkbox yang harus di ceklis oleh
siswa.

4.1.5 Pengujian Sistem


Setelah pembuatan kode program selesai, langkah selanjutnya adalah
melakukan pengujian terhadap aplikasi yang telah dibuat. Dalam penelitian ini
penulis melakukan pengujian Black Box Testing, White Box Testing dan setelah itu
dilakukan evaluasi dari user dengan menggunakan teknik angket.

4.1.5.1 Black Box Testing


Black box testing dilakukan untuk menguji fungsionalitas dari aplikasi
yang telah dibuat. Berikut ini adalah tabel pengujian aplikasi yang telah dibuat:
110

Tabel 4. 16 Pengujian Black Box


Hasil yang
Data Masukan Respon Sistem Hasil Uji
Diharapkan
Hasil Uji Data Normal
Login
Masukkan data
Menampilkan
pada form login
Masuk ke halaman halaman utama
yang benar sesuai Diterima
utama sesuai dengan
dengan data di
hak akses
database
Mengelola Soal
Memasukkan data
soal pada form Berhasil
Berhasil menyimpan ke
tambah data soal menyimpan ke Diterima
database
sesuai dengan database
aturan
Berhasil
Mengubah data soal Berhasil mengubah data mengubah data
pada form soal dan menyimpannya ke dan Diterima
dengan aturan database menyimpannya
ke database
Memilih data dan Berhasil
Berhasil menghapus
menghapus data menghapus data Diterima
soal data dari database
dari database
Memilih mata Berhasil
Berhasil mencetak data
pelajaran dan mencetak data Diterima
mencetak data soal dari database
dari database
Mengelola Data Hasil Ujian
Menampilkan
Menampilkan informasi
Memilih hasil ujian informasi hasil Diterima
hasil ujian
ujian
Berhasil
Memilih cetak hasil Berhasil mencetak data
mencetak data Diterima
ujian dari database
dari database
Mengelola Data Siswa
Memilih reset login Mereset login
Mereset login siswa Diterima
siswa siswa
Aktifkan Ujian
Memilih data ujian Mengaktifkan
Mengaktifkan ujian Diterima
untuk diaktifkan ujian
111

Mengelola Data Ujian


Memasukkan data
ujian pada form Berhasil
Berhasil menyimpan ke
tambah data ujian menyimpan ke Diterima
sesuai dengan database
database
aturan

Tabel 4. 17 Pengujian Black Box Testing (lanjutan)


Hasil yang
Data Masukan Respon Sistem Hasil Uji
Diharapkan
Hasil Uji Data Normal
Mengelola Data Ujian

Mengubah data Berhasil


Berhasil mengubah data mengubah data
ujian pada form
dan menyimpannya ke dan Diterima
ujian sesuai dengan menyimpannya
database
aturan ke database
Memilih data dan Berhasil
Berhasil menghapus
menghapus data menghapus data Diterima
soal data dari database
dari database
Memilih data ujian Mengaktifkan
Mengaktifkan ujian Diterima
untuk diaktifkan ujian
Masukkan data Berhasil
pada form siswa Berhasil menyimpan ke
menyimpan ke Diterima
sesuai dengan database
aturan database

Mengubah daa Berhasil


mengubah data
Berhasil mengubah data
ujian pada form
dan menyimpannya ke dan Diterima
siswa sesuai dengan menyimpannya
database
aturan ke database
Memilih data dan Berhasil
Berhasil menghapus
menghapus data menghapus data Diterima
siswa data dari database
dari database
Memilih data dan Berhasil
Berhasil mencetak data
mencetak data mencetak data Diterima
siswa siswa
siswa
Mengelola Data User
112

Memasukkan data
user pada form Berhasil
Berhasil menyimpan ke
tambah data user menyimpan ke Diterima
database
sesuai dengan database
aturan
Mengubah data Berhasil
user pada form user Berhasil mengubah data mengubah data
sesuai dengan dan menyimpannya ke dan Diterima
aturan database menyimpannya
ke database
Memilih data dan Berhasil
Berhasil menghapus
menghapus data menghapus data Diterima
user data dari database
dari database

Tabel 4. 18 Pengujian Black Box Testing (lanjutan)


Hasil yang
Data Masukan Respon Sistem Hasil Uji
Diharapkan
Hasil Uji Data Normal
Mengelola Data Kelas
Memasukkan data
kelas pada form Berhasil
Berhasil menyimpan ke
tambah data kelas menyimpan ke Diterima
database
sesuai dengan database
aturan
Mengubah data Berhasil
Berhasil mengubah data mengubah data
kelas pada form
dan menyimpannya ke dan Diterima
data kelas sesuai menyimpannya
database
dengan aturan ke database
Memilih data dan Berhasil
Berhasil menghapus
menghapus data menghapus data Diterima
kelas data dari database
dari database
Mengelola Kelas Ujian
Mengubah data Berhasil
kelas ujian pada Berhasil mengubah data mengubah data
form data kelas dan menyimpannya ke dan Diterima
ujian sesuai dengan database menyimpannya
aturan ke database
Mengerjakan Ujian
113

Berhasil memilih
Berhasil memilih jawaban dan
Memilih jawaban
jawaban dan menyimpan
dari soal dan
menyimpan hasil ke hasil ke
menyelesaikan ujian
database database

Hasil Uji Data Tidak Normal


Login
Form login di isi
Menampilkan
dengan username Menampilkan persan
persan error
dan password yang error “username atau Diterima
“username atau
tidak sesuai dengan password salah”
password salah”
data di database
Mengelola Data Soal

Salah satu field Menampilkan pesan Menampilkan


form dan ubah data “Please fill out this pesan “Please Diterima
soal dikosongkan field” fill out this field”

Mengelola Data Ujian


Salah satu field Menampilkan pesan
Menampilkan
form dan ubah data “Please fill out this Diterima
pesan “Please
soal dikosongkan field”
fill out this field”

Mengelola Data Siswa

Salah satu field Menampilkan pesan Menampilkan


form dan ubah data “Please fill out this pesan “Please Diterima
soal dikosongkan field” fill out this field”

Salah satu field Menampilkan pesan Menampilkan


form dan ubah data “Please fill out this pesan “Please Diterima
soal dikosongkan field” fill out this field”

Mengelola Data Kelas

Salah satu field Menampilkan pesan Menampilkan


form dan ubah data “Please fill out this pesan “Please Diterima
soal dikosongkan field” fill out this field”

Mengerjakan Ujian
114

Menampilkan
Tidak menceklis
Menampilkan pesan pesan “please
checkbox pada
“please check this box if check this box if Diterima
petunjuk
you want to proceed” you want to
mengerjakan ujian
proceed”
4.1.5.2 White Box Testing
White box testing merupakan cara pengujian dengan meneliti dan
melakukan analisis kode-kode program apakah ada kesalahan atau tidak. Dengan
white box testing akan diuji logika pada suatu program. Berikut yang telah
dilakukan:
1. Login
Tabel 4. 19 White Box Login
1 $username = antiinjeksi($_POST['username']);
$password = antiinjeksi(md5($_POST['password']));
$cekuser = mysqli_query($mysqli, "SELECT * FROM siswa
WHERE nis='$username' AND password='$password'");
$jmluser = mysqli_num_rows($cekuser); $data
= mysqli_fetch_array($cekuser);
2 if($jmluser > 0){
3 if($data['status'] == "off"){
4 //$_SESSION['username'] = $data['nis'];
$_SESSION['namalengkap'] = $data['nama'];
//$_SESSION['password'] = $data['password'];
$_SESSION['nis'] = $data['nis'];
$_SESSION['kelas'] = $data['id_kelas'];
mysqli_query($mysqli, "UPDATE siswa SET status='login'
WHERE nis='$data[nis]'"); echo
"ok";
5 }else{
6 echo "Siswa sedang <b>Login</b>. Hubungi operator untuk
mereset login!";
7 }}else{
8 echo "<b>Username</b> atau <b>password</b> tidak
terdaftar!";
9 }
115

Gambar 4. 68 Cyclomatic Complexity Login


V(G) = E – N + 2 V(G) = P + 1
= 10 – 9 + 2 =2+1
=3 =3
Dari flowgraph di atas, maka diketahui:
Node (N) = 9 Lingkaran
Edge (E) = 10 Tanda Panah
Predicate (P) = 2 Kondisi Node
Pada unit tes login data terdapat 3 skenario yaitu:
1. Path 1 = 1-2-3-4-9
2. Path 2 = 1-2-3-5-6-9
3. Path 3 = 1-2-7-8-9
2. Tambah data soal
Tabel 4. 20 White Box Tambah Soal
1 if($_GET['action'] == "insert"){
2 $soal = addslashes($_POST['soal']);
$pil_1 = addslashes($_POST['pil_1']);
$pil_2 = addslashes($_POST['pil_2']);
$pil_3 = addslashes($_POST['pil_3']);
$pil_4 = addslashes($_POST['pil_4']);
$pil_5 = addslashes($_POST['pil_5']);
mysqli_query($mysqli, "INSERT INTO soal
SET id_ujian = '$_GET[ujian]', soal =
'$soal', pilihan_1 = '$pil_1', pilihan_2 =
'$pil_2', pilihan_3 = '$pil_3',

pilihan_4 = '$pil_4',
pilihan_5 = '$pil_5', kunci
= '$_POST[kunci]'");
echo "ok";
3 }}else{
4 echo “data gagal diubah”;
5 }

Gambar 4. 69 Cyclomatic Complexity Tambah Soal

V(G) = E – N + 2 V(G) = P + 1
116

=5–5+2 =1+1
=2 =2
Dari flowgraph di atas, maka diketahui:
Node (N) = 5 Lingkaran
Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-5
2. Path 2 = 1-3-4-5
3. Ubah data soal
Tabel 4. 21 White Box Ubah Data Soal
1 if($_GET['action'] == "update"){
2 $soal = addslashes($_POST['soal']);
$pil_1 = addslashes($_POST['pil_1']);
$pil_2 = addslashes($_POST['pil_2']);
$pil_3 = addslashes($_POST['pil_3']);
$pil_4 = addslashes($_POST['pil_4']);
$pil_5 = addslashes($_POST['pil_5']);
mysqli_query($mysqli, "UPDATE soal
SET soal = '$soal', pilihan_1 =
'$pil_1', pilihan_2 = '$pil_2',
pilihan_3 = '$pil_3', pilihan_4 =
'$pil_4', pilihan_5 = '$pil_5',
kunci = '$_POST[kunci]' WHERE id_soal='$_POST[id]'");
echo "ok";

3 }else{
4 echo”data gagal diedit”;
5 }

Gambar 4. 70 Cyclomatic Complexity Ubah Data Soal

V(G) = E – N + 2 V(G) = P + 1
=5–5+2 =1+1
=2 =2
Dari flowgraph di atas, maka diketahui:
117

Node (N) = 5 Lingkaran


Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-5
2. Path 2 = 1-3-4-5
4. Hapus data soal
Tabel 4. 22 White Box Hapus Data Soal
1 if($_GET['action'] == "delete"){
2 mysqli_query($mysqli, "DELETE FROM soal WHERE
id_soal='$_GET[id]'");
3 }else{
4 echo”tidak dapat menghapus data”;
5 )

Gambar 4. 71 Cyclomatic Complexity Hapus Data Soal

5. Cetak soal
Tabel 4. 23 White Box Cetak Soal
1 $(function(){
2 var ujian = $('#id_ujian').val(); table
= $('.table').DataTable({
"processing" : true,
"ajax" : { "url" :
"../ajax/ajax_soal_print.php?action=table_data&u
jian="+ujian,
"type" : "POST",
},
"dom" : "rt",
"paging" : false,
"ordering": false

3 });
4 });

Gambar 4. 72 Cyclomatic Complexity Cetak Soal

V(G) = E – N + 2 V(G) = P + 1
118

=3–4+2 =0+1
=1 =1
Dari flowgraph di atas, maka diketahui:
Node (N) = 4 Lingkaran
Edge (E) = 3 Tanda Panah
Predicate (P) = 0 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-3-4
6. Lihat hasil ujian
Tabel 4. 24 White Box Menampilkan Hasil Ujian
1 if($_GET['action'] == "table_data"){
2 $query = mysqli_query($mysqli, "SELECT * FROM siswa
WHERE id_kelas='$_GET[kelas]'");
$data = array();
$no = 1;
3 while($r = mysqli_fetch_array($query)){
4 $n = mysqli_fetch_array(mysqli_query($mysqli, "SELECT *
FROM nilai WHERE nis='$r[nis]' AND
id_ujian='$_GET[ujian]'"));
$row = array();
$row[] = $no;
$row[] = $r['nis'];
$row[] = $r['nama'];
$row[] = $n['jml_benar'];
$row[] = $n['nilai'];
$data[] = $row;
5 }$output = array("data" => $data); echo
json_encode($output);
6 }

Gambar 4. 73 Cyclomatic Complexity Menampilkan Hasil Ujian

V(G) = E – N + 2 V(G) = P + 1
=7–6+2 =2+1
=3 =3
119

Dari flowgraph di atas, maka diketahui:


Node (N) = 6 Lingkaran
Edge (E) = 7 Tanda Panah
Predicate (P) = 2 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-4-5-6
2. Path 2 = 1-2-3-2-4-5-6
3. Path 3 = 1-6
7. Mengaktifkan ujian
Tabel 4. 25 White Box Aktifkan Ujian
1 if($_GET['action'] == "update"){
2 $cek = mysqli_fetch_array(mysqli_query($mysqli,
"SELECT * FROM kelas_ujian WHERE
id_ujian='$_GET[ujian]' AND
id_kelas='$_GET[kelas]'"));
$aktif = ($cek['aktif']=='Y') ? 'N' : 'Y';
mysqli_query($mysqli, "UPDATE kelas_ujian set
aktif='$aktif' WHERE id_ujian='$_GET[ujian]' AND
id_kelas='$_GET[kelas]'");
3 }

Gambar 4. 74 Cyclomatic Complexity Aktifkan Ujian

V(G) = E – N + 2 V(G) = P + 1
=2–3+2 =0+1
=1 =1

Dari flowgraph di atas, maka diketahui:


Node (N) = 3 Lingkaran
Edge (E) = 2 Tanda Panah
Predicate (P) = 0 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-3
8. Ubah data ujian
Tabel 4. 26 White Box Ubah Data Ujian
1 if($_GET['action'] == "update"){
120

2 mysqli_query($mysqli, "UPDATE ujian


SET judul = '$_POST[judul]',
nama_mapel = '$_POST[mapel]', tanggal
= '$_POST[tanggal]', waktu =
'$_POST[waktu]', jml_soal =
'$_POST[jml_soal]', id_user =
'$_POST[pengampu]'
WHERE id_ujian='$_POST[id]'");
3 }else{
4 echo”tidak dapat menyimpan data”;
5 }

Gambar 4. 75 Cyclomatic Complexity Ubah Data Ujian

V(G) = E – N + 2 V(G) = P + 1
=5–5+2 =1+1
=2 =2
Dari flowgraph di atas, maka diketahui:
Node (N) = 5 Lingkaran
Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-5
2. Path 2 = 1-3-4-5
9. Hapus data ujian
Tabel 4. 27 White Box Hapus Data Ujian
1 if($_GET['action'] == "delete"){
2 mysqli_query($mysqli, "DELETE FROM ujian WHERE
id_ujian='$_GET[id]'");
3 }else{
4 echo”tidak dapat menghapus data”;
5 }
121

Gambar 4. 76 Cyclomatic Complexity Hapus Data Ujian

V(G) = E – N + 2 V(G) = P + 1
=5–5+2 =1+1
=2 =2
Dari flowgraph di atas, maka diketahui:
Node (N) = 5 Lingkaran
Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-5
2. Path 2 = 1-3-4-5
10. Mengaktifkan ujian
Tabel 4. 28 White Box Aktifkan Ujian
1 if($_GET['action'] == "update"){
2 $cek = mysqli_fetch_array(mysqli_query($mysqli,
"SELECT * FROM kelas_ujian WHERE
id_ujian='$_GET[ujian]' AND
id_kelas='$_GET[kelas]'"));
$aktif = ($cek['aktif']=='Y') ? 'N' : 'Y';
mysqli_query($mysqli, "UPDATE kelas_ujian set
aktif='$aktif' WHERE id_ujian='$_GET[ujian]' AND
id_kelas='$_GET[kelas]'");
3 }

Gambar 4. 77 Cyclomatic Complexity Aktifkan Ujian


V(G) = E – N + 2 V(G) = P + 1
=2–3+2 =0+1
=1 =1
Dari flowgraph di atas, maka diketahui:
Node (N) = 3 Lingkaran
Edge (E) = 2 Tanda Panah
122

Predicate (P) = 0 Kondisi Node


Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-3
11. Tambah data siswa
Tabel 4. 29 White Box Tambah Data Siswa
1 if($_GET['action'] == "insert"){
2 $password = md5(substr(md5($_POST['nis']),0,5));
$jml = mysqli_num_rows(mysqli_query($mysqli,
"SELECT * FROM siswa WHERE nis='$_POST[nis]'"));
3 if($jml > 0){
4 echo "NIS Siswa sudah digunakan!";
5 }else{
6 mysqli_query($mysqli, "INSERT INTO siswa
SET nis = '$_POST[nis]', nama =
'$_POST[nama]', password = '$password',
id_kelas= '$_POST[kelas]', status=
'off'"); echo "ok";

7 }else{
8 echo”tidak dapat menyimpan data”;
9 }

Gambar 4. 78 Cyclomatic Complexity Tambah Data Siswa


V(G) = E – N + 2 V(G) = P + 1
= 10 – 9 + 2 =2+1
=3 =3

Dari flowgraph di atas, maka diketahui:


Node (N) = 9 Lingkaran
Edge (E) = 10 Tanda Panah
Predicate (P) = 2 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-3-4-9
123

2. Path 2 = 1-2-3-5-6-9
3. Path 3 = 1-7-8-9
12. Ubah data siswa
Tabel 4. 30 White Box Ubah Data Siswa
1 if($_GET['action'] == "update"){
2 mysqli_query($mysqli, "UPDATE siswa
SET nama = '$_POST[nama]', id_kelas =
'$_POST[kelas]' WHERE
nis='$_POST[nis]'"); echo "ok";

3 }else{
4 echo”tidak dapat menyimpan data”;
5 }

Gambar 4. 79 Cyclomatic Complexity Ubah Data Siswa

V(G) = E – N + 2 V(G) = P + 1
=5–5+2 =1+1
=2 =2
Dari flowgraph di atas, maka diketahui:
Node (N) = 5 Lingkaran
Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-5
2. Path 2 = 1-3-4-5

13. Hapus data siswa


Tabel 4. 31 White Box Hapus Data Siswa
1 if($_GET['action'] == "delete"){

2 mysqli_query($mysqli, "DELETE FROM siswa WHERE


nis='$_GET[id]'");
3 }else{
124

4 echo”tidak dapat menghapus data”;

5 }

Gambar 4. 80 Cyclomatic Complexity Hapus Data Siswa

V(G) = E – N + 2 V(G) = P + 1
=5–5+2 =1+1
=2 =2
Dari flowgraph di atas, maka diketahui:
Node (N) = 5 Lingkaran
Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-5
2. Path 2 = 1-3-4-5
14. Reset login siswa
Tabel 4. 32 White Box Reset Login Siswa
1 if($_GET['action'] == "reset_login"){
2 mysqli_query($mysqli, "UPDATE siswa set status='off'
WHERE nis='$_GET[nis]'");
3 }else{
4 echo”tidak dapat mereset login”;
5 }

Gambar 4. 81 Cyclomatic Complexity Reset Login Siswa

V(G) = E – N + 2 V(G) = P + 1
=5–5+2 =1+1
=2 =2
125

Dari flowgraph di atas, maka diketahui:


Node (N) = 5 Lingkaran
Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-5
2. Path 2 = 1-3-4-5
15. Cetak kartu siswa
Tabel 4. 33 White Box Cetak Kartu Siswa
1 open_form("modal_print", "return print_data()");
$qkelas = mysqli_query($mysqli, "SELECT * FROM kelas");
$list = array();
2 while($rk = mysqli_fetch_array($qkelas)){
3 $list[] = array($rk['id_kelas'], $rk['kelas']);
4 }

Gambar 4. 82 Cyclomatic Complexity Cetak Kartu Siswa

V(G) = E – N + 2 V(G) = P + 1
=4–4+2 =1+1
=2 =2
Dari flowgraph di atas, maka diketahui:
Node (N) = 4 Lingkaran
Edge (E) = 4 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-3-4
2. Path 2 = 1-2-3-2-4
16. Tambah data user
Tabel 4. 34 White Box Tambah Data User
1 if($_GET['action'] == "insert"){
126

2 $password = md5($_POST['password']);
mysqli_query($mysqli, "INSERT INTO user
SET nama = '$_POST[nama]', username =
'$_POST[username]', password =
'$password', level= '$_POST[level]'");

3 }else{
4 echo”tidak dapat menyimpan data”;
5 }

Gambar 4. 83 Cyclomatic Complaxity Tambah Data User

V(G) = E – N + 2 V(G) = P + 1
=5–5+2 =1+1
=2 =2
Dari flowgraph di atas, maka diketahui:
Node (N) = 5 Lingkaran
Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-5
2. Path 2 = 1-3-4-5
17. Ubah data user
Tabel 4. 35 White Box Ubah Data User
1 if($_GET['action'] == "update"){
2 $password = md5($_POST['password']);
mysqli_query($mysqli, "UPDATE user
SET nama = '$_POST[nama]', username =
'$_POST[username]', level =
'$_POST[level]' WHERE
id_user='$_POST[id]'");
3 if($password != "") mysqli_query($mysqli, "UPDATE user
SET password='$password' WHERE id_user='$_POST[id]'");
4 }else{
5 echo”Tidak dapat menyimpan data”;
6 }
127

Gambar 4. 84 Cyclomatic Complexity Ubah Data User

V(G) = E – N + 2 V(G) = P + 1
=5–5+2 =1+1
=2 =2
Dari flowgraph di atas, maka diketahui:
Node (N) = 6 Lingkaran
Edge (E) = 6 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-3-5
2. Path 2 = 1-4-5-6
18. Tambah data kelas
Tabel 4. 36 White Box Tambah Data Kelas
1 if($_GET['action'] == "insert"){
2 $password = md5($_POST['password']);
mysqli_query($mysqli, "INSERT INTO kelas SET kelas =
'$_POST[kelas]' ");
3 }else{
4 echo”data tidak dapat disimpan”;
5 }

Gambar 4. 85 Cyclomatic Complexity Tambah Data Kelas

V(G) = E – N + 2 V(G) = P + 1
=5–5+2 =1+1
=2 =2

Dari flowgraph di atas, maka diketahui:


128

Node (N) = 5 Lingkaran


Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-5
2. Path 2 = 1-3-4-5
19. Ubah data kelas
Tabel 4. 37 White Box Ubah Data Kelas
1 if($_GET['action'] == "update"){

2 $password = md5($_POST['password']);
mysqli_query($mysqli, "UPDATE kelas SET kelas=
'$_POST[kelas]' WHERE id_kelas='$_POST[id]'");
3 }else{

4 echo”data gagal disimpan”;

5 }

Gambar 4. 86 Cyclomatic Complaxity Ubah Data Kelas

V(G) = E – N + 2 V(G) = P + 1
=5–5+2 =1+1
=2 =2
Dari flowgraph di atas, maka diketahui:
Node (N) = 5 Lingkaran
Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-5
2. Path 2 = 1-3-4-5

20. Hapus data kelas


129

Tabel 4. 38 White Box Hapus Data Kelas


1 if($_GET['action'] == "delete"){

2 mysqli_query($mysqli, "DELETE FROM kelas WHERE


id_kelas='$_GET[id]'");
3 }else{

4 echo”tidak dapat menghapus data”;

5 }

Gambar 4. 87 Cyclomatic Complexity Hapus Data Kelas

V(G) = E – N + 2 V(G) = P + 1
=5–5+2 =1+1
=2 =2
Dari flowgraph di atas, maka diketahui:
Node (N) = 5 Lingkaran
Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-5
2. Path 2 = 1-3-4-5
21. Mengubah kelas ujian
Tabel 4. 39 White Box Mengubah Kelas Ujian
1 if($_GET['action'] == "update"){
2 mysqli_query($mysqli, "DELETE FROM kelas_ujian WHERE
id_ujian='$_POST[id]'"); $kelas = $_POST['kelas'];

3 foreach($kelas as $kls){
4 mysqli_query($mysqli, "INSERT INTO kelas_ujian SET
id_ujian='$_POST[id]', id_kelas='$kls'");
5 }}
130

Gambar 4. 88 Cyclomatic Complexity Ubah Kelas Ujian

V(G) = E – N + 2 V(G) = P + 1
=5–5+2 =1+1
=2 =2
Dari flowgraph di atas, maka diketahui:
Node (N) = 5 Lingkaran
Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-3-4-5
2. Path 2 = 1-2-3-4-3-5
22. Ujian
Tabel 4. 40 White Box Ujian
1 if($_GET['action']=="kirim_jawaban"){

2 $rnilai = mysqli_fetch_array(mysqli_query($mysqli, "SELECT *


FROM nilai WHERE id_ujian='$_POST[ujian]'
AND nis='$_SESSION[nis]'"));
$jawaban = explode(",", $rnilai['jawaban']);
$index = $_POST['index'];
$jawaban[$index] = $_POST['jawab'];
$jawabanfix = implode(",", $jawaban);
mysqli_query($mysqli, "UPDATE nilai SET
jawaban='$jawabanfix', sisa_waktu='$_POST[sisa_waktu]' WHERE
id_ujian='$_POST[ujian]' AND nis='$_SESSION[nis]'"); echo
"ok";

3 }elseif($_GET['action']=="selesai_ujian"){
131

4 $rnilai = mysqli_fetch_array(mysqli_query($mysqli, "SELECT *


FROM nilai WHERE id_ujian='$_POST[ujian]'
AND nis='$_SESSION[nis]'"));

$arr_soal = explode(",", $rnilai['acak_soal']);


$jawaban = explode(",", $rnilai['jawaban']);
$jbenar = 0;

5 for($i=0; $i<count($arr_soal); $i++){

6 $rsoal = mysqli_fetch_array(mysqli_query($mysqli, "SELECT *


FROM soal WHERE id_ujian='$_POST[ujian]' AND
id_soal='$arr_soal[$i]'"));
if($rsoal['kunci'] == $jawaban[$i]) $jbenar++;
}
7 $nilai = $jbenar/count($arr_soal)*100;

mysqli_query($mysqli, "UPDATE nilai SET


jml_benar='$jbenar', nilai='$nilai' WHERE
id_ujian='$_POST[ujian]' AND nis='$_SESSION[nis]'");

mysqli_query($mysqli, "UPDATE siswa SET status='login'


WHERE nis='$_SESSION[nis]'");
echo
"ok";
8 }else{

9 echo”Gagal”;

11 }
132

Gambar 4. 89 Cyclomatic Complexity Ujian


V(G) = E – N + 2 V(G) = P + 1
= 11 – 10 + 2 =2+1
=3 =3
Dari flowgraph di atas, maka diketahui:
Node (N) = 5 Lingkaran
Edge (E) = 5 Tanda Panah
Predicate (P) = 1 Kondisi Node
Pada unit tes tambah data soal terdapat 2 skenario yaitu:
1. Path 1 = 1-2-10
2. Path 2 = 1-3-4-5-6-7-10
3. Path 3 = 1-3-8-9-10
23. Pengacakan
Tabel 4. 41 Pengacakan Soal
1 function Fisher_Yates_shuffle($array){

2 $i = count($array);

3 while(--$i){

4 $j = mt_rand(0,$i);

5 if($i != $j){

6 $tmp = $array[$j];
$array[$j] = $array[$i];
$array[$i] = $tmp;
}

}
return
$array;
7 }

Gambar 4. 90 Cyclomatic Complexity Pengakan Soal

V(G) = E – N + 2 V(G) = P + 1
=8–7+2 =2+1
133

=3 =3
Dari flowgraph di atas, maka diketahui:
Node (N) = 7 Lingkaran
Edge (E) = 8 Tanda Panah
Predicate (P) = 2 Kondisi Node
Pada unit tes tambah data soal terdapat 3 skenario yaitu:
1. Path 1 = 1-2-3-4-5-6-7
2. Path 2 = 1-2-3-4-3-5-6-3-7
3. Path 3 = 1-2-3-7

4.2 Pembahasan
Hasil evaluasi dilakukan dengan menggunakan teknik angket yang
diberikan kepada 11 guru dan 24 siswa. penilaian tersebut akan disajikan dalam
bentuk tabel dengan menggunakan perhitungan Skala Likert. Terdapat 2 aspek yang
menjadi tolak ukur yaitu desain tampilan dan fungsional.
Untuk penjelasannya sebagai berikut:
Tabel 4. 42 Bobot Nilai
Keterangan Nilai
Tidak Setuju 1
Kurang Setuju 2
Setuju 3
Sangat Setuju 4
Tabel 4. 43 Rekapitulasi Jawaban Kusioner
Kriteria Jawaban
Pertanyaan
TS KS ST SS
1 0 0 15 20
2 0 0 22 13
3 0 0 23 12
4 0 0 13 22
5 0 0 23 12
0 0 96 79
Total 175
134

Berdasarkan tabel 4.44 data kemudian diolah dengan cara mengkalikan


setiap point jawaban dengan bobot yang sudah ditentukan dengan tabel bobot nilai
yaitu pada tabel 4.43 dengan rumus:

Toral Point = T x Pn

T = Total jumlah responden yang memilih

Pn = Pilihan angka skor Likert (bobot nilai)

Untuk mendapatkan hasil interpretasi skor perhitungan harus diketahui


skor tertinggi (X) dan skor terendah (Y) untuk setiap keterangan penilaian dengan
rumus sebagai berikut:

Y = Skor tertinggi Likert x jumlah responden


X = Skor terendah Likert x jumlah responden

Maka akan didapat iterpretasi skor sebagai berikut:

Y = 4 x 35 = 140

X = 1 x 35 = 35

Setelah didapat nilai interpretasi responden terhadap evaluasi aplikasi


tersebut, hasil nilai yang dihasilkan dengan dikonversikan menggunakan rumus
Index %. Rumus Index % = Total Skor / Y x 100
Tabel 4. 44 Hasil Presentase Jawaban
Kriteria Jawaban Hasil
Pernyataan Total Max Index
TS KS ST SS RataRata
1 0 0 45 80 125 140 89,29%
86,79%
2 0 0 66 52 118 140 84,29%
3 0 0 69 48 117 140 83,57%
4 0 0 39 88 127 140 90,71% 85,95%
5 0 0 69 48 117 140 83,57%
Rata-Rata Keseluruhan 86,37%
Untuk mendapatkan interval skor penilaian dari hasil rumus index dapat
dihitung menggunakan rumus berikut:

I = 100 / Jumlah Skor (Likert)

Maka = 100/ 4 = 25
135

Hasil (I) = 25
Tabel 4. 45 Penentuan Nilai Interval
Jawaban Nilai Interval
TS Tidak Setuju 0% - 25%
KS Kurang Setuju 25.01% - 50%
ST Setuju 50.01% - 75%
SS Sangat Setuju 75.01% - 100%
Berdasarkan hasil perhitungan kuisioner didapat hasil sebagai berikut:

1. Penyataan nomor 1 sampai 2 mendapatkan skor 86,79% yaitu masuk


pada interval sangat setuju, artinya interface pada aplikasi mudah
dipahami.
2. Pernyataan nomor 3 sampai 5 mendapatkan skor 85,95% yaitu masuk
pada interval sangat setuju, artinya aplikasi dapat memberikan
pengacakan pada soal, dan dapat memberikan penilaian langsung dari
hasil ujian.

Hasil rata-rata keseluruhan kuisioner untuk aplikasi ini mendapatkan skor


rata-rata 86,37%. Sehingga pada rentang interval nilai termasuk ke dalam kategori
penilaian dengan jawaban sangat setuju.
BAB 5 KESIMPULAN DAN SARAN
5.1 Kesimpulan
Berdasarkan penelitian yang telah dilaksanakan maka terdapat beberapa
kesimpulan sebagai berikut:
1. Perancangan aplikasi ujian dalam melakukan pengacakan soal
menggunakan algortima fisher-yates shuffle. Untuk metode
pengembangannya menggunakan metode SDLC dengan model
prototype.
2. Aplikasi yang dibuat mengurangi jumlah plagiat atau mencotek pada
saat ujian berlangsung.
3. Aplikasi yang dibuat menjadi solusi untuk siswa yang mencontek
dengan menggunakan pengacakan dengan algoritma fisher-yates
shuffle sehingga soal yang muncul berbeda dengan siswa yang lainnya.
4. Aplikasi yang dibuat dapat memberikan informasi hasil ujian siswa,
melakukan pengacakan soal, setelah dilakukan evaluasi kepada user
aplikasi ini mendapatkan skor 86,37%.

5.2 Saran
Berdasarkan kesimpulan diatas diajukan beberapa saran sebagai referensi
untuk penelitian selanjutnya sebagai berikut:
1. Dalam pengacakan dapat digunakan menggunakan algoritma
pengacakan yang lain.
2. Adanya penambahan jenis soal seperti essay, menjodohkan, dan lain
sebagainya.
3. Adanya tambahan fitur pada aplikasi untuk mengelola ujian yang
berkaitan dengan soal.

DAFTAR PUSTAKA

136
Admin. (2012). Visual Arti Kata. Dipetik 03 15, 2017, dari sinonimkata.com:
http://www.sinonimkata.com/sinonim-160119-pelajaran.html
Farisi, A. (2013). Analisis Perbandingan Algoritma Fisher Yates Shuffle dan Naive
Shuffle.
Hakim, W. L. (2012). Prototyping Model.
http://id.scribd.com/doc/58298607/Pengertian-Prototype.
Ibrahim, A. (2013). Pengertian Aplikasi dan Sejarah Perkembangan Aplikasi.
Diambil kembali dari Pengertian dan Definisi:
http://pengertiandefinisi.com/pengertian-aplikasi-dan-
sejarahperkembangan-aplikasi/
Imran, S. (2014). Fungsi, Tujuan dan Manfaat Penggunaan Buku Teks Pelajaran
dalam Pembelajaran. Dipetik 03 15, 2017, dari Ilmu Pendidikan:
http://ilmu-pendidikan.net/pustaka/buku/fungsi-tujuan-dan-
manfaatpenggunaan-buku-teks-pelajaran-dalam-pembelajaran
Munir, R. (2014). Algoritma & Pemrograman dalam Bahasa Pascal dan C.
Informatika.
NN. (2013). Pengertian Tes Menurut Para Ahli. Diambil kembali dari
DuniaPelajar.com: http://www.duniapelajar.com/2013/04/03/pengertiantes-
menurut-para-ahli/
NN. (2016). Pengertian Online Menurut Para Ahli. Diambil kembali dari
Pengertianmu.com:
http://www.pengertianmu.com/2016/10/pengertianonlinemenurutparaahli.
NN. (2014). Fisher Yates Shuffle. Diambil kembali dari
http://en.algoritmy.net/article/43676/Fisher-Yates-shuffle
NN. (2012). Fisher Yates Shuffle. Diambil kembali dari Algoritmy.net:
http://www.programming-algorithms.net/article/43676/Fisher-
Yatesshuffle
Pressman, R. S. (2013). Software Engineering : A Practicioner's Approach, 7th
Edition. New York: McGraw-Hill Inc.

Ramadhan, A. (2013). Internet dan Aplikasinya. Jakarta: PT Elex Media


Komputindo Kelompok Gramedia.

137
Ratih. (2013). Definisi Evaluasi Pendidikan, Penilaian (Assesment), Pengukuran
dan Tes dalam Pendidikan. Diambil kembali dari
https://ratih612.wordpress.com/2013/01/24/definisievaluasipendidikanpen
i laianassesmentpengukurandantesdalampendidikan/
Rizky, S. (2013). Konsep Dasar Rekayasa Perangkat Lunak (Software
Reengineering)/PRT. Surabay: Prestasi Pustaka Raya.
Rosa A.S., M. S. (2013). Rekayasa Perangkat Lunak: Terstruktur dan Berorientasi
Objek. Bandung: Informatika Bandung.
Simarmata, J. (2014). Rekayasa Perangkat Lunak. Yogyakarta: Andi.
Sugiyono, P. D. (2015). Metodologi Penelitian Kuantitatif Kualitatif dan R&D.
Bandung: Alfabeta.

138
BIODATA PENULIS
IDENTITAS
Nama : Dewi Admisari
Tempat / Tanggal Lahir : Karawang, 22-12-1995
Jenis Kelamin : Perempuan
Alamat : Dusun Sukagalih
RT 011/ RW 004 No.43
Desa Telukjambe
Telukjambe Timur -
Karawang

Agama : Islam
Kewarganegaraan : Indonesia
Tinggi/Berat Badan : 167cm / 50kg
No.Telp/Handphone : +62 857-7108-0083
Email : dewi.admisari@student.unsika.ac.id

PENDIDIKAN
Pendidikan Nama Sekolah Jurusan
Perguruan Tinggi : Universitas Teknik Informatika
Singaperbangsa Karawang
Sekolah Menengah Atas : SMA Negeri 1 IPA
Telukjambe Timur
Sekolah Menengah Pertama : SMP Negeri 2 Telukjambe -
Timur
Sekolah Dasar : SD Negeri IX Pinayungan -
TK : Darul Hikmah -
Lampiran 1: Wawancara
Lampiran 2: Surat Ijin Penelitian
Lampiran 3: Surat Balasan Ijin Penelitian
Lampiran 4: Hasil Evaluasi 1
Lampiran 5: Hasil Evaluasi 2
Lampiran 6: Hasil Evaluasi
Lampiran 7: Source Code Aplikasi
index.php
<?php
session_start(); ob_start();

include "library/session.php";
?>

<html>
<head>
<title>Ujian Berbasis Komputer</title>

<meta charset="utf-8" />


<meta name="viewport"
content="width=devicewidth,initial-scale=1" />

<link rel="stylesheet" type="text/css"


href="assets/bootstrap/css/bootstrap.min.css"/>
<link type="text/css" rel="stylesheet"
href="assets/dataTables/css/dataTables.bootstrap.min.
css">
<link rel="stylesheet" type="text/css"
href="css/style.css"/>

<script type="text/javascript"
src="assets/jquery/jquery-2.0.2.min.js"></script>
<script type="text/javascript"
src="assets/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript"
src="js/main.js"></script>
</head>

<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<?php include "menu.php"; ?>
</div>
</nav>

<section>
<div class="container">
<div class="row">
<div class="col-xs-12" id="content"></div>
</div>
</div>
</section>

<footer>
<div class="container">
<p class="text-center">Copyright &copy; SMA
Sunan Gunung Jati Karawang. All right reserved.</p>
</div>
</footer>

</body>
</html>

login.php
<?php
session_start();

if(isset($_SESSION['nis'])) {
header('location: index.php');
}
?>
<html>
<head>

<title>Ujian Berbasis Komputer</title>


<meta charset="utf-8" />
<meta name="viewport"
content="width=devicewidth,initial-scale=1" />
<link rel="stylesheet" type="text/css"
href="assets/bootstrap/css/bootstrap.min.css"/>
<link rel="stylesheet" type="text/css"
href="css/login.css"/>

<script type="text/javascript"
src="assets/jquery/jquery-2.0.2.min.js"></script>

<script type="text/javascript">
$(function(){
$('.alert').hide();
$('.login-form').submit(function(){
$('.alert').hide();
if($('input[name=username]').val() == ""){
$('.alert').fadeIn().html('Kotak input
<b>Username</b> masih kosong!');
}else if($('input[name=password]').val() ==
""){
$('.alert').fadeIn().html('Kotak input
<b>Password</b> masih kosong!');
}else{
$.ajax({ type : "POST",
url : "login_cek.php", data :
$(this).serialize(), success :
function(data){ if(data == "ok")
window.location =
"index.php";
else $('.alert').fadeIn().html(data);

}
});
} return
false;
});
});
</script>

</head>
<body>

<div class="container-fluid">
<div class="row">
<div class="col-md-4 col-md-offset-4">

<div class="alert alert-danger" role="alert"> </div>

<div class="list-group">
<div class="list-group-item active">
<h3 class="text-center">Login Ujian</h3>
</div>
<div class="list-group-item list-group-item-
info">
<form class="login-form">
<div class="input-group"> <div
class="input-group-addon"><i class="glyphicon
glyphicon-user"></i></div> <input
type="text" name="username" placeholder="NIS"
autofocus class="form-control">
</div><br/>

<div class="input-group"> <div


class="input-group-addon"><i
class="glyphicon glyphicon-lock"></i></div>
<input type="password" name="password"
placeholder="Password" class="form-
control">
</div><br/>

<button class="btn btn-primary pull-right


loginbutton">
<i class="glyphicon glyphicon-log-in"></i>
Login Ujian
</button><br/>
</form>

</div>
</div>

</div>
</div>
</div>

</body>
</html>
login_cek.php
<?php
session_start();
include "library/config.php";
include "library/function_antiinjection.php";

$username = antiinjeksi($_POST['username']);
$password = antiinjeksi(md5($_POST['password']));
$cekuser = mysqli_query($mysqli, "SELECT * FROM siswa
WHERE nis='$username' AND password='$password'");
$jmluser = mysqli_num_rows($cekuser); $data
= mysqli_fetch_array($cekuser); if($jmluser
> 0){
if($data['status'] == "off"){
//$_SESSION['username'] = $data['nis'];
$_SESSION['namalengkap'] = $data['nama'];
//$_SESSION['password'] = $data['password'];
$_SESSION['nis'] = $data['nis'];
$_SESSION['kelas'] = $data['id_kelas'];

mysqli_query($mysqli, "UPDATE siswa


SET status='login' WHERE
nis='$data[nis]'"); echo "ok";
}else{
echo "Siswa sedang <b>Login</b>. Hubungi
operator untuk mereset login!";
}
}else{
echo "<b>Username</b> atau <b>password</b> tidak
terdaftar!";
}
?>
home.php
<?php
session_start();
include "library/config.php"; include
"library/session.php";

echo '<h3 class="page-header">Daftar Ujian</h3>';

//Cek jumlah ujian pada tanggal sekarang


$tgl = date('Y-m-d');
$qujian = mysqli_query($mysqli, "SELECT * FROM ujian
t1, kelas_ujian t2 WHERE t1.tanggal='$tgl' AND
t1.id_ujian=t2.id_ujian AND
t2.id_kelas='$_SESSION[kelas]' AND t2.aktif='Y'");
$tujian = mysqli_num_rows($qujian);
$rujian = mysqli_fetch_array($qujian);

//Jika tidak ada ujian aktif tampilkan pesan


if($tujian < 1){
echo '<div class="alert alert-info">Belum ada
ujian yang aktif saat ini. Silahkan hubungi
operator!</div>';
}
//Jika ada satu ujian aktif arahkan ke
halaman berikutnya
else if($tujian == 1){
echo '<script>
show_detail('.$rujian['id_ujian'].'); </script>';
}
//Jika ada dua atau lebih ujian aktif tampilkan
pada tabel else{
echo '<table class="table table-striped"><thead>
<tr>
<th>No</th>
<th>Nama Mapel</th>
<th>Kelas</th>
<th>Jml. Soal</th>
<th>Waktu</th>
<th>Aksi</th>
</tr></thead><tbody>';

$qujian = mysqli_query($mysqli, "SELECT * FROM


ujian t1, kelas_ujian t2 WHERE t1.tanggal='$tgl' AND
t1.id_ujian=t2.id_ujian AND
t2.id_kelas='$_SESSION[kelas]' AND t2.aktif='Y'");
$no = 1;
while($r = mysqli_fetch_array($qujian)){

$kelas_ujian = array();
$qkelas_ujian = mysqli_query($mysqli, "SELECT *
FROM kelas t1, kelas_ujian t2 WHERE
t1.id_kelas=t2.id_kelas AND
t2.id_ujian='$r[id_ujian]'"); while($rku =
mysqli_fetch_array($qkelas_ujian)){
$kelas_ujian[] = $rku['kelas'];
}

echo'<tr>
<td>'.$no.'</td>
<td>'.$r['nama_mapel'].'</td>
<td>'.implode($kelas_ujian, ", ").'</td>
<td>'.$r['jml_soal'].'</td>
<td>'.$r['waktu'].' menit</td>
<td>';

//Jika nilai sudah ada tampilkan tombol Sudah


Mengerjakan, jika belum ada tampilkan tombol Kerjakan
$qnilai = mysqli_query($mysqli, "SELECT *
FROM nilai WHERE id_ujian='$r[id_ujian]' AND
nis='$_SESSION[nis]'");
$tnilai = mysqli_num_rows($qnilai);
$rnilai = mysqli_fetch_array($qnilai);

if($tnilai>0 and $rnilai['nilai'] != "") echo


'<a class="btn btn-danger">Sudah Mengerjakan</a>';
else echo '<a
onclick="show_detail('.$r['id_ujian'].')" class="btn
btn-success"><i class="glyphicon glyphicon-edit"></i>
Kerjakan</a>'; echo '</td>
</tr>';
$no++;
}
echo '</tbody></table>';
}
?>

detail.php
<?php
session_start();
include "library/config.php";

if(empty($_SESSION['nis'])){
header('location: login.php');
}
$kelas =
mysqli_fetch_array(mysqli_query($mysqli, "SELECT
* FROM kelas WHERE
id_kelas='$_SESSION[kelas]'"));
$ujian = mysqli_fetch_array(mysqli_query($mysqli,
"SELECT * FROM ujian WHERE
id_ujian='$_GET[ujian]'"));
?>

<h3 class="page-header"><i class="glyphicon


glyphicon-user"></i> Data Siswa dan Ujian</h3> <div
class="row">
<div class="col-md-3">NIS</div>
<div class="col-md-9">: <b><?= $_SESSION['nis'];
?> </b> </div>
</div><br/>
<div class="row">
<div class="col-md-3">Nama Lengkap</div>
<div class="col-md-9">: <b><?=
$_SESSION['namalengkap']; ?> </b></div>
</div><br/>
<div class="row">
<div class="col-md-3">Kelas</div>
<div class="col-md-9">: <b><?= $kelas['kelas'];
?></b></div>
</div><br/>
<div class="row">
<div class="col-md-3">Nama Mapel</div>
<div class="col-md-9">: <b><?=
$ujian['nama_mapel']; ?></b></div>
</div><br/>
<div class="row">
<div class="col-md-3">Jml. Soal</div>
<div class="col-md-9">: <b><?= $ujian['jml_soal'];
?></b></div>
</div><br/>
<div class="row">
<div class="col-md-3">Waktu Mengerjakan</div>
<div class="col-md-9">: <b><?= $ujian['waktu']; ?>
menit</b></div>
</div><br/>

<div class="row">
<div class="col-md-12">

<?php
//Jika nilai sudah ada tampilkan tombol Sudah
Mengerjakan, jika belum ada tampilkan tombol Masuk
Ujian
$qnilai = mysqli_query($mysqli, "SELECT * FROM nilai
WHERE id_ujian='$_GET[ujian]' AND
nis='$_SESSION[nis]'");
$tnilai = mysqli_num_rows($qnilai);
$rnilai = mysqli_fetch_array($qnilai);

if($tnilai>0 and $rnilai['nilai'] != "") echo '<a


class="btn btn-danger disabled"> Sudah mengerjakan
</a>';
else echo '<a class="btn btn-primary"
onclick="show_petunjuk('.$_GET['ujian'].')">
<i class="glyphicon glyphicon-log-in"></i> Masuk
Ujian</a>';
?>

</div>
</div><br/>

logout.php
<?php
session_start();
include "library/config.php";
mysqli_query($mysqli, "UPDATE siswa SET status='off'
WHERE nis='$_SESSION[nis]'");

session_destroy();
echo "<script>
alert('Anda keluar dari ujian!');
window.location = 'login.php';
</script>";
?>

petunjuk.php
<?php
session_start();
if(empty($_SESSION['nis'])){
header('location: login.php');
}
?>
<h3 class="page-header"><i class="glyphicon
glyphicon-exclamation-sign"></i> Petunjuk
Mengerjakan</h3>
<div class="alert alert-info">
<p>Sebelum mengerjakan ulangan online, baca dengan
cermat petunjuk berikut:</p>

<ul>
<li>Berdoalah terlebih dahulu sebelum mengerjakan
ujian! </li>
<li>Gunakan nomor soal di sebelah kanan atau tombol
di bawah soal untuk pindah ke lain soal! </li>
<li>Nomor berwarna merah berarti belum dikerjakan,
nomor berwarna kuning berarti ragu-ragu, dan tombol
berwarna hijau berarti telah dikerjakan. </li>
<li>Jawaban yang dipilih akan berubah berwarna
hijau.
Jawaban dapat diganti dengan mengklik pilihan lain.
</li>
<li>Kerjakan soal yang paling mudah terlebih dahulu.
</li>
<li>Selesaikan semua soal sebelum waktu habis! Jika
waktu habis, maka soal otomatis tidak dapat
dikerjakan lagi.</li>
<li>Klik tombol Selesai pada nomor terakhir untuk
mengakhiri ujian. Pastikan telah mengklik tombol ini
sebelum logout. Jika meninggalkan komputer seblum
klik tombol ini, maka nilai tidak akan
diproses.</li> <li>Konsultasikan dengan
pengawas/proktor jika ada kendala teknis saat
mengerjakan ujian, atau ada soal yang tidak
dipahami. </li>
</ul>

</div>
<form onsubmit="return show_ujian(<?=
$_GET['ujian'];
?>)" class="form">
<div class="form-group">
<div class="col-md-9">
<input type="checkbox" required><b> Saya telah
membaca dan memahami petunjuk mengerjakan dengan
cermat</b>
</div>
<div class='col-md-3'>
<button type="submit" class="btn btn-warning">
<i class="glyphicon glyphicon-log-in"></i> Mulai
Mengerjakan </button>
</div>
</div>
</form>

ujian.php
<script type="text/javascript"
src="js/ujian.js"></script>
<?php
session_start();
include "library/config.php";

if(empty($_SESSION['nis'])){
header('location: login.php');
}
function Fisher_Yates_shuffle($array){
$i = count($array);
while(--$i){ $j =
mt_rand(0,$i);
if($i != $j){
$tmp = $array[$j];
$array[$j] = $array[$i];
$array[$i] = $tmp;
}
}
return $array;
}
//1 Update status siswa dan membuat array data
untuk dimasukkan ke tabel nilai
mysqli_query($mysqli, "UPDATE siswa SET
status='mengerjakan' WHERE nis='$_SESSION[nis]'");
$rujian = mysqli_fetch_array(mysqli_query($mysqli,
"SELECT * FROM ujian WHERE
id_ujian='$_GET[ujian]'"));
$qsoal = mysqli_query($mysqli, "SELECT * FROM soal
WHERE id_ujian='$_GET[ujian]' LIMIT
$rujian[jml_soal]");

if(mysqli_num_rows($qsoal)==0) die('<div
class="alert alert-warning">Belum ada soal pada
ujian ini</div>');

$arr_soal = array();
$arr_jawaban = array();
while($rsoal = mysqli_fetch_array($qsoal)){
$arr_soal[] = $rsoal['id_soal'];
$arr_jawaban[] = 0;
}
$acak_soal = implode(",",
Fisher_Yates_shuffle($arr_soal));
$jawaban = implode(",", $arr_jawaban);
//2 Memasukkan data ke tabel nilai jika data
nilai belum ada
$qnilai = mysqli_query($mysqli, "SELECT * FROM nilai
WHERE nis='$_SESSION[nis]' AND
id_ujian='$_GET[ujian]'");
if(mysqli_num_rows($qnilai) < 1){
mysqli_query($mysqli, "INSERT INTO nilai SET
nis='$_SESSION[nis]', id_ujian='$_GET[ujian]',
acak_soal='$acak_soal', jawaban='$jawaban',
sisa_waktu='$rujian[waktu]:00'");
}

//3 Menampilkan judul mapel dan sisa waktu


$qnilai = mysqli_query($mysqli, "SELECT * FROM nilai
WHERE nis='$_SESSION[nis]' AND
id_ujian='$_GET[ujian]'");
$rnilai = mysqli_fetch_array($qnilai);
$sisa_waktu = explode(":", $rnilai['sisa_waktu']);
echo '<h3 class="page-
header"><b>Mapel:
'.$rujian['nama_mapel'].' <span class="pull-right">
Sisa Waktu: <span
class="menit">'.$sisa_waktu[0].'</span> : <span
class="detik"> '.$sisa_waktu[1].'
</span></span></b></h3>
<input type="hidden" id="ujian"
value="'.$_GET['ujian'].'">
<input type="hidden" id="sisa_waktu">';

echo '<div class="row">


<div class="col-md-8"><div
class="kontenujian">';

//4 Mengambil data soal dari database


$arr_soal = explode(",", $rnilai['acak_soal']);
$arr_jawaban = explode(",", $rnilai['jawaban']);
$arr_class = array();

for($s=0; $s<count($arr_soal); $s++){


$rsoal = mysqli_fetch_array(mysqli_query($mysqli,
"SELECT * FROM soal WHERE
id_soal='$arr_soal[$s]'"));

//5 Menampilkan no. soal dan soal


$no = $s+1;
$soal = str_replace("../media", "media",
$rsoal['soal']);
$active = ($no==1) ? "active" : "";
echo '<div class="blok-soal soal-'.$no.'
'.$active.'">
<div class="box">
<div class="row">
<div class="col-xs-1"><div
class="nomor">'.$no.'</div></div>
<div class="col-xs-11"><div
class="soal">'.$soal.'</div> </div>
</div>';
//6 Membuat array pilihan dan mengacak pilihan
$arr_pilihan = array();
$nopil = 0;
if($rsoal['pilihan_1'] != '') {
$nopil++;
$arr_pilihan[] = array("no" => $nopil,
"pilihan" => $rsoal['pilihan_1']);
}
if($rsoal['pilihan_2'] != ''){
$nopil++;
$arr_pilihan[] = array("no" => $nopil,
"pilihan" => $rsoal['pilihan_2']);
}
if($rsoal['pilihan_3'] != ''){
$nopil++;
$arr_pilihan[] = array("no" => $nopil,
"pilihan" => $rsoal['pilihan_3']);
}
if($rsoal['pilihan_4'] != ''){
$nopil++;
$arr_pilihan[] = array("no" => $nopil,
"pilihan" => $rsoal['pilihan_4']);
}
if($rsoal['pilihan_5'] != ''){
$nopil++;
$arr_pilihan[] = array("no" => $nopil,
"pilihan" => $rsoal['pilihan_5']);
}
shuffle($arr_pilihan);
//7 Menampilkan pilihan
$arr_huruf = array("A","B","C","D","E");
$arr_class[$no] = ($arr_jawaban[$s]!=0) ? "green"
: "";
for($i=0; $i<=($nopil-1); $i++){
$checked = ($arr_jawaban[$s] ==
$arr_pilihan[$i]['no']) ? "checked" : "";
$pilihan = str_replace("../media", "media",
$arr_pilihan[$i]['pilihan']);
echo '<div class="row pilihan">
<div class="col-xs-1 col-xs-offset-1"> <input
type="radio" name="jawab-'.$no.'" id="huruf-
'.$no.'-'.$i.'" '.$checked.'> <label
for="huruf-'.$no.'-'.$i.'" class="huruf"
onclick="kirim_jawaban('.$s.',
'.$arr_pilihan[$i]['no'].')"> '.$arr_huruf[$i].'
</label>
</div>
<div class="col-xs-10">
<div class="teks">'.$pilihan.' </div>
</div>
</div>';
}

//8 Menampilkan tombol sebelumnya, ragu-ragu dan


berikutnya
echo '</div><br/><div class="row"><div
class="colmd-3">';

$sebelumnya = $no-1;
if($no != 1) echo '<a class="btn btn-primary
btnblockl"
onclick="tampil_soal('.$sebelumnya.')">Sebelumnya</a
>
';
echo '</div>
<div class="col-md-4 col-md-offset-1"><label
class="btn btn-warning btn-block"> <input
type="checkbox" autocomplete="off"
onchange="ragu_ragu('.$no.')"> Ragu-ragu
</label></div>
<div class="col-md-3 col-md-offset-1">';

$berikutnya = $no+1;
if($no != count($arr_soal)) echo '<a
class="btn btn-primary btn-block"
onclick="tampil_soal('.$berikutnya.')">
Berikutnya
</a>';
else echo '<a class="btn btn-danger btn-block"
onclick="selesai()"> Selesai </a>';

echo '</div></div></div>';
}
echo '</div></div>
<div class="col-md-4"><div
class="nomorujian">';

//9 Menampilkan nomor ujian for($j=1;


$j<=$s; $j++){
echo '<div class="blok-nomor"><div class="box">
<a class="tombol-nomor tombol-'.$j.'
'.$arr_class[$j].'"
onclick="tampil_soal('.$j.')">'.$j.'</a></div></div>
'
; }
echo '</div></div></div>';
//10 Menampilkan modal ketika selesai ujian
echo '<div class="modal fade" id="modal-
selesai" tabindex="-1" role="dialog"
arialabelledby="myModalLabel">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<form onsubmit="return

selesai_ujian('.$_GET['ujian'].')">
<div class="modal-header">
<h3 class="modal-title">Selesai Ujian</h3>
</div>

<div class="modal-body">
<p>Pastikan semua soal telah dikerjakan sebelum
mengklik selesai. Setelah klik selesai Anda tidak
dapat mengerjakan ujian lagi. Yakin akan
menyelesaikan ujian? </p>
<div class="chekbox-selesai"><input
type="checkbox" required> Saya yakin akan
menyelesaikan ujian.</div>
</div>

<div class="modal-footer">
<button type="submit" class="btn btn-danger"
onclick="return selesai_ujian('.$_GET['ujian'].')">
Selesai </button>
<button type="button" class="btn btn-warning"
data-dismiss="modal"> Batal </button>
</div>

</form></div></div></div>';
?>

ajax_ujian.php
<?php
session_start();
include "library/config.php";

if(empty($_SESSION['nis'])){
header('location: login.php');
}
//Memproses data ajax ketika memilih salah
satu jawaban
if($_GET['action']=="kirim_jawaban"){
$rnilai = mysqli_fetch_array(mysqli_query($mysqli,
"SELECT * FROM nilai WHERE id_ujian='$_POST[ujian]'
AND nis='$_SESSION[nis]'"));

$jawaban = explode(",", $rnilai['jawaban']);


$index = $_POST['index'];
$jawaban[$index] = $_POST['jawab'];

$jawabanfix = implode(",", $jawaban);


mysqli_query($mysqli, "UPDATE nilai SET
jawaban='$jawabanfix',
sisa_waktu='$_POST[sisa_waktu]' WHERE
id_ujian='$_POST[ujian]' AND nis='$_SESSION[nis]'");

echo "ok";
}

//Memproses data ajax ketika menyelesaikan ujian


elseif($_GET['action']=="selesai_ujian"){
$rnilai = mysqli_fetch_array(mysqli_query($mysqli,
"SELECT * FROM nilai WHERE id_ujian='$_POST[ujian]'
AND nis='$_SESSION[nis]'"));

$arr_soal = explode(",", $rnilai['acak_soal']);


$jawaban = explode(",", $rnilai['jawaban']);
$jbenar = 0;
for($i=0; $i<count($arr_soal); $i++){
$rsoal =
mysqli_fetch_array(mysqli_query($mysqli, "SELECT *
FROM soal WHERE id_ujian='$_POST[ujian]' AND
id_soal='$arr_soal[$i]'"));
if($rsoal['kunci'] == $jawaban[$i]) $jbenar++;
}

$nilai = $jbenar/count($arr_soal)*100;

mysqli_query($mysqli, "UPDATE nilai SET


jml_benar='$jbenar', nilai='$nilai' WHERE
id_ujian='$_POST[ujian]' AND nis='$_SESSION[nis]'");

mysqli_query($mysqli, "UPDATE siswa SET


status='login' WHERE nis='$_SESSION[nis]'");
echo
"ok";
}
?>

admin.js
$(function(){
$('#content').load('home.php');
$('.navigation').each(function(){
$(this).click(function(){ var
link = $(this).attr('href');
$('#content').load(link);
return false;
});
});
});

//Ketika tombol edit diklik function


show_soal(ujian){

$('#content').load('view/view_soal.php?ujian='+ujian)
;
}

//Ketika nama kelas diklik function


show_nilai(kelas, ujian){
$('#content').load('view/view_nilai.php?ujian=' +
ujian + '&kelas=' + kelas);
}

main.js
$(function(){
$('#content').load('home.php');
});
function show_detail(ujian){
$('#content').load('detail.php?ujian='+ujian);
}
function show_petunjuk(ujian){
$('#content').load('petunjuk.php?ujian='+ujian);

}
function show_ujian(ujian){
$('#content').load('ujian.php?ujian='+ujian);
return false;
}
function selesai_ujian(ujian){
$.ajax({
url:
"ajax_ujian.php?action=selesai_ujian",
type: "POST", data: "ujian="+ujian,
success: function(data){
if(data=="ok"){
$('#modal-selesai').modal('hide');
$('#modal-selesai').on('hidden.bs.modal', function(){
$('#content').load('home.php');
});
}else{
alert(data);
}
},
error: function(){
alert('Tidak dapat memproses nilai!');
} });
return false;
}
ujian.js
var menit, detik; var
ujian, sisa_waktu;

//Mengatur agar waktu ujian berjalan mundur


$(function(){
setInterval(function(){
menit = parseInt($('.menit').text());
detik = parseInt($('.detik').text());

detik--;
if(detik<0 &&
menit>0){ menit--;
detik = 59;
}
if(menit<=0) menit = 0;
if(menit<10) menit = "0"+menit;
if(detik<10) detik = "0"+detik;

$('.menit').text(menit);
$('.detik').text(detik);
$('#sisa_waktu').val(menit+':'+detik);

if(menit == "00" && detik == "00"){


selesai();
$('#modal-selesai .modal-title').text("Waktu
Habis!");
$('#modal-selesai .modal-body').text("Waktu
Habis. Klik Selesai untuk memproses nilai!");
$('#modal-selesai .btn-warning').hide();
}
}, 1000);
});
//Ketika tombol nomor soal atau tombol
navigasi diklik
function tampil_soal(no){
$('.blok-soal').removeClass('active');
$('.soal-'+no).addClass('active');
}

//Ketika ragu-ragu dicentang function


ragu_ragu(no){
if($('.tombol-'+no).hasClass('yellow')){
$('.tombol-'+no).removeClass('yellow');
}else{
$('.tombol-'+no).addClass('yellow');
}
}

//Ketika ujian selesai function


selesai(){
$('#modal-selesai').modal({
'show' : true,
'backdrop' : 'static'
});
}

//Ketika memilih jawaban


function kirim_jawaban(index, jawab){
ujian = $('#ujian').val(); sisa_waktu
= $('#sisa_waktu').val();
$.ajax({
url: "ajax_ujian.php?action=kirim_jawaban",
type: "POST",
data: "ujian=" + ujian + "&index=" + index
+ "&sisa_waktu=" + sisa_waktu + "&jawab=" +
jawab, success: function(data){
if(data=="ok"){ no = index+1;
$('.tombol-'+no).addClass("green");
}else{
alert(data);
}
},
error: function(){
alert('Tidak dapat mengirim jawaban!');
}
});
}

ajax_kelas.php
<?php
session_start();
include "../../library/config.php"; include
"../../library/function_view.php";

if($_GET['action'] == "table_data"){
$query = mysqli_query($mysqli, "SELECT * FROM
kelas ORDER BY id_kelas DESC");
$data = array();
$no = 1;
while($r = mysqli_fetch_array($query)){
$row = array();
$row[] = $no;
$row[] = $r['kelas'];
$row[] = create_action($r['id_kelas']);
$data[] = $row;
$no++;
}

$output = array("data" => $data);


echo json_encode($output);
}
elseif($_GET['action'] == "form_data"){
$query = mysqli_query($mysqli, "SELECT *
FROM kelas WHERE id_kelas='$_GET[id]'");
$data = mysqli_fetch_array($query); echo
json_encode($data);
}
elseif($_GET['action'] == "insert"){
$password = md5($_POST['password']);

mysqli_query($mysqli, "INSERT INTO kelas SET kelas


= '$_POST[kelas]' ");
}
elseif($_GET['action'] == "update"){
$password = md5($_POST['password']);
mysqli_query($mysqli, "UPDATE kelas SET kelas=
'$_POST[kelas]' WHERE id_kelas='$_POST[id]'");
}
elseif($_GET['action'] == "delete"){
mysqli_query($mysqli, "DELETE FROM kelas WHERE
id_kelas='$_GET[id]'");
}
?>

ajax_klsujian.php
<?php
session_start();
include "../../library/config.php"; include
"../../library/function_view.php";

//Menampilkan data ke tabel


if($_GET['action'] == "table_data"){
$query = mysqli_query($mysqli, "SELECT * FROM
ujian ORDER BY id_user");
$data = array();
$no = 1;
while($r = mysqli_fetch_array($query)){
$qkelas = mysqli_query($mysqli, "SELECT * FROM
kelas t1, kelas_ujian t2 WHERE
t1.id_kelas=t2.id_kelas AND
t2.id_ujian='$r[id_ujian]'");
$label = "";
while($rk = mysqli_fetch_array($qkelas)){
$label .= '<span class="label
labelinfo">'.$rk['kelas'].'</span> ';
}

$row = array();
$row[] = $no;
$row[] = $r['judul'];
$row[] = $label;
$row[] = create_action($r['id_ujian'], true,
false);
$data[] = $row;
$no++;
}

$output = array("data" => $data);


echo json_encode($output);
}

//Menampilkan data ke form edit


elseif($_GET['action'] == "form_data"){
$query = mysqli_query($mysqli, "SELECT * FROM
kelas_ujian WHERE id_ujian='$_GET[id]'");
$id_kelas = array();
while($row = mysqli_fetch_array($query)){
$id_kelas[] = $row['id_kelas'];
}
$data = array();
$data['kelas'] = implode(",", $id_kelas);
echo json_encode($data);
}

//Mengedit data pada database


elseif($_GET['action'] == "update"){
mysqli_query($mysqli, "DELETE FROM kelas_ujian
WHERE id_ujian='$_POST[id]'");
$kelas = $_POST['kelas'];
foreach($kelas as $kls){
mysqli_query($mysqli, "INSERT INTO kelas_ujian
SET id_ujian='$_POST[id]', id_kelas='$kls'");
}
} ?>

ajax_nilai.php
<?php
session_start();
include "../../library/config.php";

if($_GET['action'] == "table_data"){
$query = mysqli_query($mysqli, "SELECT * FROM
siswa WHERE id_kelas='$_GET[kelas]'");
$data = array();
$no = 1;
while($r = mysqli_fetch_array($query)){
$n = mysqli_fetch_array(mysqli_query($mysqli,
"SELECT * FROM nilai WHERE nis='$r[nis]' AND
id_ujian='$_GET[ujian]'"));

$row = array();
$row[] = $no;
$row[] = $r['nis'];
$row[] = $r['nama'];
$row[] = $n['jml_benar'];
$row[] = $n['nilai'];
$data[] = $row;
}
$output = array("data" => $data);
echo json_encode($output);
}
?>

ajax_profil.php
<?php
session_start();
include "../../library/config.php";

$lama = md5($_POST['lama']); $baru


= md5($_POST['baru']);

$cek = mysqli_fetch_array(mysqli_query($mysqli,
"SELECT * FROM user WHERE
id_user='$_SESSION[id_user]'"));
if($cek['password'] != $lama){
echo "Password lama salah!";
}else{
mysqli_query($mysqli, "UPDATE user
SET password='$baru' WHERE
id_user='$_SESSION[id_user]'"); echo
"ok";
}
?>

ajax_siswa.php
<?php
session_start();
include "../../library/config.php"; include
"../../library/function_view.php";

//Menampilkan data ke tabel


if($_GET['action'] == "table_data"){
$query = mysqli_query($mysqli, "SELECT * FROM
siswa ORDER BY id_kelas");
$data = array();
$no =
1;
while($r = mysqli_fetch_array($query)){
$kelas =
mysqli_fetch_array(mysqli_query($mysqli, "SELECT *
FROM kelas WHERE id_kelas='$r[id_kelas]'"));

if($r['status'] == "login") $status = '<b


class="text-primary">login</b>';
elseif($r['status'] == "mengerjakan") $status
=
'<b class="text-danger">mengerjakan</b>';
else $status = '<b class="text-muted">off</b>';

$row = array();
$row[] = $no;
$row[] = $r['nis'];
$row[] = $r['nama'];
$row[] = substr(md5($r['nis']),0,5);
$row[] = $kelas['kelas'];
$row[] = $status;
$row[] = create_action($r['nis']).'<a
class="btn btn-success"
onclick="reset_login('.$r['nis'].')"><i
class="glyphicon glyphicon-off"></i></a>';
$data[] = $row;
$no++;
}

$output = array("data" => $data);


echo json_encode($output);
}
//Menampilkan data ke form edit
elseif($_GET['action'] == "form_data"){
$query = mysqli_query($mysqli, "SELECT * FROM
siswa WHERE nis='$_GET[id]'");
$data = mysqli_fetch_array($query);
echo json_encode($data);
}

//Menambah data ke database


elseif($_GET['action'] == "insert"){
$password = md5(substr(md5($_POST['nis']),0,5));
$jml = mysqli_num_rows(mysqli_query($mysqli,
"SELECT * FROM siswa WHERE nis='$_POST[nis]'"));
if($jml > 0){
echo "NIS Siswa sudah digunakan!";
}else{
mysqli_query($mysqli, "INSERT INTO siswa
SET nis = '$_POST[nis]', nama =
'$_POST[nama]', password = '$password',
id_kelas= '$_POST[kelas]', status=
'off'"); echo "ok";
}
}

//Mengedit data
elseif($_GET['action'] == "update"){
mysqli_query($mysqli, "UPDATE siswa SET
nama = '$_POST[nama]', id_kelas =
'$_POST[kelas]'
WHERE nis='$_POST[nis]'");
echo "ok";
}

//Menghapus data
elseif($_GET['action'] == "delete"){
mysqli_query($mysqli, "DELETE FROM siswa WHERE
nis='$_GET[id]'");
}

//Import data dari file Excel


elseif($_GET['action'] == "import"){
include
"../../assets/excel_reader/excel_reader.php";
$filename = strtolower($_FILES['file']['name']);
$extensi = substr($filename,-4);

if($extensi != ".xls"){
echo "File yang di-upload tidak berformat
.xls!'";
}else{
$path = "../upload";

move_uploaded_file($_FILES['file']['tmp_name'],
"$path/$filename");

$file = "../upload/$filename";

$data = new Spreadsheet_Excel_Reader();


$data->read($file);
$jdata = $data->rowcount($sheet_index=0);
for($i=2; $i<=$jdata; $i++){

$nis = addslashes(str_replace(" ", "",


$data->val($i,2)));
$nama = addslashes($data->val($i,3));

$cek = mysqli_num_rows(mysqli_query($mysqli,
"SELECT * FROM siswa WHERE nis='$nis'"));
if($cek > 0){
mysqli_query($mysqli, "UPDATE siswa SET
nama='$nama', id_kelas='$_POST[kelas_import]' WHERE
nis='$nis'");
}else{
$pass = md5(substr(md5($nis),0,5));
mysqli_query($mysqli, "INSERT INTO siswa SET
nis='$nis', nama='$nama',
id_kelas='$_POST[kelas_import]', password='$pass',
status='off'");
}
}

unlink($file);
echo "ok";
}
}
?>

ajax_siswa_operator.php
<?php
session_start();
include "../../library/config.php";

//Menampilkan data pada tabel


if($_GET['action'] == "table_data"){

$query = mysqli_query($mysqli, "SELECT * FROM


siswa ORDER BY nis");
$data = array();
$no = 1;
while($r = mysqli_fetch_array($query)){
$kelas =
mysqli_fetch_array(mysqli_query($mysqli, "SELECT *
FROM kelas WHERE id_kelas='$r[id_kelas]'"));

if($r['status'] == "login") $status = '<b


class="text-primary">login</b>';
elseif($r['status'] == "mengerjakan") $status
=
'<b class="text-danger">mengerjakan</b>'; else
$status = '<b class="text-muted">off</b>';
$row = array();
$row[] = $no;
$row[] = $r['nis'];
$row[] = $r['nama'];
$row[] = substr(md5($r['nis']),0,5);
$row[] = $kelas['kelas'];
$row[] = $status;
$row[] = '<a class="btn btn-danger"
onclick="reset_login('.$r['nis'].')"><i
class="glyphicon glyphicon-off"></i> Reset
Login</a>';
$data[] = $row;
$no++;
}

$output = array("data" => $data);


echo json_encode($output);

//Reset login
elseif($_GET['action'] == "reset_login"){
mysqli_query($mysqli, "UPDATE siswa set
status='off' WHERE nis='$_GET[nis]'");
}
?>
ajax_soal.php
<?php
session_start();
include "../../library/config.php"; include
"../../library/function_view.php";

//Menampilkan data ke tabel


if($_GET['action'] == "table_data"){
$query = mysqli_query($mysqli, "SELECT * FROM soal
WHERE id_ujian='$_GET[ujian]' ORDER BY id_soal");
$data = array();
$no = 1;
while($r = mysqli_fetch_array($query)){
$soal = $r['soal'];
$soal .= '<ol type="A">';
for($i=1; $i<=5; $i++){
$kolom = "pilihan_$i";
if($r['kunci']==$i) $soal .= '<li
class="text-primary" style="font-weight:
bold">'.$r[$kolom].'</li>';
elseif($r[$kolom] !== '')
$soal .= '<li>'.$r[$kolom].'</li>';
else
$soal = $soal;
}
$soal .= '</ol>';

$row = array();
$row[] = $no;
$row[] = $soal;
$row[] = create_action($r['id_soal']);
$data[] = $row;
$no++;
}
$output = array("data" => $data);
echo json_encode($output);
}

//Menampilkan data ke form edit


elseif($_GET['action'] == "form_data"){
$query = mysqli_query($mysqli, "SELECT * FROM
soal
WHERE id_soal='$_GET[id]'");
$data = mysqli_fetch_array($query);
echo json_encode($data);
}

//Menambahkan data soal ke database


elseif($_GET['action'] == "insert"){
$soal = addslashes($_POST['soal']);
$pil_1 = addslashes($_POST['pil_1']);
$pil_2 = addslashes($_POST['pil_2']);
$pil_3 = addslashes($_POST['pil_3']);
$pil_4 = addslashes($_POST['pil_4']);
$pil_5 = addslashes($_POST['pil_5']);
mysqli_query($mysqli, "INSERT INTO soal SET
id_ujian = '$_GET[ujian]', soal = '$soal',
pilihan_1 = '$pil_1', pilihan_2 = '$pil_2',
pilihan_3 = '$pil_3', pilihan_4 = '$pil_4',
pilihan_5 = '$pil_5', kunci =
'$_POST[kunci]'"); echo "ok";
}

//Mengedit data soal pada database


elseif($_GET['action'] == "update"){
$soal = addslashes($_POST['soal']);
$pil_1 = addslashes($_POST['pil_1']);
$pil_2 = addslashes($_POST['pil_2']);
$pil_3 = addslashes($_POST['pil_3']);
$pil_4 = addslashes($_POST['pil_4']);
$pil_5 = addslashes($_POST['pil_5']);
mysqli_query($mysqli, "UPDATE soal SET
soal = '$soal', pilihan_1 = '$pil_1',
pilihan_2 = '$pil_2', pilihan_3 =
'$pil_3', pilihan_4 = '$pil_4',
pilihan_5 = '$pil_5', kunci =
'$_POST[kunci]' WHERE id_soal='$_POST[id]'");
//if(mysqli_affected_rows($mysqli) > 0 )
echo "ok"; /* debug
else {
echo mysqli_error($mysqli);
echo mysqli_info($mysqli);
}
*/
}

//Menghapus data
elseif($_GET['action'] == "delete"){
mysqli_query($mysqli, "DELETE FROM soal WHERE
id_soal='$_GET[id]'");
}

//Import data dari format Excel


elseif($_GET['action'] == "import"){

include"../../assets/excel_reader/excel_reader.php";
$filename = strtolower($_FILES['file']['name']);
$extensi = substr($filename,-4);

if($extensi != ".xls"){
echo "File yang di-upload tidak berformat
.xls!'";
}else{
$path = "../upload";
move_uploaded_file($_FILES['file']['tmp_name'],
"$path/$filename");

$file = "../upload/$filename";

$data = new Spreadsheet_Excel_Reader();

$data->read($file);
$jdata = $data->rowcount($sheet_index=0);

for($i=2; $i<=$jdata; $i++){


$soal = htmlspecialchars(addslashes($data-
>val($i,2)));
$pil_1 =
htmlspecialchars(addslashes($data>val($i,3)));
$pil_2 =
htmlspecialchars(addslashes($data>val($i,4)));
$pil_3 =
htmlspecialchars(addslashes($data>val($i,5)));
$pil_4 =
htmlspecialchars(addslashes($data>val($i,6)));
$pil_5 = htmlspecialchars(addslashes($data-
>val($i,7)));
$kunci = addslashes($data->val($i,8));

mysqli_query($mysqli, "INSERT INTO soal SET


id_ujian = '$_GET[ujian]', soal =
'$soal', pilihan_1 = '$pil_1',
pilihan_2 = '$pil_2', pilihan_3 =
'$pil_3', pilihan_4 = '$pil_4',
pilihan_5 = '$pil_5', kunci = '$kunci'");
}
unlink($file);
echo "ok";
}
}
?>
ajax_soal_print.php
<?php
session_start();
include "../../library/config.php"; include
"../../library/function_view.php";

//Menampilkan data ke tabel


if($_GET['action'] == "table_data"){
$query = mysqli_query($mysqli, "SELECT * FROM soal
WHERE id_ujian='$_GET[ujian]' ORDER BY id_soal");
$data = array();
$no = 1;
while($r = mysqli_fetch_array($query)){
$soal = $r['soal'];
$soal .= '<ol type="A">';
for($i=1; $i<=5; $i++){
$kolom = "pilihan_$i";
//if($r['kunci']==$i) $soal .= '<li
class="text-primary" style="font-weight:
bold">'.$r[$kolom].'</li>';
//else
if($r[$kolom] !== '')
$soal .= '<li>'.$r[$kolom].'</li>';
else
$soal = $soal;
}
$soal .= '</ol>';

$row = array();
$row[] = $no;
$row[] = $soal;
$row[] = create_action($r['id_soal']);
$data[] = $row;
$no++;
}
$output = array("data" => $data);
echo json_encode($output);
}

//Menampilkan data ke form edit


elseif($_GET['action'] == "form_data"){
$query = mysqli_query($mysqli, "SELECT * FROM
soal
WHERE id_soal='$_GET[id]'");
$data = mysqli_fetch_array($query);
echo json_encode($data);
}

//Menambahkan data soal ke database


elseif($_GET['action'] == "insert"){
$soal = addslashes($_POST['soal']);
$pil_1 = addslashes($_POST['pil_1']);
$pil_2 = addslashes($_POST['pil_2']);
$pil_3 = addslashes($_POST['pil_3']);
$pil_4 = addslashes($_POST['pil_4']);
$pil_5 = addslashes($_POST['pil_5']);
mysqli_query($mysqli, "INSERT INTO soal
SET id_ujian = '$_GET[ujian]',
soal = '$soal', pilihan_1 =
'$pil_1', pilihan_2 = '$pil_2',
pilihan_3 = '$pil_3', pilihan_4 =
'$pil_4', pilihan_5 = '$pil_5',
kunci = '$_POST[kunci]'");
echo "ok";
}

//Mengedit data soal pada database


elseif($_GET['action'] == "update"){
$soal = addslashes($_POST['soal']);
$pil_1 = addslashes($_POST['pil_1']);
$pil_2 = addslashes($_POST['pil_2']);
$pil_3 = addslashes($_POST['pil_3']);
$pil_4 = addslashes($_POST['pil_4']);
$pil_5 = addslashes($_POST['pil_5']);
mysqli_query($mysqli, "UPDATE soal SET
soal = '$soal', pilihan_1 =
'$pil_1', pilihan_2 = '$pil_2',
pilihan_3 = '$pil_3', pilihan_4 =
'$pil_4', pilihan_5 = '$pil_5',
= '$_POST[kunci]' WHERE id_soal='$_POST[id]'");
echo "ok";
}

//Menghapus data
elseif($_GET['action'] == "delete"){
mysqli_query($mysqli, "DELETE FROM soal WHERE
id_soal='$_GET[id]'");
}

//Import data dari format Excel


elseif($_GET['action'] == "import"){

include"../../assets/excel_reader/excel_reader.php";
$filename =
strtolower($_FILES['file']['name']);
$extensi = substr($filename,-4);

if($extensi != ".xls"){
echo "File yang di-upload tidak berformat
.xls!'";
}else{
$path = "../upload";

move_uploaded_file($_FILES['file']['tmp_name'],
"$path/$filename");

$file = "../upload/$filename";

$data = new Spreadsheet_Excel_Reader();


$data->read($file);
$jdata = $data->rowcount($sheet_index=0);

for($i=2; $i<=$jdata; $i++){


$soal = htmlspecialchars(addslashes($data-
>val($i,2)));
$pil_1 =
htmlspecialchars(addslashes($data>val($i,3)));
$pil_2 =
htmlspecialchars(addslashes($data>val($i,4)));
$pil_3 =
htmlspecialchars(addslashes($data>val($i,5)));
$pil_4 =
htmlspecialchars(addslashes($data>val($i,6)));
$pil_5 =
htmlspecialchars(addslashes($data-
>val($i,7)));
$kunci = addslashes($data->val($i,8));

mysqli_query($mysqli, "INSERT INTO soal


SET id_ujian = '$_GET[ujian]',
soal = '$soal', pilihan_1 = '$pil_1',
pilihan_2 = '$pil_2', pilihan_3 =
'$pil_3', pilihan_4 = '$pil_4',
pilihan_5 = '$pil_5', kunci =
'$kunci'");
}

unlink($file);
echo "ok";
}
}
?>

ajax_ujian.php
<?php
session_start();
include "../../library/config.php"; include
"../../library/function_date.php"; include
"../../library/function_view.php";

//Menampilkan data ke tabel


if($_GET['action'] == "table_data"){
$query = mysqli_query($mysqli, "SELECT * FROM
ujian ORDER BY id_ujian DESC");
$data = array();
$no = 1;
while($r = mysqli_fetch_array($query)){
$user =
mysqli_fetch_array(mysqli_query($mysqli, "SELECT *
FROM user WHERE id_user='$r[id_user]'"));
$row = array();
$row[] = $no;
$row[] = $r['judul'];
$row[] = $r['nama_mapel'];
$row[] = tgl_indonesia($r['tanggal']);
$row[] = $r['waktu'].' menit';
$row[] = $r['jml_soal'];
$row[] = $user['nama'];
$row[] = create_action($r['id_ujian']);
$data[] = $row;
$no++;
}
$output = array("data" => $data);
echo json_encode($output);
}

//Menampilkan data ke form


elseif($_GET['action'] == "form_data"){
$query = mysqli_query($mysqli, "SELECT * FROM
ujian WHERE id_ujian='$_GET[id]'"); $data =
mysqli_fetch_array($query); echo
json_encode($data);
}

//Menambah data
elseif($_GET['action'] == "insert"){
mysqli_query($mysqli, "INSERT INTO ujian SET
judul = '$_POST[judul]',
nama_mapel = '$_POST[mapel]',
tanggal = '$_POST[tanggal]',
waktu = '$_POST[waktu]', jml_soal
= '$_POST[jml_soal]', id_user =
'$_POST[pengampu]'");
}

//Mengedit data
elseif($_GET['action'] == "update"){
mysqli_query($mysqli, "UPDATE ujian SET
judul = '$_POST[judul]', nama_mapel
= '$_POST[mapel]', tanggal =
'$_POST[tanggal]', waktu =
'$_POST[waktu]', jml_soal =
'$_POST[jml_soal]', id_user =
'$_POST[pengampu]'
WHERE id_ujian='$_POST[id]'");
}

//Menghapus data
elseif($_GET['action'] == "delete"){
mysqli_query($mysqli, "DELETE FROM ujian WHERE
id_ujian='$_GET[id]'");
}
?>

ajax_ujian_operator.php
<?php
session_start();
include "../../library/config.php"; include
"../../library/function_view.php";

//Menampilkan data ke tabel


if($_GET['action'] == "table_data"){
$tgl = date('Y-m-d');
$query = mysqli_query($mysqli, "SELECT * FROM
ujian WHERE tanggal='$tgl' ORDER BY id_user");
$data = array();
$no = 1;
while($r = mysqli_fetch_array($query)){

$qkelas = mysqli_query($mysqli, "SELECT *


FROM kelas t1, kelas_ujian t2 WHERE
t1.id_kelas=t2.id_kelas AND
t2.id_ujian='$r[id_ujian]'"); $label = "";
while($rk = mysqli_fetch_array($qkelas)){
if($rk['aktif']=='Y') $class = 'btn-danger';
else $class = 'btn-primary';
$label .= '<a class="btn btn-sm
'.$class.'"
onclick="edit_data('.$rk['id_kelas'].','.$rk['id_u
jia n'].')">'.$rk['kelas'].'</a> ';
}

$row = array();
$row[] = $no;
$row[] = $r['judul'];
$row[] = $label;
$data[] = $row;
$no++;
}

$output = array("data" => $data);


echo json_encode($output);

//Mengaktifkan atau menonaktifkan kelas ujian


elseif($_GET['action'] == "update"){
$cek = mysqli_fetch_array(mysqli_query($mysqli,
"SELECT * FROM kelas_ujian WHERE
id_ujian='$_GET[ujian]' AND
id_kelas='$_GET[kelas]'"));
$aktif = ($cek['aktif']=='Y') ? 'N' : 'Y';
mysqli_query($mysqli, "UPDATE kelas_ujian set
aktif='$aktif' WHERE id_ujian='$_GET[ujian]' AND
id_kelas='$_GET[kelas]'");
}
?>

ajax_ujian_teacher
<?php
session_start();
include "../../library/config.php"; include
"../../library/function_date.php";

$query = mysqli_query($mysqli, "SELECT * FROM ujian


WHERE id_user='$_SESSION[id_user]' ORDER BY
tanggal");
$data = array();
$no = 1;
while($r = mysqli_fetch_array($query)){

//Membuat tombol edit soal


$qsoal = mysqli_query($mysqli, "SELECT * FROM soal
WHERE id_ujian='$r[id_ujian]'");
$btn_soal = '<a class="btn btn-primary btn-sm"
onclick="show_soal('.$r['id_ujian'].')"><i
class="glyphicon glyphicon-edit"></i> Edit
&nbsp;&nbsp;<span class="label
labelwarning">'.mysqli_num_rows($qsoal).'</span></
a>';

//Membuat tombol kelas untuk melihat nilai


$qkelas = mysqli_query($mysqli, "SELECT * FROM
kelas t1, kelas_ujian t2 WHERE
t1.id_kelas=t2.id_kelas AND
t2.id_ujian='$r[id_ujian]'");
$label = "";
while($rk = mysqli_fetch_array($qkelas)){
$jml =
mysqli_num_rows(mysqli_query($mysqli, "SELECT *
FROM nilai t1, siswa t2 WHERE
t1.id_ujian='$rk[id_ujian]' AND t1.nis=t2.nis AND
t2.id_kelas='$rk[id_kelas]'"));
$label .= '<a class="btn btn-xs btn-info"
style="margin-bottom: 5px"
onclick="show_nilai('.$rk['id_kelas'].','.$rk['id_
uji an'].')">'.$rk['kelas'].' &nbsp;&nbsp; <span
class="label label-warning">'.$jml.'</span></a> ';
}

$row = array();
$row[] = $no;
$row[] = $r['judul'];
$row[] = $r['nama_mapel'];
$row[] = tgl_indonesia($r['tanggal']);
$row[] = $r['jml_soal'];
$row[] = $btn_soal;
$row[] = $label;
$data[] = $row;
$no++;
}

$output = array("data" => $data); echo


json_encode($output);
?>

ajax_user.php
<?php
session_start();
include "../../library/config.php"; include
"../../library/function_view.php";

//menampilkan data
if($_GET['action'] == "table_data"){
$query = mysqli_query($mysqli, "SELECT * FROM
user WHERE level!='admin' ORDER BY id_user DESC");
$data = array();
$no = 1;
while($r = mysqli_fetch_array($query)){
$row = array();
$row[] = $no;
$row[] = $r['nama'];
$row[] = $r['username'];
$row[] = $r['level'];
$row[] = create_action($r['id_user']);
$data[] = $row;
$no++;
}

$output = array("data" => $data);


echo json_encode($output);
}
elseif($_GET['action'] == "form_data"){
$query = mysqli_query($mysqli, "SELECT * FROM
user
WHERE id_user='$_GET[id]'");
$data = mysqli_fetch_array($query);
echo json_encode($data);
}

//menambah data
elseif($_GET['action'] == "insert"){
$password = md5($_POST['password']);
mysqli_query($mysqli, "INSERT INTO user
SET nama = '$_POST[nama]',
username = '$_POST[username]',
password = '$password', level=
'$_POST[level]'");
}

//mengubah data
elseif($_GET['action'] == "update"){
$password = md5($_POST['password']);
mysqli_query($mysqli, "UPDATE user
SET nama = '$_POST[nama]',
username = '$_POST[username]',
level = '$_POST[level]' WHERE
id_user='$_POST[id]'");
if($password != "") mysqli_query($mysqli,
"UPDATE user SET password='$password' WHERE
id_user='$_POST[id]'");
}
//hapus data
elseif($_GET['action'] == "delete"){
mysqli_query($mysqli, "DELETE FROM user WHERE
id_user='$_GET[id]'");
}

?>
home.php
<?php
session_start();
?>

<div class="jumbotron">
<div class="container text-center">
<h2>Selamat Datang <b> <?=
$_SESSION['namalengkap']; ?> </b>!</h2>
<p>Anda login sebagai <b> <?=
$_SESSION['leveluser']; ?> </b></p>
</div>
</div>

index.php
<?php
ob_start();

include "../library/session_admin.php";
?>

<html>
<head>

<title>Halaman Administrator</title>

<meta charset="utf-8" />


<meta name="viewport"
content="width=devicewidth,initial-scale=1" />

<link rel="stylesheet" type="text/css"


href="../assets/bootstrap/css/bootstrap.min.css"/>
<link type="text/css" rel="stylesheet"
href="../assets/dataTables/css/dataTables.bootstra
p.m in.css">
<link type="text/css" rel="stylesheet"
href="../assets/dataTables/extensions/buttons/css/
but tons.dataTables.min.css">
<link type="text/css" rel="stylesheet"
href="../assets/dataTables/extensions/buttons/css/
but tons.bootstrap.min.css">
<link rel="stylesheet" type="text/css"
href="../css/admin.css"/>

<script type="text/javascript"
src="../assets/jquery/jquery-
2.0.2.min.js"></script>

</head>
<body>

<nav class="navbar navbar-default navbar-fixed-


top">
<div class="container">
<?php include "menu.php"; ?>
</div>
</nav>
<section>
<div class="container">
<div class="row">
<div class="col-xs-12" id="content"></div>
</div>
</div>
</section>

<footer>
<div class="container">
<p class="text-center">Copyright &copy; SMA
Sunan Gunung Jati Karawang. All right reserved.</p>
</div>
</footer>

<script type="text/javascript"
src="../assets/bootstrap/js/bootstrap.min.js"></scrip
t>
<script type="text/javascript"
src="../assets/dataTables/js/jquery.dataTables.min.js
"></script>
<script type="text/javascript"
src="../assets/dataTables/js/dataTables.bootstrap.min
.js"></script>
<script type="text/javascript"
src="../assets/dataTables/extensions/buttons/js/dataT
ables.buttons.min.js"></script> <script
type="text/javascript"
src="../assets/dataTables/extensions/buttons/js/butto
ns.bootstrap.min.js"></script>
<script type="text/javascript"
src="../assets/dataTables/extensions/buttons/js/butto
ns.flash.min.js"></script> <script
type="text/javascript"
src="../assets/dataTables/extensions/buttons/js/butto
ns.html5.min.js"></script> <script
type="text/javascript"
src="../assets/dataTables/extensions/buttons/js/butto
ns.print.min.js"></script>
<script
type="text/javascript"
src="../js/admin.js"></script>

</body>
</html>

login.php
<?php
session_start();

if(isset($_SESSION['id_user'])) {
header('location: index.php');
}
?>

<html>
<head>

<title>Halaman Administrator</title>
<meta charset="utf-8" />
<meta name="viewport"
content="width=devicewidth,initial-scale=1" />
<link rel="stylesheet"
type="text/css"
href="../assets/bootstrap/css/bootstrap.min.css"/>
<link rel="stylesheet" type="text/css"
href="../css/login.css"/>

<script type="text/javascript"
src="../assets/jquery/jquery-2.0.2.min.js"></script>
<script type="text/javascript">
$(function(){
$('.alert').hide();
$('.login-form').submit(function(){
$('.alert').hide();
if($('input[name=username]').val() == ""){
$('.alert').fadeIn().html('Kotak input
<b>Username</b> masih kosong!');
}else if($('input[name=password]').val() ==
""){
$('.alert').fadeIn().html('Kotak input
<b>Password</b> masih kosong!');
}else{ $.ajax({
type : "POST", url :
"login_cek.php", data :
$(this).serialize(),
success : function(data){
if(data == "ok") window.location =
"index.php";
else $('.alert').fadeIn().html(data);

}
});
}
return false;
});
});
</script>

</head>
<body>

<div class="container-fluid">
<div class="row">
<div class="col-md-
4 col-md-offset-4">

<div class="alert alert-danger" role="alert"> </div>

<div class="list-group">
<div class="list-group-item active">
<h3 class="text-
center">Login Admin</h3>
</div>
<div class="list-group-item list-group-item-info">

<form class="login-form">
<div class="input-group">
<div class="input-group-addon"><i
class="glyphicon glyphicon-user"></i></div>
<input type="text" name="username"
placeholder="Username" autofocus
class="formcontrol">
</div><br/>

<div class="input-group">
<div class="input-group-addon"><i
class="glyphicon glyphicon-lock"></i></div>
<input type="password" name="password"
placeholder="Password" class="form-control">
</div><br/>

<button class="btn btn-primary pull-right


loginbutton">
<i class="glyphicon glyphicon-log-in"></i>
Login Administrator
</button><br/>
</form>

</div>
</div>

</div>
</div>
</div>

</body>
</html>

login_cek.php
<?php
session_start();
include "../library/config.php";
include "../library/function_antiinjection.php";

$username = antiinjeksi($_POST['username']);
$password = antiinjeksi(md5($_POST['password']));

$cekuser = mysqli_query($mysqli, "SELECT * FROM user


WHERE username='$username' AND
password='$password'");
$jmluser = mysqli_num_rows($cekuser); $data
= mysqli_fetch_array($cekuser); if($jmluser
> 0){
$_SESSION['username'] = $data['username'];
$_SESSION['namalengkap'] = $data['nama'];
//$_SESSION['password'] = $data['password'];
$_SESSION['id_user'] = $data['id_user'];
$_SESSION['leveluser'] = $data['level'];
$_SESSION['aktivitas_terakhir'] = time();
echo "ok"; }else{
echo "<b>Username</b> atau <b>password</b> tidak
terdaftar!";
}
?>

logout.php
<?php
session_start();
session_unset();
session_destroy();
echo "<script>
alert('Anda telah logout dari halaman admin');
window.location = 'login.php';
</script>";
?>

menu.php
<div class="navbar-header">
<button type="button" class="navbar-toggle
collapsed" data-toggle="collapse"
datatarget="#navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>

<div id="navbar" class="navbar-collapse collapse">


<ul class="nav navbar-nav">

<?php

function menu_admin($link, $icon, $title){


$item = '<li><a href="'.$link.'"
class="navigation"><i class="glyphicon glyphicon-
'.$icon.'"></i> '.$title.'</a></li>';
return $item;
}
if($_SESSION['leveluser'] == "admin"){ echo
menu_admin("home.php", "home", "Beranda");
echo menu_admin("view/view_ujian.php", "edit",
"Ujian");
echo menu_admin("view/view_ujian_operator.php",
"edit", "Aktifkan Ujian");
echo menu_admin("view/view_siswa.php", "list-alt",
"Siswa");
echo menu_admin("view/view_user.php", "user",
"User");
echo menu_admin("view/view_kelas.php", "signal",
"Kelas");
echo menu_admin("view/view_klsujian.php", "sortby-
attributes", "Kelas Ujian");
}
elseif($_SESSION['leveluser'] == "operator"){
echo menu_admin("home.php", "home", "Beranda");
} else{
echo menu_admin("home.php", "home", "Beranda");
echo menu_admin("view/view_ujian_teacher.php",
"edit", "Ujian");
echo menu_admin("view/view_siswa_operator.php",
"list-alt", "Manajemen Siswa");
echo menu_admin("view/view_ujian_operator.php",
"edit", "Aktifkan Ujian");
}
?>

</ul>
<ul class="nav navbar-nav navbar-right">
<?php
echo menu_admin("view/view_profil.php", "user",
$_SESSION['namalengkap']);
echo menu_admin("logout.php", "off", "Keluar");
?>

</ul>
</div>
script_kelas.js
var save_method, table;

//Menampilkan data dengan plugin datatables


$(function(){
table = $('.table').DataTable({
"processing" : true,
"ajax" : {
"url" :
"ajax/ajax_kelas.php?action=table_data",
"type" : "POST"
}
});
});

//Ketika tombol tambah diklik


function form_add(){
save_method = "add";
$('#modal_kelas').modal('show');
$('#modal_kelas form')[0].reset();
$('.modal-title').text('Tambah Kelas');
}

//Ketika tombol edit diklik


function form_edit(id){
save_method = "edit";
$('#modal_kelas form')[0].reset();
$.ajax({
url :
"ajax/ajax_kelas.php?action=form_data&id="+id,
type : "GET",
dataType : "JSON",
success : function(data){
$('#modal_kelas').modal('show');
$('.modal-title').text('Edit Kelas');

$('#id').val(data.id_kelas);
$('#kelas').val(data.kelas);
},
error : function(){
alert("Tidak dapat menampilkan data!");
}
});
}

//Ketika tombol simpan diklik function


save_data(){
if(save_method == "add") url =
"ajax/ajax_kelas.php?action=insert";
else url = "ajax/ajax_kelas.php?action=update";

$.ajax({
url : url,
type : "POST",
data : $('#modal_kelas form').serialize(),
success : function(data){
$('#modal_kelas').modal('hide');
table.ajax.reload();
},
error : function(){
alert("Tidak dapat menyimpan data!");
}
});
return false;
}

//Ketika tombol hapus diklik function


delete_data(id){
if(confirm("Apakah yakin data akan dihapus?")){
$.ajax({
url :
"ajax/ajax_kelas.php?action=delete&id="+id,
type : "GET",
success : function(data){
table.ajax.reload();
},
error : function(){
alert("Tidak dapat menghapus data!");
}
});
}
}

script_klsujian.js
var save_method, table;

//Menampilkan data dengan plugin dataTable


$(function(){
table = $('.table').DataTable({
"processing" : true,
"ajax" : {
"url" :
"ajax/ajax_klsujian.php?action=table_data",
"type" : "POST"
}
});
});

//Ketika tombol edit diklik function


form_edit(id){
$.ajax({
url :
"ajax/ajax_klsujian.php?action=form_data&id="+id,
type : "GET", dataType : "JSON",
success : function(data){
$('#modal_klsujian form')[0].reset();
$('#modal_klsujian').modal('show');
$('.modal-title').text('Edit Kelas Ujian');

$('#id').val(id);
var kelas = data.kelas.split(',');
for(i=0; i<kelas.length; i++){
$('[value='+kelas[i]+']').attr('checked',
true);
}
},
error : function(){
alert('Tidak dapat menampilkan data');
}
});

$('#kelas input').attr('checked', false);


}

//Ketika tombol simpan diklik


function save_data(){
url = "ajax/ajax_klsujian.php?action=update";
$.ajax({
url : url,
type : "POST",
data : $('#modal_klsujian form').serialize(),
success : function(data){
$('#modal_klsujian').modal('hide');
table.ajax.reload();
},
error : function(){
alert("Tidak dapat menyimpan data!");
}
}); return
false;
}

script_nilai.php
var table;

$(function(){
var ujian = $('#id_ujian').val();
var kelas = $('#id_kelas').val();
table = $('.table').DataTable({
"processing" : true,
"pageLength" : 50,
"paging" : false,
"ajax" : {
"url" :
"ajax/ajax_nilai.php?action=table_data&ujian="
+ ujian + "&kelas=" + kelas, "type" :
"POST"
},
dom: 'Bfrtip',
buttons: [
'copy', 'excel', 'pdf'
]
});
});
function export_nilai(){
ujian = $('#id_ujian').val();
kelas = $('#id_kelas').val();
window.open("export/excel_nilai.php?ujian=" +
ujian + "&kelas=" + kelas, "Export Nilai");
}

script_profil.js
$(function(){
$('#form-profil').submit(function(){
if($('#baru').val() != $('#ulang').val()){
alert('Password Baru tidak sama dengan Ulang
Password');
}else{
$.ajax({
url : "ajax/ajax_profil.php",
type : "POST",
data : $('#form-profil').serialize(),
success : function(data){
if(data=="ok"){
alert("Password berhasil diubah");
$('#form-profil')[0].reset();
}else{
alert(data);
}
},
error : function(){
alert("Tidak dapat mengubah data!");
}
});
}
return false;
});
});

script_siswa.js
var save_method, table;

//Menampilkan data ke tabel dengan plugin dataTable


$(function(){
table = $('.table').DataTable({
"processing" : true,
"ajax" : {
"url" :
"ajax/ajax_siswa.php?action=table_data",
"type" : "POST"
}
});
});

//Ketika tombol tambah diklik


function form_add(){
save_method = "add";
$('#nis').removeAttr('readonly');
$('#modal_siswa').modal('show');
$('#modal_siswa form')[0].reset();
$('.modal-title').text('Tambah Siswa');
}

//Ketika tombol edit diklik function


form_edit(id){ save_method =
"edit";
$('#modal_siswa form')[0].reset();
$.ajax({
url :
"ajax/ajax_siswa.php?action=form_data&id="+id,
type : "GET", dataType : "JSON",
success : function(data){
$('#modal_siswa').modal('show');
$('.modal-title').text('Edit Siswa');

$('#nis').val(data.nis).attr('readonly',true);
$('#nama').val(data.nama);
$('#kelas').val(data.id_kelas);
}, error :
function(){
alert("Tidak dapat menampilkan data!");
}
});
}

//Ketika tombol simpan diklik


function save_data(){
if(save_method == "add")
url = "ajax/ajax_siswa.php?action=insert";
else url = "ajax/ajax_siswa.php?action=update";
$.ajax({ url : url, type : "POST",
data : $('#modal_siswa form').serialize(),
success : function(data){
if(data=="ok"){
$('#modal_siswa').modal('hide');
table.ajax.reload();
}else{
alert(data);
$('#nis').focus();
} },
error : function(){
alert("Tidak dapat menyimpan data!");
}
}); return
false;
}

//Ketika tombol hapus diklik function


delete_data(id){
if(confirm("Apakah yakin data akan dihapus?")){
$.ajax({
url :
"ajax/ajax_siswa.php?action=delete&id="+id,
type : "GET", success :
function(data){
table.ajax.reload();
}, error :
function(){
alert("Tidak dapat menghapus data!");
}
});
}
}

//Ketika tombol Cetak Kartu diklik function


form_print(){
$('#modal_print').modal('show');
$('.modal-title').text('Cetak Kartu Ujian');
$('#modal_print form')[0].reset();
}

//Ketika tombol Cetak pada modal diklik function


print_data(){
$('#modal_print').modal('hide');
window.open("export/pdf_kartu.php?kelas="+$('#kelas_
p rint').val(), "Cetak Kartu Ujian", "height=650,
width=1024, left=150, scrollbars=yes"); return
false;
}

//Ketika tombol import diklik function


form_import(){
$('#modal_import').modal('show');
$('.modal-title').text('Import Excel');
$('#modal_import form')[0].reset();
}

//Ketika tombol import pada modal diklik


function import_data(){ var formdata
= new FormData(); var file =
$('#file')[0].files[0];
formdata.append('file', file);
$.each($('#modal_import form').serializeArray(),
function(a, b){
formdata.append(b.name, b.value);
});
$.ajax({
url:
'ajax/ajax_siswa.php?action=import',
data: formdata, processData: false,
contentType: false, type: 'POST',
success: function(data) {
if(data=="ok"){
$('#modal_import').modal('hide');
table.ajax.reload();
}else{
alert(data);
}
},
error: function(data){
alert('Tidak dapat mengimport data!');
} });
return false;
}

//Ketika tombol Reset Login diklik function


reset_login(id){
if(confirm("Apakah yakin akan mereset login siswa
dengan nis "+id+" ?")){
$.ajax({
url :
"ajax/ajax_siswa_operator.php?action=reset_login&nis=
"+id,
type : "GET", success :
function(data){ table.ajax.reload();
},
error : function(){
alert("Tidak dapat mereset login!");
}
});
}
}

script_siswa_operator.js
var table;

//Menampilkan data dengan plugin dataTable


$(function(){
table = $('.table').DataTable({
"processing" : true,
"ajax" : {
"url" :
"ajax/ajax_siswa_operator.php?action=table_data",
"type" : "POST"
}
});
});

//Ketika tombol Refresh diklik function


refresh_data(){ table.ajax.reload();
}

//Ketika tombol Reset Login diklik function


reset_login(id){
if(confirm("Apakah yakin akan mereset login siswa
dengan nis "+id+" ?")){
$.ajax({
url :
"ajax/ajax_siswa_operator.php?action=reset_login&nis=
"+id,
type : "GET",
success : function(data){
table.ajax.reload();
},
error : function(){
alert("Tidak dapat mereset login!");
}
});
}
}

script_soal.js
var save_method, table;

//Menampilkan data dengan plugin dataTable


$(function(){
tinymce_config();
tinymce_config_simple();
$( "#pilihan" ).change(function() {
var pilihan = $('#pilihan').val();
for (i = 1; i <= 5; i++) {
$("#form_pil_"+i).addClass('hidden');
$("[name=kunci]").children("[value="+i+"]").addClass
(
'hidden');
}
for (i = 1; i <= pilihan; i++) {
$("#form_pil_"+i).removeClass('hidden');

$("[name=kunci]").children("[value="+i+"]").removeCl
a ss('hidden'); }
for (i = 5; i > pilihan; i--) {
$("#pil_"+i).val('');
}
$("#kunci").val('');
});
var ujian = $('#id_ujian').val();
table = $('.table').DataTable({
"processing" : true,
"ajax" : {
"url" :
"ajax/ajax_soal.php?action=table_data&ujian="+ujian,
"type" : "POST"
}
});
});

//Ketika tombol tambah diklik


function form_add(){
save_method = "add";
$('#modal_soal').modal('show');
//tinymce_config();
//tinymce_config_simple();
tinymce.activeEditor.setContent('');
$('#soal, #pil_1, #pil_2, #pil_3, #pil_4,
#pil_5').val('');

$('#modal_soal form')[0].reset();
$('.modal-title').text('Tambah Soal');
}

//Ketika tombol edit diklik function


form_edit(id){ save_method =
"edit";
$('#modal_soal form')[0].reset();
$.ajax({
url :
"ajax/ajax_soal.php?action=form_data&id="+id,
type : "GET", dataType : "JSON",
success : function(data){
$('#modal_soal').modal('show');
//tinymce_config();
//tinymce_config_simple();
$('.modal-title').text('Edit Soal');
$('#id').val(data.id_soal);

$('#soal').val(data.soal);
tinymce.get('soal').setContent(data.soal);

if(data.pilihan_5)
$('#pilihan').val(5); else
if(data.pilihan_4)
$('#pilihan').val(4); else
if(data.pilihan_3)
$('#pilihan').val(3);
else if(data.pilihan_2)
$('#pilihan').val(2);
$('#pilihan').trigger("change");
$('#pil_1').val(data.pilihan_1);
$('#pil_2').val(data.pilihan_2);
$('#pil_3').val(data.pilihan_3);
$('#pil_4').val(data.pilihan_4);
$('#pil_5').val(data.pilihan_5);

tinymce.get('pil_1').setContent(data.pilihan_1);

tinymce.get('pil_2').setContent(data.pilihan_2);

tinymce.get('pil_3').setContent(data.pilihan_3);

tinymce.get('pil_4').setContent(data.pilihan_4);

tinymce.get('pil_5').setContent(data.pilihan_5);

$('#kunci').val(data.kunci);
}, error :
function(){
alert("Tidak dapat menampilkan data!");
}
});
}
//Ketika tombol simpan pada modal diklik
function save_data(){ ujian =
$('#id_ujian').val(); if(save_method ==
"add") url =
"ajax/ajax_soal.php?action=insert&ujian="+ujian;
else url = "ajax/ajax_soal.php?action=update";
$.ajax({
url : url, type
: "POST",
data : $('#modal_soal form').serialize(),
success : function(data){
if(data=="ok"){
$('#modal_soal').modal('hide');
table.ajax.reload();
}else{
alert(data);
} },
error : function(){
alert("Tidak dapat menyimpan data!");
}
}); return
false;
}

//Ketika tombol hapus diklik function


delete_data(id){
if(confirm("Apakah yakin data akan dihapus?")){
$.ajax({
url :
"ajax/ajax_soal.php?action=delete&id="+id,
type : "GET", success :
function(data){
table.ajax.reload();

},
error : function(){
alert("Tidak dapat menghapus data!");
}
});
}
}

//Konfigurasi tinyMCE dengan fitur full


function tinymce_config(){
tinyMCE.init({ selector:
".richtext", height: 150,
setup: function (editor) {
editor.on('change', function () {
tinymce.triggerSave();
});
},
plugins: [
"advlist autolink lists link image charmap
print preview anchor",
"searchreplace visualblocks code
fullscreen",
"insertdatetime media table
contextmenu paste imagetools
responsivefilemanager tiny_mce_wiris" ],
toolbar: "insertfile undo redo | styleselect |
bold italic | alignleft aligncenter alignright
alignjustify | bullist numlist outdent indent |
responsivefilemanager tiny_mce_wiris_formulaEditor",
external_filemanager_path:"../assets/filemanager/",
filemanager_title:"File Manager" ,
external_plugins: { "filemanager" :
"../filemanager/plugin.min.js"}
});
}

//Konfigurasi tinyMCE tanpa menu bar


function tinymce_config_simple(){
tinyMCE.init({
selector: ".richtextsimple",
height: 30, setup: function
(editor) { editor.on('change',
function () {
tinymce.triggerSave();
});
},
plugins: [
"advlist autolink lists link image charmap
print preview anchor",
"searchreplace visualblocks code
fullscreen",
"insertdatetime media table
contextmenu paste imagetools
responsivefilemanager tiny_mce_wiris" ],
toolbar: "insertfile undo redo | styleselect |
bold italic | alignleft aligncenter alignright
alignjustify | bullist numlist outdent indent |
responsivefilemanager tiny_mce_wiris_formulaEditor",
external_filemanager_path:"../assets/filemanager/",
filemanager_title:"File Manager" ,
external_plugins: { "filemanager" :
"../filemanager/plugin.min.js"}, menubar:
false
});
}

//Ketika tombol import diklik


function form_import(){
$('#modal_import').modal('show');
$('.modal-title').text('Import Excel');
$('#modal_import form')[0].reset();
}

//Ketika tombol Cetak pada modal diklik


function print_data(){
window.open("export/pdf_soal.php?ujian="+$('#id
_ ujian').val(), "Cetak Soal", "height=650,
width=1024, left=150, scrollbars=yes"); return
false;
}

//Ketika tombol import pada modal


diklik function import_data(){ var
formdata = new FormData();
var file = $('#file')[0].files[0];
formdata.append('file', file);
$.each($('#modal_import form').serializeArray(),
function(a, b){
formdata.append(b.name, b.value);
});

ujian = $('#id_ujian').val();
$.ajax({
url:
'ajax/ajax_soal.php?action=import&ujian='+ujian,
data: formdata, processData: false,
contentType: false, type: 'POST',
success: function(data) {
if(data=="ok"){
$('#modal_import').modal('hide');
table.ajax.reload();
}else{
alert(data);
}
},
error: function(data){
alert('Tidak dapat mengimport data!');
} });
return false;
}

script_soal_print.js
var table;

//Menampilkan data dengan plugin dataTable


$(function(){
var ujian = $('#id_ujian').val();

table = $('.table').DataTable({
"processing" : true,
"ajax" : {
"url" :
"../ajax/ajax_soal_print.php?action=table_data&u
jian="+ujian,
"type" : "POST",
},
"dom" : "rt",
"paging" : false,
"ordering": false
});
});

script_ujian.js
var save_method, table;

//Menampilkan data dengan plugin datatables dan


konfigurasi datepicker
$(function(){
table = $('.table').DataTable({
"processing" : true,
"ajax" : {
"url" :
"ajax/ajax_ujian.php?action=table_data",
"type" : "POST"
}
});

//Konfigurasi datepicker
$('.datepicker').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
});

//Ketika tombol tambah diklik


function form_add(){
save_method = "add";
$('#modal_ujian').modal('show');
$('#modal_ujian form')[0].reset();
$('.modal-title').text('Tambah Ujian');
}

//Ketika tombol edit diklik


function form_edit(id){
save_method = "edit";
$('#modal_ujian form')[0].reset();
$.ajax({
url :
"ajax/ajax_ujian.php?action=form_data&id="+id,
type : "GET", dataType : "JSON",
success : function(data){
$('#modal_ujian').modal('show');
$('.modal-title').text('Edit Ujian');

$('#id').val(data.id_ujian);
$('#judul').val(data.judul);
$('#mapel').val(data.nama_mapel);
$('#tanggal').val(data.tanggal);
$('#waktu').val(data.waktu);
$('#jml_soal').val(data.jml_soal);
$('#pengampu').val(data.id_user);
},
error : function(){
alert("Tidak dapat menampilkan data!");
}
});
}

//Ketika tombol simpan diklik function


save_data(){
if(save_method == "add") url =
"ajax/ajax_ujian.php?action=insert";
else url = "ajax/ajax_ujian.php?action=update";
$.ajax({
url : url,
type : "POST",
data : $('#modal_ujian form').serialize(),
success : function(data){
$('#modal_ujian').modal('hide');
table.ajax.reload();
},
error : function(){
alert("Tidak dapat menyimpan data!");
}
});
return false;
}

//Ketika tombol hapus diklik function


delete_data(id){
if(confirm("Apakah yakin data akan dihapus?")){
$.ajax({
url :
"ajax/ajax_ujian.php?action=delete&id="+id,
type : "GET", success : function(data){
table.ajax.reload();
}, error : function(){
alert("Tidak dapat menghapus data!");
}
});
}
}

script_ujian_operator.js
var save_method, table;

//Menampilkan data dengan plugin dataTable


$(function(){
table = $('.table').DataTable({
"processing" : true,
"ajax" : {
"url" :
"ajax/ajax_ujian_operator.php?action=table_data",
"type" : "POST"
}
});
});

//Ketika nama kelas diklik function


edit_data(kelas, ujian){
$.ajax({
url :
"ajax/ajax_ujian_operator.php?action=update&kelas="
+ kelas + "&ujian=" + ujian, type : "GET",
success : function(data){
table.ajax.reload();
},
error : function(){
alert('Tidak dapat mengubah data');
}
});
}

script_user.js
var save_method, table;
//Menerapkan plugin datatables
$(function(){
table = $('.table').DataTable({
"processing" : true,

script_ujian_teacher.js
var table;

$(function(){
table = $('.table').DataTable({
"processing" : true,
"ajax" : {
"url" : "ajax/ajax_ujian_teacher.php",
"type" : "POST"
}
});
});
"ajax" : {
"url" :
"ajax/ajax_user.php?action=table_data",
"type" : "POST"
}
});

});

//Tombol tambah diklik function


form_add(){ save_method =
"add";
$('#modal_user').modal('show');
$('#modal_user form')[0].reset();
$('.modal-title').text('Tambah User');
}

//Tombol edit diklik function


form_edit(id){ save_method
= "edit";
$('#modal_user form')[0].reset();
$.ajax({
url :
"ajax/ajax_user.php?action=form_data&id="+id,
type : "GET", dataType : "JSON",
success : function(data){
$('#modal_user').modal('show');
$('.modal-title').text('Edit User');

$('#id').val(data.id_user);
$('#nama').val(data.nama);
$('#username').val(data.username);
$('#password').val(data.password);
$('#level').val(data.level);
},
error : function(){
alert("Tidak dapat menampilkan data!");
}
});
}

//Tombol simpan diklik function


save_data(){ if(save_method
== "add")
url = "ajax/ajax_user.php?action=insert";
else url = "ajax/ajax_user.php?action=update";

$.ajax({
url : url,
type : "POST",
data : $('#modal_user form').serialize(),
success : function(data){
$('#modal_user').modal('hide');
table.ajax.reload();
},
error : function(){
alert("Tidak dapat menyimpan data!");
}
});
return false;
}

//Tombol hapus diklik


function delete_data(id){
if(confirm("Apakah yakin data akan dihapus?")){
$.ajax({
url :
"ajax/ajax_user.php?action=delete&id="+id,
type : "GET",
success : function(data){
table.ajax.reload();
},
error : function(){
alert("Tidak dapat menghapus data!");
}
});
}
}

Anda mungkin juga menyukai