Vodič za početnike za testiranje: Pogreška pri rukovanju rubnim slučajevima

Kada gradite složene dijelove softvera, bez obzira na jezik, počinjete primjećivati ​​obrazac u svojim navikama testiranja. Problemi sličnog izgleda pojavit će se na različitim platformama ili projektima. Neovisno o tome gradite li još jedan jednostavan demo popisa obveza za razgovor ili dizajnirate sveobuhvatnu pozadinu za pokretanje PaaS-a, isti generički obrasci počinju se pojavljivati.

Treba testirati šest slučajeva koji će osvijetliti iznenađujući broj problema. Nisu zamišljeni kao cjeloviti ili cjeloviti vlastiti ispitni paket. Umjesto toga, oni su lako pamtljivi podskup uobičajenih paradigmi testiranja koji se mogu primijeniti na bilo koji jezik, okvir ili okruženje.

Ti su slučajevi odmah korisni u dva aspekta svakodnevnih rutina kodiranja: otklanjanju pogrešaka kada se pojave i u stvaranju paketa za testiranje baze koda. Namijenjeni su generičkim, apstraktnim oblicima testiranja koji će osvijetliti neka od najčešćih problema s kojima se suočavaju mlađi programeri.

Oni će biti korisni samo u kružnom toku u funkcionalnom programiranju. Funkcionalno programiranje zaobilazi mnoge najjednostavnije vrste bugova opisanih u nastavku. U svakom slučaju, korisno je imati na umu ove vrste apstraktnih graničnih slučajeva, jer oni pružaju zaštitnu ogradu od loših praksi u kodu.

Šest testova je kako slijedi:

  • Nula
  • Jedan
  • Dva
  • Dva do max-1
  • maks
  • max + 1

Iako su to granični slučajevi, njihova je vrijednost u onome što predstavljaju. Iako osiguravate da vaši testovi pokrivaju svu funkcionalnost vašeg programa, trebali biste svoje testove učiniti jednostavnima s što manje smisla.

Nula

Nula se koristi za označavanje bilo kojeg oblika null unosa, bilo da je to nedefiniran, null, prazan niz ili jednostavno stvarni broj 0. Vjerojatno najčešći i najjednostavniji oblik buga odnosi se na nultu vrijednost i uvijek podliježe testiranju. Jednostavno testirajte funkciju, krajnju točku ili učitajte s Zero ulazom i provjerite ponaša li se onako kako se očekuje.

Jedan

Jedan je, poput Zero, najosnovniji oblik generiziranog pojedinačnog testa. Funkcija se testira s prvim važećim, normalnim ulazom. Ovo je najkorisnije za regresijsko ispitivanje. U budućim iteracijama koda, ovaj će test brzo pokazati funkcionira li program (ili postupak) kako se očekuje.

Jedno testiranje daje vam osnovnu vrijednost za uspjeh, bilo da je to uspješna provjera autentičnosti na administratorskoj krajnjoj točki, valjani prijenos datoteka ili ispravna izmjena niza.

Dva

Dva se ne odnose samo na testiranje indeksa niza 2 ili na to radi li vaš algoritam s 2 ulaza. Također obuhvaća ono što se događa kada dvaput pokrenete isti kod.

Ako bi netko dvaput zaredom uputio DELETE HTTP zahtjev na isti resurs, što se događa? Ako se funkcija sortiranja s prilagođenim usporednikom poziva dva puta zaredom, ponaša li se onako kako se očekivalo?

Dva je zanimljiv broj, jer je to prvi put da valjani kôd koji djeluje kad se jednom pozove može pokazati nuspojave na ponovljena izvršenja. Unesite malu promjenu u funkcije koje smo gore testirali.

Svodi se na modifikacije stanja i razumijevanje ponašanja funkcije. Ako je sve što imamo samo ime funkcije, tada se ovaj kod ponaša točno onako kako je predviđeno. Imate varijablu koja se zove 0, pozivate funkciju setVarToOne, a zatim tvrdite da je jednaka jedinici.

Na prvi pogled, ovo se ponašalo točno onako kako se očekivalo. Međutim, testiranje s idejom dva na umu istaknulo bi dublje probleme s kodom. Možete ga testirati tako da ga nazovete dva puta i ustvrdite da je u oba slučaja mVar jednak 1.

Dva do max-1

Dva do max-1 je provjera zdravstvenog stanja. Vrlo je sličan One testu, ali postoji suptilna razlika. Ovo bi trebao biti prosječan slučaj upotrebe - ne najjednostavniji ili najjednostavniji ili najlakši za čitanje. Samo prosječan slučaj upotrebe koji možda nije osobito jednostavan, ali to je prilično često .

Maks

Max je prilično jednostavan: jednostavno testira ograničenja vaše aplikacije, posebno oko definiranih maksimalnih konstanti.

Ako imate jednostavnu implementaciju povezanog popisa, mogli biste zamisliti da imate naizgled neograničen broj dopuštenih umetaka. U stvarnosti postoji gornja granica - je li to INT_MAX, broj deskriptora datoteka koje vaš OS može imati otvoren ili jednostavno količina memorije ili prostora na disku dodijeljena vašem programu.

U nekim se okolnostima Max može činiti nemogućim testom jer ne postoji max za sve što testirate. Cilj je, međutim, u ovim slučajevima druge prirode: testirati stres na zahtjev.

Na primjer, moguće je da se određeni dio podataka koje su poslali korisnici smanjuje i prolazi kroz funkcije dok ne dođe do petlje koju ste definirali. Ako su ti podaci, recimo, INT_MAX, možda će trebati neznatno malo vremena da vaš kôd dovrši. Još gore, vaš bi kôd mogao dovesti u stanje bez zaustavljanja. To mogu biti suptilni problemi koji se javljaju tek kad vaš kod krene u proizvodnju, pa je važno uhvatiti ih tijekom faze testiranja.

Maks + 1

Max + 1 je test koji se uglavnom koristi za provjeru standarda ili pravila koja je postavio programer. To uključuje ispitivanje bilo čega do njegove teorijske granice + epsilon.

To se može manifestirati kao problem s nizom izvan granica, pogreška isključena za jednu, pogreška prelijevanja cijelog broja ili bilo koja druga vrsta problema koja se događa kada dosegnete granice svoje funkcije ili programa.

Ako imate maksimalnu veličinu za prijenos datoteka 2mb, pokušajte prenijeti datoteku veličine 2mb + 1b. Ako imate ograničenje broja unosa u korisničkom katalogu, provjerite vrši li se provjera i na klijentskoj strani i nastrana poslužitelja.

Zaključak

Kao što je gore spomenuto, ovo nije cjelovita slika onoga što bi trebale biti vaše rutine za uklanjanje pogrešaka ili testiranje. Ovo jednostavno pruža solidnu, generičku osnovnu liniju koja bi trebala nadići bilo koji određeni paket ili okvir za testiranje.

Testovi se obično smatraju graničnim ili rubnim slučajevima, ali ružnu glavu mogu postaviti na mjesta koja nisu odmah očita.