Iz developerskog ugla: kako automatizirati razvoj softvera

S pojavom sve većeg broja alata, ali i umjetne inteligencije sposobne za pisanje programskog koda, developerima je na raspolaganju niz rješenja za povećanje produktivnosti. Korištenjem nekih od tih rješenja nastao je i domaći alat za brzi razvoj aplikacija, FIYU, a voditelj njegovog razvoja, Saša Ivičević, jedan od predavača s ovogodišnjeg .debuga, podijelio je s nama svoje “tajne i trikove” za automatizaciju određenih procesa u razvoju softvera.

Učenje iz iskustva

Kad govorimo o razvoju softvera, bilo da se radi o razvoju softverskog produkta ili o razvoju aplikacija po narudžbi, neophodno je biti što učinkovitiji. Što zbog rokova i budžeta koji su ugovoreni ili zbog izazova s kojim se suočavaju razvojni timovi. To mogu biti nedovoljno definirani zahtjevi, nedovoljna kohezija unutar tima, fluktuacija za vrijeme trajanja projekta i drugo.

Da bismo riješili takve probleme, možemo učiti iz vlastitih grešaka ili iz iskustva drugih. Potonji pristup je mudriji. Iz iskustva drugih, “starijih”, djelatnosti možemo puno naučiti. Jedno od takvih dobrih iskustava iz industrijske proizvodnje je i automatizacija procesa, a koja se može primijeniti u kontekstu razvoja softvera.

Postavljanje ciljeva

Naravno, automatizaciju u kontekstu razvoja softvera se mora promatrati na nešto drugačiji, specifičan, način. Prije svega moramo voditi računa o tome što točno želimo postići s automatizacijom. Taj dio je relativno jasan, težimo učinkovitosti, efikasnosti i smanjenju troškova. Jedan od bitnih načina da razvojni tim bude efikasniji je automatizacija procesa koji donose povećanje učinkovitosti razvojnih timova. To možemo postići tako da automatiziramo manualne zadatke omogućujući razvojnim timovima da se fokusiraju na ključne aspekte razvoja, što će posljedično dovesti do bržeg rješavanja poslovnih problema koje softverski produkt rješava.

Saša Ivičević, Serengeti

Konkretno, Ivičević navodi i nekoliko primjera iz vlastitog iskustva razvoja softverskog produkta, Serengetijeve platforme za brzi razvoj aplikacija FIYU. Ona pokazuje da se automatizaciju može postići na više načina.

Automatizacija integracijskih procesa

Alati kao što su Jenkins, Travis CI ili GitLab CI omogućavaju razvojnim timovima kontinuirano integrirati svoj kod, što smanjuje vjerojatnost pogrešaka i osigurava konzistentnost izvornog koda. Konkretno u slučaju FIYU-a, koristimo GitLab kao repozitorij koda i kao integracijski alat.

Automatizacija testiranja

Alati poput Seleniuma, JUnita ili TestNG omogućuju automatizaciju testova, što osigurava da se greške otkriju i isprave prije nego što konačni softver dođe do korisnika. RAD platforma, FIYU, konkretno koristi JUnit za testove na backendu, za testiranje poslovne logike, i Cypress kao alat za automatsko testiranje korisničkog sučelja ili popularnije “frontenda”.

Automatizacija isporuke

Korištenjem virtualizacijskih platformi poput Dockera i orkestracijskih alata kao što je Kubernetes, proces isporuke i instalacije aplikacija na cloud platformama može se lako automatizirati, čime se smanjuje mogućnost ljudskih pogrešaka te osigurava brzina i pouzdanost isporuke.

Automatizacija DevOps-a (infrastrukture)

Kroz alate poput Terraforma ili Ansiblea, razvojni timovi mogu definirati i provesti infrastrukturne promjene kroz kod. Kad je FIYU u pitanju, koristimo Stackstorm. Riječ je o platformi za integraciju i automatizaciju servisa. Pomoću Stackstorma, FIYU konkretno, objedinjuje sve složene procese provizioniranja platforme za developere i razvojne timove. Od automatskog kreiranja git repozitorija preko CI (continuous integration) i CD (continuous deployment) procedura do kreirane infrastrukture u cloudu (Amazon Web Services).

Automatizacija praćenja i monitoringa

Alati koje FIYU koristi, kao što su Grafana, Loki ili Prometheus, omogućuju našim timovima da automatski prate performanse aplikacija i infrastrukture. Ne samo to, takvi alati omogućavaju i detaljan pregled i analizu podataka kroz bogate grafičke prikaze kao i izvještavanje u slučaju ispada ili većih opterećenja.

Zaključak

Ovdje navedeni načini automatizacije razvoja softverskih rješenja univerzalno su primjenjivi za većinu softverskih produkata. Naravno, i prilikom automatizacije treba voditi računa o umjerenosti, odnosno pametnom korištenju resursa. Treba jasno povući granicu gdje ima smisla automatizirati procese, a gdje nema. Drugim riječima, kada su u pitanju troškovi, ne smijemo se dovesti u situaciju da cijena postignute automatizacije bude veća od uštede, na koju računamo s tom istom automatizacijom – zaključuje Ivičević.