Co je testování smyčky? Metodika, příklad

⚡ Chytré shrnutí

Testování smyčky ověřuje konstrukce smyčky uvnitř programu a kontroluje, co se stane, když je smyčka přeskočena, jednou spuštěna, provedena na své hranici a posunuta o jeden průchod za maximální povolený počet.

  • 🔘 Definice: Technika struktury řízení bílé skříňky zaměřená na platnost smyčky, nikoli na obrazovky.
  • 🔁 Čtyři třídy: Jednoduché, vnořené, zřetězené a nestrukturované smyčky potřebují svou vlastní strategii.
  • 📍 Tři kontrolní stanoviště: Vstup do smyčky, chování během provádění a podmínka ukončení.
  • 🧪 Hraniční průchody: Nula, jedna, dva, typický počet, pak b-1, b a b+1 iterací.
  • 🪜 Vnořené pořadí: Začněte u nejvnitřnější smyčky, vnější držte minimálně a poté pracujte směrem ven.
  • 🐞 Nalezené závady: Limity odchylky o jedničku, neinicializované čítače, nekonečné smyčky a kapacitní úzká hrdla.
  • ⚠️ Omezení: Chyby smyček se nacházejí v kódu nízké úrovně a po jejich zjištění jsou zřídka nenápadné.

Metodologie testování smyček, typy smyček a příklady testovacích případů

Co je Loop Testing?

Testování smyčky je typ testování softwaru, který se zaměřuje výhradně na platnost konstrukcí smyček v programu. Je to jedna ze součástí testování řídicích struktur, spolu s testování cesty, testování validace dat a testování podmínek.

Testování smyčky je a testování bílé skříňky technika, takže ji aplikuje někdo, kdo dokáže přečíst zdrojový kód a vidět podmínku smyčky, čítač a cestu ukončení. Tester neodhaduje chování z uživatelského rozhraní; samotná smyčka je testovaný objekt.

Níže uvedený diagram ukazuje, kde se testování smyček nachází v rámci rodiny testů řídicích struktur.

Testování smyček zobrazené jako odvětví testování řídicích struktur

Typy smyček Testováno

Před výběrem strategie určete, kterou ze čtyř tříd smyček máte v úmyslu prozkoumat. Příklady testovaných typů smyček jsou:

  • Jednoduchá smyčka — jedna smyčka s jedním vstupem a jedním výstupem, například rovina for, zatímco or dělat, zatímco postavit.
  • Vnořená smyčka — jedna smyčka umístěná uvnitř druhé, takže vnitřní smyčka se dokončí při každém průchodu vnější smyčkou.
  • Zřetězená smyčka — dvě nebo více smyček probíhajících jedna po druhé v pořadí.
  • Nestrukturovaná smyčka — neplánovaná kombinace vnořených a zřetězených cyklů, obvykle výsledkem skoků do těla cykly nebo z něj.

Třída určuje úsilí. Jednoduchá smyčka potřebuje několik iterací; nestrukturovaná smyčka obvykle potřebuje přepracovat kód, než ji lze vůbec otestovat.

Proč provádět smyčkové testování?

Testování smyčky se provádí z následujících důvodů

  • Testování může vyřešit problémy s opakováním smyčky
  • Testování smyček může odhalit úzká hrdla výkonu a kapacity
  • Testováním smyček lze určit neinicializované proměnné ve smyčce.
  • Pomáhá identifikovat problémy s inicializací smyčky.

Existuje i komerční důvod. Smyčka, která provede o jednu iteraci příliš mnohokrát, poškodí celkový počet; smyčka, která se nikdy neukončí, zablokuje proces. Obě vady se snadno odhalují, dokud je kód stále na vývojářském počítači, a draho se odhalují v produkčním prostředí.

Jak provádět smyčkové testování: Kompletní metodika

Při testování smyčky je nutné ji kontrolovat na třech různých úrovních:

  • Když se vstoupí do smyčky
  • Během jeho provádění a
  • Když smyčka zůstane

Testovací strategie pro všechny tyto smyčky je následující.

Jednoduchá smyčka

Jednoduchá smyčka má jeden vstup a jeden výstup, jak je znázorněno níže.

Jednoduchý vývojový diagram smyčky s jedním vstupním bodem a jednou výstupní podmínkou

Jednoduchá smyčka se testuje následujícím způsobem:

  1. Přeskočte celou smyčku
  2. Proveďte 1 průchod smyčkou
  3. Proveďte 2 průchod smyčkou
  4. Značka a prochází smyčkou, kde a < b, což je typický počet iterací středního rozsahu
  5. Značka b, b-1 a b+1 prochází smyčkou, kde b je maximální počet povolených průchodů smyčkou.

Poslední dva případy nesou největší hodnotu. Přeskočitping smyčka dokazuje, že podmínka ukončení je vyhodnocena před spuštěním těla smyčky a b+1 případ dokazuje, že smyčka odmítá pracovat za hranicí deklarovaného limitu, místo aby přeplnila pole.

Vnořená smyčka

Vnořená smyčka násobí počet možných iteračních kombinací, takže se testuje zevnitř ven, nikoli najednou.

Vývojový diagram vnořené smyčky s vnitřní smyčkou ohraničenou vnější smyčkou

Pro vnořenou smyčku je třeba postupovat podle následujících kroků.

  1. Nastavte všechny ostatní smyčky na jejich minimální hodnotu a začněte od nejvnitřnější smyčky.
  2. U nejvnitřnější smyčky proveďte jednoduchý test smyčky a podržte vnější smyčky na jejich minimální hodnotě iteračního parametru
  3. Proveďte test pro další smyčku a postupujte směrem ven.
  4. Pokračujte, dokud nebude testována vnější smyčka.

Zřetězené smyčky

Zřetězené smyčky se nacházejí jedna za druhou ve stejné prováděcí cestě, jak ukazuje diagram.

Vývojový diagram zřetězených smyček zobrazující dvě smyčky prováděné postupně

V zřetězených smyčkách, pokud jsou dvě smyčky na sobě nezávislé, testují se pomocí přístupu jednoduché smyčky, jinak se testují jako vnořené smyčky.

Pokud se však čítač smyček jedné smyčky použije jako počáteční hodnota pro druhou smyčku, tyto dvě smyčky se nepovažují za nezávislé.

Nestrukturované smyčky

Nestrukturované smyčky jsou nejtěžším případem, protože řízení se v libovolných bodech přeskakuje do těla smyčky a zpět.

Vývojový diagram nestrukturované smyčky s ovládacím skokemping vstup a výstup z těla smyčky

U nestrukturovaných smyček je nutné návrh restrukturalizovat tak, aby odrážel použití strukturovaných programovacích konstrukcí. Jakmile je kód redukován na jednoduché, vnořené nebo zřetězené formy, použije se výše uvedená strategie porovnávání.

Příklad testování smyčky s testovacími případy

Pracovaný příklad konkretizuje počet iterací. Uvažujme rutinu, která násobí průběžný výsledek každým celým číslem od 1 do n, faktoriální výpočet. Čítač smyčky začíná na 1, výstupní podmínka je proti > na smyčka je deklarována tak, aby akceptovala maximálně 12 průchodů, než výsledek přeteče deklarovaný celočíselný typ.

Pokud to považujeme za jednoduchou smyčku, doporučený počet iterací výše se promítá do následujícího testovací případy.

Modelový případ Hodnota n Přihrávky provedené Co to dokazuje
TC01 0 0 (smyčka přeskočena) Ukončovací podmínka je vyhodnocena před spuštěním těla programu a výsledek zůstává na inicializované hodnotě 1.
TC02 1 1 Jeden průchod vygeneruje správný výsledek a čítač se jednou zvýší.
TC03 2 2 Akumulátor přenáší hodnotu dopředu mezi dvěma po sobě jdoucími průchody.
TC04 5 5 Typický průměrný počet vrací očekávaných 120, což potvrzuje běžné chování.
TC05 11 11 Jeden průchod pod maximem se stále dokončí normálně (b-1.).
TC06 12 12 Deklarované maximum je přijato a smyčka se ukončí (b).
TC07 13 odmítl Jeden průchod nad maximum je odmítnut, místo aby tiše přetékal (b+1).

Všimněte si, že TC01 a TC07 jsou dva případy, které vývojáři nejčastěji opomíjejí, a právě tyto dva případy odhalují chyby způsobené přeskočenou inicializací a přetečením. Záporná hodnota n patří do stejné sady, pokud specifikace umožňuje jeho poskytnutí, což spojuje testování smyčky s negativní testování.

Běžné závady zjištěné testováním smyčky

