Räägime tarkvara testimisest, sellega seotud müütidest ja parimatest praktikatest CGI Eesti kvaliteediteenuste valdkonna ärijuhi Keity Raudmäega.
Millised on tarkvara testimisega seotud levinud eksiarvamused?
“Tarkvara testimine on üks lihtne ja arutu klõpsimine, et mis selles siis ikka nii keerukat on” on kindlasti üks enimlevinud väärarusaamadest. Jah, tõepoolest, seal on tõetera sees, aga ainult teatud juhtudel. Näiteks kui testija rolli on sattunud juhuslik kasutaja, kes proovib erinevaid funktsioone, omamata selget eesmärki ja strateegiat.
Teine mõttemall kipub olema “küll me hiljem vaatame ja proovime” lähenemine ehk tarkvara “testimine” eelkirjeldatud viisil toimub tarkvara arendusprotsessi lõpus või tarnetähtaja saabudes, mitte kogu tarkvara elutsükli vältel.
Sisuliselt pole siis vahet, kas eesmärgistamata klõpsimist teeb arendustiimi kuuluv testija, tarkvara tellija enne tulemuse vastuvõtmist või lõppkasutaja juba toote või teenuse live-keskkonnas. Sellisel testimismetoodikal on ka oma aeg ja koht, kuid see ei tohiks olla esimene prioriteet. Seepärast sellisest lähenemisest siin rohkem juttu ei tule.
Liigume nüüd ühest äärmusest teise – kirjelda, mida tähendab professionaalne tarkvara testimine.
Ilmselt ei tasu üllatuda, et professionaalne tarkvara testimine on eelnevalt kirjeldatud lähenemise vastand. Professionaalsus tähendab ennekõike süsteemsust ja läbimõeldust. Pean silmas, et testimine on integreeritud kogu arenduse tööprotsessi(ga).
Praktilises vaates tähendab see jätkusuutliku testimisstrateegia, testikava ja plaani loomist, mis on kooskõlas kogu tarkvaraarenduse elutsükliga. See tagab vastavuse pidevalt muutuvate nõuetega ja loob stabiilsuse. Testimine on selgelt eesmärgistatud, algusest lõpuni, ja mitte ainult manuaaltestimisest ja manuaalse testimise strateegiast rääkides.
Tänased parimad praktikad kaasavad automaattestide arendaja juba projekti algusjärgus. Sisuliselt polegi siis veel midagi testida, aga arendusprotsessi vaates saab ja tuleb juba planeerida, kas ja kuidas toimub manuaal- ja automaattestimine.
Kirjeldasid erinevaid testimismetoodikaid, kuid millised on automatiseerimise eelised manuaalse testimisega võrreldes?
Suurim eelis on ajavõit ehk testimisele kulub vähem aega. See on eriti märgatav olukordades, kus testitakse mõnd toote või lahenduse muutuvat osa. Kui automaattestimine lisatakse projekti selle algfaasis, siis võimaldab see saavutada kogu tarkvaraarendusprojekti elutsükli vältel suure ajavõidu. Mida pikem ja keerukam on projekt, seda suurem on automatiseerimisega kaasnev kasutegur. Pikemas vaates joonistub automatiseeritud testi ajakulu võit selgelt välja.
Millised on suurimad väljakutsed seoses tarkvara testimisega?
Suurimad katsumused ei ole enamasti tehnilist laadi, vaid pigem seotud rahastuse ja projekti juhtimisega laiemalt. Tarkvara testimise tähtsust kiputakse jätkuvalt alahindama ja projekte planeerides keskendutakse vaid funktsionaalsusele ja sellega seotud tööjõukulule.
Töötame oma testimismeeskondadega iga päev selles suunas, et testimist, eriti automaattestimist, kaasataks tarkvaraarenduses võimalikult varajases etapis. See aitab saavutada paremaid tulemusi ja vältida “keegi kuskil testis midagi, vist” olukordi, kus toode või teenus on sisuliselt testimata.
“Testimine on põimitud kogu arenduse tööprotsessi(ga). On loodud jätkusuutlik testimisstrateegia, testikava ja plaan, mis on kooskõlas kogu tarkvaraarenduse elutsükliga. Testimine on selgelt eesmärgistatud, algusest lõpuni,” kirjeldab CGI Eesti kvaliteediteenuste ärijuht Keity Raudmäe testimise parimat praktikat.
Keity Raudmäe juhib CGIs mitmekümnest kogenud spetsialistist koosnevat kvaliteeditiimi, kes tegeleb igapäevaselt tarkvara testimisega kosmosemissioone toetavast tarkvarast kliendirakendusteni avalikus sektoris.
Levinud küsimustele seoses automatiseerimisega vastab CGI Eesti vanem-automaattestija Meelis Tolk.
- Kui palju automatiseerimine aitab testimisel aega säästa?
Lihtne näide – testime toote muutuvat funktsiooni nelja nädala vältel.
Manuaalselt testides kulub testijal selleks päevas kaks tundi ehk ajakulu kokku kogu testperioodil on 40 tundi. Automatiseerimise kõige ajamahukam osa (ja sageli ka esmapilgul hirmutavam) on testide automatiseerimine. Oletame, et antud juhul võtaks see aega 16 tundi ehk kaks tööpäeva. Automaattestide puhul on oluline testitulemuste kontroll, millele automaatteste jooksutades kulub edaspidi pool tundi päevas.
Neljanädalase perioodi jooksul kulub sama funktsionaalsuse kontrollimisele kokku 26 tundi (sh seadistamine mahus 16 tundi). Kokkuvõttes on sama muutuva funktsionaalsuse testimisele kulunud 14 tundi vähem aega.
Tarkvaraprojektid kestavad enamasti pikemalt kui üks kuu ning automatiseeritud testide puhul on võimalus neid taaskasutada. Laiendades näites toodud tulemusi veel pikemale perioodile, kahe või kolme kuu peale, siis on ajakulu vastavalt 80h/36h ja 120h/46h automatiseerimise kasuks.
- “Meie süsteem on nii keeruline, et seda ei ole võimalik automaatselt testida”
Jah, kindlasti leidub ka nii keerulisi süsteeme, mida tõesti polegi võimalik automaattestidega katta. Siis peab alustama analüüsist, miks seda teha ei saa.
Põhjuseid on erinevaid, sagedasemad neist on näiteks “meil on nii palju keerulisi andmeid”, “meil on nii palju erinevaid süsteeme, mis kõik omavahel on seotud” või “meil on süsteem tehniliselt nii keerukas, et ükski automatiseerimise tööriist sellega hakkama ei saa”.
Kui piisavalt sügavalt uurida neid juurpõhjusi, leiab alati ka vastused. Tihti võib selle käigus avastada, et võib-olla siiski saab midagi automatiseerida. Kui testija saab toodet või lahendust manuaalselt testida, siis üldjuhul saab kõiki neid samu tegevusi ka ühel või teisel moel automatiseerida.
- Kas testimist saab ka ainult osaliselt automatiseerida?
Kui on palju keerukaid andmeid, siis automatiseeritakse näiteks kasvõi osaliselt andmete kontrollimine, või kui on palju erinevaid süsteeme, siis keskendutakse automatiseerimisel ühele olulisemale süsteemile. Testide automatiseerimine ei pea olema “kõik või mitte midagi” printsiibiga. Automatiseerimise skoopi saab ka hiljem vajadusel laiendada.
- Kas automaattestimine välistab manuaalse ja vastupidi?
Automatiseerimise kasulikkust näeme testijatena paljuski selles, et see vabastab meie tööaega muude tegevuste ja ülesannete jaoks.
Selle n-ö võidetud ajaga saab testija tegeleda muude teemadega – on selleks siis keerulisemad testjuhud, testandmete analüüsimine või hoopiski uute testide automatiseerimine (mis tulevikus hakkavad omakorda aega säästma).
Niimoodi üksteist toetades saavad automatiseerimine ja manuaalne testimine edukalt koos eksisteerida.