10.01.2020. ·
5 min

Automatsko testiranje i DevOps prakse

Automatsko testiranje i DevOps prakse

Česte isporuke kvalitetnog softvera, kratko vreme isporuke, brzo odgovaranje na potrebe korisnika osnovne su prednosti DevOps praksi koje, međutim, nisu moguće bez naprednih automatskih testova.

Oni obezbeđuju nužno potrebnu kontrolu kvaliteta koda i kratko vreme ciklusa od ideje do isporuke. Pa ipak, slepo verovanje u automatiku je mač sa dve oštrice pa je zdrava mera ručnog testiranja uvek dobrodošla.

DevOps prakse imaju jedan cilj - čestu isporuku što više novih funkcionalnosti krajnjim korisnicima. Za postizanje tog cilja potrebno je uskladiti različite timove, od razvojnog do operativnog sektora, i konačno, čitavu organizaciju. Osim toga, nužno je izgraditi automatizovani kanal isporuke (release pipeline) tako da isporuke budu pouzdane i jednostavne. Međutim, to nije moguće ako propustimo važnu kariku - kontrolu kvaliteta.

Da li je postojanje automatskih testova nužno

Zamislimo da aplikacije testiramo samo ručno tako da naš tim testera u svakoj iteraciji nanovo izvršava niz definisanih testnih scenarija. Kako stalno isporučujemo nova svojstva i definišemo pripadajuće testove, njihov broj stalno raste. Pod pretpostavkom da je veličina testnog tima nepromenjiva, kao i rokovi za isporuku, testeri će biti u stanju da testiranju sve manje odnosno pokrivenost koda testovima stalno će padati sve do trenutka kada ćemo zbog nedovoljnog testiranja izgubiti kontrolu nad kvalitetom proizvoda.

Jedina strategija koja nam garantuje dugoročno održivi tempo razvoja je nezavisnost od manuelnih testera i istovremeni razvoj automatskih testova uporedo sa razvojem novih funkcionalnosti. Kratkoročno, brzina razvoja će se očigledno smanjiti jer osim aplikacijskog moramo napisati i testni kod, ali će zato kvalitet koda biti dugoročno obezbeđen.

Investicija u preventivu tj. sigurnosnu mrežu automatskih testova dovodi do trajne uštede vremena koje bi se potrošilo na ispravljanje grešaka.

DevOps prakse su nezamislive bez automatizovanog kanala isporuke koji automatizuje proces izgradnje i isporuke sofvera od trenutka zapisivanja, promene izvornog koda u sistem za verziranje, sve do isporuke takve promene u produkcijsko okruženje.

Važan deo kanala isporuke je integracija automatskog i manuelnog testiranja. Različite vrste testova se izvršavaju u različitima stadijumima kanala isporuke. Npr. unit testovi se izvršavaju za vreme izgradnje binarnih datoteka. Različiti testovi, poput funkcionalnih testova izvršavaju se i u različitim testnim okruženjima.

Kanal isporuke prvo automatski isporučuje novoizgrađenu verziju softvera u svako testno okruženje čime se automatizuje uspostava testnih okruženja za manuelno testiranje. Danas testeri često troše većinu svog vremena na postavljanje testnog okruženja a ne na testiranje. Uz automatski kanal isporuke, uspostavljanje testnih okruženja postaje rutinski zadatak.

U nastavku kanala isporuke možemo imati i pretprodukcijsko okruženje koje je optimalno za finalna testiranja pre konačne isporuke korisnicima. Kao što ćete u nastavku videti, prilike za testiranje softvera ne prestaju zadnjim stadijumom kanala isporuke - isporukom u produkcijsko okruženje.

Testiranje u produkciji

Testiranje u produkciji je kontraverzna metoda koju svi DevOps giganti poput Google-a, Amazona, Microsofta uveliko koriste. Za efektno testiranje u produkciji koje ne donosi dodatne rizike, moramo zadovoljiti niz pretpostavki. Potrebno je napraviti segmentaciju produkcije, tj. umesto jednog produkcijskog okruženja, uspostaviti više njih, tako da različite skupine korisnika koriste različita okruženja.

