Što je testiranje petlje? Metodologija, Primjer

⚡ Pametni sažetak

Testiranje petlje validira konstrukcije petlji unutar programa, provjeravajući što se događa kada se petlja preskoči, jednom uđe u nju, izvrši na svojoj granici i pomakne za jedan prolaz izvan maksimalno dopuštenog broja.

  • 🔘 Definicija: Tehnika strukture upravljanja bijelom kutijom usmjerena na valjanost petlje, a ne na ekrane.
  • 🔁 Četiri razreda: Jednostavne, ugniježđene, spojene i nestrukturirane petlje trebaju vlastitu strategiju.
  • ???? Tri kontrolne točke: Ulazak u petlju, ponašanje tijekom izvršavanja i uvjet izlaska.
  • 🧪 Granični prijelazi: Nula, jedan, dva, tipičan broj, zatim b-1, b i b+1 iteracija.
  • 🪜 Ugniježđeni redoslijed: Počnite od najunutarnje petlje, držite vanjske na minimumu, a zatim radite prema van.
  • 🐞 Pronađeni nedostaci: Ograničenja odstupanja za jedan, neinicijalizirani brojači, beskonačne petlje i uska grla kapaciteta.
  • ⚠️ Ograničenje: Greške u petljama nalaze se u kodu niske razine i rijetko su suptilne kada se do njih dođe.

Metodologija testiranja petlji, vrste petlji i primjeri testnih slučajeva

Što je testiranje petlje?

Testiranje petlje je vrsta testiranja softvera koja se u potpunosti fokusira na valjanost konstrukcija petlji u programu. To je jedan dio testiranja kontrolnih struktura, uz testiranje puta, testiranje validacije podataka i testiranje uvjeta.

Testiranje petlje je a testiranje bijele kutije tehnika, pa je primjenjuje netko tko može pročitati izvorni kod i vidjeti stanje petlje, brojač i izlazni put. Tester ne nagađa ponašanje iz korisničkog sučelja; sama petlja je objekt koji se testira.

Donji dijagram prikazuje gdje se testiranje petlje nalazi unutar obitelji testiranja kontrolne strukture.

Testiranje petlje prikazano kao grana testiranja upravljačke strukture

Ispitane vrste petlji

Prije odabira strategije, odredite koju od četiri klase petlji razmatrate. Primjeri tipova petlji koje se testiraju su:

  • Jednostavna petlja — jedna petlja s jednim ulazom i jednim izlazom, kao što je ravnica za, dok or učiniti-dok konstruirati.
  • Ugniježđena petlja — jedna petlja smještena unutar druge, tako da se unutarnja petlja izvršava do kraja pri svakom prolazu vanjske petlje.
  • Ulančana petlja — dvije ili više petlji koje se izvode jedna za drugom u nizu.
  • Nestrukturirana petlja — neplanirana kombinacija ugniježđenih i spojenih petlji, obično rezultat skokova u ili iz tijela petlje.

Klasa odlučuje o trudu. Jednostavna petlja zahtijeva nekoliko iteracija; nestrukturirana petlja obično zahtijeva redizajn koda prije nego što se uopće može testirati.

Zašto testirati petlju?

Testiranje petlje provodi se iz sljedećih razloga

  • Testiranje može riješiti probleme s ponavljanjem petlje
  • Testiranje petlji može otkriti uska grla u performansama i kapacitetu
  • Testiranjem petlji mogu se odrediti neinicijalizirane varijable u petlji
  • Pomaže u identificiranju problema inicijalizacije petlje.

Postoji i komercijalni razlog. Petlja koja izvršava jednu iteraciju previše oštećuje ukupan broj; petlja koja se nikada ne završava zamrzava proces. Oba nedostatka je lako pronaći dok je kod još na računalu programera, a skupo ih je pronaći u produkciji.

Kako napraviti testiranje petlje: Kompletna metodologija

Prilikom testiranja petlje, potrebno ju je provjeriti na tri različite razine:

  • Kada se uđe u petlju
  • Tijekom njegovog izvršenja i
  • Kad se petlja ostavi

Strategija testiranja za sve ove petlje je sljedeća.

Jednostavna petlja

Jednostavna petlja ima jedan ulaz i jedan izlaz, kao što je prikazano dolje.

Jednostavan dijagram toka petlje s jednom ulaznom točkom i jednim izlaznim uvjetom

Jednostavna petlja se testira na sljedeći način:

  1. Preskočite cijelu petlju
  2. Napravite 1 prolaz kroz petlju
  3. Napravite 2 prolaz kroz petlju
  4. Napraviti a prolazi kroz petlju gdje a < b, to je tipičan broj iteracija srednjeg raspona
  5. Napraviti b, b-1 i b+1 prolazi kroz petlju gdje b je maksimalan broj dopuštenih prolaza kroz petlju.

Posljednja dva slučaja nose najveću vrijednost. Preskočiping petlja dokazuje da je uvjet izlaza procijenjen prije nego što se tijelo izvrši, i b+1 slučaj dokazuje da petlja odbija rad izvan deklarirane granice umjesto da prekriva niz.

Ugniježđena petlja

Ugniježđena petlja množi broj mogućih kombinacija iteracija, pa se testira iznutra prema van, a ne odjednom.

Dijagram toka ugniježđene petlje s unutarnjom petljom okruženom vanjskom petljom

Za ugniježđenu petlju potrebno je slijediti sljedeće korake.

  1. Postavite sve ostale petlje na njihovu minimalnu vrijednost i počnite od najunutarnje petlje
  2. Za najunutarnju petlju izvedite jednostavan test petlje i držite vanjske petlje na njihovoj minimalnoj vrijednosti parametra iteracije
  3. Izvršite test za sljedeću petlju i radite prema van
  4. Nastavite dok se ne testira krajnja vanjska petlja.

Ulančane petlje

Spojene petlje nalaze se jedna za drugom u istom putu izvršavanja, kao što je prikazano na dijagramu.

Dijagram toka spojenih petlji koji prikazuje dvije petlje koje se izvršavaju u nizu

U spojenim petljama, ako su dvije petlje neovisne jedna od druge, tada se testiraju korištenjem pristupa jednostavne petlje, inače se testiraju kao ugniježđene petlje.

Međutim, ako se brojač petlji jedne petlje koristi kao početna vrijednost za drugu, dvije petlje se ne smatraju neovisnima.

Nestrukturirane petlje

Nestrukturirane petlje su najteži slučaj, jer kontrola ulazi i izlazi iz tijela petlje u proizvoljnim točkama.

Dijagram toka nestrukturirane petlje s kontrolnim skokomping ulazak i izlazak iz tijela petlje

Za nestrukturirane petlje, dizajn se mora restrukturirati kako bi odražavao upotrebu strukturiranih programskih konstrukata. Nakon što je kod sveden na jednostavne, ugniježđene ili spojene oblike, primjenjuje se gore navedena strategija podudaranja.

Primjer testiranja petlje s testnim slučajevima

Razrađeni primjer konkretizira broj iteracija. Razmotrimo rutinu koja množi tekući rezultat sa svakim cijelim brojem od 1 do n, faktorijalni izračun. Brojač petlje počinje od 1, uvjet izlaza je suprotstaviti > n, a petlja je deklarirana da prihvati maksimalno 12 prolaza prije nego rezultat pređe deklarirani cjelobrojni tip.

Tretirajući ovo kao jednostavnu petlju, gore preporučeni broj iteracija prevodi se u sljedeće test slučajevi.

Testni slučaj Vrijednost n Izvršena dodavanja Što to dokazuje
TC01 0 0 (petlja preskočena) Izlazni uvjet se procjenjuje prije izvršavanja tijela, a rezultat ostaje na svojoj inicijaliziranoj vrijednosti 1.
TC02 1 1 Jedan prolaz daje točan rezultat, a brojač se povećava jednom.
TC03 2 2 Akumulator prenosi vrijednost naprijed između dva uzastopna prolaza.
TC04 5 5 Tipično brojanje srednjeg raspona vraća očekivanih 120, što potvrđuje uobičajeno ponašanje.
TC05 11 11 Jedan prolaz ispod maksimuma i dalje se normalno završava (b-1.).
TC06 12 12 Deklarirani maksimum se prihvaća i petlja završava (b).
TC07 13 odbijen Jedan prolaz iznad maksimuma se odbija umjesto da tiho prelijeva (b+1).

Imajte na umu da su TC01 i TC07 dva slučaja koja programeri najčešće izostavljaju, a to su dva koja otkrivaju nedostatke preskočene inicijalizacije i prelijevanja. Negativna vrijednost n pripada istom skupu ako specifikacija dopušta da se navede, što povezuje testiranje petlje s negativno testiranje.

Uobičajeni nedostaci otkriveni testiranjem petlje

Testiranje petlje stalno pronalazi istu malu obitelj grešaka, što je ono što čini fiksni broj iteracija vrijednim pokretanja svaki put.

  • Granice koje odstupaju za jedan — uvjet koji se piše kao < gdje <= je bila namjera, pa se petlja izvršava za jedan prolaz premalo ili za jedan previše.
  • Neinicijalizirani brojači ili akumulatori — ukupan zbroj koji sadrži vrijednost preostalu iz prethodnog poziva.
  • Beskonačne petlje — izlazni uvjet koji tijelo petlje nikada ne može zadovoljiti jer se brojač ažurira samo na nekim granama.
  • Pretpostavke o preskočenoj petlji — kod nakon petlje koji čita varijablu koju se očekivalo da tijelo petlje postavi, a koji ne uspijeva kada se petlja izvrši nula puta.
  • Greške u kapacitetu i performansama — petlja koja je ispravna, ali ponovno čita bazu podataka u svakom prolazu, pa trošak raste s brojem iteracija.
  • Interferencija ugniježđene petlje — unutarnja petlja koja ponovno koristi brojač vanjske petlje i tiho mijenja broj vanjskih iteracija.

Budući da se svaka greška preslikava na određeni broj iteracija, nedostatke koji se ovdje pojavljuju lako je reproducirati i brzo popraviti u usporedbi s nedostacima pronađenim na većem razine testiranja.

Testiranje petlje u odnosu na druge tehnike testiranja kontrolnih struktura

Testiranje petlji je jedan član obitelji kontrolnih struktura i lako ga je zamijeniti sa susjednim tehnikama. Tablica u nastavku ih razdvaja.

Tehnika Na što cilja Tipičan cilj pokrivenosti
Testiranje petlje Konstrukcije petlji: ulaz, broj iteracija i izlaz Nula, jedna, tipična i granična iteracija za svaku petlju
Ispitivanje stanja Booleovi izrazi unutar odluka Svaki uvjet je procijenjen i kao istinit i kao neistinit
Testiranje protoka podataka Definicija i upotreba svake varijable Svaki par definicija-upotreba iskorišten je barem jednom
Testiranje osnovnog puta Neovisni putevi kroz graf toka upravljanja Broj putova jednak ciklomatskoj složenosti

U praksi se ove tehnike nadopunjuju, a ne natječu. Ciklomatska složenost govori vam koliko neovisnih puteva postoji, testiranje baznih puteva ih pokriva, a testiranje petlji zatim dodaje broj iteracija koje samo pokrivanje puteva ne bi prisililo. Svi oni su dinamičko testiranje aktivnosti, budući da se kod mora izvršiti da bi se rezultati vidjeli.

Ograničenje u testiranju petlje

Tehnika ima stvarna ograničenja, a njihovo poznavanje sprječava prekomjerno ulaganje.

  • Greške u petlji se uglavnom pojavljuju u softveru niske razine
  • Greške identificirane tijekom testiranja petlje nisu vrlo suptilne
  • Operativni sustav može otkriti mnoge greške jer uzrokuju kršenja granica memorije, pogreške pokazivača koje se mogu otkriti i slične greške.
  • Identificiranje klase svake petlje i njezino odgovarajuće testiranje oduzima vrijeme, što je teško opravdati na kodnim putevima koji nose mali rizik.

Pitanja i odgovori

Razvojni programeri i tehnički testeri s pristupom izvornom kodu, obično tijekom ispitivanje jedinice ili pregled koda. Poslovni testeri ga ne mogu primijeniti jer je uvjet petlje nevidljiv s korisničkog sučelja.

Model očitava uvjet petlje i automatski predlaže broj iteracija nula, jedan, tipičan i granični broj iteracija, uključujući slučaj prekoračenja. Preglednik i dalje potvrđuje da svaki očekivani rezultat odgovara specifikaciji.

Brzo ih izrađuje, budući da je obrazac iteracije formulaičan. Agentski asistenti također mogu pokrenuti paket i prijaviti koji brojevi ne uspijevaju, ali odlučivanje o maksimalnom dopuštenom broju prolazaka ostaje dizajnerska odluka koju čovjek posjeduje.

Pokrenite slučaj s vremenskim ograničenjem ili iteracijskim ograničenjem kako bi test brzo propao umjesto da se sustav zaustavi. Utvrdite na temelju broja zabilježenih prolazaka, a ne samo na temelju konačne izlazne vrijednosti.

Daleko manje nego u svakoj kombinaciji. Testiranje iznutra prema van održava brojanje otprilike aditivnim među razinama, a ne multiplikativnim, jer su vanjske petlje fiksirane na svojoj minimalnoj vrijednosti dok se unutarnja petlja izvršava.

Nijedan alat nije posvećen tome. Timovi kombiniraju okvir za testiranje jedinica kao što je JUnit ili pytest s alatom za pokrivenost koji izvještava o pokrivenosti grana, a zatim pročitajte izvješće kako biste potvrdili da je dosegnut put s nultom iteracijom.

Ne. Pokrivenost granama je zadovoljena kada se u petlju uđe i izađe jednom. Testiranje petlje dodatno zahtijeva preskočene prolaze i granična brojanja, što sama pokrivenost granama nikada ne prisiljava.

Kad god je nestrukturirano — kontrolni skokping u ili izvan tijela. Restrukturiranje u jednostavne, ugniježđene ili spojene oblike košta manje od dizajniranja testova za svaku nepravilnu ulaznu točku.

Sažmite ovu objavu uz: