Automatizacija – najpouzdaniji sustav ranog upozorenja u razvoju softvera

Autor: Matija Huremović, KING ICT, Software Tester – Sektor za razvoj softverskih rješenja

Iako se tako čini, automatizacija u razvoju softvera, uključujući i njegovo testiranje, nije nov koncept. Ova tehnologija, koja zvuči pomalo futuristički, zapravo postoji u nekom obliku već tridesetak godina. Ali zašto tek u zadnjih desetak ili manje godina čujemo izraze “automatizacija će ukinuti ručno testiranje”, “automatizacija je jedini nužan način testiranja” i slično?

Prvo (iznimno) kratka povijest

Stvarna priča je da su se takvi izrazi koristili vrlo često na samom početku tehnologije, vjerojatno češće nego danas. Naravno, oni koji su ih najviše ponavljali bili su oni koji su razvijali i sam automatizacijski softver te oni koji vole biti ukorak sa svakom novom tehnologijom. U svakom slučaju, bili su jako uspješni oko širenja svijesti o automatizaciji softvera i ubrzo je svaka tvrtka primijetila prednosti automatskog testiranja u odnosu na „staromodno“ ručno testiranje. Oni koji su radili na testiranju softvera vjerojatno nisu bili presretni čuti kako će im nova tehnologija oteti posao. Barem u tome se možemo poistovjetiti s njima, jer tko danas nije čuo da će ChatGPT zamijeniti programe?

Stručnjaci obučeni za rad s novim alatima, počeli su ih uvoditi u svakodnevni tijek razvoja softvera i čak su razvili poboljšanja dizajnirana za njihovu situaciju kako bi im se olakšao život. No vrlo brzo pojavili su se prvi problemi.

Oni koji se sjećaju kako su funkcionirala računala prije više od dvadeset godina odmah će razumjeti tehnološka ograničenja koja su dolazila s njima. Sam razvoj softvera tada je bio mnogo složeniji nego što je danas, kao što je vrijeme i razvoj automatizacije testiranja istog. Osim na iznimno specifičnim platformama, danas nitko neće prigovarati ako aplikacija zauzima 12 megabajta umjesto 10. No u to vrijeme je to značilo jednu disketu manje koju je potrebno nositi sa sobom.

Uz tehnološka ograničenja glavni problem je bio omjer dobivene vrijednosti i utrošenog vremena. Današnji alati su mnogo više user-friendly nego što su bili prije deset, dvadeset ili više godina. No u početnicima automatizacije korištenje tih alata tražilo je znatno tehničko znanje i edukaciju za rad s njima. Izrađivanje jednog automatskog testa utrošilo bi višestruko više vremena nego izvršavanje istog testa ručnim testiranjem, ponekad i nekoliko desetak puta više. Čak i kada bi taj test i bio uspješno kreiran prestao vrijediti istog trenutka kada bi se aplikacija izmijenila, i evo nas opet na početku. Naravno, s obzirom na to da se većina testiranja odvija tijekom izrade aplikacija ona se ponekad mijenjala i na dnevnoj bazi.

I tako je automatizacija testiranja ispala s radara. Barem do unatrag nekoliko godina.

Povratak

Poput Jamesa Camerona s prvim filmom Avatar, mi koji radimo na automatizaciji testiranja softvera konačno smo dočekali da tehnologija uhvati korak s našom vizijom. S vremenom su se počeli pojavljivati ​​novi, bitno bolji alati, smanjivala su se tehnološka ograničenja i unaprjeđivao razvojni proces. Ali ovoga puta nije bilo straha od gubitka posla ili želje da se potpuno zaboravi na ručno testiranje. Kako to?

Jedan od glavnih razloga je što smo naučili ne srljati pred rudo. Samo zato što je tehnologija nova ili bolja u nekom pogledu ne znači da će se i opstati ili prevladati nad lošijom. VHS je pobijedio Betamax, a danas rijetko tko zna što je Zune dok svi znamo za iPod.