Uobičajeno je da je prvi skup korisnika prošireni razvojni tim (tzv. dogfooding praksa), drugi skup su često svi ostali korisnici iz iste organizacije, a nakon toga slede odabrani spoljni korisnici (za Microsoft su to npr. MVP-evi), odabrani ključni veliki korisnici i tek na kraju, šira populacija. Nove funkcionalnosti se isporučuju u svako od ovakvih okruženja tek kad smo se uverili da u prethodnom okruženju sve funkcioniše u skladu s očekivanjima. Nakon svakog koraka, potrebno je da prođe određeno vreme. Zavisno od dinamike upotrebe našeg softvera to može biti od nekoliko sati do više dana. Tako se na vrlo kontrolisani način sve veći procenat korisnika izlaže novoj funkcionalnosti.

Prikupljajući i analizirajući informacije o ponašanju aplikacije i greškama, o metrikama vezanim za performanse, ali i podatke o upotrebi pojedinih funkcionalnosti, možemo uočiti da se u nekoj od tih varijanti produkcije dešava nešto loše i prekinuti dalju isporuku. Koristeći tzv. preklopnike svojstava (eng. feature switches) imamo potpunu kontrolu nad izloženošću pojedinog korisnika ili određene klase ili grupe korisnika svakom pojedinačnom novom svojstvu. Većina funkcionalnosti se prvo isporučuje skrivena iza isključenog feature switch-a, a naknadno se uključuju za sve šire grupe korisnika.

Kombinacija segmentacije produkcije, postepenog izlaganja korisnika novim funkcionalnostima koristeći feature switches i kontinuiranog praćenja ponašanja aplikacija u produkcijskom okruženju omogućava optimalno testiranje u produkciji.

Uprkos tome što bez automatizovanog testiranja ne možemo ostvariti brz tempo isporuka, bez manuelnog testiranja ne možemo biti sigurni da smo pokrili sve “nemoguće” scenarije za koje najčešće nema smisla pisati automatske testove. Kako po pravilu nikada nemamo dovoljno manuelnih testera, testiranje u produkciji je idealan način da se izvuče najbolje uz pomoć krajnjih korisnika. Testiranje u produkciji je naravno moguće jedino kad rizike da će „obični“ korisnici doživeti neku nedopustivu grešku kontrolišemo ranije opisanom kombinacijom segmentacije produkcije, postepenog izlaganja korisnika novim funkcionalnostima koristeći feature switcheve i kontinuiranog praćenja ponašanja aplikacija u produkcijskom okruženju.

Standardni manuelni testovi će naravno i dalje postojati, ali najčešće kao privremena faza za preciznije definisanje testnih scenarija pre nego što ih automatizujemo. Osim toga, uvek će postojati i tzv. istraživačko testiranje (eng. exploratory testing), gde bez unapred definisanog postupka testeri koristeći svoju intuiciju i iskustvo u pronalaženju grešaka.

Ako želite da kroz praktičnu obuku savladate DevOps principe i pripadajuće inženjerske prakse koje će vam omogućiti kontinuiranu isporuku kvalitetnog softvera prijavite se na trening “Kontinuirana isporuka uz DevOps servise!”, 11 i 12. februar u Beogradu. Trening je u organizaciji kompanije Agile Humans a vode ga Ognjen Bajić i Ana Roje Ivančić, DevOps konsultanti sa više od 15 godina profesionalnog iskustva u razvoju softvera. Više o treningu na  http://bit.ly/DevOps_Beograd

Oceni tekst

4
12 glasova
Ana Roje Ivančić Ana Roje Ivančić

Ana Roje Ivančić je DevOps konsultant, specijalista za Azure DevOps servise i server, Scrum.org Professional Scrum Trainer, sa preko 15 godina iskustva u profesionalnom razvoju softvera. Veruje da prava kombinacija agilnih praksi i integrisanih alata osigurava da softverski razvojni timovi postignu kontinuiranu isporuku vrednosti klijentima. Ana je čest gost i govornik na konferencijama iz sofverske industrije i redovno održava treninge i radionice. Nosilac je MVP (Most Valuable Professional) priznanja za razvojne tehnologije koje dodeljuje Microsoft . Poseduje veći broj Microsoft i Scrum sertifikata.

0 komentara

Iz ove kategorije

Svi članci sa Bloga

Slični poslovi

Povezane kompanije po tagovima