Mi az a huroktesztelés? Módszertan, példa

⚡ Okos összefoglaló

A ciklustesztelés validálja a programban lévő ciklusszerkezeteket, ellenőrizve, mi történik, ha egy ciklust kihagyunk, egyszer belépünk, a határán végrehajtunk, és egy menettel túllépjük a maximálisan megengedett ciklusszámot.

  • 🔘 Meghatározás: Egy fehér dobozos vezérlőszerkezeti technika, amelynek célja a ciklusérvényesség, nem pedig a képernyők ellenőrzése.
  • 🔁 Négy osztály: Az egyszerű, beágyazott, összefűzött és strukturálatlan ciklusok mindegyikéhez saját stratégiára van szükség.
  • 📍 Három ellenőrzőpont: Belépés a ciklusba, viselkedés végrehajtás közben és a kilépési feltétel.
  • 🧪 Határátlépések: Nulla, egy, kettő, egy tipikus számlálás, majd b-1, b és b+1 iteráció.
  • 🪜 Beágyazott sorrend: Kezdd a legbelső hurokkal, a külsőket tartsd minimálisan, majd haladj kifelé.
  • 🐞 Talált hibák: Egyenkénti eltérés határértékek, inicializálatlan számlálók, végtelen hurkok és kapacitásbeli szűk keresztmetszetek.
  • ⚠️ Korlátozás: A ciklushibák az alacsony szintű kódban találhatók, és ritkán válnak észrevétlenné, ha egyszer eljutnak odáig.

Huroktesztelési módszertan, hurkok típusai és példa tesztesetek

Mi az a huroktesztelés?

Hurok tesztelése egy olyan szoftvertesztelési típus, amely teljes mértékben a programban lévő ciklusszerkezetek érvényességére összpontosít. Ez a vezérlési struktúra tesztelésének egyik része, a ... mellett. útvonal tesztelés, adatérvényesítési tesztelés és állapottesztelés.

A huroktesztelés a fehér dobozos tesztelés technika, tehát olyan személy alkalmazza, aki el tudja olvasni a forráskódot, és látja a ciklus feltételét, a számlálót és a kilépési útvonalat. A tesztelő nem a felhasználói felületről találgat a viselkedésre; maga a ciklus a tesztelt objektum.

Az alábbi ábra azt mutatja, hogy a ciklustesztelés hol helyezkedik el a vezérlési struktúra tesztelési családon belül.

A huroktesztelés a vezérlési struktúra tesztelésének ágaként bemutatva

A hurok típusai tesztelve

Mielőtt stratégiát választanál, azonosítsd a négy ciklusosztály közül, hogy melyiket vizsgálod. A tesztelt ciklustípusok például a következők:

  • Egyszerű hurok — egyetlen hurok egy bejárattal és egy kijárattal, például egy sima mert, míg or csinálni, miközben építeni.
  • Beágyazott hurok — egy hurok a másikba kerül, így a belső hurok a külső hurok minden meneténél befejeződik.
  • Összefűzött hurok — két vagy több, egymás után, sorrendben futó ciklus.
  • Strukturálatlan hurok — beágyazott és összefűzött ciklusok nem tervezett kombinációja, általában egy ciklus törzsébe való be- vagy onnan való kiugrások eredménye.

Az osztály dönti el, mennyi erőfeszítést igényel. Egy egyszerű ciklushoz néhány iteráció szükséges; egy strukturálatlan ciklushoz általában újra kell tervezni a kódot, mielőtt egyáltalán tesztelni lehetne.

Miért végezzünk huroktesztet?

A huroktesztelés a következő okok miatt történik

  • A tesztelés javíthatja a hurokismétlési problémákat
  • A ciklusok tesztelése feltárhatja a teljesítmény- és kapacitásbeli szűk keresztmetszeteket
  • Ciklusok tesztelésével meghatározhatók a ciklusban lévő inicializálatlan változók.
  • Segít azonosítani a ciklus inicializálási problémáit.

Van egy kereskedelmi oka is. Egy ciklus, amely eggyel több iterációt futtat le, az összesített eredményt elrontja; egy ciklus, amely soha nem fejeződik be, lefagyasztja a folyamatot. Mindkét hiba olcsón megtalálható, amíg a kód még a fejlesztői gépen van, és drága éles környezetben.

A huroktesztelés módja: teljes módszertan

Egy ciklus tesztelése során három különböző szinten kell ellenőrizni:

  • Amikor a ciklusba belépünk
  • Végrehajtása során, és
  • Amikor a hurok maradt

Mindezen hurkok tesztelési stratégiája a következő.

Egyszerű hurok

Egy egyszerű ciklusnak egyetlen belépése és egyetlen kilépése van, ahogy az alább látható.

Egyszerű ciklusfolyamatábra egy belépési ponttal és egy kilépési feltétellel

Egy egyszerű hurkot a következő módon tesztelünk:

  1. Kihagyja a teljes kört
  2. Végezzen 1 áthaladást a hurkon
  3. Végezzen 2 áthaladást a hurkon
  4. Az elért eredményeknél hangsúlyozd: a áthalad a hurkon, ahol a < b, ami egy tipikus középtartományú iterációs szám
  5. Az elért eredményeknél hangsúlyozd: b, b-1 és b+1 áthalad a cikluson, ahol b a hurokon áthaladások megengedett maximális száma.

Az utolsó két eset hordozza a legtöbb értéket. Skipping a ciklus bizonyítja, hogy a kilépési feltétel kiértékelésre kerül a törzs futása előtt, és a bA +1 eset azt bizonyítja, hogy a ciklus a deklarált korláton túlmutató munkát nem hajlandó végrehajtani, ahelyett, hogy egy tömböt túllépne.

Beágyazott hurok

Egy beágyazott ciklus megsokszorozza a lehetséges iterációs kombinációk számát, így belülről kifelé tesztelődik, nem pedig egyszerre.

Beágyazott ciklus folyamatábra egy belső ciklussal, amelyet egy külső ciklus zár körül

Egy beágyazott ciklushoz a következő lépéseket kell követnie.

  1. Állítsd be az összes többi ciklust a minimális értékre, és kezdd a legbelső ciklussal.
  2. A legbelső hurok esetében végezzen egy egyszerű huroktesztet, és tartsa a külső hurkokat a minimális iterációs paraméterértéken
  3. Végezd el a tesztet a következő hurokhoz, és haladj kifelé.
  4. Addig folytassa, amíg a legkülső hurkot meg nem vizsgálta.

Összefűzött hurkok

Az összefűzött ciklusok egymás után helyezkednek el ugyanabban a végrehajtási útvonalban, ahogy az az ábrán is látható.

Összefűzött ciklusok folyamatábrája, amely két, egymás után végrehajtódó ciklust mutat

Összefűzött ciklusokban, ha két ciklus független egymástól, akkor az egyszerű ciklusmegközelítéssel teszteljük őket, egyébként beágyazott ciklusként.

Ha azonban az egyik hurok számlálóját használjuk a másik kezdeti értékeként, akkor a két hurkot nem tekintjük függetlennek.

Strukturálatlan hurkok

A strukturálatlan ciklusok a legnehezebb eset, mivel a vezérlés tetszőleges pontokon ki-be ugrál a ciklus törzsébe.

Strukturálatlan hurok folyamatábra vezérlőugrássalping be- és ki a hurok testéből

Strukturálatlan ciklusok esetén a tervet át kell strukturálni, hogy tükrözze a strukturált programozási konstrukciók használatát. Miután a kódot egyszerű, beágyazott vagy összefűzött formákra redukáltuk, a fenti illesztési stratégia érvényesül.

Huroktesztelési példa tesztesetekkel

Egy kidolgozott példa kézzelfoghatóvá teszi az iterációk számát. Tekintsünk egy rutint, amely egy futó eredményt 1-től 1-ig terjedő összes egész számmal megszoroz. n, egy faktoriális számítás. A ciklusszámláló 1-től indul, a kilépési feltétel a következő: ellen > n, és a ciklust úgy deklarálták, hogy maximum 12 menetet fogadjon el, mielőtt az eredmény túlcsordulna a deklarált egész típusú érték felett.

Ha ezt egyszerű ciklusként kezeljük, a fent ajánlott iterációs számok a következőket jelentik: teszt esetek.

Vizsgálati eset n értéke Végrehajtott passzok Amit bizonyít
TC01 0 0 (ciklus kihagyva) A kilépési feltétel kiértékelésre kerül a törzs futása előtt, és az eredmény az inicializált 1-es értékén marad.
TC02 1 1 Egyetlen menet a helyes eredményt adja, és a számláló egyszer növekszik.
TC03 2 2 Az akkumulátor két egymást követő menet között előreviszi az értéket.
TC04 5 5 Egy tipikus középtartományú számlálás a várt 120-as értéket adja vissza, ami megerősíti a szokásos viselkedést.
TC05 11 11 Egy menettel a maximum alatt még mindig normálisan befejeződik (b-1.).
TC06 12 12 A deklarált maximumot elfogadja a rendszer, és a ciklus véget ér (b).
TC07 13 elutasított Egyszer a maximumon túli áthaladást elutasítanak, ahelyett, hogy csendben túlcsordulnának (b+ 1).

Figyeljük meg, hogy a TC01 és a TC07 az a két eset, amelyet a fejlesztők leggyakrabban kihagynak, és ez a kettő az, amelyik kihagyott inicializálási és túlcsordulási hibákat okoz. A negatív érték n ugyanabba a készletbe tartozik, ha a specifikáció lehetővé teszi a megadását, ami a huroktesztelést a következőhöz köti negatív teszt.

Huroktesztelés által talált gyakori hibák

A ciklustesztelés ugyanazt a kis hibacsaládot találja, ezért érdemes minden alkalommal lefuttatni a fix iterációs számlálásokat.

  • Egyenkénti határok — egy feltétel, amelyet így írnak fel: < ahol <= ez volt a szándékolt, így a ciklus eggyel kevesebb vagy eggyel több menetet fut le.
  • Nem inicializált számlálók vagy akkumulátorok — egy összeg, amely egy korábbi hívásból megmaradt értéket tartalmaz.
  • Végtelen hurkok — egy kilépési feltétel, amelyet a ciklus törzse soha nem tud teljesíteni, mivel a számláló csak néhány ágon frissül.
  • Kihagyott ciklus feltételezései — a ciklus utáni kód, amely beolvassa azt a változót, amelyet a ciklus törzsének be kellett volna állítania, és amely akkor hibás, ha a ciklus nulla alkalommal fut le.
  • Kapacitás- és teljesítményhibák — egy ciklus, amely helyes, de minden menetben újraolvassa az adatbázist, így a költség az iterációk számával növekszik.
  • Beágyazott hurok interferencia — egy belső ciklus, amely újrafelhasználja a külső ciklusszámlálót, és csendben megváltoztatja a külső iterációs számlálót.

Mivel minden hiba egy adott iterációs számhoz tartozik, az itt felmerült hibák könnyen reprodukálhatók és gyorsan javíthatók a magasabb iterációs számokon talált hibákhoz képest. tesztszintek.

Huroktesztelés vs. más vezérlési struktúra tesztelési technikák

A huroktesztelés a szabályozási struktúrák családjának egyik tagja, és könnyen összetéveszthető a szomszédos technikákkal. Az alábbi táblázat elkülöníti őket.

Technika Mit céloz meg? Tipikus lefedettségi cél
Hurok tesztelése Cikluskonstrukciók: belépés, iterációk száma és kilépés Nulla, egy, tipikus és határ iterációszám minden ciklushoz
Állapotvizsgálat Logikai kifejezések a döntéseken belül Minden feltétel igaznak és hamisnak is kiértékelésre került
Adatfolyam tesztelése Az egyes változók definíciója és használata Minden használható definíciópárt legalább egyszer gyakoroltak
Alapút tesztelés Független útvonalak a vezérlési folyamatgráfon keresztül Az útvonalak száma megegyezik a ciklomatikus komplexitással

A gyakorlatban ezek a technikák inkább kiegészítik egymást, mintsem versengenek. Ciklomatikus komplexitás megmondja, hogy hány független útvonal létezik, a bázisútvonal-tesztelés lefedi ezeket, és a ciklustesztelés ezután hozzáadja azokat az iterációs számokat, amelyeket az útvonal-lefedés önmagában nem kényszerítene ki. Mindegyik dinamikus tesztelés tevékenységek, mivel a kódot végre kell hajtani az eredmények megfigyeléséhez.

A huroktesztelés korlátozása

A technikának valódi határai vannak, és ezek ismerete megakadályozza a túlzott befektetést.

  • A hurokhibák többnyire alacsony szintű szoftverekben jelennek meg
  • A huroktesztelés során azonosított hibák nem túl finomak
  • Sok hibát az operációs rendszer észlelhet, mivel memóriahatár-sértéseket, észlelhető mutatóhibákat és hasonló hibákat okozhatnak.
  • Minden egyes ciklus osztályának azonosítása és ennek megfelelő tesztelése időigényes, amit nehéz indokolni a kevés kockázattal járó kódutakon.

GYIK

Fejlesztők és műszaki tesztelők, akik forráskódhoz férnek hozzá, általában a következő időszakban: egység tesztelés vagy kódáttekintés. Az üzleti tesztelők nem tudják alkalmazni, mert a ciklusfeltétel láthatatlan a felhasználói felületről.

Egy modell beolvassa a ciklusfeltételt, és automatikusan javaslatot tesz a nulla, egy, tipikus és határ iterációs számokra, beleértve a túlcsordulás esetét is. Egy felülvizsgáló továbbra is megerősíti, hogy minden várható eredmény megfelel a specifikációnak.

Gyorsan elkészíti őket, mivel az iterációs minta formulákon alapul. Az ügynöki asszisztensek is futtathatják a csomagot, és jelenthetik, hogy melyik számol hibát, de a maximálisan megengedhető sikeres lépések meghatározása továbbra is emberi tervezési döntés.

Futtasd le az esetet időtúllépés vagy iterációs védelem mellett, hogy a teszt gyorsan meghiúsuljon, ahelyett, hogy a rendszer lefagyna. A rögzített menetek számára alapozd meg az állításaidat, ne csak a végső kimeneti értékre.

Sokkal kevesebb, mint minden kombináció. A kifordított tesztelés a számlálást nagyjából additívan, nem pedig multiplikatívan tartja a szintek között, mivel a külső ciklusok a minimális értékükön vannak rögzítve, miközben a belső ciklus futása zajlik.

Nincs erre dedikált eszköz. A csapatok egy egységtesztelési keretrendszert kombinálnak, mint például JUnit vagy tesztelj egy lefedettségi eszközzel, amely jelentést készít az ágak lefedettségéről, majd olvasd el a jelentést a nulla iterációs útvonal elérésének megerősítéséhez.

Nem. Az elágazási lefedettség akkor teljesül, ha egy hurokba egyszer belépünk és kilépünk. A huroktesztelés ezen felül igényli a kihagyott menet és a határok számát is, amelyeket az elágazási lefedettség önmagában soha nem kényszerít ki.

Amikor strukturálatlan — kontrollugrásping a törzsbe vagy onnan ki. Az egyszerű, beágyazott vagy összefűzött formákká való átalakítás kevesebbe kerül, mint minden szabálytalan belépési pontra teszteket tervezni.

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