Page 1 of 23
System Requirements Document for fierce-cbt
1. Introduction
fierce-cbt adalah aplikasi Computer Based Test (CBT) untuk Ujian Siswa SMK yang dibangun di atas Google AppsScript dan diakses siswa melalui link ujian, dengan dashboard admin tersendiri yang terpisah dari akses siswa. Aplikasi ini dipakai oleh sekolah untuk menyelenggarakan seluruh ragam ujian SMK — Remedial, Ujian harian, PTS/UTS, PAS/UAS, Ujian sekolah, Try Out, Simulasi ANBK/UTBK, dan Ujian praktik berbasis teori — mulai dari penyiapan data induk, penyusunan bank soal, pelaksanaan ujian bertoken, penilaian, hingga pencetakan raport.
Audiens produk:
- Admin Ujian (Operator Sekolah) — mengelola konfigurasi dan data induk ujian, kartu ujian, hasil nilai, kredensial siswa, instansi sekolah, dan penyimpanan data.
- Guru Mapel — menyusun bank soal (media gambar/suara, opsi A–E, rumus matematika, bobot, durasi, KKM) dan mencetak raport.
- Siswa Peserta Ujian — masuk melalui link ujian dengan username dan password siswa, memverifikasi TOKEN UJIAN, dan mengerjakan ujian.
Produk ini adalah sistem administrasi ujian: padat tabel, padat status, dan harus terbaca sebagai sistem resmi yang adil dan sulit dicurangi.
Page 2 of 23
2. System Overview
fierce-cbt adalah aplikasi web/desktop berbasis AppsScript dengan dua sisi akses yang dipisahkan secara eksplisit:
- Sisi siswa — diakses melalui link ujian menggunakan username dan password siswa, dilanjutkan verifikasi TOKEN UJIAN sebelum pengerjaan dimulai di Exam Room.
- Sisi admin/guru — dashboard admin tersendiri, terpisah dari link ujian siswa, untuk seluruh pengelolaan data induk, bank soal, pelaksanaan ujian, hasil, raport, kredensial, instansi, dan penyimpanan.
Aktor: tiga persona aktif — Admin Ujian (Operator Sekolah), Guru Mapel, dan Siswa Peserta Ujian. Sistem AppsScript dan penyimpanan berbasis spreadsheet adalah aktor non-persona yang mengeksekusi dan mempersistensikan data.
Perilaku yang diterima (ringkas): autentikasi siswa; dashboard ujian berlangsung dengan TOKEN UJIAN; kelola mapel dan kelas beserta guru mapel (edit/hapus); biodata siswa dengan foto (choose file), kelas/jurusan, edit/hapus, ekspor/impor, simpan; kelola soal ujian dengan media gambar/suara, opsi A–B–C–D–E (choose file), import/ekspor CSV, jenis ujian (PG A–E, Benar salah, menjodohkan, essay), rumus matematika, edit/hapus, bobot soal, durasi, nilai KKM; delapan jenis pelaksanaan ujian; kartu ujian per kelas/jurusan; hasil nilai dengan pemilihan nama/kelas/jurusan; cetak raport dengan logo, foto, pemilihan nama/kelas/jurusan, dan tanda tangan orangtua serta guru mapel; regenerasi username/password massal; kelola instansi sekolah (logo jpeg/png, nama, alamat, semester, tahun ajaran, guru mapel); dan kelola penyimpanan data (anti kecurangan, link spreadsheet, backup, restore, batas 5x ujian).
Pengecualian sempit: tidak ada modul di luar daftar fitur di atas. Tidak ada kanal pembayaran, tidak ada aplikasi mobile native terpisah, dan tidak ada penyimpanan di luar link spreadsheet yang ditetapkan.
Page 3 of 23
2a. Product Interpretation and Delivery Boundary
Kepemilikan delivery dan akses. Aplikasi ini adalah aplikasi first-party berbasis AppsScript. Siswa masuk melalui link ujian dengan kredensial aplikasi (username dan password siswa) yang dibuat dan dikelola admin; admin dan guru masuk melalui dashboard admin tersendiri dengan kredensial aplikasi yang diprovisikan/diundang sebelum mengakses tanggung jawabnya. Identitas dimiliki aplikasi karena setiap aktor harus memiliki state ujian, nilai, kredensial, dan riwayat yang terikat pada dirinya dan dapat dilanjutkan kembali. Landing dan Login adalah permukaan anonim; seluruh destinasi kerja bersifat terbatas peran.
Batas current vs future. Seluruh fitur yang disebutkan dalam thread persyaratan bersifat current: autentikasi siswa, token ujian, mapel/kelas/guru mapel, biodata siswa, bank soal multi-jenis, delapan jenis pelaksanaan ujian, kartu ujian, hasil nilai, raport, regenerasi kredensial massal, instansi sekolah, dan penyimpanan data dengan anti kecurangan, backup, restore, serta batas 5x ujian. Tidak ada fitur yang dinyatakan sebagai future horizon dalam sumber; karena itu tidak ada bagian future yang diisi dengan kemampuan baru.
Batas penyimpanan. Penyimpanan data menggunakan link spreadsheet dan dibatasi 5x ujian. Batas ini adalah batas kapasitas penyimpanan ujian yang berlaku pada pengelolaan penyimpanan data, bukan larangan menyelenggarakan jenis ujian yang terdaftar.
2b. Source Content Inventory
Tidak ada directive referensi dengan content_source pada proyek ini, sehingga tidak ada Source Content Inventory yang disertakan.
2c. Page Content and Component Coverage
Page 4 of 23
Landing
- Informasi/state: identitas aplikasi CBT SMK, penjelasan singkat alur ujian (link ujian → kredensial siswa → TOKEN UJIAN → pengerjaan), tiga item berkode wayfinding: TOKEN UJIAN (blok kuning), JADWAL (blok merah), HASIL (blok hijau).
- Aksi utama: Masuk Ujian (mengarah ke Login untuk siswa); Dashboard Admin (mengarah ke Login untuk admin/guru).
- Aksi pendukung: membaca strip wayfinding sebagai penjelas status ujian (merah = ujian live, kuning = menunggu, hijau = selesai).
- Entitas domain: ujian, token ujian, jadwal ujian, hasil ujian.
- Tanggung jawab komponen: hero wayfinding poster (grid 12 kolom bergaris, headline flush-left di atas blok merah yang bleed ke tepi kanan), strip transit tiga item berkode warna, dua tombol persegi keras (satu solid hitam, satu outline 1px), hairline 1px selebar viewport di bawah komposisi.
- State: loading — kerangka grid dan hairline tampil lebih dulu, teks headline muncul utuh; empty — tidak berlaku (konten statis); success — halaman tampil penuh dan kedua tombol dapat diklik; error — bila navigasi ke Login gagal, tampilkan pesan galat bergaris dan tombol coba lagi; recovery — pengguna dapat menekan ulang tombol tujuan.
Login
- Informasi/state: pemilih peran akses (Siswa melalui link ujian / Admin–Guru melalui dashboard), field username, field password, indikator galat kredensial.
- Aksi utama: memverifikasi kredensial dan membuka destinasi sesuai peran.
- Aksi pendukung: berpindah antara jalur masuk siswa dan jalur masuk admin/guru.
- Entitas domain: akun siswa, akun admin, akun guru mapel, sesi.
- Tanggung jawab komponen: form bergaris dengan label/value sejajar, tombol persegi keras, area pesan galat, tautan bantuan kredensial (mengarahkan siswa menghubungi admin, tanpa fitur reset mandiri).
- State: loading — tombol verifikasi menampilkan status proses tanpa animasi melebihi 120ms; empty — field kosong dengan label jelas; success — pengalihan ke Exam Room (siswa) atau dashboard admin (admin/guru); error — kredensial salah, akun belum diprovisikan, atau akun nonaktif, masing-masing dengan pesan tegas; recovery — pengguna dapat memperbaiki input dan mengirim ulang.
Exam Room
- Informasi/state: identitas ujian yang sedang berjalan, jenis pelaksanaan ujian, sisa waktu (durasi) dalam angka tabular, nomor butir aktif, daftar navigasi butir, status jawaban per butir, nilai KKM ujian sebagai acuan.
- Aksi utama: memasukkan TOKEN UJIAN pada lima sel persegi keras yang terisi blok merah satu per satu saat diketik; menjawab butir sesuai jenis soal (PG A–E, Benar salah, menjodohkan, essay); menandai butir; berpindah butir; mengirim jawaban akhir.
- Aksi pendukung: meninjau kembali butir yang belum dijawab sebelum pengiriman.
- Entitas domain: ujian, token ujian, butir soal, opsi jawaban, jawaban siswa, durasi, KKM, hasil ujian.
- Tanggung jawab komponen: input token gaya signage (lima sel terpisah, angka tabular), panel soal dengan media gambar/suara dan rumus matematika, panel opsi A–E dengan pemilih jawaban, panel menjodohkan, area jawaban essay, timer hitung mundur tabular, peta navigasi butir, tombol kirim jawaban.
- State: loading — memuat butir dan sisa waktu; empty — belum ada token dimasukkan, atau ujian belum dibuka admin; success — token valid, butir tampil, jawaban tersimpan, pengiriman tercatat; error — token salah/kadaluarsa, waktu habis, koneksi terputus, atau pengiriman gagal; recovery — token dapat dimasukkan ulang selama ujian masih dibuka; jawaban yang sudah tersimpan tetap tersimpan saat koneksi pulih; bila waktu habis, jawaban yang tersimpan dikirim otomatis dan siswa melihat status penutupan ujian.
Page 5 of 23
Exam Management
- Informasi/state: daftar ujian berlangsung dan terjadwal, jenis pelaksanaan ujian, mapel, kelas/jurusan peserta, durasi, status (live/menunggu/selesai), TOKEN UJIAN aktif, jumlah ujian tersimpan terhadap batas 5x ujian.
- Aksi utama: membuat dan mengatur ujian berlangsung, menetapkan dan menampilkan TOKEN UJIAN, membuka/menutup ujian.
- Aksi pendukung: mengubah detail ujian, memantau status ujian berjalan.
- Entitas domain: ujian, token ujian, mapel, kelas, jurusan, guru mapel, peserta.
- Tanggung jawab komponen: tabel ujian bergaris dengan header rule merah dan angka rata kanan, panel token bergaya signage, kontrol status ujian, penghitung kapasitas penyimpanan ujian.
- State: loading — tabel menampilkan kerangka baris; empty — belum ada ujian, dengan ajakan membuat ujian pertama; success — ujian tersimpan dan token tampil; error — gagal menyimpan ujian atau token gagal dibuat; recovery — simpan ulang atau buat ulang token tanpa kehilangan data ujian.
Subjects & Classes
- Informasi/state: daftar mapel, daftar kelas/jurusan, penetapan guru mapel pada mapel/kelas.
- Aksi utama: menambah mapel dan kelas, menetapkan guru mapel, edit dan hapus.
- Aksi pendukung: menelusuri dan memfilter daftar mapel/kelas.
- Entitas domain: mapel, kelas, jurusan, guru mapel.
- Tanggung jawab komponen: tabel mapel dan tabel kelas bergaris, form penetapan guru mapel, kontrol edit/hapus per baris dengan konfirmasi.
- State: loading — tabel memuat; empty — belum ada mapel/kelas; success — perubahan tersimpan dan tercermin di tabel; error — penghapusan gagal karena data masih dipakai ujian, atau penyimpanan gagal; recovery — pesan menjelaskan ketergantungan data dan pengguna dapat membatalkan atau memindahkan keterkaitan lebih dulu.
Students
- Informasi/state: biodata siswa, foto siswa, kelas/jurusan, daftar siswa per kelas/jurusan.
- Aksi utama: menambah dan menyunting biodata, mengunggah foto (choose file), menetapkan kelas/jurusan, simpan, edit, hapus.
- Aksi pendukung: ekspor dan impor data siswa.
- Entitas domain: siswa, biodata, foto, kelas, jurusan.
- Tanggung jawab komponen: tabel biodata bergaris, form biodata dengan pemilih file foto, pratinjau foto berbingkai 1px hitam persegi, kontrol ekspor/impor, kontrol edit/hapus.
- State: loading — tabel dan pratinjau memuat; empty — belum ada siswa; success — biodata dan foto tersimpan; error — format file tidak didukung, impor gagal karena baris tidak valid, atau penyimpanan gagal; recovery — laporan baris gagal ditampilkan agar dapat diperbaiki dan diimpor ulang, tanpa menghapus data yang sudah valid.
Page 6 of 23
Question Editor
- Informasi/state: butir soal aktif, media soal (gambar/suara), opsi A–B–C–D–E, kunci jawaban, rumus matematika, bobot soal, durasi, nilai KKM soal.
- Aksi utama: menambah butir soal, mengunggah media soal berupa gambar/suara, mengunggah berkas pada opsi A–B–C–D–E (choose file), menyisipkan rumus matematika, menyimpan butir.
- Aksi pendukung: pratinjau butir sebelum disimpan.
- Entitas domain: butir soal, media soal, opsi jawaban, kunci jawaban, rumus matematika, bobot soal, durasi, KKM.
- Tanggung jawab komponen: editor butir dengan area media, lima slot opsi dengan pemilih file, editor rumus matematika, panel atribut (bobot, durasi, KKM), tombol simpan.
- State: loading — editor memuat butir; empty — butir baru tanpa media dan opsi; success — butir tersimpan dan muncul di Question Bank; error — media gagal diunggah, format tidak didukung, atau rumus tidak valid; recovery — butir tetap di editor dengan pesan galat spesifik sehingga pengguna dapat memperbaiki tanpa mengetik ulang.
Question Import
- Informasi/state: berkas CSV yang dipilih, pratinjau baris, hasil validasi per baris, ringkasan jumlah butir berhasil/gagal.
- Aksi utama: import bank soal dari CSV dan ekspor bank soal ke CSV.
- Aksi pendukung: mengunduh templat CSV dan meninjau baris yang gagal.
- Entitas domain: butir soal, CSV, bank soal.
- Tanggung jawab komponen: pemilih berkas, tabel pratinjau bergaris, panel ringkasan hasil, tombol ekspor.
- State: loading — berkas sedang diproses; empty — belum ada berkas dipilih; success — seluruh baris valid dan butir masuk bank soal; error — kolom wajib hilang, tipe soal tidak dikenal, atau baris tidak lengkap; recovery — baris gagal dilaporkan per nomor baris dan dapat diperbaiki lalu diimpor ulang.
Question Settings
- Informasi/state: jenis ujian/soal (PG A–E, Benar salah, menjodohkan, essay), rumus matematika, bobot soal, durasi, nilai KKM soal.
- Aksi utama: menetapkan jenis soal, menyisipkan rumus matematika, menetapkan bobot soal, durasi, dan nilai KKM soal.
- Aksi pendukung: meninjau ringkasan pengaturan sebelum diterapkan ke butir atau paket soal.
- Entitas domain: jenis soal, rumus matematika, bobot soal, durasi, KKM.
- Tanggung jawab komponen: panel pengaturan bergaris dengan label/value sejajar, pemilih jenis soal, editor rumus, input numerik tabular untuk bobot/durasi/KKM.
- State: loading — pengaturan memuat; empty — pengaturan belum ditetapkan; success — pengaturan tersimpan dan berlaku pada butir terkait; error — nilai bobot/durasi/KKM tidak valid atau rumus gagal diparse; recovery — nilai terakhir yang valid dipertahankan dan pengguna dapat memperbaiki field yang salah.
Page 7 of 23
Question Bank
- Informasi/state: daftar butir soal dengan jenis, media, bobot, durasi, KKM, dan status keterkaitan ke ujian.
- Aksi utama: meninjau butir, edit butir, hapus butir.
- Aksi pendukung: memfilter dan menelusuri bank soal.
- Entitas domain: butir soal, media soal, jenis soal, bobot, durasi, KKM.
- Tanggung jawab komponen: tabel bank soal bergaris dengan header rule merah dan angka rata kanan, judul seksi dengan bar merah 6px dan penghitung butir, kontrol edit/hapus per baris.
- State: loading — tabel memuat; empty — bank soal kosong dengan ajakan menambah atau mengimpor; success — perubahan tercermin di tabel; error — penghapusan gagal karena butir dipakai ujian berjalan; recovery — pesan menjelaskan keterkaitan dan pengguna dapat membatalkan penghapusan.
Exam Cards
- Informasi/state: kartu ujian siswa per kelas/jurusan, identitas siswa, identitas ujian, nomor peserta, badge bernomor bulat sebagai satu-satunya bentuk lingkaran.
- Aksi utama: membuat dan mengelola kartu ujian berdasarkan kelas/jurusan.
- Aksi pendukung: memilih kelas/jurusan untuk menyaring kartu, mencetak kartu.
- Entitas domain: kartu ujian, siswa, kelas, jurusan, ujian.
- Tanggung jawab komponen: tabel kartu bergaris, pemilih kelas/jurusan, tata letak kartu dengan garis pemisah dan stripe kuning, tombol cetak.
- State: loading — kartu memuat; empty — belum ada siswa pada kelas/jurusan terpilih; success — kartu tampil dan siap dicetak; error — data siswa atau ujian tidak lengkap sehingga kartu tidak dapat dibuat; recovery — pesan menunjuk data yang kurang dan pengguna dapat melengkapinya lalu membuat ulang kartu.
Results
- Informasi/state: hasil nilai ujian dengan pemilihan nama/kelas/jurusan, nilai per butir dan nilai total, status terhadap KKM (hijau hanya untuk lulus/KKM terpenuhi).
- Aksi utama: mengelola hasil nilai ujian dengan memilih nama, kelas, atau jurusan.
- Aksi pendukung: meninjau rincian jawaban, menyaring dan mengurutkan tabel nilai.
- Entitas domain: hasil ujian, nilai, KKM, siswa, kelas, jurusan, ujian.
- Tanggung jawab komponen: pemilih nama/kelas/jurusan, tabel nilai bergaris dengan angka tabular rata kanan, penanda status KKM berkode warna.
- State: loading — tabel nilai memuat; empty — belum ada hasil untuk filter terpilih; success — hasil tampil lengkap; error — hasil belum tersedia karena ujian belum ditutup atau pengiriman jawaban gagal; recovery — pengguna dapat memilih filter lain atau menunggu ujian ditutup, dan hasil yang sudah masuk tetap tampil.
Page 8 of 23
Report Cards
- Informasi/state: identitas sekolah dengan logo dalam kotak bergaris 64px, foto siswa berbingkai 1px hitam persegi, pilihan nama/kelas/jurusan, nilai, tanda tangan orangtua dan tanda tangan guru mapel.
- Aksi utama: mencetak raport dengan menambahkan logo, mengunggah foto (choose file), memilih nama/kelas/jurusan, dan menetapkan tanda tangan orangtua serta guru mapel.
- Aksi pendukung: meninjau pratinjau raport sebelum mencetak.
- Entitas domain: raport, logo sekolah, foto siswa, siswa, kelas, jurusan, guru mapel, orangtua, nilai.
- Tanggung jawab komponen: form raport bergaris dengan pasangan label/value, pemilih file logo dan foto, pemilih nama/kelas/jurusan, dua baris tanda tangan dengan nama guru mapel dan orangtua dalam huruf kapital 12px, tombol cetak.
- State: loading — pratinjau raport memuat; empty — belum ada siswa dipilih; success — raport tampil lengkap dan dapat dicetak; error — logo atau foto gagal diunggah, atau data nilai belum tersedia; recovery — pengguna dapat mengganti berkas atau memilih siswa lain tanpa kehilangan pengaturan yang sudah diisi.
Credential Reset
- Informasi/state: daftar siswa terpilih, kredensial lama, kredensial baru hasil regenerasi, ringkasan jumlah akun yang diperbarui.
- Aksi utama: regenerate username dan password secara massal.
- Aksi pendukung: memilih cakupan massal berdasarkan kelas/jurusan, meninjau hasil sebelum menyerahkan kredensial baru.
- Entitas domain: akun siswa, username, password, kelas, jurusan.
- Tanggung jawab komponen: tabel siswa bergaris dengan pemilih baris, kontrol cakupan massal, panel hasil regenerasi, tombol konfirmasi.
- State: loading — proses regenerasi berjalan; empty — belum ada siswa dipilih; success — kredensial baru tercatat dan dapat dibagikan; error — regenerasi gagal sebagian atau seluruhnya; recovery — laporan akun yang gagal ditampilkan agar dapat diregenerasi ulang, dan akun yang sudah berhasil tidak dikembalikan ke kredensial lama secara otomatis.
School Profile
- Informasi/state: logo instansi (jpeg/png), nama instansi, alamat, semester, tahun ajaran, guru mapel.
- Aksi utama: mengelola identitas instansi sekolah dan data guru mapel.
- Aksi pendukung: mengganti logo dan meninjau pratinjau identitas sekolah.
- Entitas domain: instansi sekolah, logo, alamat, semester, tahun ajaran, guru mapel.
- Tanggung jawab komponen: form identitas bergaris, pemilih file logo dengan validasi format jpeg/png, kotak logo bergaris 64px, tabel guru mapel.
- State: loading — profil memuat; empty — profil sekolah belum diisi; success — identitas tersimpan dan dipakai pada kartu ujian serta raport; error — logo bukan jpeg/png atau melebihi batas, atau field wajib kosong; recovery — berkas dapat diganti dan field yang salah diperbaiki tanpa mengetik ulang seluruh form.
Page 9 of 23
Data Storage
- Informasi/state: pengaturan anti kecurangan, link spreadsheet aktif, status backup, status restore, penghitung batas 5x ujian.
- Aksi utama: mengatur anti kecurangan, menetapkan link spreadsheet, menjalankan backup, menjalankan restore, memantau batas 5x ujian.
- Aksi pendukung: meninjau riwayat backup dan status pemulihan.
- Entitas domain: penyimpanan data, link spreadsheet, backup, restore, anti kecurangan, ujian tersimpan.
- Tanggung jawab komponen: panel pengaturan bergaris, field link spreadsheet, kontrol anti kecurangan, tombol backup dan restore dengan konfirmasi, indikator kapasitas 5x ujian.
- State: loading — status penyimpanan dimuat; empty — link spreadsheet belum ditetapkan; success — pengaturan tersimpan, backup selesai, atau restore berhasil; error — link spreadsheet tidak valid/tidak dapat diakses, backup gagal, restore gagal, atau batas 5x ujian tercapai; recovery — pesan menjelaskan penyebab, data yang ada tidak dihapus, dan pengguna dapat memperbaiki link, mengulang backup, atau menghapus ujian lama untuk membebaskan kapasitas.
Page 10 of 23
3. Functional Requirements
FR-01 — Akses siswa melalui link ujian (explicit)
As a Siswa Peserta Ujian, I should membuka aplikasi melalui link ujian dan masuk menggunakan username dan password siswa agar saya dapat mengikuti ujian yang ditetapkan sekolah.
- Trigger/input: siswa membuka link ujian dan mengirim username serta password siswa.
- Observable result: sesi siswa terbuka dan siswa diarahkan ke ruang ujian.
- Access state: permukaan Login bersifat anonim; ruang ujian hanya tersedia setelah identitas siswa terverifikasi.
- Failure/recovery: kredensial salah atau akun belum diprovisikan menampilkan pesan tegas; siswa dapat memperbaiki input atau menghubungi admin.
- Continuation: setelah masuk, siswa melanjutkan ke verifikasi TOKEN UJIAN.
FR-02 — Dashboard admin tersendiri (explicit)
As an Admin Ujian (Operator Sekolah), I should mengakses dashboard admin tersendiri yang terpisah dari link ujian siswa agar pengelolaan ujian tidak tercampur dengan akses peserta.
- Trigger/input: admin/guru masuk melalui jalur dashboard admin pada Login.
- Observable result: dashboard admin terbuka dengan panel pengelolaan.
- Access state: dashboard admin hanya untuk admin dan guru yang telah diprovisikan/diundang.
- Failure/recovery: akun belum diprovisikan atau nonaktif menampilkan pesan; admin dapat menghubungi pemilik provisi.
- Continuation: admin melanjutkan ke pengelolaan ujian berlangsung.
FR-03 — Dashboard kelola ujian berlangsung dengan TOKEN UJIAN (explicit)
As an Admin Ujian (Operator Sekolah), I should mengelola ujian berlangsung dan menetapkan TOKEN UJIAN agar hanya peserta yang memegang token dapat memulai pengerjaan.
- Trigger/input: admin membuat/mengatur ujian berlangsung dan menetapkan token.
- Observable result: ujian tampil sebagai berlangsung dengan token aktif yang dapat dibagikan.
- Access state: hanya admin pada dashboard admin.
- Failure/recovery: bila penyimpanan ujian atau pembuatan token gagal, admin dapat menyimpan ulang atau membuat ulang token tanpa kehilangan data ujian.
- Continuation: siswa memakai token tersebut di Exam Room.
FR-04 — Verifikasi TOKEN UJIAN sebelum pengerjaan (required_inference)
As a Siswa Peserta Ujian, I should memasukkan TOKEN UJIAN yang diberikan dan mendapat verifikasi sebelum pengerjaan dimulai agar ujian hanya diikuti peserta yang berhak.
- Trigger/input: siswa mengetik token pada lima sel token di Exam Room.
- Observable result: token valid membuka butir soal dan memulai durasi; token salah tidak membuka butir.
- Access state: hanya siswa yang sudah masuk melalui link ujian.
- Failure/recovery: token salah atau kadaluarsa menampilkan pesan; siswa dapat memasukkan ulang selama ujian masih dibuka.
- Continuation: setelah token valid, siswa mengerjakan butir soal.
FR-05 — Kelola Mapel dan Kelas dengan guru mapel, edit/hapus (explicit)
As an Admin Ujian (Operator Sekolah), I should mengelola mapel dan kelas beserta guru mapel serta melakukan edit/hapus agar struktur akademik ujian selalu akurat.
- Trigger/input: admin menambah, menyunting, atau menghapus mapel/kelas dan menetapkan guru mapel.
- Observable result: daftar mapel dan kelas diperbarui dan penetapan guru mapel tersimpan.
- Access state: hanya admin pada dashboard admin.
- Failure/recovery: penghapusan yang gagal karena data masih dipakai ujian menjelaskan ketergantungannya; admin dapat membatalkan atau memindahkan keterkaitan lebih dulu.
- Continuation: mapel dan kelas yang tersimpan dipakai saat membuat ujian dan kartu ujian.
FR-06 — Kelola biodata siswa (explicit)
As an Admin Ujian (Operator Sekolah), I should mengelola biodata siswa dengan foto (choose file), kelas/jurusan, edit/hapus, ekspor/impor, dan simpan agar data peserta ujian lengkap dan dapat dipindahkan antar sistem.
- Trigger/input: admin mengisi biodata, memilih berkas foto, menetapkan kelas/jurusan, menyimpan, menyunting, menghapus, atau menjalankan ekspor/impor.
- Observable result: biodata dan foto tersimpan serta tercermin pada tabel siswa; ekspor menghasilkan berkas data dan impor menambahkan data siswa.
- Access state: hanya admin pada dashboard admin.
- Failure/recovery: format berkas tidak didukung atau baris impor tidak valid dilaporkan per baris; data valid yang sudah masuk tidak dihapus dan baris gagal dapat diperbaiki lalu diimpor ulang.
- Continuation: data siswa dipakai untuk kartu ujian, hasil nilai, dan raport.
FR-07 — Kelola soal ujian dengan media, opsi A–E, dan atribut (explicit)
As a Guru Mapel, I should menambah butir soal ujian berupa gambar/suara, dengan opsi A–B–C–D–E (choose file), rumus matematika, bobot soal, durasi, dan nilai KKM soal agar soal siap dipakai pada ujian yang sesuai.
- Trigger/input: guru menambah butir, mengunggah media soal, mengunggah berkas pada opsi A–E, menyisipkan rumus matematika, menetapkan bobot, durasi, dan KKM, lalu menyimpan.
- Observable result: butir soal tersimpan lengkap dengan media, opsi, dan atributnya.
- Access state: hanya guru mapel pada dashboard admin.
- Failure/recovery: media gagal diunggah, format tidak didukung, atau rumus tidak valid ditampilkan sebagai galat spesifik; butir tetap di editor sehingga tidak perlu diketik ulang.
- Continuation: butir tersimpan masuk ke bank soal dan dapat dipakai pada ujian.
FR-08 — Import/ekspor CSV bank soal (explicit)
As a Guru Mapel, I should mengimpor dan mengekspor bank soal dalam format CSV agar penyusunan soal massal dan pemindahan bank soal menjadi efisien.
- Trigger/input: guru memilih berkas CSV untuk diimpor atau menjalankan ekspor bank soal.
- Observable result: butir dari CSV masuk ke bank soal, atau berkas CSV bank soal terunduh.
- Access state: hanya guru mapel pada dashboard admin.
- Failure/recovery: kolom wajib hilang, tipe soal tidak dikenal, atau baris tidak lengkap dilaporkan per nomor baris; baris valid tetap masuk dan baris gagal dapat diperbaiki lalu diimpor ulang.
- Continuation: butir hasil impor dapat disunting di bank soal dan dipakai pada ujian.
FR-09 — Jenis ujian/soal (explicit)
As a Guru Mapel, I should menetapkan jenis ujian/soal — PG A–E, Benar salah, menjodohkan, essay — agar bentuk penilaian sesuai maksud soal.
- Trigger/input: guru memilih jenis soal pada pengaturan soal.
- Observable result: butir dirender dan dinilai sesuai jenis yang dipilih.
- Access state: hanya guru mapel pada dashboard admin.
- Failure/recovery: jenis yang tidak dikenal ditolak dengan pesan; guru dapat memilih jenis yang tersedia.
- Continuation: jenis soal menentukan tampilan butir di Exam Room.
FR-10 — Edit/hapus butir soal (explicit)
As a Guru Mapel, I should mengedit dan menghapus butir soal agar bank soal tetap bersih dan mutakhir.
- Trigger/input: guru memilih butir pada bank soal lalu menyunting atau menghapusnya.
- Observable result: perubahan atau penghapusan tercermin pada bank soal.
- Access state: hanya guru mapel pada dashboard admin.
- Failure/recovery: penghapusan gagal bila butir dipakai ujian berjalan; pesan menjelaskan keterkaitan dan guru dapat membatalkan.
- Continuation: bank soal yang mutakhir dipakai untuk menyusun ujian.
FR-11 — Jenis pelaksanaan ujian (explicit)
As an Admin Ujian (Operator Sekolah), I should menyelenggarakan ujian untuk Remedial, Ujian harian, PTS/UTS, PAS/UAS, Ujian sekolah, Try Out, Simulasi ANBK/UTBK, dan Ujian praktik berbasis teori agar seluruh kebutuhan penilaian SMK terlayani dalam satu aplikasi.
- Trigger/input: admin memilih jenis pelaksanaan saat membuat ujian.
- Observable result: ujian tersimpan dengan jenis pelaksanaannya dan tampil pada daftar ujian.
- Access state: hanya admin pada dashboard admin.
- Failure/recovery: bila jenis belum dipilih atau penyimpanan gagal, ujian tidak dibuat dan admin dapat melengkapi lalu menyimpan ulang.
- Continuation: siswa mengerjakan ujian sesuai jenis yang ditetapkan.
FR-12 — Kelola kartu ujian siswa per kelas/jurusan (explicit)
As an Admin Ujian (Operator Sekolah), I should mengelola kartu ujian siswa berdasarkan kelas/jurusan agar setiap peserta memiliki kartu ujian resmi.
- Trigger/input: admin memilih kelas/jurusan dan membuat atau mengelola kartu ujian.
- Observable result: kartu ujian siswa tampil dengan identitas peserta dan ujian, siap dicetak.
- Access state: hanya admin pada dashboard admin.
- Failure/recovery: data siswa atau ujian yang tidak lengkap mencegah pembuatan kartu; pesan menunjuk data yang kurang dan admin dapat melengkapinya lalu membuat ulang.
- Continuation: kartu dicetak dan dibagikan kepada siswa.
FR-13 — Kelola hasil nilai ujian dengan pilihan nama/kelas/jurusan (explicit)
As an Admin Ujian (Operator Sekolah), I should mengelola hasil nilai ujian dengan memilih nama/kelas/jurusan agar nilai dapat ditinjau per siswa maupun per rombongan.
- Trigger/input: admin memilih nama, kelas, atau jurusan pada halaman hasil.
- Observable result: tabel nilai tampil sesuai filter, dengan status terhadap KKM.
- Access state: hanya admin pada dashboard admin.
- Failure/recovery: bila hasil belum tersedia karena ujian belum ditutup atau pengiriman jawaban gagal, pesan menjelaskan penyebab dan hasil yang sudah masuk tetap tampil.
- Continuation: nilai yang tersedia dipakai untuk raport.
FR-14 — Cetak raport (explicit)
As a Guru Mapel, I should mencetak raport dengan menambahkan logo, foto (choose file), memilih nama/kelas/jurusan, serta tanda tangan orangtua dan guru mapel agar raport resmi dan lengkap.
- Trigger/input: guru memilih nama/kelas/jurusan, mengunggah logo dan foto, menetapkan tanda tangan orangtua dan guru mapel, lalu mencetak.
- Observable result: raport tampil sebagai form tercetak dengan logo, foto, nilai, dan dua baris tanda tangan.
- Access state: hanya guru mapel pada dashboard admin.
- Failure/recovery: logo atau foto gagal diunggah atau nilai belum tersedia; guru dapat mengganti berkas atau memilih siswa lain tanpa kehilangan pengaturan yang sudah diisi.
- Continuation: raport dicetak dan diserahkan kepada siswa/orangtua.
FR-15 — Regenerate username dan password massal (explicit)
As an Admin Ujian (Operator Sekolah), I should meregenerasi username dan password secara massal agar kredensial siswa dapat diperbarui serentak.
- Trigger/input: admin memilih cakupan siswa massal dan menjalankan regenerasi.
- Observable result: kredensial baru tercatat untuk siswa terpilih dan dapat dibagikan.
- Access state: hanya admin pada dashboard admin.
- Failure/recovery: regenerasi yang gagal sebagian dilaporkan per akun; akun yang sudah berhasil tidak dikembalikan otomatis ke kredensial lama dan akun gagal dapat diregenerasi ulang.
- Continuation: siswa memakai kredensial baru pada link ujian.
FR-16 — Kelola Instansi Sekolah (explicit)
As an Admin Ujian (Operator Sekolah), I should mengelola instansi sekolah dengan logo (jpeg/png), nama instansi, alamat, semester, tahun ajaran, dan guru mapel agar identitas resmi sekolah tampil pada kartu ujian dan raport.
- Trigger/input: admin mengisi identitas sekolah, mengunggah logo jpeg/png, dan mengelola data guru mapel.
- Observable result: identitas sekolah tersimpan dan dipakai pada dokumen ujian.
- Access state: hanya admin pada dashboard admin.
- Failure/recovery: logo bukan jpeg/png atau field wajib kosong ditolak dengan pesan; berkas dapat diganti dan field diperbaiki tanpa mengetik ulang seluruh form.
- Continuation: identitas sekolah muncul pada kartu ujian dan raport.
FR-17 — Kelola Penyimpanan data (explicit)
As an Admin Ujian (Operator Sekolah), I should mengelola penyimpanan data dengan anti kecurangan, link spreadsheet, backup, restore, dan batas 5x ujian agar data ujian aman, dapat dipulihkan, dan kapasitasnya terkendali.
- Trigger/input: admin mengatur anti kecurangan, menetapkan link spreadsheet, menjalankan backup atau restore, dan memantau kapasitas ujian.
- Observable result: pengaturan tersimpan, backup menghasilkan salinan data, restore memulihkan data, dan penghitung kapasitas menunjukkan jumlah ujian terhadap batas 5x ujian.
- Access state: hanya admin pada dashboard admin.
- Failure/recovery: link spreadsheet tidak valid, backup gagal, restore gagal, atau batas 5x ujian tercapai dilaporkan dengan penyebab; data yang ada tidak dihapus dan admin dapat memperbaiki link, mengulang backup, atau menghapus ujian lama untuk membebaskan kapasitas.
- Continuation: penyimpanan yang sehat menopang pelaksanaan ujian berikutnya.
FR-18 — Provisi akun admin dan guru (required_inference)
As an Admin Ujian (Operator Sekolah), I should memiliki akun yang diprovisikan atau diundang sebelum mengakses tanggung jawab saya agar akses dashboard admin terkendali.
- Trigger/input: akun admin/guru dibuat atau diundang sebelum penggunaan pertama.
- Observable result: akun dapat masuk melalui jalur dashboard admin dan membuka tanggung jawabnya.
- Access state: dashboard admin hanya untuk akun yang telah diprovisikan.
- Failure/recovery: akun belum diprovisikan ditolak dengan pesan; pengguna dapat menghubungi pemilik provisi.
- Continuation: admin/guru melanjutkan ke pengelolaan sesuai perannya.
FR-19 — Kredensial siswa dikelola admin sebelum masuk (required_inference)
As an Admin Ujian (Operator Sekolah), I should memastikan setiap siswa memiliki username dan password yang dikelola sebelum masuk melalui link ujian agar siswa dapat mengikuti ujian tanpa hambatan.
- Trigger/input: admin membuat atau meregenerasi kredensial siswa.
- Observable result: siswa memiliki kredensial yang berlaku untuk link ujian.
- Access state: hanya admin pada dashboard admin.
- Failure/recovery: kredensial yang belum dibuat atau sudah tidak berlaku menyebabkan siswa tidak dapat masuk; admin dapat membuat atau meregenerasi kredensial.
- Continuation: siswa masuk dan melanjutkan ke verifikasi token.
FR-20 — Eksekusi dan persistensi AppsScript/spreadsheet (required_inference)
As an Admin Ujian (Operator Sekolah), I should mengandalkan AppsScript dan penyimpanan berbasis spreadsheet untuk eksekusi dan persistensi data agar seluruh data ujian tersimpan dan dapat dipulihkan.
- Trigger/input: setiap operasi simpan, impor, backup, atau restore dijalankan.
- Observable result: data tersimpan pada spreadsheet yang ditetapkan dan dapat dibaca kembali.
- Access state: berjalan sebagai proses sistem di balik operasi admin/guru.
- Failure/recovery: kegagalan akses spreadsheet dilaporkan melalui halaman terkait dan operasi dapat diulang setelah link diperbaiki.
- Continuation: data yang tersimpan menopang ujian, penilaian, dan raport.
Page 11 of 23
4. User Personas
Page 12 of 23
Admin Ujian (Operator Sekolah)
Konteks produk. Admin adalah pemilik operasional ujian di sekolah. Ia bekerja di dashboard admin tersendiri, bukan melalui link ujian siswa, dan memegang seluruh data induk yang membuat ujian mungkin dijalankan: ujian berlangsung beserta TOKEN UJIAN, mapel dan kelas beserta guru mapel, biodata siswa, kartu ujian, hasil nilai, kredensial siswa, identitas instansi sekolah, dan penyimpanan data.
Tujuan utama. Memastikan seluruh data ujian siap sebelum, selama, dan sesudah pelaksanaan, serta dapat dipulihkan bila terjadi masalah.
Tanggung jawab yang diterima. Membuat dan mengatur ujian berlangsung serta menetapkan TOKEN UJIAN; mengelola mapel dan kelas dengan guru mapel serta edit/hapus; mengelola biodata siswa termasuk foto (choose file), kelas/jurusan, edit/hapus, ekspor/impor, dan simpan; mengelola kartu ujian siswa per kelas/jurusan; mengelola hasil nilai ujian dengan memilih nama/kelas/jurusan; meregenerasi username dan password secara massal; mengelola instansi sekolah (logo jpeg/png, nama instansi, alamat, semester, tahun ajaran, guru mapel); dan mengelola penyimpanan data (anti kecurangan, link spreadsheet, backup, restore, batas 5x ujian).
Input dan keputusan. Admin memutuskan jenis pelaksanaan ujian (Remedial, Ujian harian, PTS/UTS, PAS/UAS, Ujian sekolah, Try Out, Simulasi ANBK/UTBK, Ujian praktik berbasis teori), menetapkan token, memilih kelas/jurusan saat membuat kartu ujian, memilih nama/kelas/jurusan saat meninjau nilai, dan memutuskan kapan menjalankan backup atau restore.
Interaksi dengan peserta lain. Admin memprovisikan akun guru dan siswa; guru mapel bergantung pada mapel/kelas dan penetapan guru mapel yang dibuat admin; siswa bergantung pada kredensial dan token yang disiapkan admin. Admin juga menetapkan identitas sekolah yang muncul pada kartu ujian dan raport guru.
Keberhasilan yang teramati. Seluruh data ujian siap, ujian berjalan dengan token yang sah, nilai tercatat, dan data dapat dipulihkan melalui backup/restore dalam batas 5x ujian.
Page 13 of 23
Guru Mapel
Konteks produk. Guru mapel bekerja di dashboard admin pada ranah akademik: menyusun bank soal dan mencetak raport. Ia tidak mengelola kredensial siswa atau penyimpanan data.
Tujuan utama. Menyiapkan soal yang siap dipakai dan menghasilkan raport siswa yang lengkap dan resmi.
Tanggung jawab yang diterima. Menambah butir soal berupa gambar/suara dengan opsi A–B–C–D–E (choose file); mengimpor dan mengekspor CSV; memilih jenis ujian/soal (PG A–E, Benar salah, menjodohkan, essay); menyisipkan rumus matematika; menetapkan bobot soal, durasi, dan nilai KKM soal; mengedit dan menghapus butir soal; serta mencetak raport dengan logo, foto (choose file), pilihan nama/kelas/jurusan, dan tanda tangan orangtua serta guru mapel.
Input dan keputusan. Guru memutuskan bentuk soal yang tepat untuk tiap butir, bobot dan durasi yang adil, nilai KKM, serta memilih siswa/kelas/jurusan saat mencetak raport.
Interaksi dengan peserta lain. Guru bergantung pada mapel, kelas, dan penetapan guru mapel dari admin; guru juga memakai identitas instansi sekolah yang dikelola admin pada raport. Butir soal yang disusun guru menjadi isi ujian yang dikerjakan siswa.
Keberhasilan yang teramati. Soal siap dipakai pada ujian dan raport siswa tercetak lengkap dengan logo, foto, nilai, serta tanda tangan orangtua dan guru mapel.
Page 14 of 23
Siswa Peserta Ujian
Konteks produk. Siswa adalah peserta yang masuk melalui link ujian dengan username dan password siswa, lalu memverifikasi TOKEN UJIAN sebelum mengerjakan. Siswa tidak memiliki akses ke dashboard admin.
Tujuan utama. Menyelesaikan ujian yang ditetapkan dan memastikan hasilnya tercatat.
Tanggung jawab yang diterima. Masuk melalui link ujian dengan kredensial siswa; memasukkan TOKEN UJIAN; mengerjakan ujian sesuai jenis pelaksanaan yang berlaku (Remedial, Ujian harian, PTS/UTS, PAS/UAS, Ujian sekolah, Try Out, Simulasi ANBK/UTBK, Ujian praktik berbasis teori); menjawab butir sesuai jenis soal (PG A–E, Benar salah, menjodohkan, essay); dan mengirim jawaban.
Input dan keputusan. Siswa memutuskan jawaban tiap butir, mengelola waktu terhadap durasi ujian, dan memutuskan kapan mengirim jawaban akhir.
Interaksi dengan peserta lain. Siswa bergantung pada kredensial yang dikelola admin dan token yang ditetapkan admin; hasil pengerjaannya menjadi data yang ditinjau admin pada hasil nilai dan dipakai guru pada raport.
Keberhasilan yang teramati. Siswa menyelesaikan ujian dan hasilnya tercatat pada nilai ujian.
5. Core User Flows
Page 15 of 23
Alur A — Admin menyiapkan dan menjalankan ujian berlangsung
- Admin membuka Landing dan memilih Dashboard Admin, lalu masuk melalui Login dengan akun yang telah diprovisikan (FR-18).
- Admin membuka School Profile dan mengisi nama instansi, alamat, semester, tahun ajaran, mengunggah logo (jpeg/png), serta mengelola guru mapel; identitas tersimpan dan siap dipakai pada kartu ujian dan raport (FR-16).
- Admin membuka Subjects & Classes, menambah mapel dan kelas, menetapkan guru mapel, lalu menyimpan; bila perlu, admin melakukan edit atau hapus dengan konfirmasi (FR-05).
- Admin membuka Students, menambah biodata siswa, mengunggah foto (choose file), menetapkan kelas/jurusan, dan menyimpan; admin dapat melakukan ekspor/impor untuk memindahkan data massal (FR-06).
- Admin membuka Exam Management, membuat ujian berlangsung, memilih jenis pelaksanaan ujian (misalnya PAS/UAS), menetapkan mapel, kelas/jurusan, dan durasi, lalu menetapkan TOKEN UJIAN (FR-03, FR-11).
- Admin membuka Exam Cards, memilih kelas/jurusan, dan membuat kartu ujian siswa untuk dicetak dan dibagikan (FR-12).
- Admin membagikan link ujian dan TOKEN UJIAN kepada siswa.
- Hasil teramati: ujian tampil berstatus berlangsung dengan token aktif, kartu ujian siap, dan siswa dapat memulai.
- Kegagalan dan pemulihan: bila penyimpanan ujian atau pembuatan token gagal, admin menyimpan ulang atau membuat ulang token tanpa kehilangan data ujian; bila data siswa/ujian tidak lengkap, kartu ujian tidak dibuat dan admin melengkapi data lebih dulu.
- Kelanjutan: setelah ujian ditutup, admin melanjutkan ke Alur B.
Alur B — Admin meninjau hasil nilai dan mengelola kredensial
- Admin masuk ke dashboard admin melalui Login.
- Admin membuka Results dan memilih nama, kelas, atau jurusan untuk menyaring hasil (FR-13).
- Admin meninjau nilai per butir dan nilai total serta status terhadap KKM; status lulus/KKM terpenuhi ditandai hijau.
- Bila hasil belum tersedia karena ujian belum ditutup atau pengiriman jawaban gagal, admin melihat pesan penyebab dan hasil yang sudah masuk tetap tampil.
- Admin membuka Credential Reset, memilih cakupan siswa massal, dan menjalankan regenerate username dan password (FR-15).
- Hasil teramati: kredensial baru tercatat untuk siswa terpilih dan dapat dibagikan.
- Kegagalan dan pemulihan: akun yang gagal diregenerasi dilaporkan per akun dan dapat diregenerasi ulang; akun yang sudah berhasil tidak dikembalikan otomatis ke kredensial lama.
- Kelanjutan: siswa memakai kredensial baru pada link ujian.
Page 16 of 23
Alur C — Admin mengelola penyimpanan data
- Admin masuk ke dashboard admin dan membuka Data Storage.
- Admin mengatur anti kecurangan, menetapkan link spreadsheet, dan meninjau penghitung batas 5x ujian (FR-17).
- Admin menjalankan backup untuk menghasilkan salinan data, atau restore untuk memulihkan data, dengan konfirmasi.
- Hasil teramati: pengaturan tersimpan, backup selesai, atau restore berhasil, dan kapasitas ujian terlihat terhadap batas 5x ujian.
- Kegagalan dan pemulihan: bila link spreadsheet tidak valid, backup gagal, restore gagal, atau batas 5x ujian tercapai, admin melihat penyebabnya; data yang ada tidak dihapus dan admin dapat memperbaiki link, mengulang backup, atau menghapus ujian lama untuk membebaskan kapasitas.
- Kelanjutan: penyimpanan yang sehat menopang pelaksanaan ujian berikutnya.
Alur D — Guru mapel menyusun bank soal
- Guru masuk melalui Login ke dashboard admin.
- Guru membuka Question Editor dan menambah butir soal, mengunggah media soal berupa gambar/suara, mengunggah berkas pada opsi A–B–C–D–E (choose file), dan menyisipkan rumus matematika (FR-07).
- Guru membuka Question Settings dan menetapkan jenis soal (PG A–E, Benar salah, menjodohkan, essay), bobot soal, durasi, dan nilai KKM soal (FR-09).
- Guru menyimpan butir; butir masuk ke Question Bank.
- Untuk penyusunan massal, guru membuka Question Import, mengimpor bank soal dari CSV, atau mengekspor bank soal ke CSV (FR-08).
- Guru membuka Question Bank untuk meninjau, mengedit, atau menghapus butir (FR-10).
- Hasil teramati: bank soal siap dipakai pada ujian.
- Kegagalan dan pemulihan: media gagal diunggah, format tidak didukung, rumus tidak valid, atau baris CSV tidak lengkap dilaporkan spesifik; butir tetap di editor dan baris impor gagal dapat diperbaiki lalu diimpor ulang tanpa menghapus data valid.
- Kelanjutan: butir dipakai pada ujian yang dijalankan admin.
Page 17 of 23
Alur E — Guru mapel mencetak raport
- Guru masuk melalui Login ke dashboard admin.
- Guru membuka Report Cards, memilih nama/kelas/jurusan, dan menambahkan logo serta foto (choose file) (FR-14).
- Guru menetapkan tanda tangan orangtua dan tanda tangan guru mapel.
- Guru meninjau pratinjau raport yang disusun sebagai form resmi: pasangan label/value bergaris, logo dalam kotak bergaris, foto berbingkai persegi, dan dua baris tanda tangan.
- Guru mencetak raport.
- Hasil teramati: raport tercetak lengkap dengan logo, foto, nilai, dan tanda tangan.
- Kegagalan dan pemulihan: bila logo atau foto gagal diunggah atau nilai belum tersedia, guru mengganti berkas atau memilih siswa lain tanpa kehilangan pengaturan yang sudah diisi.
- Kelanjutan: raport diserahkan kepada siswa/orangtua.
Alur F — Siswa mengerjakan ujian
- Siswa membuka link ujian dari sekolah dan tiba di Landing.
- Siswa memilih Masuk Ujian dan masuk melalui Login dengan username dan password siswa (FR-01).
- Siswa tiba di Exam Room dan memasukkan TOKEN UJIAN pada lima sel token; setiap karakter yang diketik mengisi satu sel (FR-04).
- Hasil teramati: token valid membuka butir soal dan memulai durasi; token salah tidak membuka butir.
- Siswa mengerjakan butir sesuai jenis soal — PG A–E, Benar salah, menjodohkan, atau essay — dengan media gambar/suara dan rumus matematika bila ada, sambil memantau sisa waktu pada timer tabular.
- Siswa menandai butir, berpindah butir, dan meninjau butir yang belum dijawab.
- Siswa mengirim jawaban akhir.
- Hasil teramati: jawaban tersimpan dan tercatat pada hasil nilai ujian.
- Kegagalan dan pemulihan: bila token salah atau kadaluarsa, siswa memasukkan ulang selama ujian masih dibuka; bila koneksi terputus, jawaban yang sudah tersimpan tetap tersimpan saat koneksi pulih; bila waktu habis, jawaban yang tersimpan dikirim otomatis dan siswa melihat status penutupan ujian.
- Kelanjutan: hasil pengerjaan siswa ditinjau admin pada Results dan dipakai guru pada Report Cards.
Page 18 of 23
6. Visuals Colors and Theme
Muse: Massimo Vignelli. Headline arah: Systematic clarity for a school exam hall — sebuah sistem signage, bukan halaman pemasaran. Register emosionalnya adalah otoritas institusional, kontrol yang tenang, dan wayfinding.
Mode: light mode saja.
Palet (peran, hex):
| Peran | Hex | Penggunaan |
|---|
| Background | #F4F1EA | Ground paper-white seluruh halaman |
| Surface | #FFFFFF | Panel tabel dan form |
| Text | #111111 | Seluruh tipografi near-black |
| Primary (signal) | #C8102E | Token ujian, ujian aktif, tombol utama, rule mark, bar vertikal wordmark |
| Accent | #F2B300 | Kode "in progress / menunggu" dan stripe kartu ujian |
| Success | #0E6B4F | Hanya untuk "lulus / KKM terpenuhi" — tidak dekoratif |
| Muted | #6B6660 | Metadata dan label |
Tidak ada biru di mana pun kecuali garis bawah tautan 1px berwarna #111111. Proporsi: 80% paper, 12% tipe hitam, 6% merah, 2% kuning/hijau.
Tipografi: heading Archivo (grotesque, kelas Helvetica dengan spine lebih tegas), weight 700–800, flush-left ragged-right, tracking rapat -0.02em, sentence case untuk heading konten dan uppercase untuk micro-label dengan letterspacing 0.14em. Body Archivo. Skala modular 1.25: 96/72/48/32/24/18/16/14. H1 clamp(40px, 8vw, 96px); H2 clamp(28px, 4.5vw, 48px); label seksi 12px uppercase; teks tabel dan form 16px; metadata 14px. Angka memakai font-variant-numeric: tabular-nums untuk token, nilai, NIS, dan KKM. Hierarki berasal dari ukuran, weight, dan horizontal rule — bukan dari warna atau shadow.
Shape language: sudut keras, border-radius 0px di mana pun termasuk tombol dan input. Hanya persegi panjang. Bentuk berulang: horizontal rule 4px dan 8px, serta bar vertikal merah 6px di samping setiap judul seksi. Lingkaran muncul tepat sekali, sebagai badge bernomor pada kartu ujian. Blok warna flat dan full-bleed; tidak ada yang membulat, blur, atau mengambang.
Layout: grid 12 kolom dengan gutter 24px yang terlihat dan hairline 1px di bawah setiap header seksi. Split asimetris: rail kiri sempit (3 kolom) membawa label seksi, jumlah, dan rule; field kanan lebar (9 kolom) membawa tabel atau form. Tabel adalah komponen utama — baris bergaris, pasangan label/value sejajar, angka rata kanan, header rule merah. Dashboard admin adalah panel bergaris bertumpuk (Exam Aktif, Token, Soal, Nilai), bukan grid kartu identik. Mobile menumpuk rail di atas field; tabel menggulir horizontal di dalam kontainernya sendiri.
Imagery: diagram dan pictogram, bukan fotografi — ikon garis 2px untuk jenis ujian (PG A–E, benar/salah, menjodohkan, essay), timeline skematik sesi ujian, dan diagram peta rute kelas/jurusan melalui alur ujian. Foto siswa pada biodata dan raport adalah satu-satunya fotografi dan selalu ditampilkan sebagai persegi berbingkai 1px hitam, tidak pernah dipotong bulat. Logo sekolah berada dalam kotak bergaris 64px.
Aksesibilitas warna: merah #C8102E di atas #F4F1EA dan #FFFFFF memenuhi kontras teks; kuning #F2B300 dan hijau #0E6B4F tidak pernah dipakai sebagai satu-satunya pembawa makna — selalu disertai label teks status.
Page 19 of 23
7. Signature Design Concept
"Papan Wayfinding Ujian" — Landing disusun sebagai poster wayfinding full-width, bukan hero tengah dengan tombol.
- Grid bergaris 12 kolom terlihat sebagai struktur halaman, dengan hairline 1px selebar viewport di bawah seluruh komposisi.
- Headline
UJIAN BERBASIS KOMPUTER mengambil 9 kolom, flush-left, clamp(40px, 8vw, 96px), near-black #111111, duduk langsung di atas blok merah #C8102E yang bleed melewati tepi kanan viewport.
- Strip transit tiga item berkode di bawah headline:
TOKEN UJIAN dengan blok kuning #F2B300, JADWAL dengan blok merah #C8102E, HASIL dengan blok hijau #0E6B4F — dibaca sebagai baris berkode, dan berfungsi sebagai filter saat diklik.
- CTA utama
Masuk Ujian adalah persegi hitam keras yang dipin ke baseline blok merah; Dashboard Admin adalah persegi outline 1px di sebelahnya.
- Tanpa gradient, tanpa blob, tanpa ilustrasi. Semua teks dan kontrol tetap utuh di dalam viewport pada 375px, 768px, dan 1280px; headline dan tombol membungkus atau menskala dengan
clamp(...) alih-alih terpotong.
Konsep ini hanya menyusun ulang konten, state, dan kontrol yang sudah diterima — tidak menambah perilaku, halaman, atau destinasi baru.
Page 20 of 23
8. Interaction Model & Motion Direction
Interaction Model: Static (direction)
Motion Tempo: still
Hero Dimensionality: flat
Landing Hero Motion Brief
- Focal subject: headline
UJIAN BERBASIS KOMPUTER di atas blok merah yang bleed ke tepi kanan, dengan strip transit tiga item berkode di bawahnya.
- Input → transformation → outcome thesis: saat pengunjung mengarahkan kursor atau menyentuh salah satu item strip transit, blok warna item tersebut menegaskan dirinya sebagai penanda status (merah = ujian live, kuning = menunggu, hijau = selesai) dan menyaring penjelasan yang tampil; hasilnya adalah pengunjung memahami kode warna sistem sebelum masuk — tanpa perpindahan halaman dan tanpa perilaku baru.
- Motion vocabulary: perubahan state linear 120ms tanpa easing teatrikal; sapuan
clip-path 160ms hanya pada pergantian seksi; tidak ada parallax dan tidak ada scroll reveal.
- Composed first frame: grid 12 kolom bergaris, headline flush-left pada blok merah yang keluar tepi kanan, strip transit tiga item berkode, dua tombol persegi keras (satu solid hitam, satu outline 1px), dan hairline 1px selebar viewport di bawah komposisi.
- Reduced-motion state: dengan
prefers-reduced-motion, seluruh transisi menjadi instan; strip transit berhenti bergerak dan menampilkan seluruh item secara utuh, membungkus ke baris berikutnya atau berada dalam baris yang dapat digulir horizontal (overflow-x: auto) sehingga setiap item tetap terbaca penuh.
Motion bertujuan di dalam produk: satu-satunya gerak yang punya tujuan adalah timer hitung mundur ujian yang berdetak dalam angka tabular dan karakter token yang terisi satu per satu ke dalam lima sel persegi. Tidak ada micro-interaction bouncy atau springy, dan tidak ada animasi melebihi 200ms.
Page 21 of 23
9. Non-Functional Requirements
- NFR-01 — Platform AppsScript (explicit): aplikasi dibangun berbasis AppsScript; seluruh logika aplikasi dan penyajian halaman berjalan pada platform tersebut.
- NFR-02 — Pemisahan akses siswa dan dashboard admin (explicit): akses siswa dilakukan melalui link ujian, terpisah dari dashboard admin tersendiri; tidak ada jalur yang mencampur keduanya.
- NFR-03 — Format logo instansi (explicit): logo instansi sekolah harus berformat jpeg/png; format lain ditolak dengan pesan yang jelas.
- NFR-04 — Batas penyimpanan 5x ujian (explicit): penyimpanan data dibatasi 5x ujian; penghitung kapasitas ditampilkan dan kondisi batas tercapai dilaporkan tanpa menghapus data yang ada.
- NFR-05 — Penyimpanan berbasis link spreadsheet (explicit): penyimpanan data menggunakan link spreadsheet yang ditetapkan admin; link yang tidak valid atau tidak dapat diakses dilaporkan dan operasi dapat diulang setelah diperbaiki.
- NFR-06 — Anti kecurangan (explicit): fitur anti kecurangan wajib tersedia pada pengelolaan penyimpanan data.
- NFR-07 — Backup dan restore (explicit): backup dan restore tersedia pada pengelolaan penyimpanan data agar data ujian dapat dipulihkan.
- NFR-08 — Integritas jawaban saat gangguan (required_inference): jawaban yang sudah tersimpan tidak hilang saat koneksi terputus, dan pengiriman otomatis saat waktu habis hanya mengirim jawaban yang tersimpan.
- NFR-09 — Keterbacaan dan kontras (required_inference): teks dan kontrol tetap utuh di dalam viewport dan kontainernya pada 375px, 768px, dan 1280px; tabel menggulir horizontal di dalam kontainernya sendiri; warna status selalu disertai label teks.
- NFR-10 — Kinerja interaksi (required_inference): perubahan state selesai dalam 120ms linear dan tidak ada animasi melebihi 200ms, sesuai tempo arah kreatif.
10. Tech Stack
- Platform aplikasi: Google AppsScript — pilihan teknologi eksplisit dari sumber; tidak diganti dengan default lain.
- Penyimpanan data: Google Spreadsheet melalui link spreadsheet yang ditetapkan admin, dengan backup dan restore serta batas 5x ujian.
- Antarmuka: HTML/CSS/JavaScript yang disajikan oleh AppsScript sebagai aplikasi web/desktop, dengan dua sisi akses terpisah — link ujian untuk siswa dan dashboard admin tersendiri untuk admin/guru.
- Tipografi: Archivo untuk heading dan body, sesuai arah kreatif.
- Media soal: unggahan berkas gambar/suara untuk butir soal dan berkas pada opsi A–B–C–D–E, serta foto siswa dan logo instansi (jpeg/png).
- Pertukaran data: CSV untuk impor/ekspor bank soal dan impor/ekspor biodata siswa.
Page 22 of 23
11. Assumptions and Constraints
Constraints (dari sumber, mengikat):
- Aplikasi dibangun berbasis AppsScript.
- Akses siswa dilakukan melalui link ujian, terpisah dari dashboard admin tersendiri.
- Logo instansi sekolah harus berformat jpeg/png.
- Penyimpanan data dibatasi 5x ujian.
- Penyimpanan data menggunakan link spreadsheet.
- Fitur anti kecurangan wajib tersedia pada pengelolaan penyimpanan data.
Assumptions (sempit dan berlabel):
- [Required inference] Admin dan guru diprovisikan atau diundang sebelum mengakses tanggung jawabnya; siswa memiliki username dan password yang dikelola admin sebelum masuk melalui link ujian.
- [Required inference] Token ujian ditetapkan admin dan diverifikasi sebelum pengerjaan dimulai.
- [Required inference] AppsScript dan penyimpanan berbasis spreadsheet tersedia untuk eksekusi dan persistensi data.
- [Required inference] Identitas dimiliki aplikasi karena state ujian, nilai, kredensial, dan riwayat harus terikat pada aktor yang benar dan dapat dilanjutkan; Landing dan Login adalah permukaan anonim, sedangkan destinasi kerja bersifat terbatas peran.
- [Required inference] Batas 5x ujian adalah batas kapasitas penyimpanan ujian pada pengelolaan penyimpanan data, bukan larangan menyelenggarakan jenis ujian yang terdaftar.
- [Default — not specified by user] Mode tampilan adalah light mode; tidak ada mode gelap yang ditetapkan sumber.
- [Default — not specified by user] Tidak ada kanal pembayaran, aplikasi mobile native terpisah, atau penyimpanan di luar link spreadsheet yang ditetapkan.
Batas current/future: seluruh fitur dalam dokumen ini bersifat current. Tidak ada fitur yang dinyatakan sebagai future horizon dalam sumber, sehingga tidak ada bagian future yang diisi dengan kemampuan baru.
Page 23 of 23
12. Glossary
- CBT — Computer Based Test; ujian yang dikerjakan secara komputerisasi melalui aplikasi ini.
- AppsScript — platform Google yang menjadi basis pembangunan aplikasi ini.
- Link ujian — tautan khusus yang dipakai siswa untuk masuk dan mengerjakan ujian, terpisah dari dashboard admin.
- Dashboard admin — antarmuka tersendiri untuk admin dan guru mapel dalam mengelola data dan pelaksanaan ujian.
- TOKEN UJIAN — kode yang ditetapkan admin dan harus diverifikasi siswa sebelum pengerjaan dimulai.
- Mapel — mata pelajaran.
- Guru mapel — guru pengampu mata pelajaran yang ditetapkan pada mapel/kelas dan bertanggung jawab atas bank soal serta raport.
- Kelas/jurusan — pengelompokan peserta yang dipakai pada biodata siswa, kartu ujian, hasil nilai, dan raport.
- Butir soal — satu unit soal ujian beserta media, opsi, kunci, dan atributnya.
- PG A–E — soal pilihan ganda dengan opsi A sampai E.
- Benar salah — jenis soal dengan dua kemungkinan jawaban.
- Menjodohkan — jenis soal yang memasangkan item pada dua kolom.
- Essay — jenis soal dengan jawaban uraian.
- Rumus matematika — ekspresi matematika yang disisipkan pada butir soal.
- Bobot soal — nilai timbangan yang diberikan pada butir soal.
- Durasi — alokasi waktu pengerjaan ujian.
- KKM — Kriteria Ketuntasan Minimal; ambang nilai yang menentukan status lulus/terpenuhi.
- Kartu ujian — dokumen resmi peserta per kelas/jurusan yang memuat identitas siswa dan ujian.
- Raport — dokumen hasil belajar yang dicetak dengan logo, foto, nilai, dan tanda tangan orangtua serta guru mapel.
- Regenerate massal — pembuatan ulang username dan password untuk banyak siswa sekaligus.
- Instansi sekolah — identitas sekolah yang mencakup logo (jpeg/png), nama instansi, alamat, semester, tahun ajaran, dan guru mapel.
- Anti kecurangan — pengaturan pada penyimpanan data yang ditujukan untuk mencegah kecurangan ujian.
- Link spreadsheet — tautan penyimpanan data yang ditetapkan admin.
- Backup — pembuatan salinan data ujian.
- Restore — pemulihan data ujian dari salinan.
- Batas 5x ujian — batas kapasitas penyimpanan ujian pada pengelolaan penyimpanan data.
- Remedial, Ujian harian, PTS/UTS, PAS/UAS, Ujian sekolah, Try Out, Simulasi ANBK/UTBK, Ujian praktik berbasis teori — jenis pelaksanaan ujian yang didukung aplikasi.
No comments yet. Be the first!