Hva er modultesting? Definisjon, eksempler

โšก Smart oppsummering

Modultesting sjekker individuelle delprogrammer, subrutiner, klasser og prosedyrer i stedet for det samlede programmet, slik at feil dukker opp i en liten, godt forstรฅtt kodeblokk hvor de fortsatt er billige รฅ finne og reparere.

  • ๐ŸŽฏ Mรฅlet: Mรฅlet er รฅ avdekke feil i en modul, ikke รฅ demonstrere at modulen fungerer.
  • โšช Orientering: Teknikken er i stor grad hvit boks, supplert med svarte boks-tilfeller hentet fra spesifikasjonen.
  • โฉ parallellitet: Flere moduler kan testes samtidig, noe som forkorter det totale testvinduet.
  • ๐Ÿ”— To metoder: Moduler kombineres enten trinnvis, trinnvis eller ikke-trinnvis i รฉn omgang.
  • ๐Ÿงฐ Stillas: Drivere leverer testdata til en modul, mens stubber erstatter modulene den kaller.
  • ๐Ÿ†š Eie: Testere skriver modultester etter koding, mens utviklere skriver enhetstester underveis.
  • โš ๏ธ utfordringer: Ikke-inkrementelt arbeid, misforstรฅtte testdublinger og hyppig feilsรธking tar opp mesteparten av innsatsen.

Modultesting forklart med metoder, drivere, stubber og sammenligninger

Hva er modultesting?

Modultesting er en type programvaretesting som sjekker individuelle delprogrammer, subrutiner, klasser eller prosedyrer i et program. I stedet for รฅ teste hele programvaren samtidig, anbefaler modultesting รฅ teste programmets mindre byggesteiner.

Modultesting er i stor grad hvitboksorientert. Mรฅlet med modultesting er ikke รฅ demonstrere at modulen fungerer som den skal, men รฅ demonstrere tilstedevรฆrelsen av en feil i den. Denne inversjonen er viktig: en kjรธring som ikke finner noe har bekreftet svรฆrt lite, mens en kjรธring som avslรธrer en feil har gjort jobben sin.

Modulnivรฅtesting tillater ogsรฅ at parallellisme introduseres i testprosessen, fordi det skaper muligheten til รฅ teste flere moduler samtidig i stedet for รฅ vente pรฅ en komplett bygging.

Hvorfor gjรธre modultesting

Modultesting anbefales fordi det endrer รธkonomien ved feildeteksjon.

  • Sannsynligheten for รฅ identifisere feil eller bugs i mindre deler av et program blir hรธyere.
  • Flere moduler kan testes samtidig, og tilnรฆrmingen stรธtter derfor parallell testing.
  • Kompleksiteten i testingen kan hรฅndteres enkelt, siden hver modul resonneres for seg selv.
  • En feil funnet inne i รฉn modul er tractilgjengelig for en liten mengde kode, slik at feilsรธkingstiden reduseres kraftig.

Hvordan utfรธre modultesting?

Designe en testforsรธk er det viktige segmentet av modultesting. Nรฅr en tester utformer testtilfeller for en modultest, mรฅ vedkommende ta hensyn til to ting.

  • Spesifikasjon for modulen
  • Modulens kildekode

Analyser modulens logikk ved รฅ bruke ett eller flere av hvit boks metoder, og deretter supplere disse testtilfellene ved รฅ bruke svart boks metoder til modulspesifikasjonen. Realistiske verdier er like viktige som de valgte stiene, sรฅ forbered testdata ved siden av sakene heller enn etterpรฅ.

Nรฅr testtilfellene er utformet, er neste trinn รฅ kombinere modulene for testing. Metoden som brukes er enten en inkrementell eller ikke-inkrementell metoden.

  • Ikke-inkrementell metode โ€” alle moduler testes uavhengig. Fรธrst kombineres alle modulene og deretter tester hele programmet.
  • Inkrementell metode โ€” hver modul testes fรธrst og legges deretter gradvis til den testede samlingen. Den utfรธrer en trinnvis ny testing.
  • Innenfor trinnvis testing finnes det to tilnรฆrminger, topp ned og nede opp testing.
  • For รฅ kjรธre modulen med de valgte dataene, kreves det en driver for รฅ levere testdataene, overvรฅke utfรธrelsen og registrere resultatene.

Valget mellom de to metodene er en avveining mellom oppsettinnsats og diagnostiserbarhet.

Aspekt Inkrementell metode Ikke-inkrementell metode
Kombinasjon ร‰n modul om gangen, lagt til i en testet samling Alle moduler kombinert, deretter testet sammen
Stillas nรธdvendig Flere drivere og stubber, skrevet progressivt Fรฆrre testdobler, siden ekte moduler er til stede
Feilsรธking Sterk โ€” en feil peker pรฅ modulen som nettopp ble lagt til Svak โ€“ en feil kan oppstรฅ hvor som helst
Passer best til Store bygg med mange samvirkende moduler Smรฅ programmer med fรฅ moduler og lav kobling

Drivere og stubber i modultesting

Driveren nevnt ovenfor er den ene halvdelen av et par. Fordi en modul under test sjelden sitter รธverst eller nederst i anropskjeden, erstatter testere det som mangler pรฅ hver side av den med dummykode.

  • Driver โ€” erstatter den kallende modulen over den som testes. Den leverer testdataene, kaller modulen, overvรฅker utfรธrelsen og registrerer resultatene. Bottom-up-testing er avhengig av drivere, fordi de lavere modulene er klare fรธr de hรธyere.
  • stub โ€” erstatter en kalt modul under den som testes. Den aksepterer kallet og returnerer et fast, kjent svar slik at modulen som testes kan fullfรธre banen sin. Top-down-testing er avhengig av stubber, fordi de hรธyere modulene er klare fรธrst.

Et bearbeidet tilfelle gjรธr sammenkoblingen konkret. Hvis en betalingsberegningsmodul er ferdig mens kasseskjermen som kaller den ikke er det, mater en sjรฅfรธr modulen et sett med ordretotaler og registrerer hva som kommer tilbake. Hvis skatteoppslagstjenesten som modulen kaller ogsรฅ er uferdig, returnerer en stub en fast skattesats, slik at beregningen fortsatt kjรธrer. Ingen av stillasdelene leveres; begge forkastes nรฅr de virkelige modulene ankommer, og det er derfor misforstรฅelser av testdobler blir oppfรธrt senere som en tilbakevendende utfordring.

Eksempeltips for modultesting

Her er noen tips du bรธr vurdere fรธr du utfรธrer modulesting.

  • RevSe testtilfeller fรธr du bruker dem.
  • Unngรฅ forvirring rundt kilden til avvikene.
  • Bruk automatiserte testverktรธy.
  • Undersรธk variabler som skal vรฆre uendret.
  • Bytt moduler mellom testere for รฅ unngรฅ selvtester.
  • Bruk testtilfellene pรฅ nytt.

Det femte tipset har mer vekt enn lengden antyder. En utvikler som bare tester modulen som nettopp er skrevet, gjentar de samme antagelsene som forรฅrsaket feilen, sรฅ det รฅ rotere moduler mellom folk er en av de billigste kvalitetsgevinstene som er tilgjengelige.

Enhetstesting vs modultesting

De to begrepene brukes om hverandre i mange team, men forfatterskapet og omfanget er forskjellige.

Modultesting Enhetstesting
Modultester er en samling tester skrevet av en tester etter at noe kode er skrevet av en utvikler Enhetstester er en samling tester skrevet av en utvikler under programvareutviklingsprosessen
Modultesting kan innebรฆre รฅ kombinere enhetstestene Enhetstesting kan teste enheter isolert

Modultesting vs. komponenttesting vs. integrasjonstesting

Modultesting ligger ogsรฅ ved siden av to tilstรธtende nivรฅer som er lette รฅ forveksle med. Tabellen skiller dem etter hva som testes og hvem som vanligvis utfรธrer det.

Aspekt Modultesting Komponenttesting Integrasjonstesting
Under testing Ett delprogram, en klasse eller en prosedyre En selvstendig komponent med sine umiddelbare avhengigheter Grensesnittene mellom kombinerte moduler
Vanlig eier Tester, etter at koden er skrevet tester Integrasjonstester
stillas Drivere og stubber Stubber for eksterne avhengigheter Gradvis fรฆrre testdobler
Feil eksponert Logikkfeil inne i modulen Oppfรธrselsfeil i komponenten Grensesnitt- og dataoverfรธringsfeil

I daglig bruk komponenttesting og modultesting blir ofte behandlet som den samme aktiviteten, mens integrasjonstesting starter fรธrst nรฅr de enkelte modulene er bestรฅtt hver for seg.

Utfordringer i modultesting

Dette er utfordringene team mรธter oftest nรฅr modultesting introduseres.

  • Ikke-inkrementell testing krever mer arbeid โ€“ รฅ kombinere alt fรธrst betyr at รฉn enkelt feil kan sende testere tilbake gjennom hele programmet.
  • Misforstรฅelse test dobles โ€” en stubb som returnerer en urealistisk verdi produserer en grรธnn lรธp som ikke beviser noe.
  • Feilsรธking av tester ofte โ€” stillaskode har sine egne feil, og tid brukt pรฅ รฅ fikse en driver er tid som ikke brukes pรฅ รฅ teste modulen.
  • Trenger รฅ forstรฅ koden โ€” den hvite boksorienteringen betyr at en tester som ikke kan lese modulen, ikke kan designe meningsfulle tilfeller for den.

Spรธrsmรฅl og svar

xUnit-familien dekker de fleste sprรฅk, med mocking-biblioteker som leverer stubber og et dekningsverktรธy som viser hvilke stier som ble nรฅdd. Valget fรธlger modulens sprรฅk, ikke testnivรฅet.

En modell leser modulkilden, lister opp grenene og foreslรฅr et tilfelle for hver, inkludert grenseverdier som en manuell gjennomgang ofte overser. Revview er fortsatt nรธdvendig, fordi genererte tilfeller hevder hva koden gjรธr snarere enn hva spesifikasjonen krever.

Ja, og det er ved hjelp av stillasering at slike assistenter fungerer best, siden en driver eller stub er repeterende kode med en kjent form. De returnerte verdiene trenger fortsatt en menneskelig avgjรธrelse, fordi en plausibel stub kan skjule selve feilen som jaktes pรฅ.

Nok til at hver gren og hver grense i modulen har blitt utรธvd minst รฉn gang. Et prosentmรฅl alene er misvisende, fordi hรธy dekning av utsagn fortsatt kan fรธre til at hele beslutningsutfall blir uutprรธvd.

Etter at en modul kompileres og fรธr grensesnittene testes sammen. Dette er det fรธrste testnivรฅet som brukes pรฅ levert kode, og det er derfor feil som oppdages her aldri nรฅr integrasjons- eller systemstadiene.

Fรธlg koden som finnes. Top-down passer til prosjekter der kontrolllogikken skrives fรธrst og nedre moduler stubbes; bottom-up passer til prosjekter der verktรธymoduler lander fรธrst og drivere kaller dem.

Modulen kompilerer uten problemer, spesifikasjonen er tilgjengelig, avhengighetene er enten tilstede eller stubbet, og testdataene er klare. ร… starte uten spesifikasjonen gjรธr รธvelsen til en beskrivelse av koden.

Testing kan aldri bevise at en modul ikke har noen defekter, bare at den overlevde de tilfellene som ble prรธvd. ร… designe kjรธringer som forsรธker รฅ รธdelegge modulen returnerer derfor mer informasjon enn รฅ designe kjรธringer som forventes รฅ bestรฅ.

Oppsummer dette innlegget med: