Mi az a negatív teszt? Tesztesetek példával

⚡ Okos összefoglaló

A negatív tesztelés azt vizsgálja, hogy egy szoftveralkalmazás hogyan viselkedik váratlan bemeneti adatok vagy működési feltételek esetén, így a termék szabályosan lebomlik ahelyett, hogy összeomlana, adatokat rongálna vagy biztonsági rést fedne fel.

  • ???? Cél: Győződjön meg arról, hogy az alkalmazás hibátlanul utasítja el az érvénytelen adatokat a hiba vagy az összeomlás helyett.
  • 🇧🇷 Kontraszt: A pozitív teszt a boldog utat bizonyítja; a negatív teszt mindent megvizsgál, ami azon kívül esik.
  • 🛗 Analógia: Egy felvonónak túlterhelést, tüzet és áramkimaradást is ki kell bírnia, nem csak a normál utasforgalmat.
  • 🔒 Biztonság: Az érvénytelen feltöltések és az SQL-befecskendezési kísérletek klasszikus negatív tesztforgatókönyvek.
  • 🧪 Design: A határértékek, az ekvivalenciaosztályok, a hibakeresés és a fuzzing generálják az eseteket.
  • 📊 Prioritás: Rangsorolja az érvénytelen bemeneteket hatás szerint, mert a kimerítő negatív lefedettség megfizethetetlen.
  • ⚠️ Kompromisszum: A túlzott negatív tesztelés felemészti a költségvetést, így a pozitív lefedettséghez többre lehet szükség.

Negatív tesztelés szoftvertesztelésben érvénytelen bemeneti példákkal

Negatív tesztelés

Negatív tesztelés egy szoftvertesztelési típus, amelyet egy szoftveralkalmazás váratlan bemeneti adatokkal és feltételekkel szembeni ellenőrzésére használnak. A váratlan adatok vagy feltételek az egyszerű űrlapmezőben található helytelen adattípustól a szándékos hackertámadásig terjedhetnek. A negatív tesztelés célja, hogy megakadályozza az alkalmazás érvénytelen bemenet miatti összeomlását, valamint javítsa a termék minőségét és stabilitását.

A pozitív tesztelés önmagában csak azt bizonyítja, hogy a rendszer normál körülmények között működik. A negatív tesztelés megerősíti, hogy ugyanaz a rendszer a rendellenes körülményeket is kezeli, ami egy hibatűrő termékhez elengedhetetlen.

Példa negatív tesztelésre

A negatív tesztelés magyarázatára leggyakrabban az emelőt használják, mivel mind a normál, mind a meghibásodási viselkedése könnyen elképzelhető.

A liftek követelményei ismerősek: egy emeletszám megnyomásával a lift az adott emeletre jut, és az ajtó automatikusan kinyílik, amint a lift eléri a megadott emeletet.

Az alábbiakban felsorolunk néhány negatív forgatókönyvet ugyanarra az emelkedésre, a pozitív tesztelés mellett, amelyet ehelyett feltételezünk.

Negatív tesztelés Pozitív tesztelés
Mi történik, ha a személyek száma (súly) meghaladja a megadott határértéket? Feltételezi, hogy csak a megadott számú személy száll be a liftbe
Mi történik, ha valaki dohányzik vagy tüzet okoz a liftben? Feltételezi, hogy nem lesz füst vagy tűz a liftben
Mi történik, ha működés közben áramkimaradás történik? Feltételezi, hogy a lift működése közben nem lesz áramkimaradás.

Mindezek az esetek negatív teszteredményűek. Egyikre sem garantálható, hogy soha nem fog bekövetkezni, ezért mindegyiket meg kell fékezni.

Tegyük fel, hogy a túlterhelési állapotot soha nem ellenőrzik, és a felvonó rendellenesen viselkedik, ha túlterhelik. Ez az egyetlen rés károsítja a rendszer megbízhatóságát, és akár életet is veszélyeztethet. Ezt jelenti a negatív tesztelés a gyakorlatban, és miért fontos.

A szoftverek ugyanígy viselkednek. A negatív teszt szándékosan eltér a normál működési eljárástól. Vegyünk például egy regisztrációs űrlapot.

Negatív tesztelés Pozitív tesztelés
Érvénytelen e-mail címet adjon meg az e-mail mezőben Csak érvényes e-mail címeket adjon meg az e-mail mezőben
Érvénytelen telefonszámot, például karaktereket írjon be a telefonszám mezőbe Csak számokat kell beírni a szám mezőbe
Töltsön fel egy képet, amelynek mérete kívül esik a megadott határon Csak a megadott mérethatáron belüli képek kerülnek feltöltésre
Töltsön fel érvénytelen fájlokat, például XML or SQL fájlok egy képfeltöltési mezőben Csak érvényes képformátumok, például .jpg vagy .png kerülnek feltöltésre.

Ezen negatív esetek mindegyikének működőképesnek kell lennie a rendszernek. Ha egy karaktert beírunk egy számmezőbe, az alkalmazás nem tudja feldolgozni a váratlan, soha nem várt adatokat, és összeomolhat. Ami még rosszabb, egy SQL injektálás karakterlánc ugyanabban a mezőben törölheti az adatbázis tartalmát. Az ilyen jellegű veszteségek az okai a negatív tesztelésnek.

Miért végezzünk negatív tesztet?

A tesztelés időt és pénzt emészt fel, ezért fontos eldönteni, hogy mit, hogyan és mennyit teszteljünk. A költségvetés egy részének negatív tesztelésre való költése a projekt két oldaláról nézve másképp néz ki.

Szervezeti perspektíva

A szervezet felelőssége, hogy jó minőségű terméket szállítson az ügyfélnek, és a negatív tesztelés ennek a kötelezettségnek a része. Ez egyben a szervezet bizonyítéka is arra, hogy mindent megtett a hibák megelőzése érdekében, még akkor is, ha egyetlen rendszer sem teljesen hibamentes.

A hatás a döntő tényező. Egy e-kereskedelmi webhely átmehet minden pozitív teszten, és mégis tartalmazhat egy kiskaput, amely lehetővé teszi a támadó számára, hogy SQL-injekciót futtasson, és törölje a mögötte lévő adatokat. Ez egy súlyos biztonsági rés, és csak a negatív tesztek keresik.

A nyilvános alkalmazások, különösen a weboldalak, szinte semmilyen kontrollt nem kínálnak a látogatók használati szokásai felett, így a negatív tesztelés az egyetlen módja annak, hogy megerősítsük, hogy a szokatlan használatot lefedik és korlátozzák. Ugyanez vonatkozik a rosszindulatú felhasználókra is: a támadók aktívan keresik a lehetőséget a rendszer feltörésére, és a hackelési forgatókönyvek egyértelműen a negatív tesztek lefedettségébe tartoznak.

Ügyfél nézőpontja

Az ügyfelek olyan terméket várnak el, amely nulla sebezhetőséggel rendelkezik, és a negatív tesztelés az, ami alátámasztja ezt az elvárást. Az olyan érzékeny termékek esetében, mint az e-kereskedelem vagy az online részvénykereskedés, biztonsági tesztelés és a negatív tesztelés kötelező, nem pedig opcionális.

Az ügyfél egyetlen valódi aggodalma a költség. Miután a hiba hatását elemezték, az ügyfél eldöntheti, hogy milyen messzire menjen a negatív tesztelés.

Hogyan kell negatív tesztet végezni

A negatív tesztelés azzal kezdődik, hogy az alkalmazás által fizikailag fogadható összes bemenetet figyelembe vesszük, nem csak azokat, amelyeket fogadnia kellene. Mindegyik bemenet egy adott csoportba tartozik. Teszt eset még akkor is, ha nyilvánvalóan ez a funkció használatának helytelen módja. Egy e-mail mezőt minden olyan adattal tesztelünk, ami nem érvényes e-mail cím, egy képfeltöltési vezérlőt pedig minden olyan fájltípussal tesztelünk, ami nem kép.

A lehetséges érvénytelen bemenetek listája gyakorlatilag végtelen, ezért a negatív teszteseteket rangsorolni kell. Egy olyan képmező esetében, amely csak .png fájlokat fogad el, a feltöltött jelöltek között .jpeg, .xml, .xls és sok más fájl is található. Egy XML vagy SQL fájlnak sokkal nagyobb a potenciális hatása, mint egy .jpeg fájlnak, ezért ezeket az eseteket hajtja végre a rendszer először. Az esetek végrehajtás előtti hatás szerinti rangsorolása teszi megfizethetővé a negatív tesztelést.

A legtöbb negatív teszteset inkább a bevett tervezési technikák kis csoportjából származik, mintsem improvizációból:

  • Határértékek: az érvényes tartományon kívül eső értékeket, például 0-t és 101-et egy olyan mező esetében, amely 1-től 100-ig terjedő értékeket fogad el, használja.
  • Érvénytelen ekvivalenciaosztályok: Válasszon ki egy képviselőt az elutasított bemenetek minden osztályából, például betűket egy numerikus mezőből.
  • Hiba a találgatás során: A múltbeli hibák tapasztalatainak felhasználásával célozzuk meg azokat a bemeneti adatokat, amelyek a legnagyobb valószínűséggel hibásíthatják ezt a fajta jellemzőt.
  • Hibás és ellenséges adatok: szkriptcímkék, SQL-töredékek és túlméretezett hasznos adatok, amelyek ellenőrzést és biztonsági kezelést vizsgálnak.
  • Fuzz tesztelés: nagy mennyiségű véletlenszerű vagy mutált bemenetet generál automatikusan a kezeletlen összeomlások megtalálásához.
  • Megszakított folyamatok: megszakítás, frissítés, időtúllépés vagy a kapcsolat megszakadása egy tranzakció során.

Bármelyik technika is hozza létre az esetet, a várt eredményt egy kontrollált, olvasható hibaként kell leírni – érvényesítési üzenetként, elutasított feltöltésként, tiszta visszagörgetésként –, és soha nem pusztán úgy, hogy „a rendszer nem omlik össze”.

A negatív tesztek előnyei és hátrányai

Mint minden más tesztelési technikának, a negatív tesztelésnek is vannak előnyei és hátrányai, amelyek attól függenek, hogy hol, mikor és mennyit alkalmaznak.

A negatív tesztelés előnyei

  • Közvetlenül védi a termék minőségét, mivel egy jó minőségű termékben nincsenek kihasználható sebezhetőségek.
  • Szélesíti a lefedettséget. Az érvénytelen bemenet szándékosan vagy véletlenül jut el egy élő rendszerbe, így a negatív eseteknek a pozitívak mellett kell futniuk ahhoz, hogy a lefedettség értelmes legyen.
  • Növeli az ügyfelek bizalmát, mielőtt egy kiadás élesbe kerülne.
  • Olyan hibákat felszínre hoz, amelyeket a pozitív tesztelés strukturálisan nem tud elérni, például a kezeletlen kivételeket és a gyenge bemeneti validációt.

A negatív tesztelés hátrányai

  • Bizonyos helyzetekben ez idő- és energiapocsékolás. Ha egy alkalmazást egyetlen felhasználó számára készítenek, akkor 100 egyidejű felhasználó esetét nem érdemes tesztelni, ezért a megfelelő feltételek megválasztása számít, és egyes rendszereknek egyáltalán nincs szükségük negatív tesztelésre.
  • A tokok megtervezéséhez képzett és tapasztalt emberekre van szükség.
  • Az ügyfél szempontjából ez költségeket jelent, és késleltetheti a megjelenést.
  • Az erőfeszítésért verseng. Egy csapat, amely sokat költ negatív tesztelésre, végül kevesebbet fektethet be a pozitív tesztelésbe.

GYIK

A pozitív tesztelés érvényes adatokat szolgáltat és megerősíti a várt eredményt. A negatív tesztelés érvénytelen adatokat, rossz formátumokat és hibás szekvenciákat szolgáltat, és egy ellenőrzött üzenettel megerősíti, hogy az alkalmazás elutasítja ezeket a hiba helyett.

Üres hitelesítő adatok, érvényes felhasználó helytelen jelszóval, SQL-töredékek a felhasználónévben, túl hosszú karakterláncok, kezdő vagy záró szóközök, letiltott fiókok és ismételt sikertelen kísérletek a zárolási viselkedés működésének megerősítésére.

Nem. Átfedésben vannak egymással, ha érvénytelen vagy ellenséges bemenetről van szó, de a biztonsági tesztelés kiterjed a hitelesítésre, az engedélyezésre, a titkosításra és a munkamenet-kezelésre is. A negatív tesztelés egy tágabb beviteli és feltételtechnika.

Általában tesztelők és minőségbiztosítási mérnökök írják őket, gyakran egy fejlesztővel együtt, aki áttekinti a hibautakat, és egy üzleti elemző megerősíti, hogy a követelmények mely érvénytelen feltételeket tiltják valójában.

Elegendő ahhoz, hogy lefedjen minden elutasított bemeneti osztályt, minden határt és minden nagy hatású hibautat. Ezen túlmenően a hozzáadott esetek kevés értéket adnak vissza, így a kockázat és a hatás megállítja a folyamatot.ping pont.

Igen. Az érvénytelen beviteli esetek nagyon ismételhetőek, így alkalmasak automatizálási tesztelés és regressziós csomagok. A fuzzing eszközök automatizálják a véletlenszerű bemenetek generálását, míg az assertions (érvényesítések) ellenőrzik, hogy megjelennek-e az érvényesítési üzenetek.

A modellek követelményeket vagy űrlapsémát olvasnak, és érvénytelen értékeket, peremfeltételeket és ellenséges karakterláncokat javasolnak, amelyeket a tesztelő esetleg nem listázhat manuálisan. A felülvizsgáló továbbra is megerősíti, hogy minden várható eredmény megfelel a specifikációnak.

Igen, egy meglévő tesztfájlból készít állítási kódot, érvénytelen adatú rögzítéseket és paraméterezett eseteket. A létrehozott elvárásokat felül kell vizsgálni, mert egy hihetőnek tűnő állítás rossz viselkedést kódolhat.

Foglald össze ezt a bejegyzést a következőképpen: