Ce este Loop Testing? Metodologie, Exemplu

⚡ Rezumat inteligent

Testarea buclelor validează construcțiile buclei dintr-un program, verificând ce se întâmplă când o buclă este omisă, introdusă o singură dată, executată la limita sa și împinsă cu o trecere dincolo de numărul maxim permis.

  • 🔘 Definiție: O tehnică de structură de control de tip cutie albă care vizează validitatea buclelor, nu ecranele.
  • 🔁 Patru clase: Buclele simple, imbricate, concatenate și nestructurate au nevoie fiecare de propria strategie.
  • 📍 Trei puncte de control: Intrarea în buclă, comportamentul în timpul execuției și condiția de ieșire.
  • 🧪 Trecerile de graniță: Zero, unu, doi, o numărătoare tipică, apoi b-1, b și b+1 iterații.
  • 🪜 Ordine imbricată: Începeți de la bucla cea mai interioară, țineți-le pe cele exterioare la minimum, apoi lucrați spre exterior.
  • ???? Defecte constatate: Limite de decalaj de unu, contoare neinițializate, bucle infinite și blocaje de capacitate.
  • ⚠️ Prescripţie: Erorile de buclă se găsesc în codul de nivel scăzut și sunt rareori subtile odată ce sunt atinse.

Metodologia de testare în buclă, tipuri de bucle și exemple de cazuri de testare

Ce este Loop Testing?

Testarea buclei este un tip de testare software care se concentrează în întregime pe validitatea construcțiilor buclei dintr-un program. Este o parte a testării structurii de control, alături de testarea traseului, testarea validării datelor și testarea condițiilor.

Testarea buclei este a testarea cutiei albe tehnică, deci este aplicată de cineva care poate citi codul sursă și poate vedea condiția buclei, contorul și calea de ieșire. Testerul nu ghicește comportamentul din interfața cu utilizatorul; bucla în sine este obiectul testat.

Diagrama de mai jos arată unde se situează testarea în buclă în cadrul familiei de testare a structurilor de control.

Testarea buclelor prezentată ca o ramură a testării structurilor de control

Tipuri de buclă Testate

Înainte de a alege o strategie, identificați care dintre cele patru clase de bucle pe care le analizați. Exemple de tipuri de bucle testate sunt:

  • Bucla simplă — o singură buclă cu o intrare și o ieșire, cum ar fi o buclă simplă pentru, în timp ce or face în timp ce construi.
  • Buclă imbricată — o buclă plasată în interiorul alteia, astfel încât bucla interioară se completează la fiecare trecere a buclei exterioare.
  • Bucla concatenată — două sau mai multe bucle care se desfășoară una după alta în secvență.
  • Bucla nestructurată — o combinație neplanificată de bucle imbricate și concatenate, de obicei rezultatul unor salturi în sau din corpul unei bucle.

Clasa decide efortul. O buclă simplă necesită câteva iterații; o buclă nestructurată necesită de obicei o reproiectare a codului înainte de a putea fi testată.

De ce se face testarea buclei?

Testarea buclei se face din următoarele motive

  • Testarea poate rezolva problemele de repetare a buclei
  • Testarea buclelor poate dezvălui blocaje de performanță și capacitate
  • Prin testarea buclelor, se pot determina variabilele neinițializate din buclă
  • Ajută la identificarea problemelor de inițializare a buclei.

Există și un motiv comercial. O buclă care rulează cu o iterație în plus corupe un total; o buclă care nu se termină niciodată blochează un proces. Ambele defecte sunt ieftine de găsit cât timp codul se află încă pe mașina unui dezvoltator și costisitoare de găsit în producție.

Cum se face testarea buclei: Metodologie completă

În timpul testării unei bucle, aceasta trebuie verificată la trei niveluri diferite:

  • Când se intră în buclă
  • În timpul executării sale, și
  • Când bucla este lăsată

Strategia de testare pentru toate aceste bucle este următoarea.

Bucla simplă

O buclă simplă are o singură intrare și o singură ieșire, așa cum se arată mai jos.

Schemă logică simplă cu un punct de intrare și o condiție de ieșire

O buclă simplă este testată în felul următor:

  1. Sari peste întreaga buclă
  2. Faceți o trecere prin buclă
  3. Faceți 2 trecere prin buclă
  4. Faceți suporterii vedetele spectacolului, evidențiați contribuțiile noilor veniți și distrați-vă! Nu vă fie teamă să colaborați și să acordați credit altor grupuri care se ocupă de probleme similare. Prezentați-vă la cauzele lor, karma este reală! a trece prin bucla unde a < b, adică un număr tipic de iterații la mijlocul intervalului
  5. Faceți suporterii vedetele spectacolului, evidențiați contribuțiile noilor veniți și distrați-vă! Nu vă fie teamă să colaborați și să acordați credit altor grupuri care se ocupă de probleme similare. Prezentați-vă la cauzele lor, karma este reală! b, b-1 și b+1 trece prin bucla unde b este numărul maxim de treceri permise prin buclă.

