Acoperirea testelor în testarea software: Cum să o măsurăm

⚡ Rezumat inteligent

Acoperirea testelor în testarea software măsoară cât dintr-o aplicație este efectiv exersată de un set de teste. Aceasta dezvăluie cerințe netestate, căi de cod și riscuri, astfel încât echipele pot adăuga cazuri specifice și lansa produse cu o încredere măsurabilă.

  • 🎯 Definiție: Raportează acoperirea testelor ce cerințe, caracteristici și căi de cod sunt deja exercitate de testele existente.
  • 🧭 tipuri: Instrucțiunea, ramura, condiția, calea, cerințele și acoperirea riscurilor răspund fiecare la o întrebare diferită.
  • 🇧🇷 Code față de test: Code Acoperirea măsoară liniile sursă executate, în timp ce acoperirea testului măsoară planul general de testare.
  • 🧮 Formula: Împărțiți liniile executate la numărul total de linii, apoi înmulțiți cu 100 pentru procent.
  • 🛠️ Tehnici: Analiza valorilor la limită, tabelele de decizie și testarea tranziției de stare lărgesc acoperirea fără a umfla suita.
  • 📈 Optimizare: Clasificați modulele în funcție de risc, automatizați suita de regresie și revizuiți tendința de acoperire la fiecare sprint.
  • 🤖 Asistență AI: Instrumentele de inteligență artificială generează teste unitare lipsă și clasifică căile netestate în funcție de riscul de producție.

Ce este Acoperirea Testului?

Acoperirea testului este definită ca o măsură în Testarea software-ului care măsoară cantitatea de testare efectuată de un set de teste. Acesta va include colectarea de informații despre ce părți ale unui program sunt executate atunci când rulează suita de testare pentru a determina ce ramuri ale instrucțiunilor condiționate au fost luate.

În termeni simpli, este o tehnică pentru a vă asigura că testele vă testează codul sau cât de mult din cod ați exersat prin rularea testului.

Ce face acoperirea testelor?

Într-un proiect live, acoperirea testelor susține patru activități practice:

  • Găsirea zonei unei cerințe neimplementate de un set de cazuri de testare
  • Ajută la crearea cazurilor de testare suplimentare pentru a crește acoperirea
  • Identificarea unei măsuri cantitative a acoperirii testului, care este o metodă indirectă de verificare a calității
  • Identificarea cazurilor de testare fără sens care nu măresc acoperirea

Beneficiile acoperirii testelor în ingineria software

Aceste activități se traduc în beneficii inginerești concrete.

  • Poate asigura calitatea testului
  • Poate ajuta la identificarea porțiunilor din cod care au fost de fapt atinse pentru lansare sau remediere
  • Poate determina toate punctele de decizie și căile din aplicația dvs. care nu au fost testate, ceea ce vă permite să creșteți acoperirea testelor.
  • Prevent defect scurgere
  • Timpul, domeniul de aplicare și costul pot fi ținute sub control
  • Prevenirea defectelor într-un stadiu incipient al ciclului de viață al proiectului
  • Lacunele în cerințe, cazuri de testare și defecte la nivel de unitate și la nivel de cod pot fi găsite într-un mod ușor

Tipuri de acoperire a testelor

Acoperirea nu este niciodată un singur număr. Echipe track mai multe tipuri simultan, deoarece fiecare răspunde la o întrebare diferită despre aceeași suită. Tabelul de mai jos grupează tipurile pe care le întâlniți cel mai des.

Tipul de acoperire Ce Măsoară Cel mai bine folosit pentru
Acoperire extras (linie) Liniile executabile rulează cel puțin o dată Teste unitare și audituri de cod vechi
Acoperire sucursală sau de decizie Rezultatul adevărat și fals al fiecărei decizii Logică condiționată și de validare
Acoperirea condițiilor Fiecare subexpresie booleană este declarată adevărată și falsă Expresii compuse ȘI sau SAU
Acoperirea traseului Rute unice parcurse printr-un modul Fluxuri critice pentru siguranță și financiare
Acoperire funcțională Funcții sau metode invocate de teste API și niveluri de servicii
Acoperirea cerințelor Cerințe mapate la cel puțin un test Acceptare și contratracsemnătură țială
Acoperirea riscurilor Zonele identificate cu risc ridicat au fost exercitate Cicluri scurte de eliberare

Primele cinci tipuri sunt măsuri la nivel de cod și aparțin testarea cutiei albe, în timp ce cerințele și acoperirea riscurilor se află la nivelul planului de testare.

