Pokrivenost testovima u testiranju softvera: Kako je izmjeriti

⚡ Pametni sažetak

Pokrivenost testovima u testiranju softvera mjeri koliki dio aplikacije skup testova zapravo vježba. Otkriva netestirane zahtjeve, puteve koda i rizike, tako da timovi mogu dodati ciljane slučajeve i objaviti ih s mjerljivom pouzdanošću.

  • 🎯 Definicija: Pokrivenost testovima izvještava o tome koje zahtjeve, značajke i putove koda postojeći testovi već ispunjavaju.
  • 🧭 vrste: Izjava, grana, uvjet, put, zahtjevi i pokrivenost rizika odgovaraju na različito pitanje.
  • ⚖️ Code u odnosu na test: Code pokrivenost mjeri izvršene izvorne linije, dok pokrivenost testiranjem mjeri cjelokupni plan testiranja.
  • 🧮 formula: Broj izvršenih redaka podijelite s ukupnim brojem redaka, a zatim pomnožite sa 100 da biste dobili postotak.
  • 🛠️ Tehnike: Analiza graničnih vrijednosti, tablice odlučivanja i testiranje prijelaza stanja proširuju pokrivenost bez prenapuhavanja skupa podataka.
  • 📈 Optimizacija: Rangirajte module prema riziku, automatizirajte regresijski paket i pregledajte trend pokrivenosti u svakom sprintu.
  • 🤖 AI pomoć: Alati umjetne inteligencije generiraju nedostajuće jedinične testove i rangiraju netestirane putove prema riziku produkcije.

Što je pokrivenost testom?

Pokrivenost testa definirana je kao metrika u testiranju softvera koja mjeri količinu testiranja koje provodi skup testova. To će uključivati ​​prikupljanje informacija o tome koji se dijelovi programa izvode tijekom izvođenja testnog skupa kako bi se utvrdilo koje su grane uvjetnih iskaza uzete.

Jednostavno rečeno, to je tehnika kojom se osigurava da vaši testovi testiraju vaš kod ili koliko ste koda koristili izvođenjem testa.

Što radi pokrivenost testovima?

Na aktivnom projektu, testna pokrivenost podržava četiri praktične aktivnosti:

  • Pronalaženje područja zahtjeva koji nije implementiran skupom testnih slučajeva
  • Pomaže u stvaranju dodatnih testnih slučajeva za povećanje pokrivenosti
  • Identificiranje kvantitativne mjere pokrivenosti testom, što je neizravna metoda za provjeru kvalitete
  • Identificiranje besmislenih testnih slučajeva koji ne povećavaju pokrivenost

Prednosti pokrivenosti testom u softverskom inženjerstvu

Te aktivnosti se prevode u konkretne inženjerske koristi.

  • Može osigurati kvalitetu testa
  • Može pomoći u prepoznavanju dijelova koda koji su zapravo dodirnuti za izdanje ili popravak
  • Može odrediti sve točke odlučivanja i putove u vašoj aplikaciji koji nisu testirani, što vam omogućuje povećanje pokrivenosti testiranjem.
  • Spriječiti mana propuštanje
  • Vrijeme, opseg i trošak mogu se držati pod kontrolom
  • Prevencija kvarova u ranoj fazi životnog ciklusa projekta
  • Rupe u zahtjevima, testnim slučajevima i nedostacima na razini jedinice i koda mogu se pronaći na jednostavan način

Vrste pokrivenosti testovima

Pokrivenost nikad nije jedan broj. Timovi track nekoliko tipova odjednom, jer svaki odgovara na različito pitanje o istom apartmanu. Tablica u nastavku grupira tipove koje najčešće susrećete.

Vrsta pokrivenosti Što mjeri Najbolje korišteno za
Izvod (linija) pokrivenost Izvršne linije se izvršavaju barem jednom Jedinični testovi i revizije naslijeđenog koda
Pokrivenost podružnice ili odluke Istinski i lažni ishod svake odluke Uvjetna i validacijska logika
Pokrivenost stanja Svaki logički podizraz kao istinit i kao neistinit Složeni I ili ILI izrazi
Pokrivenost puta Jedinstvene rute prođene kroz modul Sigurnosno kritični i financijski tokovi
Pokrivenost funkcija Funkcije ili metode koje pozivaju testovi API i slojevi usluga
Pokrivenost zahtjeva Zahtjevi mapirani na barem jedan test Prihvaćanje i protivljenjetracuvodno odjavljivanje
Pokriće rizika Identificirana područja visokog rizika koja su vježbana Kratki ciklusi otpuštanja

