Menambahkan field `expected_length` dan menambahkan extends pada Use Case diagram. Sehingga requirement membuat Seksi, Pertanyaan dan Pilihan menjadi lebih eksplisit.
463 lines
14 KiB
Markdown
463 lines
14 KiB
Markdown
# Questionnaire
|
|
|
|
Aplikasi berbasis web untuk publikasi kuesioner pada lingkup Yayasan Widya
|
|
Anindya (Perguruan Tinggi, SMK dan lainnya).
|
|
|
|
## Latar Belakang
|
|
|
|
Guna melancarkan akreditasi Perguruan Tinggi LEPISI pada 2018, aplikasi ini
|
|
dibuat untuk memenuhi kebutuhan akan dokumen-dokumen:
|
|
- instrumen kepuasan mahasiswa terhadap tenaga pengajar & staf perguruan tinggi
|
|
- instrumen evaluasi lulusan
|
|
- monitoring & evaluasi SDM
|
|
- trace studi alumni perguruan tinggi
|
|
|
|
### Kebutuhan Perangkat Lunak
|
|
|
|
#### Server Produksi
|
|
|
|
- PHP 7.0
|
|
- nginx
|
|
- mariadb
|
|
|
|
#### Developmen
|
|
|
|
- composer
|
|
- phpunit
|
|
- behat
|
|
- npm
|
|
|
|
## Design
|
|
|
|
### UC Diagram pembuatan kuesioner
|
|
|
|
```plantuml
|
|
left to right direction
|
|
actor Admin
|
|
|
|
Admin -- (Membuat Kuesioner)
|
|
Admin -- (Mengubah Kuesioner)
|
|
Admin -- (Membuat Seksi)
|
|
Admin -- (Mengubah Seksi)
|
|
Admin -- (Membuat Pertanyaan)
|
|
Admin -- (Mengubah Pertanyaan)
|
|
Admin -- (Membuat Pilihan)
|
|
Admin -- (Mengubah Pilihan)
|
|
|
|
(Membuat Seksi) .> (Membuat Kuesioner) : extends
|
|
(Membuat Pertanyaan) .> (Membuat Seksi) : extends
|
|
(Membuat Pilihan) .> (Membuat Pertanyaan) : extends
|
|
```
|
|
|
|
#### Membuat Kuesioner
|
|
|
|
Skenario utama:
|
|
|
|
1. Admin telah login ke dalam sistem
|
|
2. Admin mengisi form pembuatan kuesioner baru yang terdiri dari `title`,
|
|
`descriptions`, `released_at`
|
|
3. sistem menyimpan nilai form yang diisi dan menambahkan data `id`, `created_at`,
|
|
`updated_at` dan `creator_id` ke dalam database
|
|
4. sistem mengembalikan Admin ke tampilan daftar kuesioner
|
|
|
|
Ekstensi:
|
|
|
|
2. a. form tidak diisi lengkap:
|
|
- sistem mengembalikan admin ke halaman form pembuatan kuesioner baru dan
|
|
menampilkan pesan kesalahan
|
|
- Admin dapat mencoba mengirim form kembali setelah mengisi dengan lengkap
|
|
3. a. sistem tidak dapat menyimpan data ke database:
|
|
- Admin dikembalikan ke halaman pengisian form dan diberi peringatan
|
|
kesalahan
|
|
|
|
#### Mengubah Kuesioner
|
|
|
|
Skenario utama:
|
|
|
|
1. Admin telah login ke dalam sistem
|
|
2. Admin mengisi form edit kuesioner yang terdiri dari `title`, `descriptions`, dan
|
|
`released_at`
|
|
3. sistem menyimpan nilai form yang diisi sesuai dengan `id` dari kuesioner yang
|
|
sedang diedit ke dalam database
|
|
4. sistem mengembalikan Admin ke tampilan daftar kuesioner
|
|
|
|
Ekstensi:
|
|
|
|
2. a. form tidak diisi lengkap:
|
|
- sistem mengembalikan admin ke halaman form pembuatan kuesioner baru dan
|
|
menampilkan pesan kesalahan
|
|
- Admin dapat mencoba mengirim form kembali setelah mengisi dengan lengkap
|
|
2. b. tanggal `released_at` telah lewat dari tanggal hari mengubah
|
|
- sistem menampilkan pesan bahwa tanggal `released_at` tidak dapat diubah
|
|
lagi
|
|
3. a. sistem tidak dapat menyimpan data ke database:
|
|
- Admin dikembalikan ke halaman pengisian form dan diberi peringatan
|
|
kesalahan
|
|
|
|
#### Membuat Seksi
|
|
|
|
Seksi hanya dapat dibuat setelah membuat kuesioner.
|
|
|
|
Skenario utama:
|
|
|
|
1. Admin telah login ke dalam sistem dan memilih kuesioner yang akan dibuatkan
|
|
seksinya
|
|
2. Admin mengisi form pembuatan seksi baru yang terdiri dari `title`,
|
|
`descriptions`
|
|
3. sistem menyimpan nilai form yang diisi dan menambahkan data `id`, `created_at`,
|
|
`updated_at`, `questionnaire_id` dan `creator_id` ke dalam table `sections`
|
|
4. sistem mengembalikan Admin ke tampilan daftar seksi dari kuesioner yang
|
|
sedang diedit
|
|
|
|
Ekstensi:
|
|
|
|
2. a. form tidak diisi lengkap:
|
|
- sistem mengembalikan admin ke halaman form pembuatan seksi baru dan
|
|
menampilkan pesan kesalahan
|
|
- Admin dapat mencoba mengirim form kembali setelah mengisi dengan lengkap
|
|
3. a. sistem tidak dapat menyimpan data ke database:
|
|
- Admin dikembalikan ke halaman pengisian form dan diberi peringatan
|
|
kesalahan
|
|
|
|
#### Mengubah Seksi
|
|
|
|
Skenario utama:
|
|
|
|
1. Admin telah login ke dalam sistem dan memilih kuesioner yang akan diedit
|
|
seksinya
|
|
2. Admin mengisi form edit seksi yang terdiri dari `title`, `descriptions`
|
|
3. sistem menyimpan nilai form yang diisi sesuai dengan `id` dari seksi yang
|
|
sedang diedit ke dalam database
|
|
4. sistem mengembalikan Admin ke tampilan daftar seksi kuesioner
|
|
|
|
Ekstensi:
|
|
|
|
2. a. form tidak diisi lengkap:
|
|
- sistem mengembalikan admin ke halaman form mengubah seksi dan
|
|
menampilkan pesan kesalahan
|
|
- Admin dapat mencoba mengirim form kembali setelah mengisi dengan lengkap
|
|
3. a. sistem tidak dapat menyimpan data ke database:
|
|
- Admin dikembalikan ke halaman pengisian form dan diberi peringatan
|
|
kesalahan
|
|
|
|
#### Membuat Pertanyaan
|
|
|
|
Pertanyaan hanya dapat dibuat setelah membuat seksi. Jadi Pertanyaan ada di dalam seksi dan seksi ada di dalam kuesioner.
|
|
|
|
skenario utama:
|
|
|
|
1. admin telah login ke dalam sistem dan memilih kuesioner dan seksi yang akan
|
|
dibuatkan pertanyaan
|
|
2. admin mengisi form pembuatan pertanyaan baru yang terdiri dari `title`,
|
|
`descriptions`, `question_type`, `text`, `number`, dan `expected_length` jika
|
|
tipe pertanyaan adalah text atau isian
|
|
3. sistem menyimpan nilai form yang diisi dan menambahkan data `id`, `created_at`,
|
|
`updated_at`, `section_id` dan `creator_id` ke dalam table `questions`
|
|
4. sistem mengembalikan admin ke tampilan daftar pertanyaan dari kuesioner dan
|
|
seksi yang sedang diedit
|
|
|
|
ekstensi:
|
|
|
|
2. a. form tidak diisi lengkap:
|
|
- sistem mengembalikan admin ke halaman form pembuatan seksi baru dan
|
|
menampilkan pesan kesalahan
|
|
- admin dapat mencoba mengirim form kembali setelah mengisi dengan lengkap
|
|
2. b. field `expected_length` muncul jika tipe pertanyaan adalah text
|
|
3. a. sistem tidak dapat menyimpan data ke database:
|
|
- admin dikembalikan ke halaman pengisian form dan diberi peringatan
|
|
kesalahan
|
|
|
|
#### Mengubah Pertanyaan
|
|
|
|
Skenario utama:
|
|
|
|
1. Admin telah login ke dalam sistem dan memilih kuesioner dan seksi yang akan
|
|
diedit pertanyaannya
|
|
2. Admin mengisi form edit pertanyaan yang terdiri dari `title`, `descriptions`,
|
|
`question_type`, `text`, dan `number`
|
|
3. sistem menyimpan nilai form yang diisi sesuai dengan `id` dari pertanyaan yang
|
|
sedang diedit ke dalam database
|
|
4. sistem mengembalikan Admin ke tampilan daftar pertanyaan kuesioner
|
|
|
|
Ekstensi:
|
|
|
|
2. a. form tidak diisi lengkap:
|
|
- sistem mengembalikan admin ke halaman form pembuatan pertanyaan baru dan
|
|
menampilkan pesan kesalahan
|
|
- Admin dapat mencoba mengirim form kembali setelah mengisi dengan lengkap
|
|
3. a. sistem tidak dapat menyimpan data ke database:
|
|
- Admin dikembalikan ke halaman pengisian form dan diberi peringatan
|
|
kesalahan
|
|
|
|
#### Membuat Pilihan
|
|
|
|
Pilihan bersifat opsional dan hanya dapat dibuat setelah membuat pertanyaan.
|
|
|
|
skenario utama:
|
|
|
|
1. admin telah login ke dalam sistem dan memilih pertanyaan yang akan dibuatkan
|
|
pilihan
|
|
2. admin mengisi form pembuatan pilihan baru yang terdiri dari `descriptions`,
|
|
`text`, `number`
|
|
3. sistem menyimpan nilai form yang diisi dan menambahkan data `id`, `created_at`,
|
|
`updated_at`, `questions_id` dan `creator_id` ke dalam table `question_choices`
|
|
4. sistem mengembalikan admin ke tampilan daftar pilihan dari pertanyaan yang
|
|
sedang diedit
|
|
|
|
ekstensi:
|
|
|
|
2. a. form tidak diisi lengkap:
|
|
- sistem mengembalikan admin ke halaman form pembuatan pilihan baru dan
|
|
menampilkan pesan kesalahan
|
|
- admin dapat mencoba mengirim form kembali setelah mengisi dengan lengkap
|
|
3. a. sistem tidak dapat menyimpan data ke database:
|
|
- admin dikembalikan ke halaman pengisian form dan diberi peringatan
|
|
kesalahan
|
|
|
|
#### Mengubah Pilihan
|
|
|
|
Skenario utama:
|
|
|
|
1. Admin telah login ke dalam sistem dan memilih pilihan pertanyaan yang
|
|
akan diedit
|
|
2. Admin mengisi form edit pilihan yang terdiri dari `title`, `descriptions`,
|
|
`question_type`, `text`, dan `number`
|
|
3. sistem menyimpan nilai form yang diisi sesuai dengan `id` dari pertanyaan yang
|
|
sedang diedit ke dalam database
|
|
4. sistem mengembalikan Admin ke tampilan daftar pertanyaan kuesioner
|
|
|
|
Ekstensi:
|
|
|
|
2. a. form tidak diisi lengkap:
|
|
- sistem mengembalikan admin ke halaman form pembuatan pertanyaan baru dan
|
|
menampilkan pesan kesalahan
|
|
- Admin dapat mencoba mengirim form kembali setelah mengisi dengan lengkap
|
|
3. a. sistem tidak dapat menyimpan data ke database:
|
|
- Admin dikembalikan ke halaman pengisian form dan diberi peringatan
|
|
kesalahan
|
|
|
|
|
|
### UC Diagram pengisian kuesioner
|
|
|
|
```plantuml
|
|
left to right direction
|
|
actor Responden
|
|
actor Admin
|
|
|
|
Responden -- (Mengisi identitas)
|
|
Responden -- (Mengisi kuesioner)
|
|
Responden -- (Menyelesaikan kuesioner)
|
|
(Menerima notifikasi pengisian) .> (Menyelesaikan kuesioner) : extends
|
|
(Mengisi kuesioner) .> (Mengisi identitas) : require
|
|
(Menyelesaikan kuesioner) .> (Mengisi kuesioner) : require
|
|
(Menerima notifikasi pengisian) -- Admin
|
|
Responden -- (Menerima notifikasi pengisian)
|
|
```
|
|
|
|
#### Mengisi Identitas
|
|
|
|
skenario utama:
|
|
|
|
1. responden memilih kuesioner yang akan diisinya
|
|
2. responden memilih tombol isi kuesioner
|
|
3. responden mengisi data diri pada halaman pendaftaran responden yang terdiri
|
|
dari `nama`, `email`, `gender`, `handphone`, dan `occupation`
|
|
4. responden mengklik tombol simpan
|
|
5. sistem menyimpan nilai form yang diisi dan menambahkan data `created_at`,
|
|
`updated_at` ke dalam table `respondents`
|
|
6. responden dibukakan tampilan pengisian kuesioner
|
|
|
|
ekstensi:
|
|
|
|
3. a. form tidak diisi lengkap:
|
|
- sistem mengembalikan responden ke halaman form pendaftaran dan
|
|
menampilkan pesan kesalahan
|
|
- responden dapat mencoba mengirim form kembali setelah memperbaiki
|
|
kesalahan
|
|
5. a. sistem tidak dapat menyimpan data ke database:
|
|
- responden dikembalikan ke halaman pengisian form dan diberi peringatan
|
|
kesalahan
|
|
|
|
#### Mengisi Kuesioner
|
|
|
|
skenario utama:
|
|
|
|
1. responden telah berhasil mengisi identitas
|
|
2. sistem menampilkan pertanyaan sekaligus pilihan jawaban jika tersedia kepada
|
|
responden untuk diisi
|
|
3. responden mengisi/memilih pilihan jawaban atas pertanyaan yang diberikan
|
|
lalu mengklik tombol lanjut
|
|
4. sistem menampilkan pertanyaan selanjutnya dan berulang ke langkah no. 1
|
|
hingga semua pertanyaan terisi
|
|
|
|
ekstensi:
|
|
|
|
3. a. form tidak diisi lengkap:
|
|
- sistem memberikan peringatan bahwa tiap pertanyaan wajib diisi dengan
|
|
lengkap
|
|
- responden dapat mencoba mengirim form kembali setelah memperbaiki
|
|
kesalahan
|
|
3. b. panjang jawaban kurang dari yang diharapkan
|
|
- sistem memberikan peringatan bahwa panjang jawaban kurang dari yang diharapkan
|
|
dan memberitahu berapa panjang jawaban minimal yang diharapkan
|
|
|
|
#### Menyelesaikan Kuesioner
|
|
|
|
skenario utama:
|
|
|
|
1. responden telah menjawab seluruh pertanyaan dan berada pada halaman
|
|
pertanyaan terakhir
|
|
2. responden menekan tombol simpan jawaban pada pertanyaan terakhir
|
|
3. sistem menampilkan rekap jawaban responden sekaligus menanyakan konfirmasi
|
|
pengiriman jawaban
|
|
4. responden memberikan centang pada pernyataan mengisi dengan data sebenarnya
|
|
lalu menekan tombol simpan
|
|
5. sistem menyimpan data jawaban untuk tiap-tiap pertanyaan dan menambahkan
|
|
data `id`, `respondent_id`, `question_id`, `created_at` dan `updated_at` pada tabel
|
|
`answers`
|
|
|
|
ekstensi:
|
|
|
|
4. a. responden tidak memberikan centang pada pernyataan mengisi dengan data
|
|
sebenarnya:
|
|
- sistem memberika pesan kesalahan bahwa data yang diisi harus benar dan
|
|
responden wajib menyetujui pernyataan pada layar
|
|
5. a. sistem tidak dapat menyimpan data ke database:
|
|
- responden dikembalikan ke halaman pengisian kuesioner dan diberi
|
|
peringatan kesalahan untuk kemudian dapat mencoba mengirim kembali
|
|
|
|
#### Menerima Notifikasi Pengisian
|
|
|
|
skenario utama:
|
|
|
|
1. sistem mengirimkan email berupa rekap jawaban responden
|
|
|
|
ekstensi:
|
|
|
|
1. a. sistem gagal mengirim email:
|
|
- sistem menyimpan rekap pada file teks yang kemudian dapat dikirimkan pada
|
|
responden nantinya
|
|
|
|
### UC Diagram pencetakan laporan kuesioner
|
|
|
|
```plantuml
|
|
left to right direction
|
|
actor Admin
|
|
|
|
Admin -- (Mencetak rekap pengisian kuesioner)
|
|
Admin -- (Mencetak laporan hasil pengolahan kuesioner)
|
|
```
|
|
|
|
#### Mencetak rekap pengisian kuesioner
|
|
|
|
skenario utama:
|
|
|
|
1. admin telah login lalu memilih kuesioner yang akan dicetak laporannya
|
|
2. sistem mencetak laporan rekap pengisian kuesioner yang isinya akan
|
|
ditentukan selanjutnya pada layar, jika diperlukan, laporan dapat dicetak pada
|
|
kertas
|
|
|
|
ekstensi:
|
|
|
|
2. a. belum ada data pengisian kuesioner:
|
|
- sistem tidak menampilkan tombol cetak laporan rekap
|
|
|
|
#### Mencetak laporan hasil pengolahan kuesioner
|
|
|
|
skenario utama:
|
|
|
|
1. admin telah login lalu memilih kuesioner yang akan dicetak laporannya
|
|
2. sistem mencetak laporan hasil pengolahan kuesioner yang isinya akan
|
|
ditentukan selanjutnya pada layar, jika diperlukan, laporan dapat dicetak pada
|
|
kertas
|
|
|
|
ekstensi:
|
|
|
|
2. a. belum ada data pengisian kuesioner:
|
|
- sistem tidak menampilkan tombol cetak laporan rekap
|
|
|
|
### Class Diagram
|
|
|
|
```plantuml
|
|
class Questionnaire {
|
|
id : int
|
|
title : varchar [100]
|
|
descriptions : text
|
|
creator_id : int
|
|
reviewer_by : int
|
|
released_at : datetime
|
|
created_at : datetime
|
|
updated_at : datetime
|
|
deleted_at : datetime
|
|
}
|
|
|
|
class Section {
|
|
id : int
|
|
questionnaire_id : int
|
|
title : varchar [100]
|
|
descriptions : text
|
|
creator_id : int
|
|
created_at : datetime
|
|
updated_at : datetime
|
|
deleted_at : datetime
|
|
}
|
|
|
|
class Question {
|
|
id : int
|
|
section_id : int
|
|
number : int
|
|
text : varchar [300]
|
|
descriptions : text
|
|
expected_length : int
|
|
question_type : enum ['text', 'choice', 'number']
|
|
creator_id : int
|
|
created_at : datetime
|
|
updated_at : datetime
|
|
deleted_at : datetime
|
|
}
|
|
|
|
class QuestionChoice {
|
|
id : int
|
|
question_id : int
|
|
number : int
|
|
text : varchar [300]
|
|
descriptions : text
|
|
creator_id : int
|
|
created_at : datetime
|
|
updated_at : datetime
|
|
deleted_at : datetime
|
|
}
|
|
|
|
class Respondent {
|
|
id : int
|
|
name : varchar [100]
|
|
handphone : varchar [100]
|
|
email : varchar [100]
|
|
gender : enum ['m', 'f']
|
|
occupation : varchar [100]
|
|
created_at : datetime
|
|
updated_at : datetime
|
|
deleted_at : datetime
|
|
}
|
|
|
|
class Answer {
|
|
id : int
|
|
respondent_id : int
|
|
question_id: int
|
|
text : text
|
|
choice : int
|
|
created_at : datetime
|
|
updated_at : datetime
|
|
deleted_at : datetime
|
|
}
|
|
|
|
Questionnaire "1" -- "1..*" Section
|
|
Section "1" -- "1..*" Question
|
|
Question "1" -- "0..*" QuestionChoice
|
|
Respondent "1" -- "1..*" Answer
|
|
Question "1" - "1" Answer
|
|
```
|
|
|
|
### API End Points
|
|
|