Dua format populer menuliskan kebutuhan dari sudut pandang pengguna: use case dengan skenario lengkap dan user story yang ringkas. Episode ini membahas anatomi, perbandingan, kapan memakai yang mana, serta praktik menulis user stories untuk fitur kasir TokoKita sampai siap masuk sprint

Setelah di episode 4 kalian bisa memilah functional vs non-functional requirement dan mengurutkannya dengan MoSCoW, sekarang kita butuh format penulisan yang membuat kebutuhan itu mudah dikonsumsi tim. Dua format paling populer: use case (warisan dunia UML/RUP) dan user story (anak emas Agile).
Mengapa format penting? Karena kalimat requirement yang sama dibaca berbeda oleh tiap orang. Use case memaksa kalian memikirkan alur lengkap termasuk kegagalan; user story memaksa kalian menjawab "untuk siapa dan kenapa". Analyst yang kuat menulis keduanya dan tahu kapan masing-masing lebih tepat.
Use case mendeskripsikan interaksi satu tujuan antara aktor dan sistem sampai hasil yang bernilai tercapai. Komponennya:
| Komponen | Isi | Contoh TokoKita |
|---|---|---|
| Nama | Kata kerja + objek | Proses Penjualan Tunai |
| Aktor | Peran eksternal yang berinteraksi | Kasir (primer), Sistem Stok (sekunder) |
| Preconditions | Kondisi yang harus benar sebelum mulai | Kasir sudah login; sistem online/offline |
| Main flow | Jalur bahagia langkah demi langkah | Scan barang → total → bayar → struk |
| Alternative flows | Variasi yang masih sukses | Bayar QRIS; input manual barcode rusak |
| Exception flows | Kegagalan & penanganannya | Pembayaran ditolak; stok habis saat scan |
| Postconditions | Keadaan akhir setelah use case | Transaksi tersimpan; stok terpotong |
Contoh lengkap dalam format tabel:
ID : UC-01
Nama : Proses Penjualan Tunai
Aktor primer : Kasir
Aktor sekunder : Modul Inventori
Precondition : Kasir sudah login shift aktif
Trigger : Pelanggan selesai memilih barang di kasir
MAIN FLOW
1. Kasir memulai transaksi baru
2. Sistem membuka keranjang kosong
3. Kasir memindai barcode produk
4. Sistem menampilkan nama, harga satuan,
dan menambahkan item ke keranjang
[ulangi langkah 3-4 untuk tiap produk]
5. Kasir menekan tombol Bayar
6. Sistem menampilkan total belanja
7. Kasir memasukkan nominal uang diterima
8. Sistem menghitung kembalian
9. Kasir konfirmasi pembayaran tunai diterima
10. Sistem menyimpan transaksi, memotong stok,
dan mencetak struk
11. Kasir menyerahkan struk & kembalian
ALTERNATIVE FLOW
A1 (di langkah 3): barcode tidak terbaca →
kasir input kode manual → lanjut langkah 4
A2 (di langkah 7): uang pas → sistem langsung
lanjut tanpa hitung kembalian
EXCEPTION FLOW
E1 (di langkah 7): nominal kurang dari total →
sistem menolak, kasir minta tambahan atau batal item
E2 (di langkah 10): printer struk mati → transaksi
tetap tersimpan, struk masuk antrian cetak ulang
POSTCONDITION
Transaksi tercatat permanen; stok produk terpotong;
laporan harian bertambah.Perhatikan nilai terbesar use case: exception flow. Di sinilah requirement tersembunyi keluar — hal-hal yang stakeholder lupa sebut karena terjadi jarang tapi fatal.
Diagram use case memberi peta tingkat tinggi: siapa bisa melakukan apa. Bentuknya sederhana — aktor di luar garis batas sistem, oval-oval use case di dalamnya, garis asosiasi di antaranya:
Gunakan diagram ini untuk diskusi cakupan dengan stakeholder non-teknis, bukan sebagai spesifikasi detail — detailnya ada di tabel skenario.
User story adalah format ringkas satu-dua kalimat dari sudut pandang pengguna:
Sebagai <peran>, saya ingin <kemampuan>, sehingga <nilai/manfaat>.
As a <role>, I want <capability>, so that <benefit>.Contoh untuk fitur kasir TokoKita:
**US-12**
Sebagai kasir, saya ingin transaksi tetap bisa dicatat saat
internet mati, sehingga antrean pelanggan tidak mundur.
Acceptance Criteria:
- Given internet mati, when saya menyelesaikan penjualan tunai,
then struk tercetak dan data tersimpan lokal
- Given koneksi pulih, then data tersinkron otomatis maksimal 60 detik
- Given ada transaksi ganda saat sinkron, then sistem mendeteksi
dan tidak menduplikasi catatan
Estimasi: 8 poin | Prioritas: Must | Epic: POS IntiTiga bagian story punya fungsi berbeda: sebagai mengunci siapa pengguna sesungguhnya, saya ingin mendefinisikan kemampuan, sehingga menjelaskan nilai — bagian ketiga inilah yang sering dilupakan padahal ia alasan fitur layak dibangun.
Praktik penulisan yang baik disebut INVEST:
| Huruf | Arti | Cek Cepat |
|---|---|---|
| I ndependent | Tidak bergantung urutan cerita lain | Bisa dikerjakan sendiri? |
| N egotiable | Bukan kontrak mati | Tim boleh usulkan cara? |
| V aluable | Bernilai bagi pengguna/bisnis | Kalimat "sehingga" jelas? |
| E stimable | Cukup jelas untuk diestimasi | Dev bisa tebak effort? |
| S mall | Muat dalam satu sprint | Terlalu gemuk? pecah |
| T estable | Ada acceptance criteria jelas | Bisa diverifikasi? |
Story besar (epic) harus dipatahkan. Epic "Kelola Inventori" pecah menjadi: input produk, terima barang, stock opname, penyesuaian stok — masing-masing jadi story mandiri.
Important
User story bukan spesifikasi final — ia pengingat percakapan. Jika tim dev hanya membaca kartu tanpa bertanya, story Anda gagal fungsi. Nilai utamanya adalah percakapan analyst-pengguna-developer di sekelilingnya, dengan AC sebagai pagar kesepakatan.
Keduanya hidup berdampingan di banyak proyek nyata:
| Situasi | Rekomendasi | Alasan |
|---|---|---|
| Sprint Agile, fitur interaktif | User story | Ringkas, cocok ritme iterasi |
| Alur kompleks multi-langkah & exception | Use case | Menangkap cabang kegagalan |
| Kontrak/vendor formal, domain teregulasi | Use case | Jejak audit lebih lengkap |
| Diskusi awal dengan user bisnis | User story | Bahasa mereka |
| Handover ke QA menulis test scenario | Use case + AC | Langkah & exception sudah rinci |
| Dokumentasi API/integrasi | Keduanya tidak cukup | Butuh spec teknis terpisah |
Di TokoKita kita pakai kombinasi: user story untuk backlog sprint, use case untuk lima alur inti yang kompleks (penjualan, retur, stock opname, shift, sinkronisasi offline).
Tip
Latihan mandiri yang efektif: amati satu aplikasi yang kalian pakai harian (misal aplikasi bank), pilih satu fiturnya, lalu tuliskan use case lengkapnya — main, alternative, exception flow. Bandingkan dengan perilaku aslinya; kalian akan menemukan cabang yang belum pernah kalian sadari ada.
Inti yang harus dibawa pulang:
Dengan story dan AC siap, sekarang kita butuh cara mengomunikasikan perilaku sistem secara visual ke developer. Di episode 6 selanjutnya kita membahas UML & diagram: activity, sequence, dan class diagram — termasuk praktik membuatnya di draw.io untuk alur penjualan TokoKita. Pastikan tetap semangat!