Pengujian verifikasi usia selalu jatuh pada satu titik yang sama: hari ketika seseorang tepat mencapai batas yang ditentukan. Sehari sebelumnya ia belum memenuhi syarat, sehari sesudahnya ia sudah memenuhi, dan pada hari itu sendiri jawabannya bergantung pada aturan yang Anda pilih sejak awal. Kesalahan pada titik ini jarang terlihat karena sistem tetap berjalan, hanya saja keputusannya salah bagi sebagian kecil pengguna. Tulisan ini membahas cara menguji batas tersebut dengan tepat, termasuk tanggal lahir yang jarang muncul.
Mengapa satu ambang usia tidak cukup untuk semua layanan?
Karena ambang usia bergantung pada jenis layanan dan pada negara tempat layanan itu ditawarkan. Untuk layanan daring yang menyasar anak, banyak yurisdiksi memakai ambang tiga belas tahun sebagai batas persetujuan orang tua, sementara aturan perlindungan data di Eropa menetapkan enam belas tahun sebagai patokan umum dengan kemungkinan penyesuaian oleh masing-masing negara anggota pada rentang tiga belas sampai enam belas tahun. Batas kedewasaan umumnya delapan belas tahun, dan sebagian aturan khusus, misalnya yang menyangkut minuman beralkohol, memakai batas dua puluh satu tahun.
Angka-angka itu tidak boleh disamakan begitu saja. Sebuah layanan yang menolak pengguna berusia tujuh belas tahun karena aturan kedewasaan tidak melakukan hal yang sama dengan layanan yang meminta persetujuan orang tua bagi pengguna berusia empat belas tahun. Keduanya sama-sama memeriksa usia, tetapi tujuan, dasar, dan pesan kepada pengguna berbeda. Menyatukan semuanya menjadi satu pemeriksaan adalah sumber kesalahan pertama, dan pemeriksaan seperti itu biasanya ditulis sebelum ada yang memutuskan aturan mana yang berlaku di negara mana.
Konsekuensinya terasa pada pengujian. Bila aturannya tidak dipisahkan, pengujian hanya membuktikan bahwa satu angka tertentu bekerja, bukan bahwa tiap negara menerima keputusan yang benar. Sebaiknya setiap aturan memiliki nama dan diuji sendiri, meski kodenya nanti dijalankan oleh bagian yang sama.
Bagaimana menguji tepat di hari ulang tahun?
Uji tiga titik, bukan satu: sehari sebelum, pada hari itu, dan sehari sesudahnya. Banyak organisasi menerima bahwa hari ulang tahun itu sendiri sudah dihitung sebagai telah mencapai usia baru, sebab pada hari itu orang tersebut memang sudah berulang tahun. Yang penting bukan pilihan itu sendiri, melainkan bahwa pilihan tersebut disepakati bersama oleh semua bagian sistem dan diuji pada ketiga titik tersebut.
| Tanggal lahir | Tanggal pengujian | Hasil yang benar bila hari ulang tahun dihitung |
|---|---|---|
| 15-03-2010 | 14-03-2028 | Belum mencapai usia delapan belas tahun |
| 15-03-2010 | 15-03-2028 | Sudah mencapai usia delapan belas tahun |
| 15-03-2010 | 16-03-2028 | Sudah mencapai usia delapan belas tahun |
Perhatikan bahwa baris pertama dan baris kedua berbeda hanya satu hari, sehingga pengujian yang hanya memakai contoh bulat, misalnya tanggal lahir dengan usia jauh di atas atau jauh di bawah batas, tidak akan pernah menemukan kesalahan di sini. Uji batas harus memakai tanggal yang benar-benar jatuh sehari sebelum dan sehari sesudah.
Ada satu hal lagi yang sering membuat hasil tidak konsisten, yaitu waktu. Bila penentuan tanggal hari ini dilakukan oleh server, sedangkan pengguna berada di wilayah dengan zona waktu yang berbeda, hari ulang tahunnya bisa dianggap belum tiba selama beberapa jam. Uji perilaku itu secara sengaja, jangan biarkan hanya satu zona waktu yang pernah diuji.
Apakah tanggal 29 Februari mengubah hasilnya?
Bisa, dan justru pada kasus inilah pengujian paling sering terlewat. Seseorang yang lahir pada tanggal 29 Februari hanya memiliki hari ulang tahun kalender setiap empat tahun, sehingga pada tahun-tahun biasa sistem harus memutuskan tanggal mana yang dipakai untuk menaikkan usianya. Dua pilihan yang lazim adalah tanggal 28 Februari atau 1 Maret, dan keduanya menimbulkan selisih satu hari pada perhitungan batas.
Pilihan tersebut juga berinteraksi dengan tanggal lahir lain yang tampak sah tetapi tidak pernah ada, misalnya tanggal 31 pada bulan yang hanya memiliki tiga puluh hari, atau tanggal 30 Februari. Bahan uji sebaiknya memuat semuanya, sebab pemeriksaan bentuk tanggal tanpa aturan bulan akan meloloskan nilai yang mustahil. Bahasan yang lebih rinci tentang tanggal-tanggal semacam ini, termasuk aturan tahun kabisat untuk abad, ada pada validasi tanggal lahir dan kasus batasnya.
Perlu diingat bahwa ada pula kalender yang berbeda dari kalender Gregorian di beberapa negara, sehingga tanggal lahir yang tersimpan bisa berasal dari penanggalan lain. Untuk keperluan pengujian, yang penting adalah memastikan sistem tidak berasumsi bahwa semua pengguna memakai satu penanggalan saja.
Usia dihitung ulang atau disimpan?
Hitung ulang setiap kali dibutuhkan, dan jangan menyimpan usia sebagai bidang tetap. Usia adalah nilai yang berubah sendiri tanpa ada yang menyuntingnya, sehingga nilai yang tersimpan pasti menjadi salah paling lambat satu tahun kemudian. Kesalahan ini sulit terlihat karena catatannya tidak pernah tampak rusak; ia hanya menjadi lama.
Bila demi alasan kinerja usia harus disimpan, sertakan tanggal perhitungannya dan aturan yang mewajibkan perhitungan ulang pada waktu yang jelas. Cara yang paling mudah diperiksa adalah menyimpan tanggal lahir saja, lalu menurunkan usia dari tanggal tersebut dan dari tanggal hari ini.
Jangan pula memakai usia yang tersimpan sebagai penentu dalam laporan atau tangkapan data lama, karena hasilnya akan berbeda bila dihitung sekarang. Keselarasan antar bidang seperti ini adalah bagian dari pekerjaan yang lebih luas, dan penjelasan tentang pasangan bidang mana yang wajib cocok ada pada konsistensi data identitas.
Kesalahan yang membuat pengujian tampak lulus
Beberapa kesalahan berikut membuat hasil pengujian terlihat baik-baik saja. Menguji hanya dengan usia yang jauh dari batas, sehingga tidak ada satu pun kasus batas yang benar-benar dijalankan. Menganggap penolakan sebagai kesalahan sistem, lalu menandai pengujian gagal padahal penolakan itu justru jawaban yang diharapkan. Menyamakan pernyataan mandiri pengguna dengan pemeriksaan dokumen, padahal keduanya berbeda dan hanya yang pertama berada dalam kendali situs biasa.
Kesalahan lain adalah menguji dengan tanggal hari ini sebagai patokan tanpa membekukan waktunya. Bila tanggal pengujian bergeser, hasilnya pun ikut bergeser, dan pada suatu hari pengujian yang sama akan mulai gagal tanpa ada perubahan kode. Bekukan patokan waktu di dalam pengujian batas.
Data yang dipakai untuk menguji batas usia ini hanya untuk keperluan pengujian dan tidak boleh dipakai untuk menyamar sebagai orang lain; tidak ada satu pun di antaranya yang dirancang untuk melewati pemeriksaan usia yang sungguhan.
Untuk pengembang: menguji batas tanpa data nyata
Susun bahan pengujian dari tanggal lahir yang dibangkitkan, bukan dari tanggal orang sungguhan, karena yang diuji adalah aturan, bukan orangnya. Cukup satu kelompok kecil: pengguna yang tepat berada di batas, pengguna sehari sebelum batas, pengguna dengan tanggal lahir 29 Februari, dan pengguna dengan tanggal lahir yang tidak sah. Kelompok kecil seperti itu jauh lebih berguna daripada ratusan catatan acak.
Tempatkan perhitungan usia di satu tempat saja dan panggil dari semua layanan, sehingga aturan berbeda antarnegara tidak ditulis ulang di setiap halaman. Setiap layanan kemudian menyebutkan ambang yang berlaku dan negaranya, lalu menyerahkan perhitungannya ke tempat yang sama. Bila aturan berbeda perlu diuji, cukup ubah ambangnya, lalu periksa keputusan akhir untuk beberapa negara, misalnya halaman aturan setempat bagi Amerika Serikat dan negara lain yang Anda layani.
Terakhir, pastikan pesan yang ditampilkan kepada pengguna tidak menyiratkan bahwa data uji dapat membuka akses sungguhan. Nilai untuk menguji tidak pernah menjadi bukti identitas. Untuk menghasilkan tanggal lahir dan bidang identitas lain yang konsisten, pakai generator data identitas yang memakai kunci tetap agar hasilnya dapat diulang.
Langkah berikutnya
Tuliskan semua ambang usia yang dipakai produk Anda, lengkap dengan negaranya, lalu buat satu pengujian untuk setiap titik batas: sehari sebelum, pada hari itu, dan sehari sesudahnya. Setelah daftar itu selesai, tambahkan satu kasus khusus untuk tanggal 29 Februari dan satu kasus untuk tanggal yang tidak pernah ada.