Srećom, izgleda da smo mnogo toga naučili u godinama između prve pojave automatizacije i njezinog povratka. Današnji alati, poput Seleniuma, Cypressa, k6 i ostali su znatno pristupačniji korisnicima nego njihovi prethodnici. Iako i dalje zahtijevaju određene tehnologije poznavanja, taj prag je osjetno niži nego što je bio prije. Jedna od glavnih prednosti je i vrijeme potrebno kako bi naučili koristiti alate. Dok su prije stručnjaci prolazili kroz razne edukacije koje su znale trajati i do nekoliko mjeseci, danas ih većina može početi koristiti alat u osnovnom kapacitetu kroz nekoliko dana. Naravno, to što ih je jednostavno početi koristiti ne znači da je jednostavno i ovladati njima.

Jedna od velikih prednosti automatizacije testiranja je pojednostavljenje procesa razvoja softvera. S verzioniranjem koda, raznim virtualnim okruženjima, postavljanjem okruženja koja služe isključivo za testiranje te mogućnošću izvršavanja skripti bez nadzora, testerima je puno lakše osmisliti i implementirati testove koji će donijeti najveću vrijednost u najkraćem vremenu.

Naravno, najveća prednost su današnja tehnološka dostignuća. Računala su desetke puta brža, internetska povezanost je dostupna, a zajednice sa sličnim interesima znatno su veće nego što su bile prije. Svi su to čimbenici koji omogućuju brzi napredak ne samo u stvaranju alata za automatizaciju, već iu edukaciji o njihovoj uporabi.

Mogućnosti moderne automatizacije testiranja

Glavno pitanje sada je što sve zapravo ta moderna tehnologija može? Kratak odgovor bio bi – sve što i osoba može! Naravno, kratak odgovor ne bi bio nimalo zanimljiv, a nekima bi možda i stvorio krivu percepciju o automatizaciji i cjelokupnom testiranju.

Matija Huremović

Najčešća primjena alata za automatizaciju je funkcionalno testiranje putem korisničkog sučelja. To znači da softver simulira korisnike pomoću naših aplikacija, bilo da se radi o klikovima na navigacijski izbornik, unos pojmova u tražilicu, kupnji proizvoda u online trgovini i slično. S ovom vrstom automatizacije testiranja, aplikacija zapravo ne vidi razliku između stvarnog korisnika i našeg testa, te se stoga ponaša identično kao u stvarnom scenariju. Ovo je iznimno važno jer je jedna od glavnih svrha testiranja vidjeti kako će se krajnji proizvod ponašati nakon što ga isporučimo korisnicima.

Ono gdje je automatski test ima prednost nad manualnim, to jest da tester sjedi za računalom i koristi aplikaciju, to je što će automatski test svakog puta zadane radnje izvršiti identično. Tester ili korisnik će ponekad neki od scenarija izvršiti drugim slijedom, ili će pričekati nekoliko sekundi ili minuta prije nego što prijeđe na sljedeći korak, a ponekad će jednostavno i napraviti grešku prilikom unosa. Nerealno je očekivati ​​od bilo koje osobe da u više stotina prolazaka kroz neku aplikaciju ne pogriješi prilikom unosa lozinke, no automatski test će ju uvijek ispravno upisati.

Još jedna prednost koju automatizacija ima kod ovakvih vrsta testiranja je njezina brzina. Zamislite da testirate online trgovinu i imate scenarij koji kaže „pretraži trgovinu za proizvod X, dodaj ga u košaricu i dovrši kupnju.“ Primjer je jednostavan i sigurno vam ne bi trebalo više od nekoliko minuta da ga izvršite. No koliko bi vam vremena bilo potrebno kad umjesto jednog scenarija imate stotinjak ili više, svaki s različitim proizvodom? Vjerojatno bi jako brzo postali frustrirani repetitivnom radnjom te bi vam bilo potrebno nekoliko sati. Srećom, automatski test nema ugrađeni modul umjetne inteligencije koji mu dopušta osjećaj frustracije, dosade ili neugodnosti zbog sjedenja pred računalom toliko dugo pa bi u ovakvoj situaciji premašio stvarnu osobu i brzinom i konzistentnošću.

Ovi hvalospjevi oko brzine automatizacije lijepo zvuče, ali kako bi se prikazali ispravni podaci smo za ovaj članak odlučili provesti nekoliko testova putem automatizacije i ručnim testiranjem. Korišten je primjer spomenut ranije s pretragom i kupovinom određenog proizvoda u online trgovini.

Scenarij je ručno izvršen dvadesetak puta kako bi se dobilo prosječno vrijeme. Nakon dvadeset iteracija testiranja najbrže vrijeme bilo je 1 minuta i 22 sekunde, a najsporije 1 minuta i 39 sekundi. Prosječno vrijeme potrebno za izvršenje jednog testa bilo je 1 minuta i 29 sekundi, što znači da je ručno testiranje trajalo nešto manje od pola sata.

Za isti scenarij izrađen je i automatiziran test koji je izvršen dvadeset puta. Njegovi rezultati znatno su drugačiji, s najkraćim vremenom izvršavanja od 12 sekundi i najduljim od 17 sekundi. Prosječno vrijeme izvršavanja bilo je 14,5 sekundi, što znači da je automatizirano testiranje trajalo 4 minute i 50 sekundi.

Iz ovog primjera vidimo da će u sličnim testovima automatizacija odraditi vaš posao otprilike 6 puta brže od osobe, a važno je napomenuti da je prilikom ručnog testiranja u jednom slučaju napravljena pogreška prilikom upisivanja naziva proizvoda što je produžilo vrijeme testiranja. Naravno, automatizirani test nije napravio pogrešku.

Što se događa iza kulisa

Zašto onda ne koristimo isključivo automatske testove s obzirom na to da njihova brzina i konzistentnost ostavljaju ovoliki dojam? Odgovor na to je jednostavan: ne postoji čarobni gumb ni na jednoj tipkovnici (a tražili smo) koji bi taj test programirao umjesto nas.

Automatizacija zahtijeva određeno znanje od testera koji radi s njom, to je jedna od stvari koja se nije promijenila u posljednjih trideset godina, ali isto tako zahtijeva i određeno vrijeme. Koliko god se automatski testovi brže izvršavaju od ručnih, toliko je više vremena potrebno da se izrade. Za izradu automatskog testa za gore navedeni primjer bilo je potrebno oko 40 minuta.

Problem kod izrade automatiziranih testova je isti kao generalni problem s računalima; potrebno je sve specificirati do najsitnijeg detalja. Ako posebno kažemo „pretraži trgovinu za proizvod X“, ona će to odmah razumjeti, bez računala, vremena i automatskog testa, potrebno je reći gdje se točno nalazi funkcionalnost za pretraživanje, koju odaberete, što upišete u obrazac za pokretanje pretrage.

U tome leži glavna mana automatizacije: ponekad se njezina izrada jednostavno ne isplati. Odluka oko automatizacije nekog od testova nije nešto što se donosi hirom, već se u obzir uzimaju razni faktori koji se raspravljaju unutar tima. Jedni od najvažnijih aspekata automatizacije koje treba razmotriti koliki je omjer vremena potrebnog za izradu automatskog testa naspram koliko će se često taj test izvršavati. Ako je potrebno nekoliko sati za izradu testa koji će se do kraja razvoja aplikacija izvršiti samo nekoliko puta, nažalost automatizacija tog testa neće donijeti dovoljnu vrijednost. Nasuprot tome, ako će se taj test izvršavati svaki dan, ili čak nekoliko puta dnevno, u narednih šest mjeseci automatizacija usprotiv dugom razvoju ušteđuje mnogo više vremena i time izrazito doprinosi razvoju aplikacije.

Nadalje, najteža stvar kod donošenja odluke oko automatizacije je i ona najnevidljivija. Radi se o faktoru izmjene aplikacija tijekom razvoja. Bilo kakav softver u svom razvoju prolazi kroz razne stadije, od prototipa do konačnog proizvoda njegova funkcionalnost i izgled se može mijenjati nekoliko desetaka puta. Kod ručnog testiranja to ne stvara preveliki problem, najviše što se može dogoditi je da osobi treba neko vrijeme da otkrije gdje se traženi gumb pomaknuo ili u kojem se naslov na izborniku promijenio. Kada jednom to sazna prilagodit će se i nastaviti neometano s radom. No kod pisanja automatskih testova priča je u potpunosti drugačija. Ako pritisnemo gumb s jednog mjesta na drugo ili promijenimo naslov, pa čak i ako napravimo promjenu koja nije vidljiva na sučelju aplikacije (kao što su klase zadanih HTML elemenata) riskiramo kvar našeg automatskog testa. Zbog toga je potrebno izrazito pomno razmotriti, pa čak i pokušati predvidjeti, hoće li ona verzija aplikacije koju izrađujemo automatski testirati biti dovoljno slična njenoj krajnjoj verziji. Naravno, kod takve izmjene nije potrebno cijeli test automatizirati ispočetka, no svako vrijeme utrošeno je na njegovo prilagođavanje faktora kod donošenja odluke.

Najveći problem je onaj koji se rano pronađe

Preostaje nam još jedna velika prednost automatizacije – mogućnost ranog upozorenja.

U slučaju ručnog testiranja postoji jako određeno vrijeme kada će nas izvršavanje testa upozoriti na postojanje greške u aplikaciji, a to je kada osoba izvrši test i primijeti ju. Naravno, to može biti i nekoliko minuta nakon što je stvorena pogreška ako se nove funkcionalnosti odmah testiraju, ali može biti i nekoliko dana kasnije ako postoje drugačiji prioriteti testiranja.

Srećom, automatski testovi nemaju radno vrijeme pa se njihovo izvršavanje može podesiti na bilo koje doba dana ili noći. Ako to želimo mo, izvođenje automatskih testova odredit ćemo u 7:00 sati kako bi nas izvješće o njihovom prolazu ili neuspjehu čekalo kada d ođemo na posao, ili ćemo ih izvršavati u 10:00 navečer kada su i najveći radoholičari otišli kući i tako izbjegli opterećenje poslužitelja koje bi potencijalno ometalo njihov rad.

Međutim, najčešća upotreba zakazivanja automatiziranih testova je nakon što se izvrši promjena u aplikaciji. Točnije, čim programer primijeni novonapisani kod, automatski će se testirati i javiti jesu li promjene dovele do greške, bilo na dijelu aplikacije koja se trenutno nadograđuje ili na dijelu koji već postoji.

Nadalje, mi ljudi nismo toliko konzistentni i pedantni koliko bi voljeli vjerovati. Prilikom ručnog izvršavanja testova neka greška će se ponekad uspjeti i sakriti i ostati neprimijećena, pogotovo kada se radi o onima koje ne utječu na rad aplikacija kao što su tipfeleri. Iako su to male greške i aplikacija je i dalje savršeno funkcionalna uz njih, one su i dalje greške. Automatiziranom testu tako nešto ne može promaći zato što je izrazito pedantan. Ipak je takav napravljen. Ako mu kažemo da traži pojam „računalo“ odbijat će prihvatiti bilo što osim tog izraza. Ako osoba pročita riječ „račnualo“ moći prepoznati na što se misli i nastaviti dalje s radom, no automatizirani testovi ne prihvaćaju ništa osim savršenstva. Zapravo su poput ekstremno strogog profesora koji inzistira da se za prolaz na ispitu mora dobiti maksimalan broj bodova.

Nema razloga za čekanje

Automatizacija testiranja trenutno je u izrazito zanimljivoj fazi s dalekim dosegom onoga što se može napraviti i novim tehnologijama koje se pojavljuju svaki dan. Ako se do sad niste mogli odlučiti zaploviti ili ne automatiziranim vodama ovo je savršeno vrijeme za to. Čak i ako ste jedan od onih koji nisu razmišljali o automatskim testovima isplati se barem ogrebati po površini, pogotovo s obzirom na to da su najbolji alati besplatni i open-source.

S obzirom na prednosti koje možete iskoristiti i tehnologiju koja napreduje iz dana u dan, istraživanje mogućnosti automatiziranog testiranja osigurat će vam se da bude na vrhuncu modernog razvoja softvera.

Više o temiIzvor:Bug.hr