Testiranje pomoću curl-a testira pogrešnu stvar
U ovom članku
Zahtev za brojač koji stigne bez identiteta pregledača upisuje u dva od dvanaest mesta koja brojana poseta obično dotakne. Odgovara sa 200. Vraća ispravnu sliku brojača. Nigde ne piše da je deset od dvanaest preskočeno.
Čemu služi filter i šta košta
Brojači ovde razdvajaju robote od ljudi, a razdvajanje se vrši po identitetu koji klijent daje o sebi. Spisak oznaka je kratak i namerno nedvosmislen, a curl/ je među njima. Tu je i prazan identitet, jer zahtev bez ikakvog korisničkog agenta nije pregledač.
Oba su ispravna. Servis ne greši kada goli curl tretira kao robota; to on i jeste. Problem je u tome što osoba koja pokreće curl obično ne testira da li otkrivanje robota radi. Testira da li brojanje radi, a tiho je zatražila putanju za robote.
Šta dobija: dnevni zbir pregleda raste za jedan, kolona botova raste za jedan, i to je sve. Nema reda jedinstvenog posetioca, dakle ništa o posetiocima. Nema unosa na listi onih koji su na mreži. Nema stranice, zemlje, pregledača, operativnog sistema, uređaja, sata. Delovi sistema koje bi svako zaista hteo da proveri upravo su oni koji se nisu izvršili.
Greška nema simptom
Na ovom delu vredi se zadržati. Test koji ništa ne meri obično sam sebe oda: greška, prazan rezultat, nula tamo gde treba broj. Ovde je odgovor 200. Telo je prava slika brojača, od 3.361 bajta. Čak je i broj na slici porastao, jer je zbir pregleda jedna od dve stvari koje su se desile.
Dakle, proba izgleda kao uspeh. Sve što iz nje sledi — „putanja brojanja radi“, „nova kolona se upisuje“, „izmena ništa nije pokvarila“ — zaključak je izveden iz izvršavanja koje je preskočilo većinu koda koji je trebalo da proveri.
Desilo se pri pisanju ovog članka
Prva verzija merenja iza ovog članka zahtevala je /c/<number>. To nije adresa slike brojača; prava nosi dizajn i ekstenziju, /c/<number>-<design>.png. Zahtev je vratio 404.
Skripta je tri puta ispisala: upisuje u 0 od 12 mesta. Što je tačno, i što je ujedno upravo ono kako bi na prvi pogled izgledao ispravan filter za botove. 404 je bio u izlazu, u istoj tabeli, red iznad nula. Ostao je nepročitan minut, jer su nule bile zanimljiv deo i poklapale su se sa očekivanim.
To je ista greška kao ona o kojoj je ovaj članak, jedan nivo više: merenje koje je dalo uverljiv odgovor iz razloga koji niko nije proverio. Uhvaćeno je samo zato što je skripta brojala redove u dvanaest tabela umesto da veruje zahtevu — zahtev koji ne uspe i zahtev koji je filtriran spolja izgledaju isto.
Šta raditi umesto toga
Pošaljite identitet pregledača. Jedna zastavica, -A sa pravim nizom korisničkog agenta, i isti zahtev upisuje u deset od dvanaest mesta umesto u dva.
I brojte nešto sa druge strane. Kôd odgovora kaže da je zahtev stigao; ne kaže ništa o tome šta je zahtev uradio. Za sve gde je poenta u sporednom dejstvu — brojač, red čekanja, linija dnevnika, red negde — proba mora da pogleda sporedno dejstvo. Brojanja pre i posle u svim uključenim tabelama zahtevala su dvadeset linija i dvaput su dvosmislen rezultat pretvorila u nedvosmislen: jednom za filter, jednom za 404.
Dva od dvanaest mesta ostala su prazna čak i sa identitetom pregledača: kolona botova, ispravno, i lista referera, koja nije zabeležila poslati referer. Ovo drugo se ovde ne objašnjava, jer još nije ispitano do kraja. Prijavljeno je jer je alternativa da se objavi tabela sa jedanaest redova i nazove dvanaestoredom.