Care sunt principalele diferențe între Code Acoperire și acoperire de testare?

Code acoperire și acoperirea testelor sunt tehnici de măsurare care vă permit să evaluați calitatea codului aplicației dvs.

Iată câteva diferențe critice între cabinele acestor metode de acoperire:

parametrii Code Acoperire Acoperirea testului
Definiție Code Termen de acoperire utilizat atunci când codul aplicației este exersat în timp ce o aplicație rulează. Acoperirea testului înseamnă planul general de testare.
Scop Code Indicatorii de acoperire pot ajuta echipa să își monitorizeze testele automate. Acoperirea testului primește detalii despre nivelul la care a fost testată codarea scrisă a unei aplicații.
Subtipuri Code acoperire împărțită în subtipuri precum acoperire declarații, acoperire condiții, acoperire sucursală, Togglacoperire electronică, acoperire FSM. Niciun subtip de metodă de acoperire a testului.

Formula de acoperire a testului

Pentru a calcula acoperirea testului, trebuie să urmați pașii de mai jos:

Pas 1) Conta Y, numărul total de linii de cod din software-ul pe care îl utilizați de testare

Pas 2) Conta X, numărul de linii de cod pe care le execută în prezent toate cazurile de testare

Acum, trebuie să găsiți (X împărțit la Y) înmulțit cu 100. Rezultatul acestui calcul este procentul de acoperire a testului.

De exemplu:

Dacă numărul de linii de cod dintr-o componentă de sistem este 500 și numărul de linii executate în toate cazurile de testare existente este 50, atunci acoperirea testului este:

(50 / 500) * 100 = 10%   // executed lines divided by total lines

Exemple de acoperire a testelor

Procentul în sine nu este niciodată întreaga poveste, așa cum arată exemplele de mai jos.

Exemplu 1:

De exemplu, dacă „cuțitul” este un articol pe care doriți să îl testați, atunci trebuie să vă concentrați pe verificarea faptului dacă taie legumele sau fructele corect sau nu. Cu toate acestea, există și alte aspecte de care trebuie să țineți cont, cum ar fi dacă utilizatorul ar trebui să îl poată manevra confortabil.

Exemplu 2:

De exemplu, dacă vrei să verifici aplicația Notepad, verificarea caracteristicilor sale esențiale este esențială. Cu toate acestea, trebuie să acoperi și alte aspecte, deoarece aplicația Notepad răspunde în mod așteptat atunci când utilizează alte aplicații, utilizatorul înțelege utilizarea aplicației, nu se blochează atunci când utilizatorul încearcă să facă ceva neobișnuit etc.

Tehnici de acoperire a testelor

Ambele exemple duc la aceeași concluzie: atingerea unui obiectiv de acoperire depinde mai puțin de scrierea mai multor teste și mai mult de alegerea tehnicii potrivite de proiectare a testelor. Tehnicile de mai jos lărgesc acoperirea, păstrând în același timp...ping suita mică.

  • Analiza valorilor limită: Selectează intrările la marginile fiecărui interval valid, unde defectele se grupează cel mai mult. Consultați analiza valorii la limită pentru cazuri lucrate.
  • Partiționare prin echivalență: Grupează intrările pe care aplicația le tratează identic, astfel încât un singur caz poate reprezenta în siguranță o întreagă clasă de valori.
  • Testarea tabelului de decizie: Acoperă combinații de condiții și rezultatele așteptate ale acestora în cadrul unei singure grile.
  • Testarea tranziției de stare: Exersează fiecare mișcare validă și invalidă între stările aplicației.
  • Testarea căii de bază: Derivează mulțimea minimă de căi independente din graficul fluxului de control.
  • Testarea bazată pe riscuri: Clasifică caracteristicile în funcție de impactul asupra afacerii și le acoperă mai întâi pe cele cu cel mai mare risc.
  • Testare exploratorie: Descoperă lacune pe care cazurile scenarizate și rapoartele de acoperire nu le expun niciodată.

Cum se poate realiza acoperirea testului?

Odată ce tehnicile sunt alese, patru rute stabilite oferă acoperirea.

  • Acoperirea testului poate fi realizată prin exercitarea tehnicilor de revizuire statică, cum ar fi evaluări inter pares, inspecții și rezumat
  • Prin transformarea defectelor ad-hoc în cazuri de testare executabile
  • La nivel de cod sau la nivel de test unitar, acoperirea testului poate fi realizată prin utilizarea instrumentelor de acoperire automată a codului sau a testului unitar.
  • Acoperirea testelor funcționale poate fi realizată cu ajutorul instrumentelor adecvate de management al testelor

Cum să îmbunătățești acoperirea testelor

Stabilirea acoperirii este punctul de plecare; creșterea acesteia este o rutină repetabilă. Parcurgeți această secvență la începutul fiecărui ciclu de lansare.

  1. Calculează numărul actual. Executați un raport de acoperire și înregistrați separat acoperirea declarațiilor, ramurilor și cerințelor, astfel încât lacunele să rămână vizibile pentru fiecare modul în parte, în loc să fie ascunse într-o medie la nivel de proiect.
  2. Mapați testele la cerințe. Construiește o traco grilă de fezabilitate care leagă fiecare cerință de cel puțin un caz de testare. Orice rând gol reprezintă o lacună confirmată, nu o suspiciune.
  3. Clasificați modulele în funcție de risc. Logica plăților, autentificării și migrării datelor merită o acoperire mult mai profundă decât un ecran de ajutor static, așa că cheltuiți bugetul acolo unde o defecțiune ar afecta cel mai mult.
  4. Adăugați cazuri negative și cazuri marginale. Intrările goale, valorile supradimensionate, timeout-urile de rețea și erorile de permisiune ajung la ramuri pe care testele de cale fericită nu le ating niciodată.
  5. Stratificați nivelurile de testare. Combina testarea unitara, testarea de integrareși verificări end-to-end, deoarece fiecare nivel acoperă ceea ce celelalte nu pot din punct de vedere structural.
  6. Automatizați suita de regresie. Promocazuri stabile în testarea automatizării și să le execute în interiorul Conducta CI/CD după fiecare commit.
  7. Retrageți cazurile redundante. Ștergeți testele duplicate care adaugă minute de execuție fără a adăuga o singură linie neacoperită.
  8. RevUrmărește tendința la fiecare sprint. Tracacoperire k lângă densitatea defectelorScurgerile în creștere pe fondul unei acoperiri plate reprezintă un semnal de alarmă timpuriu al unui punct mort.

⚠️ Atenție: Nu considerați 100% ca obiectiv. O suită la 85% cu aserțiuni puternice protejează o versiune mult mai bine decât 95% din verificările superficiale care execută cod fără a verifica niciun rezultat.

Dezavantajele acoperirii testelor

Acoperirea rămâne valoroasă, însă are limite care merită menționate înainte de a raporta orice procent.

  • Majoritatea sarcinilor din acoperirea testului sunt manuale, deoarece nu există instrumente de automatizare. Prin urmare, este nevoie de mult efort pentru a analiza cerințele și a crea cazuri de testare.
  • Acoperirea testului vă permite să numărați funcțiile și apoi să măsurați în funcție de mai multe teste. Cu toate acestea, există întotdeauna spațiu pentru erori de judecată.

Întrebări frecvente

Majoritatea echipelor tratează 70 până la 80% ca o țintă practică și 90% sau mai mult pentru modulele critice pentru siguranță. Urmărirea a 100% rareori răsplătește efortul. Prioritizați profunzimea în logica cu risc ridicat în loc să distribuiți testele uniform pe întreaga bază de cod.

Nu. O acoperire completă dovedește că fiecare element a funcționat, nu că fiecare valoare, cerință sau experiență a utilizatorului a fost validată. Cerințele lipsă, aserțiunile slabe și erorile nefuncționale, cum ar fi timpii de răspuns lenți, scapă în continuare unei suite de rapoarte de 100%.

Un raport de acoperire listează liniile, ramurile și funcțiile acoperite și neacoperite per fișier, cu procente cumulate pe modul și proiect. Instrumente precum JaCoCo semnalizați și ramurile parțial acoperite, de obicei cele mai rapide goluri care se închid.

Inteligența artificială analizează codul sursă, istoricul execuției și datele despre defecte pentru a identifica căile netestate cu risc ridicat, apoi propune cazuri care le închid. De asemenea, clasifică testele care trebuie executate primele, scurtând feedback-ul din fluxul de lucru fără a sacrifica acoperirea.

Da. Instrumente precum Diffblue scrieți automat teste unitare pentru logica neacoperită, iar modelele generative transformă cerințele limbajului simplu în cazuri executabile. Revizuirea umană rămâne esențială, deoarece aserțiunile generate pot fi acceptate fără a verifica comportamentul semnificativ.

Rezumați această postare cu: