Stok di layar 488, stok di rak 20
Sabtu pagi yang tidak cocok
Bu Rina punya toko kelontong di tepi jalan kampung di Semarang. Enam bulan terakhir ia memakai TokoLancar, aplikasi kasir dan stok untuk usaha mikro: kasir memindai barang, aplikasi menghitung total, mencetak struk, dan mengurangi catatan stok secara otomatis. Bagi Bu Rina, nilai utama aplikasi itu bukan struknya, melainkan janji bahwa ia tidak perlu lagi menghitung isi rak satu per satu untuk tahu kapan harus memesan barang.
Sabtu pagi itu ada pembeli mencari mi instan. Kasir membuka layar stok TokoLancar: 488 bungkus. Seharusnya lebih dari cukup. Tetapi rak mi instan kosong. Setelah gudang kecil di belakang toko diperiksa dan dihitung satu per satu, sisa fisiknya 20 bungkus. Selisihnya 468 bungkus — dan selisih itu sudah menumpuk diam-diam selama tiga minggu.
Catatan: TokoLancar, Bu Rina, dan seluruh angka dalam kasus ini adalah kasus rekaan yang disusun untuk kelas ini. Kasus ini dibuat menyerupai pola cacat yang lazim, bukan laporan kejadian nyata.
Yang benar-benar merugikan bukan angkanya
Angka 488 di layar, kalau berdiri sendiri, cuma angka salah. Yang merugikan adalah keputusan yang diambil karena percaya pada angka itu. Selama tiga minggu Bu Rina tidak memesan mi instan ke agen, karena aplikasi bilang stoknya aman. Ia kehilangan penjualan pada jam-jam paling ramai, dan yang lebih mahal: dua pelanggan tetap mulai belanja di toko sebelah. Ketika akhirnya ia memesan, harga dari agen sedang naik.
Insiden ini kita beri nama Insiden STOK-01, dan kita akan memakainya sebagai kasus tetap sepanjang modul ini.
Pertanyaan pertama yang biasanya salah
Begitu insiden seperti ini muncul, pertanyaan yang paling cepat keluar biasanya: siapa yang lalai? Programmernya? Pengujinya? Bu Rina yang tidak pernah mengecek rak?
Pertanyaan itu terasa wajar, tetapi hampir tidak pernah menghasilkan perbaikan. Ia menghasilkan orang yang berhati-hati selama dua minggu, lalu cacat sejenis muncul lagi di fitur lain. Pertanyaan yang menghasilkan perbaikan berbunyi lain:
Di titik mana dalam proses kami cacat ini seharusnya sudah ketahuan, dan kenapa titik itu tidak melihatnya?
Itulah pertanyaan yang seluruh modul ini latih.
Kenapa satu jenis pengujian tidak pernah cukup
Ketika tim TokoLancar rapat, tiga jawaban muncul, dan ketiganya masuk akal:
- "Uji unitnya kurang." Padahal tim punya uji unit untuk modul stok, dan semuanya hijau — bahkan setelah insiden, tetap hijau.
- "Harusnya dicoba dulu sebagai aplikasi utuh sebelum rilis." Memang dicoba: penguji melakukan satu transaksi contoh dan struknya benar. Sayangnya barang yang dipakai untuk mencoba dijual per bungkus, bukan per dus.
- "Harusnya Bu Rina yang menyetujui sebelum dipakai." Bu Rina memang menyetujui — ia melihat fitur kasirnya bekerja, dan tidak terpikir memeriksa apa yang terjadi pada catatan stok tiga minggu kemudian.
Perhatikan polanya. Setiap jawaban benar untuk sebagian, dan tidak ada satu pun yang cukup sendirian. Masing-masing melihat perangkat lunak dari jarak yang berbeda: dari sangat dekat (satu fungsi), dari sedang (dua modul yang saling bicara), dari jauh (seluruh aplikasi), dan dari luar (kebutuhan pemilik toko). Cacat yang lolos dari satu jarak pandang justru mencolok dari jarak pandang yang lain.
Dari situlah gagasan jenjang pengujian lahir. Bukan empat kegiatan terpisah yang dikerjakan tim berbeda karena tradisi, melainkan satu jaring bertingkat: beberapa saringan dengan kerapatan berbeda yang dipasang berurutan, masing-masing dirancang menangkap jenis kotoran yang lolos dari saringan sebelumnya.
Yang akan kamu kerjakan di modul ini
Modul ini pendek dan punya sasaran sempit. Kita akan melakukan tiga hal, dan hanya tiga hal:
- Memetakan empat jenjang — unit, integrasi, sistem, penerimaan — memakai tiga sumbu pembeda yang bisa langsung kamu pakai untuk menggolongkan pengujian apa pun.
- Membedah Insiden STOK-01 sampai ke akar penyebabnya, dengan prosedur telusur empat langkah, sampai menghasilkan satu kasus uji baru yang tertulis lengkap.
- Meluruskan lima salah paham yang paling sering membuat orang menaruh pengujian di jenjang yang keliru.
Yang tidak kita kerjakan di modul ini: menulis kode uji dalam bahasa pemrograman tertentu, memilih perkakas, dan mengukur cakupan uji. Itu urusan modul-modul berikutnya. Di sini kamu membangun peta dulu, supaya nanti kamu tahu sedang berdiri di mana.
Satu hal terakhir sebelum lanjut. Selisih 468 bungkus itu bukan cacat yang rumit secara teknis. Perbaikannya, seperti akan kamu lihat nanti, hanya beberapa baris. Yang mahal bukan memperbaikinya, melainkan tiga minggu sampai ada yang menyadarinya. Seluruh gagasan jenjang pengujian berputar di sekitar satu tujuan: memperpendek jarak antara saat cacat lahir dan saat cacat ketahuan.