Prvih pet vrsta su mjere na razini koda i pripadaju testiranje bijele kutije, dok se zahtjevi i pokrivenost rizika nalaze na razini plana testiranja.

Koje su glavne razlike između Code Pokrivenost i pokrivenost testovima?

Code pokrivenost i test pokrivenost su tehnike mjerenja koje vam omogućuju procjenu kvalitete vašeg aplikacijskog koda.

Ovdje su neke kritične razlike između kabina ovih metoda pokrivanja:

Parametri Code Pokrivenost Obuhvat testom
Definicija Code pojam pokrića koji se koristi kada se aplikacijski kod izvršava dok je aplikacija u radu. Pokrivenost testom znači cjelokupni plan testiranja.
Cilj Code Metrike pokrivenosti mogu pomoći timu u praćenju automatiziranih testova. Pokrivenost testom daje pojedinosti o razini do koje je testirano pisano kodiranje aplikacije.
Podvrste Code pokrivenost podijeljena s podtipovima kao što su pokrivenost izjava, pokrivenost uvjeta, pokrivenost grana, Togglpokrivenost e, pokrivenost FSM-a. Nema podvrste metode pokrivenosti testa.

Testna formula pokrivenosti

Da biste izračunali pokrivenost testom, morate slijediti dolje navedene korake:

Korak 1) Računati Y, ukupan broj linija koda u softveru koji koristite testiranje

Korak 2) Računati X, broj redaka koda koje svi testni slučajevi trenutno izvršavaju

Sada trebate pronaći (X podijeljeno s Y) pomnoženo sa 100. Rezultat ovog izračuna je vaša pokrivenost testom %.

Na primjer:

Ako je broj redaka koda u sistemskoj komponenti 500, a broj redaka izvršenih u svim postojećim testnim slučajevima je 50, tada je vaša pokrivenost testovima:

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

Primjeri pokrivenosti testom

Sam postotak nikada nije cijela priča, kao što pokazuju primjeri u nastavku.

Primjer 1:

Na primjer, ako je "nož" predmet koji želite testirati, tada se morate usredotočiti na provjeru reže li povrće ili voće točno ili ne. Međutim, postoje i drugi aspekti na koje treba obratiti pozornost, poput toga da korisnik može udobno rukovati njime.

Primjer 2:

Na primjer, ako želite provjeriti aplikaciju Notepad, tada je provjera njezinih bitnih značajki neophodna. Međutim, morate pokriti i druge aspekte kao što su očekivani odziv aplikacije Notepad prilikom korištenja drugih aplikacija, korisnik razumije korištenje aplikacije, a ne ruši se kada korisnik pokuša učiniti nešto neobično itd.

Tehnike pokrivenosti testovima

Oba primjera upućuju na isti zaključak: postizanje cilja pokrivenosti manje ovisi o pisanju više testova, a više o odabiru prave tehnike dizajna testova. Tehnike u nastavku proširuju pokrivenost, a istovremeno održavajuping apartman mali.

  • Analiza graničnih vrijednosti: Odabire ulaze na rubovima svakog valjanog raspona, gdje se nedostaci najviše grupiraju. Vidi analiza graničnih vrijednosti za obrađene slučajeve.
  • Particioniranje ekvivalencije: Grupira ulaze koje aplikacija tretira identično, tako da jedan slučaj može sigurno predstavljati cijelu klasu vrijednosti.
  • Testiranje tablice odluka: Obuhvaća kombinacije uvjeta i njihovih očekivanih ishoda unutar jedne mreže.
  • Testiranje prijelaza stanja: Vježba svako valjano i nevaljano kretanje između stanja aplikacije.
  • Testiranje osnovnog puta: Izvodi minimalni skup neovisnih putova iz grafa toka upravljanja.
  • Testiranje na temelju rizika: Rangira značajke prema utjecaju na poslovanje i prvo pokriva one s najvećim rizikom.
  • Eksploratorno ispitivanje: Otkriva praznine koje scenarijski osmišljeni slučajevi i izvješća o pokrivenosti nikada ne otkrivaju.

Kako se može postići pokrivenost testiranjem?

Nakon što su tehnike odabrane, četiri utvrđene rute pružaju pokrivenost.

  • Pokrivenost testom može se izvršiti korištenjem tehnika statičnog pregleda kao što su recenzije, inspekcije i prolazak
  • Pretvaranjem ad-hoc nedostataka u izvršne testne slučajeve
  • Na razini koda ili razini testa jedinice, pokrivenost testom može se postići korištenjem automatiziranog pokrivanja koda ili alata za pokrivanje testa jedinice
  • Pokrivenost funkcionalnim testom može se izvršiti uz pomoć odgovarajućih alata za upravljanje testom

