Upotrebljavajte testove kao dokaze
DovršenoOdaberite provjere koje mogu odbiti pogrešno ponašanje. Generirane testove pregledajte jednako pažljivo kao generiranu implementaciju.
Objavljuje TaigaKako pišemo
Provjerite razumijevanjeGenerirani test simulira funkciju autorizacije tako da uvijek dopušta pristup. Što potvrđuje uspješan rezultat?Napravite vježbu
Što ćete naučiti
- Povezati svaki važan zahtjev sa smislenom provjerom.
- Razlikovati dokaze jediničnih, integracijskih i end-to-end testova.
- Otkriti test koji ponavlja istu pogrešnu pretpostavku kao implementacija.
Počnite zahtjevom
Testovi su dokazi za konkretne tvrdnje. Uspješno pokretanje testova ne potvrđuje svako svojstvo softvera. Prije traženja testova utvrdite važno ponašanje i pogrešku koju svaka provjera treba otkriti.
Za izmišljeni izvoz organizacije glavni je zahtjev izolacija podataka. Korisnik organizacije A ne smije dobiti zapise organizacije B. Test koji provjerava samo uspješno preuzimanje ne potvrđuje taj zahtjev.
Zatražite da agent objasni odnos između zahtjeva i tvrdnje u testu. Tako je lakše otkriti slučajeve koji nedostaju prije nego što skup testova postane velik.
Odaberite odgovarajući opseg testa
Jedinični test može brzo provjeriti malu transformaciju. Integracijski test može provjeriti kako komponente rade zajedno. End-to-end test može provjeriti važan korisnički slijed kroz postavljenu ili reprezentativnu aplikaciju.
Upotrijebite najuži opseg koji daje potrebne dokaze. Alat za formatiranje ne treba potpuni test preglednika za svaki ulaz. Autorizacijska granica može zahtijevati stvarnu rutu i put pristupa podacima. Kritična interakcija u pregledniku treba dokaze o prikazanom sučelju.
| Tvrdnja | Primjer dokaza |
|---|---|
| CSV izlaz ispravno escapira navodnik | Jedinični test s navodnikom u polju |
| Druga organizacija ne može čitati izvoz | Integracijski test kroz stvarnu autorizaciju |
| Korisnik tipkovnice može pokrenuti izvoz | Test preglednika i ručna provjera rada putem tipkovnice |
| Neuspjeli izvoz daje korisnu pogrešku | Provjera puta neuspjeha na relevantnom sučelju |
Nijedan fiksni omjer vrsta testova ne odgovara svakom sustavu. Birajte prema pogrešci koju trebate otkriti i trošku održavanja provjere.
Izbjegnite zajedničku pogrešnu pretpostavku
Agent može napisati implementaciju i testove iz istog pogrešnog razumijevanja. Mogu se slagati, a da zahtjev ostane neispunjen.
Pretpostavite da implementacija filtrira zapise prema ID-ju organizacije dostavljenom u zahtjevu. Test upotrebljava isti ID za prijavljenog korisnika i zahtjev. Prolazi. Nedostaje slučaj u kojem korisnik traži ID druge organizacije.
Dodajte taj slučaj kroz stvarni pouzdani identitet i put autorizacije. Simulacija koja uvijek vraća „dopušteno” ne može potvrditi izolaciju tenanata. Potvrđuje samo ponašanje nakon uspješne autorizacije.
Provjerite može li test pasti
Za poznatu pogrešku pokrenite novi regresijski test na neispravnoj verziji u izoliranoj grani. Potvrdite da pada zbog namjeravanog razloga. Zatim primijenite ispravak i ponovno ga pokrenite.
Test koji pada jer se testni podaci ne mogu učitati još nije dokaz o poslovnom ponašanju. Pregledajte neuspjeh, a ne samo izlazni kod.
Za šire promjene mutacijsko testiranje može pomoći procijeniti uzrokuju li odabrane promjene koda pad testova. Ono ima trošak i ne zamjenjuje pregled zahtjeva. Upotrijebite ga tamo gdje dodatni dokazi podupiru odluku s važnim posljedicama.
Zadržite vezu dokaza i promjene
Pokrenite relevantne provjere na konačnoj reviziji. Zabilježite preskočene provjere i razloge. Rezultat ranijeg commita možda više ne vrijedi nakon ispravka iz pregleda.
Testovi trebaju ostati razumljivi. Dajte prednost izričitoj pripremi i tvrdnji u testu pred velikom pomoćnom funkcijom koja skriva važan uvjet. Uklonite suvišne provjere ako povećavaju trošak održavanja bez otkrivanja drugačijeg kvara.
Pregledavatelj treba moći reći što testovi potvrđuju i što ostaje neizvjesno. To je objašnjenje korisnije od velikog broja testova.
Napravite vježbu
Odaberite jedan generirani test. Navedite zahtjev koji provjerava. U izoliranoj grani privremeno uvedite relevantnu pogrešku. Potvrdite da test pada zbog namjeravanog razloga, a zatim vratite kod. Zabilježite što test i dalje ne pokriva.
Preuzmi radni list (Markdown)Uklanjanje ove oznake briše sav napredak spremljen u ovom pregledniku.
Napredak ostaje u ovom pregledniku. Bez računa i praćenja.
Izvori i dodatno čitanje
- Google Engineering Practices: Review tests for useful assertions ↗
- Google Testing Blog: Test scope and feedback ↗