Ultimele două cazuri au cea mai mare valoare. Sari pesteping Bucla demonstrează că condiția de ieșire este evaluată înainte ca corpul să ruleze și b+1 caz dovedește că bucla refuză să lucreze dincolo de limita declarată în loc să depășească un array.

Buclă imbricată

O buclă imbricată multiplică numărul de combinații de iterații posibile, astfel încât este testată din interior spre exterior, mai degrabă decât dintr-o dată.

Diagramă de flux cu buclă imbricată cu o buclă interioară închisă de o buclă exterioară

Pentru o buclă imbricată, trebuie să urmați următorii pași.

  1. Setați toate celelalte bucle la valoarea lor minimă și începeți cu bucla cea mai interioară
  2. Pentru cea mai interioară buclă, efectuați un test de buclă simplu și mențineți buclele exterioare la valoarea minimă a parametrului de iterație
  3. Efectuați testul pentru următoarea buclă și lucrați spre exterior
  4. Continuați până când bucla cea mai exterioară a fost testată.

Bucle concatenate

Buclele concatenate se află una după alta în aceeași cale de execuție, așa cum arată diagrama.

Diagramă de flux a buclelor concatenate care prezintă două bucle care se execută în secvență

În buclele concatenate, dacă două bucle sunt independente una de cealaltă, atunci acestea sunt testate folosind abordarea buclei simple, altfel sunt testate ca bucle imbricate.

Totuși, dacă contorul unei bucle este utilizat ca valoare inițială pentru cealaltă, cele două bucle nu sunt considerate independente.

Bucle nestructurate

Buclele nestructurate sunt cel mai dificil caz, deoarece controlul sare în și din corpul buclei în puncte arbitrare.

Diagramă de flux a buclei nestructurate cu salt de controlping în și în afara corpului buclei

Pentru buclele nestructurate, designul trebuie restructurat pentru a reflecta utilizarea construcțiilor de programare structurată. Odată ce codul a fost redus la forme simple, imbricate sau concatenate, se aplică strategia de potrivire de mai sus.

Exemplu de testare în buclă cu cazuri de testare

Un exemplu concret face ca numărătoarea iterațiilor să fie concretă. Luați în considerare o rutină care înmulțește un rezultat cu fiecare număr întreg de la 1 la n, un calcul factorial. Contorul buclei începe de la 1, condiția de ieșire este contracara > n, iar bucla este declarată să accepte maximum 12 treceri înainte ca rezultatul să depășească tipul întreg declarat.

Tratând aceasta ca o buclă simplă, numărul de iterații recomandat mai sus se traduce în următoarele cazuri de testare.

Caz de testare Valoarea lui n Pase executate Ceea ce dovedește
TC01 0 0 (bucla omisă) Condiția de ieșire este evaluată înainte ca corpul să ruleze, iar rezultatul rămâne la valoarea inițială 1.
TC02 1 1 O singură trecere produce rezultatul corect, iar contorul se incrementează o dată.
TC03 2 2 Acumulatorul transportă o valoare mai departe între două treceri consecutive.
TC04 5 5 O numărătoare tipică la mijlocul intervalului returnează valoarea așteptată de 120, confirmând un comportament obișnuit.
TC05 11 11 O trecere sub maxim se finalizează totuși normal (b-1).
TC06 12 12 Maximul declarat este acceptat și bucla se termină (b).
TC07 13 respins O trecere dincolo de maxim este refuzată, în loc să depășească în tăcere limita maximă (b+ 1).

Observați că TC01 și TC07 sunt cele două cazuri pe care dezvoltatorii le omit cel mai des și sunt cele două care expun defectele de inițializare omisă și de depășire a limitei. O valoare negativă a n aparține aceluiași set dacă specificația permite furnizarea sa, ceea ce leagă testarea în buclă de testare negativă.

Defecte comune descoperite prin testarea în buclă

Testarea în buclă găsește în mod constant aceeași familie mică de erori, ceea ce face ca numărătoarea fixă ​​a iterațiilor să merite executată de fiecare dată.

  • Limite în afara limitelor de unu — o condiție scrisă ca < Unde <= a fost intenționat, așa că bucla rulează cu o trecere prea puține sau cu una prea multe.
  • Contori sau acumulatori neinițializați — un total care conține o valoare rămasă de la un apel anterior.
  • Bucle infinite — o condiție de ieșire pe care corpul buclei nu o poate satisface niciodată deoarece contorul este actualizat doar pe anumite ramuri.
  • Presupuneri privind bucla omisă — cod după buclă care citește o variabilă pe care corpul buclei trebuia să o seteze, cod care eșuează când bucla rulează de zero ori.
  • Defecțiuni de capacitate și performanță — o buclă care este corectă, dar care citește din nou baza de date la fiecare trecere, astfel încât costul crește odată cu numărul de iterații.
  • Interferență în buclă imbricată — o buclă interioară care reutilizează contorul buclei externe și modifică în liniște numărul de iterații externe.

Deoarece fiecare defect se mapează la un număr specific de iterații, defectele identificate aici sunt ușor de reprodus și rapid de remediat în comparație cu defectele găsite la iterații mai mari. niveluri de testare.

Testarea buclelor vs. alte tehnici de testare a structurilor de control

Testarea în buclă este un membru al familiei structurilor de control și este ușor de confundat cu tehnicile învecinate. Tabelul de mai jos le separă.

Metoda de măsurare Ce vizează Obiectiv tipic de acoperire
Testarea buclei Construcții de buclă: intrare, număr de iterații și ieșire Număr de iterații zero, unu, tipice și la limită pentru fiecare buclă
Testarea condițiilor Expresii booleene în cadrul deciziilor Fiecare condiție a fost evaluată atât adevărată, cât și falsă
Testarea fluxului de date Definiția și utilizarea fiecărei variabile Fiecare pereche definiție-de-utilizare exersată cel puțin o dată
Testarea căii de bază Căi independente prin graficul fluxului de control Un număr de căi egal cu complexitatea ciclomatică

În practică, aceste tehnici sunt complementare, mai degrabă decât concurente. Complexitatea ciclomatică vă spune câte căi independente există, testarea căii de bază le acoperă, iar testarea în buclă adaugă apoi numărul de iterații pe care acoperirea căii singură nu le-ar forța. Toate sunt testare dinamică activități, deoarece codul trebuie executat pentru ca rezultatele să fie observate.

Limitare în testarea buclei

Tehnica are limite reale, iar cunoașterea lor previne suprainvestițiile.

  • Bug-urile de buclă apar mai ales în software-ul de nivel scăzut
  • Bug-urile identificate în timpul testării buclei nu sunt foarte subtile
  • Multe dintre erori ar putea fi detectate de sistemul de operare, deoarece acestea cauzează încălcări ale limitelor de memorie, erori detectabile ale pointerilor și erori similare.
  • Identificarea clasei fiecărei bucle și testarea acesteia în consecință costă timp, ceea ce este greu de justificat pe căi de cod care prezintă riscuri reduse.

Întrebări frecvente

Dezvoltatori și testeri tehnici cu acces la codul sursă, de obicei în timpul testarea unitara sau revizuirea codului. Testerii de business nu o pot aplica, deoarece condiția buclei este invizibilă din interfața cu utilizatorul.

Un model citește condiția buclei și propune automat numărul de iterații zero, unu, tipic și la limită, inclusiv cazul de depășire a limitei. Un recenzent confirmă în continuare că fiecare rezultat așteptat corespunde specificației.

Le redactează rapid, deoarece modelul de iterație este formulat. Asistenții agenți pot, de asemenea, rula suita și raporta numărul de eșecuri, dar decizia privind numărul maxim de pase permise rămâne o decizie de design care aparține unui om.

Executați cazul sub un timeout sau o gardă de iterație, astfel încât testul să eșueze rapid în loc să blocheze suita. Afirmați-vă pe baza numărului de treceri înregistrate, nu doar pe baza valorii finale de ieșire.

Mult mai puține decât orice combinație. Testarea inversă menține numărătoarea aproximativ aditivă între niveluri, mai degrabă decât multiplicativă, deoarece buclele exterioare sunt fixate la valoarea lor minimă în timp ce bucla interioară este exersată.

Niciun instrument nu este dedicat acestui lucru. Echipele combină un framework de testare unitară, cum ar fi JUnit sau testați Pytest cu un instrument de acoperire care raportează acoperirea ramurilor, apoi citiți raportul pentru a confirma că a fost atinsă calea cu iterație zero.

Nu. Acoperirea ramurilor este satisfăcută odată ce se intră și se iese dintr-o buclă o singură dată. Testarea buclei necesită în plus trecerea omisă și numărătoarea limitelor, pe care acoperirea ramurilor singură nu le impune niciodată.

Ori de câte ori este nestructurat — control jumping în sau din corp. Restructurarea în forme simple, imbricate sau concatenate costă mai puțin decât proiectarea testelor pentru fiecare punct de intrare neregulat.

Rezumați această postare cu: