Hva er negativ testing? Testtilfeller med eksempel
โก Smart oppsummering
Negativ testing sjekker hvordan et program oppfรธrer seg nรฅr det mottar uventede inndata eller driftsforhold, slik at produktet degraderes uten problemer i stedet for รฅ krasje, รธdelegge data eller avslรธre et sikkerhetshull.
Negativ testing
Negativ testing er en type programvaretesting som brukes til รฅ sjekke et program mot uventede inndata og -forhold. Uventede data eller forhold varierer fra feil datatype i et enkelt skjemafelt til et bevisst hackerangrep. Formรฅlet med negativ testing er รฅ forhindre at programmet krasjer ved ugyldig inndata og รฅ forbedre produktets kvalitet og stabilitet.
Positiv testing alene beviser bare at systemet fungerer under normale forhold. Negativ testing bekrefter at det samme systemet ogsรฅ hรฅndterer unormale forhold, noe som er det et feiltolerant produkt krever.
Eksempel pรฅ negativ testing
Et lรธft er eksemplet som oftest brukes for รฅ forklare negativ testing, fordi bรฅde dets normale oppfรธrsel og dets feiloppfรธrsel er enkle รฅ forestille seg.
Kravene til en heis er kjente: รฅ trykke pรฅ et etasjenummer sender heisen til den etasjen, og dรธren รฅpnes automatisk nรฅr heisen nรฅr den angitte etasjen.
Noen negative scenarier for samme รธkning er listet opp nedenfor, ved siden av antagelsen som positiv testing gjรธr i stedet.
| Negativ testing | Positiv testing |
|---|---|
| Hva skjer hvis antall personer (vekt) overskrider den angitte grensen? | Forutsetter at bare det angitte antallet personer vil gรฅ inn i heisen |
| Hva skjer hvis noen rรธyker eller forรฅrsaker brann inne i heisen? | Forutsetter at det ikke vil vรฆre rรธyk eller brann inne i heisen |
| Hva skjer hvis det oppstรฅr strรธmbrudd under drift? | Forutsetter at det ikke vil vรฆre strรธmbrudd mens heisen er i drift |
Alle disse tilfellene faller inn under negativ testing. Ingen av dem kan garanteres รฅ aldri skje, sรฅ hver enkelt mรฅ begrenses.
Anta at overvektstilstanden aldri blir kontrollert, og heisen oppfรธrer seg unormalt nรฅr den er overbelastet. Dette ene gapet skader systemets pรฅlitelighet og kan til og med sette liv i fare. Dette er hva negativ testing betyr i praksis, og hvorfor det er viktig.
Programvare oppfรธrer seg pรฅ samme mรฅte. En negativ test avviker bevisst fra den normale driftsprosedyren. Vurder et registreringsskjema.
| Negativ testing | Positiv testing |
|---|---|
| Skriv inn en ugyldig e-postadresse i e-postfeltet | Bare gyldige e-postadresser skrives inn i et e-postfelt |
| Skriv inn et ugyldig telefonnummer, for eksempel antall tegn, i et telefonnummerfelt | Bare tall skrives inn i tallfeltet |
| Last opp et bilde med en stรธrrelse utenfor den angitte grensen | Bare bilder innenfor den angitte stรธrrelsesgrensen lastes opp |
| Last opp ugyldige filer som f.eks. XML or SQL filer i et felt for bildeopplasting | Kun gyldige bildeformater som .jpg eller .png lastes opp |
Hvert av disse negative tilfellene mรฅ fortsatt fรธre til at systemet fungerer. Hvis et tegn skrives inn i et tallfelt, kan ikke applikasjonen behandle de uventede dataene den aldri forventet, og den kan krasje. Verre er det at en SQL-injeksjon streng i samme felt kan slette innholdet i databasen. Tap av denne typen er grunnen til at negativ testing forekommer.
Hvorfor utfรธre negativ testing?
Testing tar tid og penger, sรฅ det er viktig รฅ bestemme hva, hvordan og hvor mye man skal teste. Argumentene for รฅ bruke deler av budsjettet pรฅ negativ testing ser forskjellige ut fra de to sidene av et prosjekt.
Organisasjonsperspektiv
Det er organisasjonens ansvar รฅ levere et produkt av god kvalitet til kunden, og negativ testing er en del av denne forpliktelsen. Det er ogsรฅ organisasjonens bevis pรฅ at den gjorde alt som var rimelig for รฅ forhindre en feil, selv om ingen systemer er helt feilfrie.
Konsekvens er den avgjรธrende faktoren. Et netthandelsnettsted kan bestรฅ alle positive tester og fortsatt inneholde et smutthull som lar en angriper kjรธre en SQL-injeksjon og slette dataene bak den. Det er et alvorlig sikkerhetsbrudd, og bare negativ testing ser etter det.
Offentlige applikasjoner, spesielt nettsteder, gir nesten ingen kontroll over hvordan besรธkende bruker dem, sรฅ negativ testing er den eneste mรฅten รฅ bekrefte at uvanlig bruk er dekket og begrenset. Det samme gjelder ondsinnede brukere: angripere ser aktivt etter en mulighet til รฅ bryte et system, og hackingscenarier hรธrer helt hjemme i negativ testdekning.
Kundeperspektiv
Kunder forventer et produkt uten sรฅrbarheter, og negativ testing er det som stรธtter denne forventningen. For sensitive produkter som e-handel eller aksjehandel pรฅ nett, sikkerhetstesting og negativ testing er obligatorisk snarere enn valgfri.
Klientens eneste reelle bekymring er kostnaden. Nรฅr konsekvensene av en feil er analysert, er klienten i posisjon til รฅ bestemme hvor langt den negative testinnsatsen skal gรฅ.
Slik utfรธrer du negativ testing
Negativ testing starter med รฅ vurdere alle inputene applikasjonen fysisk kan motta, ikke bare inputene den skal motta. Hver av disse hรธrer hjemme i en Testsak selv nรฅr det รฅpenbart er feil mรฅte รฅ bruke funksjonen pรฅ. Et e-postfelt testes med alt som ikke er en gyldig e-postadresse, og en bildeopplastingskontroll testes med alle filtyper som ikke er et bilde.
Listen over mulige ugyldige input er i praksis uendelig, sรฅ negative testtilfeller mรฅ prioriteres. For et bildefelt som bare godtar .png-filer, inkluderer kandidatopplastinger .jpeg, .xml, .xls og mange andre. En XML- eller SQL-fil har en langt stรธrre potensiell innvirkning enn en .jpeg, sรฅ disse tilfellene kjรธres fรธrst. Rangering av tilfeller etter innvirkning fรธr utfรธrelse er det som gjรธr negativ testing rimelig.
De fleste negative testtilfeller kommer fra et lite sett med etablerte designteknikker snarere enn fra improvisasjon:
- Grenseverdier: Utfรธr verdiene rett utenfor et gyldig omrรฅde, for eksempel 0 og 101 for et felt som godtar 1 til 100.
- Ugyldige ekvivalensklasser: velg รฉn representant fra hver klasse av avviste inndata, for eksempel bokstaver i et numerisk felt.
- Feil ved gjetning: bruk erfaring fra tidligere feil til รฅ mรฅlrette inndataene som mest sannsynlig vil รธdelegge denne typen funksjoner.
- Feilformede og fiendtlige data: skriptkoder, SQL-fragmenter og overdimensjonerte nyttelaster som undersรธker validering og sikkerhetshรฅndtering.
- Fuzz-testing: generere store mengder tilfeldig eller mutert input automatisk for รฅ finne ubehandlede krasj.
- Avbrutte strรธmninger: avbryte, oppdatere, fรฅ tidsavbrudd eller miste tilkoblingen midt i en transaksjon.
Uansett hvilken teknikk som produserer tilfellet, mรฅ det forventede resultatet skrives ned som en kontrollert, lesbar feil โ en valideringsmelding, en avvist opplasting, en ren tilbakerulling โ og aldri bare som ยซsystemet krasjer ikkeยป.
Fordeler og ulemper med negativ testing
Som alle andre testteknikker har negativ testing fordeler og ulemper som avhenger av hvor, nรฅr og hvor mye den brukes.
Fordeler med negativ testing
- Det beskytter produktkvaliteten direkte, fordi et produkt av god kvalitet er et uten utnyttbare sรฅrbarheter.
- Det utvider dekningen. Ugyldig inndata nรฅr et aktivt system med vilje eller ved et uhell, sรฅ negative tilfeller mรฅ kjรธre side om side med positive for at dekningen skal vรฆre meningsfull.
- Det รธker kundens tillit fรธr en utgivelse publiseres.
- Den avdekker feil som positiv testing strukturelt ikke kan nรฅ, for eksempel uhรฅndterte unntak og svak inputvalidering.
Ulemper med negativ testing
- I noen situasjoner er det bortkastet tid og energi. Hvis en applikasjon er bygget for รฉn bruker, er det ikke verdt รฅ teste tilfellet med 100 samtidige brukere, sรฅ det er viktig รฅ velge de riktige betingelsene, og noen systemer trenger svรฆrt lite negativ testing i det hele tatt.
- Det krever dyktige og erfarne folk til รฅ utforme sakene.
- Fra klientens synspunkt รธker det kostnadene og kan forsinke utgivelsen.
- Det konkurreres om innsats. Et team som bruker mye penger pรฅ negativ testing kan ende opp med รฅ underinvestere i positiv testing.