Kako poboljšati pokrivenost testovima

Uspostavljanje pokrivenosti je početna točka; povećanje iste je ponovljiva rutina. Proradite kroz ovaj slijed na početku svakog ciklusa objavljivanja.

  1. Odredite bazu trenutnog broja. Izvješće o pokrivenosti i zapis izjave, grane i pokrivenost zahtjeva pokrenite odvojeno, tako da praznine ostanu vidljive po modulu, a ne skrivene unutar jednog prosjeka za cijeli projekt.
  2. Mapirajte testove prema zahtjevima. Izgradite a tracMreža jednostavnosti koja povezuje svaki zahtjev s barem jednim testnim slučajem. Svaki prazan redak je potvrđena praznina, a ne sumnja.
  3. Rangiraj module prema riziku. Logika plaćanja, autentifikacije i migracije podataka zaslužuje puno detaljniju obradu od statičnog zaslona za pomoć, stoga potrošite proračun tamo gdje bi neuspjeh najviše štetio.
  4. Dodajte negativne i rubne slučajeve. Prazni ulazi, prevelike vrijednosti, mrežna ograničenja i pogreške u dozvolama dosežu grane koje testovi sretnog puta nikada ne dotiču.
  5. Složite testne razine. Kombinirati ispitivanje jedinice, integracijsko testiranjei provjere od početka do kraja, jer svaka razina pokriva ono što ostale strukturno ne mogu.
  6. Automatizirajte regresijski paket. Promostabilnih slučajeva u ispitivanje automatizacije i izvršiti ih unutar CI/CD cjevovod nakon svakog commita.
  7. Ukinite suvišne slučajeve. Izbrišite duplicirane testove koji dodaju minute izvršavanja bez dodavanja ijedne otkrivene linije.
  8. RevPratite trend u svakom sprintu. Track pokrivenost pored gustoća defektaRastuće curenje uz ravnu pokrivenost rano je upozorenje na slijepu točku.

⚠️ Upozorenje: Nemojte 100 posto tretirati kao cilj. Paket s 85 posto jakih tvrdnji štiti izdanje puno bolje od 95 posto plitkih provjera koje izvršavaju kod bez provjere ikakvog rezultata.

Nedostaci pokrivenosti testovima

Pokrivenost ostaje vrijedna, no nosi ograničenja koja vrijedi navesti prije izvještavanja o bilo kojem postotku.

  • Većina zadataka u pokrivenosti testom ručna je jer nema alata za automatizaciju. Stoga je potrebno puno truda za analizu zahtjeva i stvaranje testnih slučajeva.
  • Pokrivenost testom omogućuje vam brojanje značajki i zatim mjerenje u odnosu na nekoliko testova. Međutim, uvijek postoji prostor za pogreške u prosudbi.

Pitanja i odgovori

Većina timova tretira 70 do 80 posto kao praktičan cilj, a 90 posto ili više za sigurnosno kritične module. Potraga za 100 posto rijetko isplati trud. Dajte prioritet dubini visokorizične logike umjesto da testove ravnomjerno raspoređujete po kodnoj bazi.

Ne. Potpuna pokrivenost dokazuje da je svaki element pokrenut, a ne da je svaka vrijednost, zahtjev ili korisničko putovanje validirano. Nedostajući zahtjevi, slabe tvrdnje i nefunkcionalne greške poput sporog vremena odziva i dalje izmiču 100-postotnom izvještavanju paketa.

Izvješće o pokrivenosti navodi pokrivene i nepokrivene retke, grane i funkcije po datoteci, s postocima prikazanim po modulu i projektu. Alati kao što su JaCoCo također označite djelomično prekrivene grane, obično najbrže praznine koje se zatvaraju.

Umjetna inteligencija analizira izvorni kod, povijest izvršavanja i podatke o greškama kako bi identificirala netestirane visokorizične puteve, a zatim predlaže slučajeve koji ih zatvaraju. Također rangira koje testove treba prvo pokrenuti, skraćujući povratne informacije u procesu bez žrtvovanja pokrivenosti.

Da. Alati kao što su Diffblue automatski pišite jedinične testove za neotkrivenu logiku, a generativni modeli pretvaraju zahtjeve na običnom jeziku u izvršne slučajeve. Ljudski pregled ostaje ključan jer generirane tvrdnje mogu proći bez provjere smislenog ponašanja.

Sažmite ovu objavu uz: