Senin pagi yang salah tagih
Empat hari yang tidak ada yang menyadari
Bayangkan kamu bekerja di tim perangkat lunak sebuah distributor bahan pangan. Sebut saja PT Anugerah Pangan — perusahaan ini rekaan, dibuat khusus untuk kelas ini, tetapi kejadiannya jenis yang berulang di mana-mana. Perusahaan itu punya aplikasi internal bernama Pesanan Grosir: pelanggan warung dan rumah makan memesan barang per karton, sistem menghitung potongan harga, lalu menerbitkan tagihan.
Aturan potongannya sederhana dan sudah dipakai bertahun-tahun:
| Jumlah karton | Potongan |
|---|---|
| 1–19 | 0% |
| 20–49 | 5% |
| 50 atau lebih | 8% |
Pelanggan berstatus mitra binaan mendapat tambahan 2% di atas potongan itu.
Pada 12 Agustus, tim merilis perubahan agar status mitra binaan bisa dipakai di seluruh kanal pemesanan. Perubahannya dianggap kecil. Kode fungsi potongan dirapikan sekalian. Rilis lolos peninjauan kode, lolos pemeriksaan manual penguji, dan naik ke produksi tanpa ada yang mengangkat alis.
Empat hari kemudian, 16 Agustus, seorang staf keuangan menelepon. Ia sedang merekonsiliasi tagihan dan menemukan pola aneh: pesanan tepat 20 karton ditagih tanpa potongan sama sekali, dan pesanan tepat 50 karton ditagih dengan potongan 5%, bukan 8%. Pesanan 21 karton baik-baik saja. Pesanan 51 karton baik-baik saja. Hanya yang persis di angka batas yang salah.
Setelah ditelusuri, 187 pesanan terdampak, dengan total selisih tagihan Rp 23.750.000. Sebagian pelanggan sudah membayar. Sebagian sudah komplain ke tim penjualan dan tidak dijawab karena tim penjualan mengira sistem tidak mungkin salah. Insiden itu diberi nomor INS-2311.
Pertanyaan yang sebenarnya
Refleks pertama banyak orang setelah membaca cerita seperti ini adalah: "berarti tim itu kurang tes." Refleks itu terlalu cepat, dan menuntun ke keputusan yang mahal.
Pertanyaan yang lebih berguna ada tiga, dan modul ini memutar seluruh isinya di sekitar tiga pertanyaan itu:
- Uji seperti apa, tepatnya, yang akan menangkap cacat INS-2311 sebelum rilis? Bukan "uji yang lebih banyak" — uji yang mana, di lapisan mana, dengan data apa.
- Apakah uji semacam itu layak dipelihara? Setiap uji otomatis adalah kode tambahan yang harus ikut diperbaiki setiap kali sistem berubah. Sebagian uji membayar kembali biaya itu berlipat-lipat. Sebagian lagi tidak pernah balik modal.
- Bagaimana kamu memutuskan hal itu di tempat kerjamu sendiri, untuk fitur yang kamu pegang sekarang, tanpa harus menunggu insiden lebih dulu?
Kenapa modul ini bukan modul "otomatiskan semuanya"
Banyak materi pengujian ditulis seolah otomasi adalah kewajiban moral: tim yang baik mengotomatiskan, tim yang malas tidak. Cara pandang itu menghasilkan tim yang punya ratusan uji, dua pertiganya sering merah tanpa sebab jelas, dan akhirnya tidak ada yang membaca hasilnya lagi. Suite semacam itu lebih buruk daripada tidak punya suite sama sekali, karena ia memakan waktu sekaligus memberi rasa aman palsu.
Otomasi adalah keputusan ekonomi: kamu menukar biaya sekarang (menulis dan merawat kode uji) dengan pengurangan risiko di masa depan (cacat yang tertangkap lebih cepat, lebih murah). Kadang tukar-menukar itu jelas menguntungkan. Kadang jelas merugikan. Sebagian besar waktu, ia ada di antaranya, dan itulah kenapa kamu perlu kriteria, bukan slogan.
Peta modul ini
Unit 2 membedah biaya dan manfaat sebuah uji otomatis, lalu memberimu lima pertanyaan kelayakan dan empat pola pekerjaan yang biasanya merugi bila diotomatiskan. Unit 3 menjelaskan lima langkah mengubah satu insiden produksi menjadi uji regresi yang benar-benar mengunci cacatnya. Unit 4 menerapkan kelima langkah itu pada INS-2311 sampai selesai, lengkap dengan kode uji dan angkanya. Unit 5 mengoreksi lima salah paham yang paling sering. Unit 6 kuis, unit 7 rangkuman dan daftar periksa sebelum kamu lanjut.
Satu hal yang perlu kamu siapkan sejak sekarang: pilih satu fitur nyata yang kamu pegang atau kamu kenal baik di tempat kerjamu. Kamu akan memakainya di akhir modul.