Testování smyček neustále nachází stejnou malou skupinu chyb, což je důvod, proč se vyplatí pokaždé spustit test s pevným počtem iterací.

  • Hranice mimo jednu — podmínka zapsaná jako < kde <= bylo zamýšleno, takže smyčka proběhne o jeden průchod méně nebo o jeden příliš mnoho.
  • Neinicializované čítače nebo akumulátory — součet, který obsahuje hodnotu zbývající z předchozího volání.
  • Nekonečné smyčky — podmínka ukončení, kterou tělo smyčky nikdy nemůže splnit, protože čítač se aktualizuje pouze na některých větvích.
  • Předpoklady přeskočené smyčky — kód za smyčkou, který čte proměnnou, kterou mělo tělo smyčky nastavit, a který selže, pokud smyčka proběhne nulakrát.
  • Chyby kapacity a výkonu — smyčka, která je správná, ale při každém průchodu znovu načítá databázi, takže náklady rostou s počtem iterací.
  • Interference vnořené smyčky — vnitřní smyčka, která znovu používá čítač vnější smyčky a tiše mění počet vnějších iterací.

Protože každá chyba se mapuje na specifický počet iterací, zde objevené vady se snadno reprodukují a rychle opravují ve srovnání s vadami zjištěnými při vyšších úrovně testů.

Testování smyček vs. jiné techniky testování řídicích struktur

Testování smyček je jedním z členů rodiny řídicích struktur a je snadné si ho zaměnit se sousedními technikami. Níže uvedená tabulka je odděluje.

Technika Na co se zaměřuje Typický cíl pokrytí
Testování smyčky Konstrukce smyček: vstup, počet iterací a ukončení Nulový, jedničkový, typický a hraniční počet iterací pro každou smyčku
Testování stavu Booleovské výrazy uvnitř rozhodnutí Každá podmínka byla vyhodnocena jako pravdivá i nepravdivá.
Testování toku dat Definice a použití každé proměnné Každý pár definice-použití aplikovaný alespoň jednou
Testování základní cesty Nezávislé cesty grafem toku řízení Počet cest rovný cyklomatické složitosti

V praxi se tyto techniky spíše doplňují než si konkurují. Cyklomatická složitost vám řekne, kolik nezávislých cest existuje, testování bázových cest je pokryje a testování smyček poté přičte počty iterací, které by samotné pokrytí cesty nevynutilo. Všechny jsou dynamické testování činnosti, protože kód musí být spuštěn, aby bylo možné pozorovat výsledky.

Omezení v testování smyčky

Tato technika má skutečné hranice a jejich znalost zabraňuje nadměrným investicím.

  • Chyby smyček se objevují většinou v softwaru nízké úrovně
  • Chyby zjištěné během testování smyčky nejsou příliš jemné
  • Mnoho chyb může být detekováno operačním systémem, protože způsobují narušení hranic paměti, detekovatelné chyby ukazatelů a podobné chyby.
  • Identifikace třídy každé smyčky a její odpovídající testování stojí čas, což je těžké ospravedlnit u kódových cest, které nesou malé riziko.

Nejčastější dotazy

Vývojáři a techničtí testeři s přístupem ke zdrojovému kódu, obvykle během testování jednotky nebo revizi kódu. Obchodní testeři ji nemohou použít, protože podmínka cyklu je z uživatelského rozhraní neviditelná.

Model přečte podmínku smyčky a automaticky navrhne počet iterací nula, jedna, typický a hraniční, včetně případu přetečení. Kontrolor stále potvrzuje, že každý očekávaný výsledek odpovídá specifikaci.

Rychle je vytvoří, protože iterační vzorec je formulovaný. Agentičtí asistenti mohou také spustit sadu a hlásit, které počty selhaly, ale určení maximálního povoleného počtu průchodů zůstává v konstrukčním rozhodnutí, které musí zodpovídat člověk.

Spusťte případ s časovým limitem nebo iterační ochranou, aby test rychle selhal, místo aby se sada zablokovala. Assertujte na základě počtu zaznamenaných průchodů, nikoli pouze na základě konečné výstupní hodnoty.

Mnohem méně než každá kombinace. Testování naruby udržuje počet zhruba aditivní napříč úrovněmi, nikoli multiplikativní, protože vnější smyčky jsou při cvičení vnitřní smyčky zafixovány na své minimální hodnotě.

Není na to vyhrazený žádný nástroj. Týmy kombinují framework pro jednotkové testování, jako například JUnit nebo pytest s nástrojem pro pokrytí, který hlásí pokrytí větví, a poté si přečtěte zprávu, abyste potvrdili, že byla dosažena cesta s nulovou iterací.

Ne. Pokrytí větví je splněno, jakmile je smyčka jednou vpuštěna a opuštěna. Testování smyčky navíc vyžaduje počet vynechaných průchodů a hranic, což samotné pokrytí větví nikdy nevynucuje.

Kdykoli je nestrukturovaný — kontrolní skokping do těla nebo z něj. Restrukturalizace do jednoduchých, vnořených nebo zřetězených forem stojí méně než navrhování testů pro každý nepravidelný vstupní bod.

Shrňte tento příspěvek takto: