Hvad er modultestning? Definition, eksempler
⚡ Smart opsummering
Modultestning kontrollerer individuelle underprogrammer, subrutiner, klasser og procedurer i stedet for det samlede program, så fejl dukker op i en lille, velforstået kodeblok, hvor de forbliver billige at finde og reparere.

Hvad er modultestning?
Modul test er en type softwaretest, der kontrollerer individuelle underprogrammer, subrutiner, klasser eller procedurer i et program. I stedet for at teste hele softwareprogrammet på én gang anbefaler modultest at teste programmets mindre byggesten.
Modultestning er i vid udstrækning orienteret mod en "white box". Formålet med modultestning er ikke at demonstrere modulets korrekte funktion, men at demonstrere tilstedeværelsen af en fejl i det. Denne inversion er vigtig: en kørsel, der ikke finder noget, har bekræftet meget lidt, hvorimod en kørsel, der afslører en defekt, har gjort sit job.
Testning på modulniveau muliggør også introduktion af parallelisme i testprocessen, fordi det skaber muligheden for at teste flere moduler samtidigt i stedet for at vente på en komplet build.
Hvorfor lave modultest
Modultestning anbefales, fordi det ændrer økonomien i fejldetektering.
- Sandsynligheden for at identificere fejl eller bugs i mindre dele af et program bliver højere.
- Flere moduler kan testes samtidigt, og tilgangen understøtter derfor parallel testning.
- Kompleksiteten af testning kan nemt håndteres, da hvert modul er ræsonneret for sig selv.
- En fejl fundet i ét modul er tracmulig med en lille mængde kode, så fejlfindingstiden falder kraftigt.
Hvordan laver man modultest?
Designe en test sag er det vigtige segment af modultestning. Når en tester designer testcases til en modultest, skal vedkommende tage to ting i betragtning.
- Specifikation for modulet
- Modulets kildekode
Analyser modulets logik ved hjælp af en eller flere af hvid boks metoder, og derefter supplere disse testcases ved at anvende black box metoder til modulspecifikationen. Realistiske værdier er lige så vigtige som de valgte stier, så forbered testdata ved siden af sagerne snarere end bagefter.
Når testcasene er designet, er næste trin at kombinere modulerne til testning. Den anvendte metode er enten en inkremental eller ikke-inkrementel fremgangsmåde.
- Ikke-inkrementel metode — alle moduler testes uafhængigt. Først kombineres alle modulerne og derefter tester hele programmet.
- Trinvis metode — hvert modul testes først og tilføjes derefter gradvist til den testede samling. Den udfører en trinvis gentest.
- Inden for inkrementel testning er der to tilgange, top down og bunden op testning.
- For at udføre modulet med de valgte data kræves der en driver til at levere testdata, overvåge udførelsen og registrere resultaterne.
Valget mellem de to metoder er et afvejningsmoment mellem opsætningsindsats og diagnosticerbarhed.
| Aspect | Trinvis metode | Ikke-inkrementel metode |
| Combination (Kombination) | Et modul ad gangen, tilføjet til en testet samling | Alle moduler kombineret og derefter testet sammen |
| Stillads nødvendig | Flere drivere og stubber, skrevet progressivt | Færre testdoblinger, da der er rigtige moduler til stede |
| Fejlisolation | Stærk — en fejl peger på det modul, der lige er tilføjet | Svag — en fejl kan opstå hvor som helst |
| Bedst egnet til | Store builds med mange interagerende moduler | Små programmer med få moduler og lav kobling |
Drivere og stubber i modultestning
Driveren nævnt ovenfor er den ene halvdel af et par. Da et modul under test sjældent sidder øverst eller nederst i kaldkæden, erstatter testere det, der mangler på hver side af det, med dummykode.
- Chauffør — erstatter det kaldende modul over det, der testes. Det leverer testdataene, kalder modulet, overvåger udførelsen og registrerer resultaterne. Bottom-up-testning afhænger af drivere, fordi de lavere moduler er klar før de højere.
- Stub — erstatter et kaldt modul under det, der testes. Den accepterer kaldet og returnerer et fast, kendt svar, så modulet under test kan fuldføre sin sti. Top-down-testning afhænger af stubs, fordi de højere moduler er klar først.
En bearbejdet case gør parringen konkret. Hvis et betalingsberegningsmodul er færdigt, mens den kasseskærm, der kalder det, ikke er det, giver en chauffør modulet et sæt ordretotaler og registrerer, hvad der kommer tilbage. Hvis den skatteopslagstjeneste, som modulet kalder, også er ufærdig, returnerer en stub en fast skattesats, så beregningen stadig kører. Ingen af stilladserne leveres; begge kasseres, når de rigtige moduler ankommer, hvilket er grunden til, at misforståelser af testfordoblinger senere opføres som en tilbagevendende udfordring.
Eksempeltips til modultestning
Her er et par tips, du bør overveje, inden du udfører modultestning.
- RevSe testcases, før du bruger dem.
- Undgå forvirring omkring kilden til uoverensstemmelser.
- Brug automatiserede testværktøjer.
- Undersøg variabler, der skal være uændrede.
- Byt moduler mellem testere for at undgå selvtest.
- Genbrug testcasesene.
Det femte tip har mere vægt, end dets længde antyder. En udvikler, der kun tester det modul, der lige er skrevet, gentager de samme antagelser, der skabte fejlen, så det at rotere moduler mellem personer er en af de billigste kvalitetsgevinster, der er tilgængelige.
Enhedstest vs modultest
De to udtryk bruges i flæng i mange teams, men forfatterskabet og omfanget er forskellige.
| Modul test | Enhedstest |
| Modultests er en samling af tests skrevet af en tester, efter at noget kode er blevet skrevet af en udvikler | Enhedstest er en samling af tests skrevet af en udvikler under softwareudviklingsprocessen |
| Modultestning kan involvere en kombination af enhedstestene | Enhedstestning kan teste enheder isoleret |
Modultest vs. komponenttest vs. integrationstest
Modultestning ligger også ved siden af to tilstødende niveauer, der er lette at forveksle med det. Tabellen adskiller dem efter, hvad der testes, og hvem der normalt udfører det.
| Aspect | Modul test | Komponentprøvning | Integrationstest |
| Under test | Et underprogram, en klasse eller en procedure | En selvstændig komponent med dens umiddelbare afhængigheder | Grænsefladerne mellem kombinerede moduler |
| Sædvanlig ejer | Tester, efter koden er skrevet | tester | Integrationstester |
| Stilladser | Chauffører og stubber | Stubbe til eksterne afhængigheder | Gradvist færre testdobler |
| Defekt eksponeret | Logisk fejl inde i modulet | Adfærdsfejl i komponenten | Grænseflade- og dataoverførselsfejl |
I daglig brug komponenttest og modultestning behandles ofte som den samme aktivitet, mens integrationstest begynder først, når de enkelte moduler hver især er bestået.
Udfordringer i modultestning
Det er disse udfordringer, som teams oftest møder, når modultestning introduceres.
- Ikke-trinvis test kræver mere arbejde — at kombinere alt først betyder, at en enkelt fejl kan sende testere tilbage gennem hele programmet.
- Misforståelse test fordobles — en stub, der returnerer en urealistisk værdi, producerer en grøn kørsel, der ikke beviser noget.
- Ofte fejlfinding af tests — scaffolding-kode bærer sine egne fejl, og tid brugt på at reparere en driver er tid, der ikke bruges på at teste modulet.
- Skal forstå koden — den hvide boks-orientering betyder, at en tester, der ikke kan læse modulet, ikke kan designe meningsfulde cases for det.
