Esimene osa â .
Kujutage ette olukorda. Te peate arendama uut funktsionaalsust. Teil on olemas eelmiste töötajate materjalid. Kui jÀtta kÔrvale moraalsed kohustused, kuidas te siis kÀituksite?
Tavaliselt unustatakse kĂ”ik vanad arendused ja kĂ”ik hakkab nullist. Keegi ei armasta teiste koodiga vaeva nĂ€ha, ja kui aega on, siis miks mitte luua oma sĂŒsteem? See on tĂŒĂŒpiline lĂ€henemine, ja see on suuresti Ă”ige. Kuid meie projektis tegime teistmoodi. Tulevase automaatsete testide sĂŒsteemi aluseks saime meie eelkĂ€ijate utPLSQL unit-testide arendused ning seejĂ€rel asusime töötama mitmes paralleelses suunas.
- Vana unit-testide taastamine. Taastamine tĂ€hendab testide kohandamist olemasoleva lojaalsussĂŒsteemi seisuga ja testide kohandamist utPLSQL standarditega.
- Probleemi lahendamine, et mÔista, millised meetodid ja protsessid on meie automaatsete testidega kaetud. Kas tuleb see teave meeles hoida vÔi teha jÀreldusi otse automaatsete testide koodist. SeetÔttu otsustasime koostada katalooge. Igale automaatsetele testile andsime unikaalse mnemokoodi, koostasime kirjelduse ja fikseerisime seaded (nÀiteks, millistes tingimustes see peaks kÀivituma vÔi mis peaks juhtuma, kui testi kÀivitamine ebaÔnnestus). Sisuliselt tÀitsime automaatsete testide meetainformatsiooni ja paigutasime need standardsetesse utPLSQL skeemi tabelitesse.
- Laiendamisstrateegia mÀÀratlemine, st funktsionaalsuse valimine, mida tuleb automaatsete testidega kontrollida. Otsustasime keskenduda kolmele asjale: sĂŒsteemi uued tĂ€iustused, tootmisprobleemid ja sĂŒsteemi pĂ”hiprotsessid. Nii arendame end vĂ€lja paralleelselt vĂ€ljaande kvaliteedi parandamisega, samal ajal laiendades regressiooni ulatust ja tagades sĂŒsteemi usaldusvÀÀrsuse kriitilistes kohtades. Esimene kitsaskoht oli allahindluste ja boonuste jaotamise protsess.
- Loomulikult hakkasime töötama uute automaatsete testide vĂ€lja töötamisega. Ăhe esimestest vabastamisĂŒlesannetest oli jĂ”udluse hindamine eelseadistatud lojaalsuse valimite osas. Meie projektis on plokk rangelt fikseeritud SQL-pĂ€ringutest, mis valivad kliente tingimuste alusel. NĂ€iteks, saada kĂ”igi klientide nimekiri, kelle viimane ost tehti konkreetses linnas, vĂ”i nimekiri klientidest, kelle keskmine ostusumma ĂŒletab kindlat vÀÀrtust. Kirjutades automaatkatsetusi, kontrollisime eelseadistatud valimeid ja fikseerisime standardseid jĂ”udluse parameetreid, lisaks saime me koormustestimise.
- Automaatkatsetustega töötamine peab olema mugav. KĂ”ige sagedamini tehakse kahte tegevust: automaatkatsete kĂ€ivitamine ja testandmete loomine. Nii ilmus meie sĂŒsteemi kaks abimoodulit: kĂ€ivitamismoodul ja andmete genereerimise moodul.
KĂ€ivitamismoodul on esitatud ĂŒhe universaalse protseduurina, millel on ĂŒks sissekande tekstiparameeter. Parameetrina saab edastada automaatkatse mnemo-koodi, pakettnime, testi nime, automaatkatse seade vĂ”i reserveeritud vĂ”tmesĂ”na. Protseduur valib ja kĂ€ivitab kĂ”ik automaatkatsed, mis vastavad tingimustele.
Andmete genereerimise moodul on esitatud paketina, kus iga katsetatava sĂŒsteemi objekti (tabel andmebaasis) jaoks on loodud spetsiaalne protseduur, mis sisestab sinna andmed. Selles protseduuris on maksimaalselt tĂ€idetud vaikimisi vÀÀrtused, mis tagavad objektide loomise sĂ”rmenipsuga. Ja mugavuse huvides on loodud loodud andmete mallid. NĂ€iteks luua teatud vanuses klient koos testtelefoniga ja sooritatud ostuga.
- Automaatkatsetused peavad kĂ€ivituma ja töötama teie sĂŒsteemi jaoks vastuvĂ”etava aja jooksul. SeetĂ”ttu korraldati igapĂ€evane öine kĂ€ivitamine, mille tulemuste pĂ”hjal koostatakse aruanne ja saadetakse kogu arendusmeeskonnale ettevĂ”tte e-posti kaudu. PĂ€rast vanade automaatkatsete taastamist ja uute loomist oli kogu tööaeg 30 minutit. Selline jĂ”udlus rahuldas kĂ”iki, kuna kĂ€ivitamine toimus töövĂ€lisel ajal.
Kuid sĂŒsteemi töö kiirusest tuli siiski töötada. Loodud lojaalsussĂŒsteemi uuendamine toimub öösel. Ăhe versiooni raames tuli öösel kiirkorras muudatusi sisse viia. Kella kolme öösel poole tunni ooteaeg automaatkatsete tulemusi ei teinud versiooni eest vastutavat inimest Ă”nnelikuks (soojad tervitused Aleksei Vasyukovile!), ja jĂ€rgmisel hommikul öeldi meie sĂŒsteemi suunal palju sooje sĂ”nu. Kuid tulemuseks oli 5-minutilise standardi kehtestamine töö jaoks.
TĂ”hususe suurendamiseks kasutasime kahte meetodit: automaatkatseid hakati kĂ€ivitama kolmes paralleelses voos, Ă”nneks on see meie lojaalsussĂŒsteemi arhitektuuri tĂ”ttu vĂ€ga mugav. Ja loobusime lĂ€henemisest, kus automatiseeritud test ei loo ise testandmeid, vaid pĂŒĂŒab leida sĂŒsteemist sobivaid. PĂ€rast muudatuste tegemist vĂ€henes kogu töö aeg 3â4 minutini.
- Automaatkatsete projekt peab olema vÔimalik erinevates keskkondades kasutusele vÔtta. Alguses oli katseid kirjutada oma .bat faile, kuid selgus, et kÀsitsi automatiseeritud seadistus on tÀielik Ôudus ja pöördusime tööstuslike lahenduste poole. Kuna projektis on vÀga palju otse koodi (peamiselt hoiame automaatkatsete koodi) ja vÀga vÀhe andmeid (peamised andmed on metainformatsioon automaatkatsete kohta), osutus Liquibase'i juurutamine projektis ÀÀrmiselt lihtsaks.
See on andmebaasist sÔltumatu avatud lÀhtekoodiga teek, mis jÀlgib, haldab ja rakendab andmebaasiskeemi muudatusi. Haldatakse kÀsurea vÔi selliste raamistikudega nagu Apache Maven. Liquibase'i tööpÔhimÔte on piisavalt lihtne. Meil on teatud viisil korraldatud projekt, mis koosneb muudatustest vÔi skriptidest, mida tuleb sihtserverile rakendada, ja juhtfailidest, mis mÀÀratlevad, millises jÀrjestuses ja milliste parameetritega andmed muudatused tuleb installida.
Andmebaasi tasemel luuakse spetsiaalne tabel, kus Liquibase hoiab logi muudatuste tegemisest. Iga muudatus omab arvutatud rĂ€sihashi, mis iga kord vĂ”rreldakse projekti ja andmebaasi olekuga. TĂ€nu Liquibase'ile saame me hĂ”lpsasti rakendada muutusi meie sĂŒsteemis igas keskkonnas. Autotestid kĂ€ivitatakse praegu testimis- ja vĂ€ljalaskekeskkondades, samuti konteinerites (arendajate isiklikud keskkonnad).

Niisiis, rÀÀgime meie automaatsete testimisse sĂŒsteemi rakendamise tulemustest.
- Muidugi usume kĂ”igepealt, et oleme hakanud arendama kvaliteetsemat tarkvara. Autotestid kĂ€ivitatakse iga pĂ€ev ja igal vĂ€ljalaskmisel tuvastavad nad kĂŒmneid vigu. Samuti on osa neist vigadest vaid kaudselt seotud funktsionaalsusega, mida me tĂ”eliselt soovisime muuta. On suuri kahtlusi, et need vead oleksid leitud kĂ€sitsi testimise kĂ€igus.
- Meeskonnal on tekkinud kindlus, et konkreetne funktsionaalsus töötab korrektselt... Esiteks kehtib see meie kriitiliste protsesside kohta. NÀiteks viimase kuue kuu jooksul ei ole meil olnud probleeme soodustuste ja boonuste jaotamisega arve kohta, hoolimata vÀljalaskmise muudatustest, kuigi varasematel perioodidel tekkisid vead perioodiliselt.
- Olemasolevate testimisringide arvu on Ă”nnestunud vĂ€hendada. TĂ€nu sellele, et autotestid kirjutatakse uue funktsionaalsuse jaoks, jĂ”uab analĂŒĂŒtikutele ja samal ajal testijatele kvaliteetsem kood, kuna see on juba testitud.
- MÔningaid automatiseeritud testimise arendusi kasutavad ka arendajad. NÀiteks luuakse konteinerites testandmed objektide genereerimise mooduli abil.
- Oluline on, et meil on kujunenud arendajate seas "vastuvĂ”tmine" automatiseeritud testimise sĂŒsteemile. On arusaam, et see on oluline ja kasulik. Kuid oma kogemuse pĂ”hjal vĂ”in öelda, et see kaugel tĂ”est tĂ”si on. Autotestid tuleb kirjutada, neid tuleb toetada ja arendada, tulemusi analĂŒĂŒsida, ja sageli ei ole need ajakulud lihtsalt seda vÀÀrt. Oluliselt lihtsam on minna tootmisse ja seal probleemidega tegeleda. Meie arendajad aga seisavad jĂ€rjekorras ja paluvad katta nende funktsionaalsus autotestidega.
Mis edasi

RÀÀgime projekti arendamise plaanidest automatiseeritud testimise valdkonnas.
Ilma kahtlemata, kuni Sportmasteri lojaalsussĂŒsteem on elujĂ”uline ja jĂ€tkuvalt arenev, on vĂ”imalik peaaegu lĂ”pmatult arendada ka automaatkatsetusi. SeetĂ”ttu on pĂ”hisuund arengus katteala laiendamine.
Automaatkatsetuste arvu suurenedes hakkab kindlasti suurenema ka nende töötamise koguaeg, ja me peame taas tegelema jĂ”udluse kĂŒsimusega. TĂ”enĂ€oliselt on lahendus suurema arvu paralleelsete voogude suurenemises.
Kuid need on ilmsed arenguteed. Kui rÀÀkida millestki vÀhem triviaalset, siis toome vÀlja jÀrgmised:
- Praegu toimub automaatkatsete juhtimine andmebaasi tasemel, st edukaks tööks on vajalikud teadmised PL/SQL-ist. Kui on vajadus, vĂ”ib sĂŒsteemi juhtimise (nĂ€iteks kĂ€ivituste teostamine vĂ”i metaandmete loomine) viia vĂ€lja mingisse administreerimisse, kasutades Jenkinsit vĂ”i midagi sarnast.
- KĂ”ik armastavad kvantitatiivseid ja kvalitatiivseid nĂ€itajaid. Automaatsete testimiste puhul on selline universaalne nĂ€itaja koodi katteala vĂ”i Code Coverage. Selle nĂ€itaja abil saame mÀÀrata, milline protsent meie testitavast sĂŒsteemist on automaatkatsetega kaetud. Alates versioonist 12.2 pakub Oracle vĂ”imalusi selle nĂ€itaja arvutamiseks ja soovitab kasutada standardset paketti DBMS_PLSQL_CODE_COVERAGE.
Meie automaatkatsete sĂŒsteem on veidi ĂŒle aasta vana ja vĂ”ib-olla on nĂŒĂŒd parim aeg katteala hindamiseks. Minu eelmises projektis (projekt ei olnud Sportmaster) lĂ€ks just nii. Aasta pĂ€rast automaatkatsetustega töötamist seadis juhtkond ĂŒlesande hinnata, kui suur protsent koodist on kaetud. Ăle 1% katte saavutamisel oleks juhtkond olnud Ă”nnelik. Me, arendajad, ootasime tulemust umbes 10%. Panime kĂ€ima koodi katte, mÔÔtsime ja saime 20%. Ănnestunult lĂ€ksime preemiat kĂŒsima, kuid kuidas me preemia saamiseks lĂ€ksime ja kuhu hiljem suundusime, on hoopis teine lugu.
- Automaatkatsetused saavad kontrollida vÀlja antud veebiteenuseid. Oracle vÔimaldab seda teha, ja me ei puutu enam kokku mitmete probleemidega.
- Ja, loomulikult saab meie automatiseeritud testimissĂŒsteemi rakendada ka teisel projektil. Meie lahendus on universaalne ja vajab vaid Oracle'i kasutamist. Olen kuulnud, et Spordimeistri teistel projektidel on huvi automatiseeritud testimise vastu ja vĂ”ib-olla suundume nende juurde.
JĂ€reldused
KokkuvĂ”tteks. Spordimeistri lojaalsusprojektis Ă”nnestus meil rakendada automatiseeritud testimissĂŒsteem. Selle aluseks on Stephen Feiersteini utPLSQL lahendus. utPLSQL-i ĂŒmber on paigutatud automaattestide kood ja abimoodulid: kĂ€ivitamisekoht, andmegeneraatori moodul ja teised. Automaatetestid kĂ€ivitatakse igapĂ€evaselt ja, mis kĂ”ige tĂ€htsam, need toimivad ja toovad kasu. Oleme veendunud, et oleme hakanud tootma kĂ”rgema kvaliteediga tarkvara. Samas on saadud lahendus universaalne ning seda saab vabalt rakendada igas projektis, kus on vajalik korraldada automatiseeritud testimist Oracle'i andmebaasis.
P.S. See artikkel ei ole eriti konkreetne: siin on palju teksti ja praktiliselt puuduvad tehnilised nĂ€ited. Kui teema on ĂŒldiselt huvitav, siis oleme valmis seda jĂ€tkama ja naasma jĂ€tkuga, kus rÀÀgime, mis on viimase kuue kuu jooksul muutunud ja toome nĂ€iteid koodist.
Palun kirjutage kommentaare, kui on teemasid, millele tulevikus tĂ€helepanu pöörata, vĂ”i kĂŒsimusi, mis vajavad selgitamist.
Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. , palun.
Kas kirjutame sellest edasi?
Jah, loomulikult
Ei, aitÀh
12 kasutajat hÀÀletas. 4 kasutajat jÀid erapooletuks.
Allikas: habr.com
