key successful unit testing how developers test their own code
Testerji črne škatle ne skrbi za enotno testiranje. Njihov glavni cilj je potrditi prijavo glede na zahteve, ne da bi se spuščali v podrobnosti izvedbe.
A kot zanimivost oz Razmišljanje izven škatle , ste se kdaj vprašali, kako razvijalci preizkušajo svojo kodo? Katero metodo uporabljajo za testiranje, preden izdajo kodo za testiranje? Kako je testiranje razvijalcev pomembno v agilnem procesu? Odgovor na vse to je enotno testiranje. Želim vas poučiti o pomembnosti preskušanja enot, tako da lahko razvojne in preizkusne skupine bolj sodelujejo pri oblikovanju, testiranju in izdaji odlične aplikacije.
Kdo ve, da boste v prihodnosti nekateri morda celo prešli na testiranje bele škatle in uporabili te tehnike za preverjanje in izboljšanje kode!
Kaj se boste naučili:
Kaj je enotno testiranje?
Enotno testiranje ni nov koncept. Tam je že od zgodnjih dni programiranja. Običajno razvijalci in včasih Preizkuševalci bele škatle napišite enotne teste za izboljšanje kakovosti kode s preverjanjem vsake enote kode, ki se uporablja za izvajanje funkcionalnih zahtev (tudi testni razvojni TDD ali test-first development).
Večina od nas morda pozna klasično definicijo -
'Preizkušanje enote je metoda preverjanja najmanjšega dela preizkusne kode glede na njen namen.' Če namen ali zahteva ni uspela, potem preizkus enote ni uspel.
Z enostavnimi besedami pomeni - pisanje kosa (enotni test) za preverjanje kode (enote), napisane za izvedbene zahteve.
Enotno testiranje v SDLC
Pri testiranju enote razvijalci uporabljajo ročne ali avtomatizirane teste, da zagotovijo, da vsaka enota v programski opremi izpolnjuje zahteve kupca. Ta enota je lahko posamezna funkcija, objekt, metoda, postopek ali modul v preizkušeni programski opremi.
Pisanje enotnih testov za preizkušanje posameznih enot olajša pisanje celovitih testov, saj so vse enote skupaj. Med razvojem programske opreme se to opravi kot prva stopnja testiranja.
Pomen pisanja enotnih testov
Preizkušanje enote se uporablja za oblikovanje robustnih komponent programske opreme, ki pomagajo vzdrževati kodo in odpraviti težave v kodnih enotah. Vsi vemo, kako pomembno je odkriti in odpraviti napake v zgodnji fazi cikla razvoja programske opreme. To testiranje služi istemu namenu.
Je sestavni del agilnega procesa razvoja programske opreme. Ko bi se moral zagnati testni paket enote za nočno gradnjo in ustvariti poročilo. Če kateri od preskusov enote ni uspel, skupina QA te zgradbe ne bi smela sprejeti za preverjanje.
Če bi to postavili kot standardni postopek, bi v zgodnjem razvojnem ciklu ujeli veliko napak, s čimer bi prihranili veliko časa za testiranje.
Vem, da mnogi razvijalci sovražijo pisanje preskusov enot. Zaradi prezrtega urnika ali pomanjkanja resnosti ignorirajo ali pišejo slabe primere enote (ja, pišejo prazne enote, zato jih 100% uspešno prestane ;-)). Pomembno je, da napišete dobre enote ali jih sploh ne pišete. Še pomembneje je zagotoviti dovolj časa in podporno okolje za resnične koristi.
Metode preskušanja enot
Izvaja se lahko na dva načina:
- Ročno testiranje
- Avtomatizirano preskušanje
V Ročno testiranje , preizkuševalec ročno izvaja testne primere brez uporabe avtomatiziranega orodja. Tu se vsaka faza testa izvede ročno. Ročno testiranje je dolgočasno, zlasti pri ponavljajočih se testih in zahteva več truda za ustvarjanje in izvajanje testnih primerov. Ročno preskušanje ne zahteva poznavanja nobenega orodja za preskušanje.
Dejstvo je, da 100% avtomatizacije ni mogoče, zato bo vedno izveden določen nivo ročnega testiranja.
V Avtomatizirano testiranje, za avtomatizacijo testov / testnih primerov se uporabljajo orodja za avtomatizacijo testiranja programske opreme. Orodje za avtomatizacijo lahko posname in shrani test in ga je mogoče predvajati tolikokrat, kot je potrebno, brez nadaljnjega človeškega posredovanja.
Ta orodja lahko celo vnašajo preskusne podatke v sistem, ki se preskuša, lahko pa tudi primerja pričakovane rezultate z dejanskimi rezultati in samodejno ustvari poročila. Vendar so začetni stroški postavitve orodij za avtomatizacijo preskusov visoki.
Tehnike znotraj enotnega testiranja
# 1) Testiranje bele škatle:
kako razdeliti niz po znaku v pythonu
Pri preizkušanju bele škatle preizkuševalec pozna notranjo strukturo programske opreme, vključno s kodo, in jo lahko preizkusi glede na zasnovo in zahteve. Zato je testiranje bele škatle znano tudi kot pregledno preskušanje .
# 2) Testiranje črne skrinjice:
Pri preizkušanju črne skrinjice preizkuševalec ne pozna notranjih struktur niti kode programske opreme.
# 3) Testiranje sive škatle:
To se imenuje tudi preizkušanje polprozorne tehnike kar pomeni, preizkuševalci se zavedajo le delno notranje strukture, funkcij in zasnov, skupaj z zahtevami. Odpravljanje napak poteka z dejanskim vnosom s čelne strani, da dobite natančne podatke v zaledni strani. Siva škatla se zato šteje za kombinacijo tehnik testiranja črne škatle in bele škatle.
Testiranje sive škatle zajema naslednje vrste testiranja:
- Matrično preskušanje.
- Preskušanje vzorcev.
- Preizkušanje pravokotnega vzorca.
- Testiranje regresije.
Prednosti preskušanja na enoto
- Postopek postane gibčen: Za dodajanje novih funkcij ali funkcij obstoječi programski opremi moramo spremeniti staro kodo. Toda spreminjanje stvari na že preizkušeno kodo je lahko tvegano in drago.
- Kakovost kode se izboljša: Kakovost kode se samodejno izboljša, ko se opravi enotno testiranje. Napake, ugotovljene med tem preskušanjem, so odpravljene, preden so poslane v fazo preizkušanja integracije. Rezultat je zanesljivo načrtovanje in razvoj, saj razvijalci pišejo testne primere, tako da najprej razumejo specifikacije.
- Zgodaj zazna napake: Ko razvijalci izvajajo preskuse enot, odkrijejo napake v zgodnjem življenjskem ciklu razvoja programske opreme in jih odpravijo. To vključuje napake ali manjkajoče dele v specifikaciji ter napake pri izvajanju programerja.
- Lažje spremembe in poenostavljene integracije: S preizkušanjem enote razvijalec olajša prestrukturiranje kode, spreminjanje in vzdrževanje kode. Prav tako olajša preizkušanje kode po integraciji. Če odpravite težavo s preskušanjem enote, lahko odpravite številne druge težave, ki se pojavijo v kasnejših fazah razvoja in preizkušanja
- Razpoložljivost dokumentacije: Razvijalci, ki pozneje preučujejo funkcionalnost, se lahko sklicujejo na dokumentacijo o preskušanju enote in zlahka najdejo vmesnik za preskus enote ter hitro in enostavno popravijo ali delajo.
- Enostaven postopek odpravljanja napak: Pomaga pri poenostavitvi postopka za odpravljanje napak. Če test na kateri koli stopnji ne uspe, je treba kodo odpraviti ali pa postopek lahko brez ovir nadaljujete.
- Nižji stroški: Ko se med preizkušanjem enote odkrijejo in odpravijo napake, se zmanjšajo stroški in čas razvoja. Če brez tega testiranja iste napake odkrijemo pozneje po integraciji kode, postane težje slediti in jih odpraviti, zaradi česar je dražje in podaljšuje čas razvoja.
- Popolnost kode lahko dokažemo z enostavnimi testi: To je bolj uporabno v agilnem postopku. Preizkuševalci ne dobijo funkcionalnih zgradb za testiranje, dokler integracija ni končana. Izpolnjevanja kode ni mogoče upravičiti s tem, da dokažete, da ste vpisali in preverili kodo. Toda izvajanje preskusov Unit lahko dokaže popolnost kode.
- Prihrani čas razvoja: Dokončanje kode lahko traja več časa, vendar je zaradi manj napak pri preizkusu sistema in sprejemanja mogoče prihraniti celoten čas razvoja.
- Pokritost kode je mogoče izmeriti
Enoten preskusni cikel
[slika vir ]
Kaj naredi dober test enote?
No, nisem prava oseba, ki bi povedala, kaj je dober Unit Test, vendar lahko na podlagi svojih opažanj o različnih projektih povem značilnosti dobrega Unit Test. Slab preizkus enote projektu ne doda vrednosti. Namesto tega se stroški projekta znatno povečajo pri pisanju in upravljanju slabih preskusov enot.
Kako napisati dobre enote?
- Za preverjanje posamezne enote kode in ne integracije je treba napisati test enote.
- Majhni in izolirani enotni testi z jasnim poimenovanjem bi olajšali pisanje in vzdrževanje.
- Sprememba drugega dela programske opreme ne bi smela vplivati na test enote, če je ta izoliran in napisan za določeno enoto kode.
- Moral bi teči hitro
- Preskus enote je treba ponovno uporabiti
Okvirji za enotno preskušanje
Enote za preskušanje enot se večinoma uporabljajo za hitro in enostavno pisanje preskusov enot. Večina programskih jezikov ne podpira testiranja enot z vgrajenim prevajalnikom. Odprtokodna in komercialna orodja drugih proizvajalcev lahko še bolj zabavajo enotno testiranje.
Seznam priljubljenih Orodja za enotno preskušanje za različne programske jezike:
- Okvir Java - JUnit
- PHP okvir - PHPUnit
- C ++ ogrodja - UnitTest ++ in Google C ++
- .NET framework - NUnit
- Python framework - py.test
Napačne predstave in resnice
- Za pisanje kode z enotami testnih primerov traja več časa, mi pa za to nimamo časa - v resnici bi to dolgoročno prihranilo vaš razvojni čas.
- Preizkus enote bo našel vse napake - ne bo, saj namen preskusa enote ni najti napake, temveč razviti robustne programske komponente, ki bodo imele manj napak v poznejših fazah SDLC.
- 100-odstotna pokritost kode pomeni 100-odstotno pokritost s testom - to ne pomeni, da koda ne vsebuje napak.
Kako sprejeti enotno testiranje?
Dobro enotno testiranje je mogoče izvesti v treh osnovnih delih.
- Napiši kodo za preskus enote
- Zaženite preskusno kodo enote, da preverite, ali ustreza sistemskim zahtevam
- Izvedite programsko kodo, da preizkusite morebitne napake in ali koda ustreza sistemskim zahtevam.
Če se po zgornjih treh korakih zdi, da je koda pravilna, naj bi bil test enote opravljen. Če sistem ne izpolnjuje sistemskih zahtev, test ne uspe. V tem primeru mora razvijalec ponovno preveriti in popraviti kodo.
V nekaterih primerih je treba kodo ločiti za natančnejše izvajanje tega testiranja.
Najboljša vaja
Če želite med tem testiranjem ustvariti najboljšo kodo, upoštevajte spodnje točke:
- Koda mora biti močna: Obstajajo primeri, ko test ne uspe ali se v najslabših primerih sploh ne izvede, če je koda pokvarjena.
- Razumljivo in razumno: Koda mora biti lahko razumljiva. To razvijalcu olajša pisanje kode in tudi drugim razvijalcem, ki bodo naknadno delali s kodo, bo enostavno odpraviti napake.
- Bi moral biti en primer: Testi, ki opredeljujejo več primerov v enem, so zapleteni za delo. Tako je pisanje ene same kode primera najboljša praksa, ki olajša razumevanje in odpravljanje napak.
- Dovoli avtomatizirane teste: Razvijalci naj poskrbijo, da bo test potekal v avtomatizirani obliki. Moral bi biti v neprekinjenem postopku dostave ali integraciji.
Upoštevati je treba tudi druge točke:
- Namesto da bi ustvarili testne primere za vse pogoje, se osredotočite na test, ki vpliva na vedenje sistema.
- Zaradi predpomnilnika brskalnika obstaja verjetnost ponovitve napake.
- Testni primeri ne smejo biti soodvisni.
- Bodite pozorni tudi na stanje zanke.
- Pogosteje načrtujte testne primere.
Zaključek
Enotno preskušanje se pojavi, ko je treba preizkusiti vsako funkcijo posebej. Smiselno je med tem testiranjem odkriti in odpraviti napake ter prihraniti čas in stroške, namesto da bi jih iskali na poznejši stopnji razvoja programske opreme.
Čeprav ponuja številne prednosti, obstajajo tudi omejitve uporabe. V celotnem postopku razvoja programske opreme je potrebna stroga disciplina in doslednost premagati omejitve in doseči predvidene koristi.
Vaši komentarji so najbolj dobrodošli!
Kakšna so vaša opažanja o testiranju enot v vaši skupini kot preizkuševalca črnih skrinjic? Ima kdo boljšo idejo za uspešno enotno testiranje?
Priporočeno branje
- Razlike med preskušanjem enot, preskušanjem integracije in funkcionalnim preskušanjem
- 20 najbolj priljubljenih orodij za enotno testiranje v letu 2021
- Pisanje enotnih testov s Spock Framework
- Najboljša orodja za testiranje programske opreme 2021 [QA Test Automation Tools]
- Ključne razlike med testiranjem črne škatle in testiranjem bele škatle
- Testiranje obremenitve z vadnicami HP LoadRunner
- Razlika med testiranjem namizja, odjemalskega strežnika in spletnim preskušanjem
- Kaj je testiranje gama? Zaključni preizkusni oder