Hva er looptesting? Metodikk, eksempel
โก Smart oppsummering
Loop Testing validerer lรธkkekonstruksjonene i et program, og sjekker hva som skjer nรฅr en lรธkke hoppes over, startes รฉn gang, kjรธres ved grensen og skyves ett pass utover det maksimalt tillatte antallet.
Hva er looptesting?
Slรธyfetesting er en type programvaretesting som fokuserer utelukkende pรฅ gyldigheten av lรธkkekonstruksjonene i et program. Det er en del av testing av kontrollstrukturer, ved siden av stitesting, datavalideringstesting og tilstandstesting.
Slรธyfetesting er en testing av hvit boks teknikken, slik at den brukes av noen som kan lese kildekoden og se lรธkkebetingelsen, telleren og utgangsveien. Testeren gjetter ikke pรฅ oppfรธrselen fra brukergrensesnittet; selve lรธkken er objektet som testes.
Diagrammet nedenfor viser hvor lรธkketesting befinner seg innenfor testfamilien for kontrollstrukturer.
Typer slรธyfe Testet
Fรธr du velger en strategi, identifiser hvilken av de fire lรธkkeklassene du ser pรฅ. Eksempler pรฅ lรธkketyper som testes er:
- Enkel lรธkke โ en enkelt slรธyfe med รฉn inngang og รฉn utgang, for eksempel en vanlig forum, mens or gjรธr mens konstruere.
- Nestet lรธkke โ รฉn lรธkke plassert inni en annen, slik at den indre lรธkken fullfรธres for hver passering av den ytre lรธkken.
- Sammenhengende lรธkke โ to eller flere lรธkker som gรฅr etter hverandre i rekkefรธlge.
- Ustrukturert slรธyfe โ en uplanlagt kombinasjon av nestede og sammenkoblede lรธkker, vanligvis et resultat av hopp inn i eller ut av en lรธkkekropp.
Klassen bestemmer innsatsen. En enkel lรธkke trenger en hรฅndfull iterasjonsantall; en ustrukturert lรธkke trenger vanligvis at koden redesignes fรธr den i det hele tatt kan testes.
Hvorfor utfรธre slรธyfetesting?
Slรธyfetesting utfรธres av fรธlgende รฅrsaker
- Testing kan fikse problemene med loop-repetisjon
- Looptesting kan avdekke flaskehalser i ytelse og kapasitet
- Ved รฅ teste lรธkker kan de uinitialiserte variablene i lรธkken bestemmes
- Det hjelper med รฅ identifisere problemer med lรธkkeinitialisering.
Det finnes ogsรฅ en kommersiell grunn. En lรธkke som kjรธrer รฉn iterasjon for mye, รธdelegger en total; en lรธkke som aldri avsluttes, henger en prosess. Begge feilene er billige รฅ finne mens koden fortsatt er pรฅ en utviklermaskin, og dyre รฅ finne i produksjon.
Slik utfรธrer du slรธyfetesting: Komplett metodikk
Nรฅr man tester en lรธkke, mรฅ den kontrolleres pรฅ tre forskjellige nivรฅer:
- Nรฅr lรธkken er inngรฅtt
- Under utfรธrelsen, og
- Nรฅr lรธkken er igjen
Teststrategien for alle disse lรธkkene er som fรธlger.
Enkel lรธkke
En enkel lรธkke har รฉn inngang og รฉn utgang, som vist nedenfor.
En enkel slรธyfe testes pรฅ fรธlgende mรฅte:
- Hopp over hele lรธkken
- Gjรธr 1 pass gjennom lรธkken
- Gjรธr 2 passeringer gjennom lรธkken
- Lage a gรฅr gjennom lรธkken der a < b, det er et typisk iterasjonstall i mellomklassen
- Lage b, b-1 og b+1 gรฅr gjennom lรธkken der b er det maksimale antallet tillatte passeringer gjennom lรธkken.
De to siste sakene har mest verdi. Hopp overping lรธkken beviser at utgangsbetingelsen evalueres fรธr kroppen kjรธrer, og b+1 tilfelle beviser at lรธkken nekter arbeid utover den deklarerte grensen i stedet for รฅ overkjรธre en array.
Nestet lรธkke
En nestet lรธkke multipliserer antallet mulige iterasjonskombinasjoner, slik at den testes fra innsiden og ut i stedet for alt pรฅ en gang.
For en nestet lรธkke mรฅ du fรธlge fรธlgende trinn.
- Sett alle de andre lรธkkene til minimumsverdien og start ved den innerste lรธkken
- For den innerste slรธyfen, utfรธr en enkel slรธyfetest og hold de ytre lรธkkene ved deres minste iterasjonsparameterverdi
- Utfรธr testen for neste lรธkke og arbeid deg utover
- Fortsett til den ytterste lรธkken er testet.
Sammenhengte lรธkker
Sammenkoblede lรธkker sitter etter hverandre i samme utfรธrelsesbane, som diagrammet viser.
I sammenkoblede lรธkker, hvis to lรธkker er uavhengige av hverandre, testes de ved hjelp av den enkle lรธkketilnรฆrmingen, ellers testes de som nestede lรธkker.
Men hvis lรธkketelleren for รฉn lรธkke brukes som startverdi for den andre, regnes ikke de to lรธkkene som uavhengige.
Ustrukturerte lรธkker
Ustrukturerte lรธkker er det vanskeligste tilfellet, fordi kontroll hopper inn og ut av lรธkkekroppen pรฅ vilkรฅrlige punkter.
For ustrukturerte lรธkker mรฅ designet omstruktureres for รฅ gjenspeile bruken av strukturerte programmeringskonstruksjoner. Nรฅr koden er redusert til enkle, nestede eller sammenkoblede former, gjelder matchingstrategien ovenfor.
Eksempel pรฅ lรธkketesting med testtilfeller
Et utarbeidet eksempel gjรธr iterasjonstellingene konkrete. Tenk deg en rutine som multipliserer et lรธpende resultat med hvert heltall fra 1 til n, en faktorberegning. Lรธkketelleren starter pรฅ 1, utgangsbetingelsen er disk > n, og lรธkken er deklarert til รฅ godta maksimalt 12 passeringer fรธr resultatet overflyter den deklarerte heltallstypen.
Hvis vi behandler dette som en enkel lรธkke, oversettes iterasjonstallene som er anbefalt ovenfor til fรธlgende test tilfeller.
| Test tilfelle | Verdien av n | Utfรธrte pasninger | Hva det beviser |
| TC01 | 0 | 0 (lรธkke hoppet over) | Utgangsbetingelsen evalueres fรธr kroppen kjรธrer, og resultatet forblir pรฅ den initialiserte verdien pรฅ 1. |
| TC02 | 1 | 1 | รn enkelt omgang gir riktig resultat, og telleren รธker รฉn gang. |
| TC03 | 2 | 2 | Akkumulatoren overfรธrer en verdi fremover mellom to pรฅfรธlgende omganger. |
| TC04 | 5 | 5 | En typisk telling i mellomomrรฅdet returnerer forventede 120, noe som bekrefter vanlig oppfรธrsel. |
| TC05 | 11 | 11 | รn omgang under maksimumet fullfรธres fortsatt normalt (b-1.). |
| TC06 | 12 | 12 | Det deklarerte maksimumet aksepteres, og lรธkken avsluttes (b). |
| TC07 | 13 | avvist | รn passering utover maksimumet blir nektet i stedet for รฅ overlรธpe stille (b+ 1). |
Legg merke til at TC01 og TC07 er de to tilfellene utviklere oftest utelater, og det er de to som eksponerer feil ved hoppet initialisering og overlรธp. En negativ verdi pรฅ n hรธrer hjemme i samme sett hvis spesifikasjonen tillater det, som kobler lรธkketesting til negativ testing.
Vanlige feil funnet ved lรธkketesting
Looptesting finner stadig den samme lille familien av feil, og det er det som gjรธr de faste iterasjonstellingene verdt รฅ kjรธre hver gang.
- Avgrensninger โ en betingelse skrevet som < hvor <= var ment, sรฅ lรธkken kjรธrer รฉn omgang for fรฅ eller รฉn for mange.
- Uinitialiserte tellere eller akkumulatorer โ en totalsum som inneholder en verdi som er igjen fra et tidligere anrop.
- Uendelige lรธkker โ en utgangsbetingelse som lรธkkekroppen aldri kan oppfylle fordi telleren bare oppdateres pรฅ noen grener.
- Forutsetninger om hoppet over slรธyfer โ kode etter lรธkken som leser en variabel som lรธkkeinnholdet var forventet รฅ sette, som mislykkes nรฅr lรธkken kjรธres null ganger.
- Kapasitets- og ytelsesfeil โ en lรธkke som er korrekt, men som leser databasen pรฅ nytt ved hver passering, slik at kostnaden vokser med iterasjonsantallet.
- Nestet slรธyfeinterferens โ en indre lรธkke som gjenbruker den ytre lรธkketelleren og stille endrer den ytre iterasjonstelleren.
Fordi hver feil er knyttet til et spesifikt antall iterasjoner, er feilene som dukker opp her enkle รฅ reprodusere og raske รฅ fikse sammenlignet med feil som finnes ved hรธyere testnivรฅer.
Looptesting vs. andre testteknikker for kontrollstrukturer
Looptesting er et medlem av kontrollstrukturfamilien, og det er lett รฅ forveksle med de nรฆrliggende teknikkene. Tabellen nedenfor skiller dem.
| Teknikk | Hva den retter seg mot | Typisk dekningsmรฅl |
| Slรธyfetesting | Loopkonstruksjoner: inngang, iterasjonstelling og utgang | Null-, รฉn-, typisk- og grenseiterasjonstellinger for hver lรธkke |
| Tilstandstesting | Boolske uttrykk i beslutninger | Hver betingelse evaluerte bรฅde sant og usant |
| Dataflyttesting | Definisjon og bruk av hver variabel | Hvert definisjonspar som skal brukes, utรธves minst รฉn gang |
| Basissti-testing | Uavhengige baner gjennom kontrollflytgrafen | Et antall stier lik den syklomatiske kompleksiteten |
I praksis er disse teknikkene komplementรฆre snarere enn konkurrerende. Syklomatisk kompleksitet forteller deg hvor mange uavhengige stier som finnes, basisstitesting dekker dem, og lรธkketesting legger deretter til iterasjonstallene som stidekning alene ikke ville tvinge frem. Alle er dynamisk testing aktiviteter, siden koden mรฅ kjรธres for at resultatene skal kunne observeres.
Begrensning i slรธyfetesting
Teknikken har reelle grenser, og det รฅ kjenne dem forhindrer overinvestering.
- Slรธyfefeil vises for det meste i programvare pรฅ lavt nivรฅ
- Feilene som er identifisert under loop-testing er ikke veldig subtile
- Mange av feilene kan oppdages av operativsystemet, ettersom de forรฅrsaker brudd pรฅ minnegrenser, oppdagelige pekerfeil og lignende feil.
- Det koster tid รฅ identifisere klassen til hver lรธkke og teste den deretter, noe som er vanskelig รฅ rettferdiggjรธre pรฅ kodestier som medfรธrer liten risiko.





