Hubungi dukungan

Kami membalas melalui e-mail, biasanya dalam dua hari.

Google reCAPTCHA memeriksa kiriman ini untuk mencegah penyalahgunaan; data dikirim ke Google. Skrip hanya dimuat saat formulir ini dibuka.

← Semua artikel

Menguji dengan curl berarti menguji hal yang salah

Permintaan penghitung yang datang tanpa identitas browser hanya menulis ke dua dari dua belas tempat yang biasanya disentuh oleh kunjungan yang dihitung. Jawabannya 200. Ia mengembalikan gambar penghitung yang valid. Tidak ada tanda di mana pun bahwa sepuluh dari dua belas tempat itu dilewati.

tanpa user agent — 2 dari 12 bawaan curl — 2 dari 12 identitas browser — 10 dari 12 ketiganya menjawab 200 dengan gambar penghitung yang berfungsi

Untuk apa filter ini, dan apa harganya

Penghitung di sini memisahkan robot dari manusia, dan pemisahan itu dilakukan berdasarkan identitas yang diberikan klien tentang dirinya sendiri. Daftar penandanya pendek dan sengaja dibuat tidak ambigu, dan curl/ termasuk di dalamnya. Begitu pula identitas kosong, dengan alasan bahwa permintaan yang sama sekali tanpa user agent bukanlah browser.

Keduanya benar. Layanan ini tidak keliru memperlakukan curl polos sebagai robot; memang itulah dia. Masalahnya, orang yang menjalankan curl biasanya tidak sedang menguji apakah deteksi robot berfungsi. Mereka menguji apakah penghitungan berfungsi, dan tanpa sadar mereka meminta jalur robot.

Yang mereka dapat: total tayangan hari itu naik satu, kolom bot naik satu, dan hanya itu. Tidak ada baris pengunjung unik, jadi tidak ada apa pun tentang pengunjung. Tidak ada entri di daftar online. Tidak ada halaman, negara, browser, sistem operasi, perangkat, atau jam. Bagian-bagian sistem yang sebenarnya ingin diperiksa orang justru bagian yang tidak berjalan.

Kegagalan ini tidak bergejala

Bagian inilah yang patut direnungkan. Uji yang tidak mengukur apa-apa biasanya menampakkan diri: sebuah galat, hasil kosong, angka nol di tempat yang seharusnya berisi angka. Di sini responsnya 200. Isinya gambar penghitung sungguhan, sebesar 3.361 byte. Angka di gambar itu bahkan naik, karena total tayangan adalah salah satu dari dua hal yang memang terjadi.

Jadi uji coba itu tampak lolos. Semua yang disimpulkan darinya — “jalur penghitungan berfungsi”, “kolom baru sedang ditulis”, “perubahan itu tidak merusak apa pun” — adalah kesimpulan yang ditarik dari sebuah proses yang melewati sebagian besar kode yang seharusnya diuji.

Ini terjadi saat tulisan ini dibuat

Versi pertama pengukuran di balik tulisan ini meminta /c/<number>. Itu bukan alamat gambar penghitung; alamat yang benar memuat desain dan ekstensi, /c/<number>-<design>.png. Permintaan itu menghasilkan 404.

Skrip itu mencetak, sebanyak tiga kali: menulis ke 0 dari 12 tempat. Itu benar, dan sekilas juga persis seperti tampilan filter bot yang berfungsi. Angka 404 itu ada di keluaran, di tabel yang sama, satu baris di atas angka-angka nol. Selama satu menit angka itu tidak terbaca karena angka nol adalah bagian yang menarik dan sesuai dengan yang diharapkan.

Itu kesalahan yang sama dengan pokok tulisan ini, satu tingkat lebih tinggi: pengukuran yang menghasilkan jawaban masuk akal karena alasan yang tidak diperiksa siapa pun. Kesalahan itu tertangkap hanya karena skripnya menghitung baris di dua belas tabel alih-alih memercayai permintaan — permintaan yang gagal dan permintaan yang tersaring tampak sama persis dari luar.

Apa yang sebaiknya dilakukan

Kirimkan identitas browser. Satu flag, -A dengan string user agent sungguhan, maka permintaan yang sama menulis ke sepuluh dari dua belas tempat, bukan dua.

Lalu hitunglah sesuatu di sisi seberang. Kode respons menyatakan bahwa permintaan sudah tiba; kode itu tidak mengatakan apa pun tentang apa yang dilakukan permintaan tersebut. Untuk segala hal yang intinya adalah efek samping — penghitung, antrean, baris log, baris di suatu tempat — uji coba harus melihat efek sampingnya. Penghitungan sebelum dan sesudah di semua tabel yang terlibat hanya butuh dua puluh baris di sini dan dua kali mengubah hasil yang ambigu menjadi tidak ambigu: sekali untuk filter, sekali untuk 404.

Dua dari dua belas tempat tetap kosong meskipun dengan identitas browser: kolom bot, sebagaimana mestinya, dan daftar perujuk, yang tidak mencatat perujuk yang dikirim. Yang kedua itu tidak dijelaskan di sini, karena penyebabnya belum ditelusuri. Hal itu dilaporkan karena alternatifnya adalah menerbitkan tabel dengan sebelas baris lalu menyebutnya dua belas.

Iklan