16.12.2021. ·
4 min

Voli me, ne voli me: test coverage edition

Voli me, ne voli me: test coverage edition

Developeri ili obožavaju ili apsolutno ne žele da čuju za testove, nema nekog sigurnog, štagod međuprostora. Pisanje unit testova ume da bude jako dosadan task, te ne radi jer nisi dobro postavio test podatke, te pišeš iste satima, a onda test coverage bude manji od očekivanog, te izmeniš nešto sitno u kodu pa pola testova popuca, kao da već nije dovoljno što pišeš gomilu koda kroz servise, pa još i ovo preko svega - ponekad se zapitaš: gde su više ti hologrami da programiraju umesto mene?

TDD je bio jako često pominjan pre par godina, onda se situacija umirila i DDD je došao na red, međutim čini mi se da mnogi projekti i dalje nemaju dobro napisane testove i ljudi i dalje zaziru od njih. Zašto ih pišemo uopšte?

Pre svega, oni su neka vrsta dodatne dokumentacije za kod: ako se sećate momenta kad smo učili da crtamo algoritme, ponekad je bilo mnogo lakše osmisliti ih tako što uzmeš set podataka i prolaziš kroz njega, dok ne uhvatiš caku i formulu po kojoj radi. Mnogima je lakše da kroz realan primer ukapiraju kako nešto radi - a testovi jesu realan primer sa realnim podacima, dakle mogu da pomognu developeru koji dođe posle tebe da razume metode sa komentarom “only god knows what this is supposed to do, but it works”.

Smanjuje broj bagova koje možeš da dobiješ nazad, dakle skraćuje muke i tebi i test timu kasnije. Često se dešava da dok pišeš testove, i dok se oni onako fino rumene u procesu, moraš da se sa razumevanjem vratiš na zahteve i kod - pa uhvatiš da si napravio logičku grešku, preskočio neki deo zahteva i slično, pa dopraviš sve to na vreme i na taj način preskočiš sramotu vraćenog bug-a, vreme koje moraš da uložiš da se prisetiš, nađeš, izmeniš, testiraš, prođeš kroz Pull request review i onda testerima skratiš dupli posao. 

Naravoučenije, bolje da pišeš testove odmah jer skraćuješ potrošeno vreme na task kasnije. I ovo je sledeći razlog zašto pisati testove - krate vreme razvoja. Što kroz manje bug-ova, što kroz lakši refactoring, što kroz kraće debugovanje.

Ponekad čak i uprosti kod - pogotovo kod TDD pristupa, ume da kompleksnim metodama smanji kompleksnost, a ponekad ga i ulepša tj očisti jer tokom pametnog prolaska kroz kod da bi test proradio, shvatiš da postoji elegantnije rešenje, pa ga i primeniš. 

Možda najveća prednost jeste to što dobro napisani testovi itekako spašavaju glavu od regresionih bagova prilikom refaktorizacije, pogotovo u ogromnim projektima. Svi smo imali taj momenat - nakon nekoliko godina razvoja, klijent odluči da nešto treba da radi totalno drugačije. Ulaziš u refaktorizaciju, nemaš pojma ni gde sve ima toga, zameniš par stvari na par mesta, pustiš sve na testiranje i onda kreće kiša bugova - ne radi pola stvari u pola sistema. Zašto? Zato što smo zaboravili da se koristi i ovamo, i tamo, i onamo. Dobro napisani testovi to ne bi dozvolili nikako - popucalo bi sve na vreme, i mogao bi da rešiš to propisno na veme. 

Sada, tu su naravno i integracioni testovi,  pa možemo da idemo i dalje sa automatskim testovima, itd. I sve bi trebalo da ih imamo na projektu

Integracioni testovi su malo nezgodniji jer oni proveravaju povezanost svega u sistemu iliti da li se sve komponente lepo slažu i rade zajedno kako treba, pre svega iz ugla korisnika. Ono što je kod njih nezgodno je što zavise i od okruženja (ne razvojnog), baza podataka, eksternih sistema, i umeju da budu nezgodni za pisanje. Međutim, na kraju dana puno znače: ako nešto negde tamo ne radi kako treba, integracioni testovi će da vrište, i ponovo si spašen gomile bug-ova. Možda je dobro da se prilikom pisanja ovih testova uključi i QA osoba, kako bi se pokrili svi mogući granični slučajevi, i izbegle muke u budućnosti.

Ono što može da bude problem je što ponekad ne vodimo računa i ne setimo se graničnih slučajeva, pa ih ne uključimo u testove, bili oni unit ili integracioni. Ako imaš QA tim, dobar savet je da pitaš da ti daju nekoliko graničnih slučajeva, pored glavnog. Oni to obično imaju pripremljeno i dokumentovano negde, a dosta su dobre smernice za tvoje pisanje dobrih testova.

Da, inicijalno “traće” mnogo vremena, mrsko ti je da ih pišeš, ali na kraju dana - piši testove, postavi visoke standarde za coverage, i zahvali se samom sebi kroz par godina. 

Oceni tekst

10 osoba je glasalo, prosečna ocena: 5
Jovana Milosavljević Jovana Milosavljević

Sad sam senior developer, a nekada davno sam bila atraktivna plavuša koja se bavi marketingom :). I dalje se tešim da bar nisam oćelavela od čupanja kose od koda :) U slobodno vreme volim da čitam, pijem pivo, osvajam kafane i sanjam da ću kad porastem biti venture capitalist.

3 komentara

milijana ćukovac milijana ćukovac 16.12.2021.
1

ova jovana kao da je stvarno napisala neki test....

Miljan Miljan 17.12.2021.
3

Miljana ae ne ser* molim te. Znam devojku lično i napisala je više testova nego što ćeš ti u sledećem životu. M

Milos Kisic Milos Kisic 25.12.2021.
0

Volim sve sto vole mladi

Iz ove kategorije

Svi članci sa Bloga