questionnaire/README.md
dbrw 8418a77e8c Menambahkan expected_length dan extends
Menambahkan field `expected_length` dan menambahkan extends pada Use
Case diagram. Sehingga requirement membuat Seksi, Pertanyaan dan Pilihan
menjadi lebih eksplisit.
2017-10-30 15:47:13 +07:00

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