PirmÄ daļa -
IedomÄjieties situÄciju. JÅ«s saskaraties ar uzdevumu izstrÄdÄt jaunu funkcionalitÄti. Jums ir attÄ«stÄ«ba no jÅ«su priekÅ”gÄjÄjiem. Ja pieÅemtu, ka jums nav nekÄdu morÄlu pienÄkumu, ko jÅ«s darÄ«tu?
VisbiežÄk visas vecÄs norises tiek aizmirstas un viss sÄkas no jauna. Nevienam nepatÄ«k iedziļinÄties sveÅ”Ä kodÄ, bet, ja ir laiks, kÄpÄc gan nesÄkt izveidot savu sistÄmu? TÄ ir tipiska pieeja, un tÄ lielÄkoties ir pareiza. Bet mÅ«su projektÄ mÄs to darÄ«jÄm nepareizi. MÄs balstÄ«jÄm nÄkotnes automÄtiskÄs testÄÅ”anas sistÄmu uz utPLSQL vienÄ«bu testu attÄ«stÄ«bu no mÅ«su priekÅ”gÄjÄjiem un pÄc tam sÄkÄm strÄdÄt vairÄkos paralÄlos virzienos.
- Veco vienÄ«bu testu atjaunoÅ”ana. AtkopÅ”ana nozÄ«mÄ testu pielÄgoÅ”anu esoÅ”ajam lojalitÄtes sistÄmas stÄvoklim un testu pielÄgoÅ”anu utPLSQL standartiem.
- ProblÄmas risinÄÅ”ana ar izpratni par to, kas tieÅ”i, kÄdas metodes un procesi tiek pÄrklÄti ar autotestiem. Jums vai nu jÄsaglabÄ Å”Ä« informÄcija savÄ galvÄ, vai arÄ« jÄizdara secinÄjumi, pamatojoties tieÅ”i uz automÄtiskÄs pÄrbaudes kodu. TÄpÄc mÄs nolÄmÄm izveidot katalogu. Katram automÄtiskajam testam pieŔķīrÄm unikÄlu mnemonisko kodu, izveidojÄm aprakstu un ierakstÄ«jÄm iestatÄ«jumus (piemÄram, kÄdos apstÄkļos tas ir jÄpalaiž, vai kas jÄnotiek, ja testa palaiÅ”ana neizdodas). BÅ«tÄ«bÄ mÄs aizpildÄ«jÄm automÄtisko testu metadatus un ievietojÄm Å”os metadatus standarta utPLSQL shÄmu tabulÄs.
- PaplaÅ”inÄÅ”anÄs stratÄÄ£ijas definÄÅ”ana, t.i. funkcionalitÄtes izvÄle, kas ir pakļauta pÄrbaudei, izmantojot automatizÄtus testus. MÄs nolÄmÄm pievÄrst uzmanÄ«bu trim lietÄm: jauniem sistÄmas uzlabojumiem, ražoÅ”anas incidentiem un galvenajiem sistÄmas procesiem. TÄdÄjÄdi attÄ«stÄmies paralÄli izlaiÅ”anai, nodroÅ”inot tÄs augstÄku kvalitÄti, vienlaikus paplaÅ”inot regresijas apjomu un nodroÅ”inot sistÄmas uzticamÄ«bu kritiskÄs vietÄs. PirmÄ Å”Äda vÄjÄ vieta bija atlaižu un prÄmiju sadale par Äeku.
- Protams, mÄs sÄkÄm izstrÄdÄt jaunus autotestus. Viens no pirmajiem izlaiduma uzdevumiem bija iepriekÅ” noteiktu lojalitÄtes sistÄmas paraugu veiktspÄjas novÄrtÄÅ”ana. MÅ«su projektÄ ir stingri fiksÄtu SQL vaicÄjumu bloks, kas atlasa klientus, pamatojoties uz nosacÄ«jumiem. PiemÄram, iegÅ«stiet sarakstu ar visiem klientiem, kuru pÄdÄjais pirkums bija konkrÄtÄ pilsÄtÄ, vai to klientu sarakstu, kuru vidÄjÄ pirkuma summa pÄrsniedz noteiktu vÄrtÄ«bu. PÄc automÄtiskÄs pÄrbaudes veikÅ”anas mÄs pÄrbaudÄ«jÄm iepriekÅ” definÄtus paraugus, reÄ£istrÄjÄm etalonuzdevuma parametrus un papildus veicÄm slodzes testÄÅ”anu.
- Darbam ar automÄtiskajiem testiem jÄbÅ«t Ärtam. Divas visizplatÄ«tÄkÄs darbÄ«bas ir automÄtiskÄs pÄrbaudes palaiÅ”ana un testa datu izveide. TÄ mÅ«su sistÄmÄ parÄdÄ«jÄs divi palÄ«gmoduļi: palaiÅ”anas modulis un datu Ä£enerÄÅ”anas modulis.
PalaiÅ”anas programma tiek attÄlota kÄ viena universÄla procedÅ«ra ar vienu teksta ievades parametru. KÄ parametru varat nodot automÄtiskÄs pÄrbaudes mnemonisko kodu, pakotnes nosaukumu, testa nosaukumu, automÄtiskÄs pÄrbaudes iestatÄ«jumu vai rezervÄtu atslÄgvÄrdu. ProcedÅ«ra atlasa un palaiž visus automÄtiskos testus, kas atbilst nosacÄ«jumiem.
Datu Ä£enerÄÅ”anas modulis tiek pasniegts pakotnes veidÄ, kurÄ katram pÄrbaudÄmÄs sistÄmas objektam (tabula datu bÄzÄ) ir izveidota speciÄla procedÅ«ra, kas tur ievieto datus. Å ajÄ procedÅ«rÄ noklusÄjuma vÄrtÄ«bas tiek aizpildÄ«tas pÄc iespÄjas vairÄk, kas nodroÅ”ina objektu izveidi burtiski ar pirksta klikŔķi. Un lietoÅ”anas ÄrtÄ«bai tika izveidotas Ä£enerÄto datu veidnes. PiemÄram, izveidojiet klientu noteiktÄ vecumÄ ar testa tÄlruni un pabeigtu pirkumu.
- AutomÄtiskajai pÄrbaudei ir jÄsÄkas un jÄpalaiž jÅ«su sistÄmai pieÅemamÄ laikÄ. TÄpÄc tika organizÄta ikdienas nakts palaiÅ”ana, pamatojoties uz kuras rezultÄtiem tiek Ä£enerÄta atskaite par rezultÄtiem un nosÅ«tÄ«ta visai izstrÄdes komandai ar korporatÄ«vo pastu. PÄc veco autotestu atjaunoÅ”anas un jaunu izveidoÅ”anas kopÄjais darbÄ«bas laiks bija 30 minÅ«tes. Å is priekÅ”nesums bija piemÄrots visiem, jo āāpalaiÅ”ana notika Ärpus darba laika.
TaÄu bija jÄstrÄdÄ pie darba Ätruma optimizÄÅ”anas. RažoÅ”anas lojalitÄtes sistÄma tiek atjauninÄta naktÄ«. KÄ daļu no viena no izlaidumiem mums naktÄ« bija jÄveic steidzamas izmaiÅas. Autotestu rezultÄtu gaidÄ«Å”ana pusstundu trijos naktÄ« nesagÄdÄja prieku par atbrÄ«voÅ”anu atbildÄ«go (dedzÄ«gi sveicieni Aleksejam Vasjukovam!), un nÄkamajÄ rÄ«tÄ mÅ«su sistÄmai tika teikts daudz laipnu vÄrdu. Bet rezultÄtÄ tika noteikts 5 minÅ«Å”u darba standarts.
Lai paÄtrinÄtu veiktspÄju, mÄs izmantojÄm divas metodes: automÄtiskÄs pÄrbaudes sÄka darboties trÄ«s paralÄlos pavedienos, par laimi tas ir ļoti Ärti mÅ«su lojalitÄtes sistÄmas arhitektÅ«ras dÄļ. Un mÄs atteicÄmies no pieejas, kad automÄtiskais tests pats nerada testa datus, bet mÄÄ£ina atrast sistÄmÄ kaut ko piemÄrotu. PÄc izmaiÅu veikÅ”anas kopÄjais darbÄ«bas laiks tika samazinÄts lÄ«dz 3-4 minÅ«tÄm.
- Projektu ar automÄtiskÄm pÄrbaudÄm vajadzÄtu bÅ«t iespÄjai izvietot dažÄdos stendos. MÅ«su ceļojuma sÄkumÄ bija mÄÄ£inÄjumi rakstÄ«t paÅ”i savus pakeÅ”failus, taÄu kļuva skaidrs, ka paÅ”u rakstÄ«ta automatizÄta instalÄcija ir pilnÄ«gas Å”ausmas, un mÄs pievÄrsÄmies industriÄlajiem risinÄjumiem. SakarÄ ar to, ka projektÄ ir daudz tieÅ”Ä koda (pirmkÄrt, mÄs glabÄjam autotesta kodu) un ļoti maz datu (galvenie dati ir metadati par autotestiem), Liquibase projektÄ ievieÅ”ana izrÄdÄ«jÄs ļoti vienkÄrÅ”a.
TÄ ir atvÄrtÄ koda, no datu bÄzes neatkarÄ«ga bibliotÄka datu bÄzes shÄmu izmaiÅu izsekoÅ”anai, pÄrvaldÄ«bai un ievieÅ”anai. PÄrvalda, izmantojot komandrindu vai ietvarus, piemÄram, Apache Maven. Liquibase darbÄ«bas princips ir diezgan vienkÄrÅ”s. Mums ir noteiktÄ veidÄ organizÄts projekts, kas sastÄv no izmaiÅÄm jeb skriptiem, kas jÄievieÅ” mÄrÄ·a serverÄ«, un kontroles failiem, kas nosaka, kÄdÄ secÄ«bÄ un ar kÄdiem parametriem Ŕīs izmaiÅas jÄinstalÄ.
DBVS lÄ«menÄ« tiek izveidota Ä«paÅ”a tabula, kurÄ Liquibase saglabÄ apgÄÅ”anÄs žurnÄlu. Katrai izmaiÅai ir aprÄÄ·inÄts hash, kas katru reizi tiek salÄ«dzinÄts starp projektu un stÄvokli datu bÄzÄ. Pateicoties Liquibase, mÄs varam viegli ieviest izmaiÅas mÅ«su sistÄmÄ jebkurÄ shÄmÄ. AutomÄtiskie testi tagad tiek palaisti testa un izlaiÅ”anas shÄmÄs, kÄ arÄ« konteineros (izstrÄdÄtÄju personÄ«gajÄs shÄmÄs).
TÄtad, parunÄsim par mÅ«su vienÄ«bu testÄÅ”anas sistÄmas izmantoÅ”anas rezultÄtiem.
- Protams, pirmkÄrt, mÄs esam pÄrliecinÄti, ka esam sÄkuÅ”i izstrÄdÄt labÄku programmatÅ«ru. AutomÄtiskie testi tiek palaisti katru dienu, un katrÄ laidienÄ tiek atrasti desmitiem kļūdu. TurklÄt dažas no Ŕīm kļūdÄm ir tikai netieÅ”i saistÄ«tas ar funkcionalitÄti, kuru mÄs patieÅ”Äm vÄlÄjÄmies mainÄ«t. PastÄv nopietnas Å”aubas, ka Ŕīs kļūdas tika atklÄtas manuÄli pÄrbaudot.
- Komanda tagad ir pÄrliecinÄta, ka konkrÄta funkcionalitÄte darbojas pareizi... PirmkÄrt, tas attiecas uz mÅ«su kritiskajiem procesiem. PiemÄram, pÄdÄjÄ pusgada laikÄ mums nav bijuÅ”as problÄmas ar atlaižu un prÄmiju sadali par Äekiem, neskatoties uz izlaiduma izmaiÅÄm, lai gan iepriekÅ”Äjos periodos kļūdas notika ar zinÄmu biežumu.
- Mums izdevÄs samazinÄt testÄÅ”anas iterÄciju skaitu. SakarÄ ar to, ka autotesti tiek rakstÄ«ti jaunai funkcionalitÄtei, analÄ«tiÄ·i un nepilna laika testÄtÄji saÅem augstÄkas kvalitÄtes kodu, jo tas jau ir pÄrbaudÄ«ts.
- Dažus automatizÄtÄs testÄÅ”anas uzlabojumus izmanto izstrÄdÄtÄji. PiemÄram, testa dati par konteineriem tiek izveidoti, izmantojot objektu Ä£enerÄÅ”anas moduli.
- SvarÄ«gi, ka esam izstrÄdÄjuÅ”i automatizÄtÄs testÄÅ”anas sistÄmas āakceptuā no izstrÄdÄtÄju puses. Ir izpratne, ka tas ir svarÄ«gi un noderÄ«gi. Bet no savas pieredzes varu teikt, ka tas nebÅ«t nav tÄ. Autotesti ir jÄraksta, tie ir jÄatbalsta un jÄattÄ«sta, rezultÄti jÄanalizÄ, un bieži vien Ŕīs laika izmaksas vienkÄrÅ”i nav tÄ vÄrtas. Ir daudz vieglÄk pÄriet uz ražoÅ”anu un tur risinÄt problÄmas. Å eit izstrÄdÄtÄji stÄv rindÄ un lÅ«dz mÅ«s nodroÅ”inÄt viÅu funkcionalitÄti ar automÄtiskajiem testiem.
Kas ir nÄkamais
ParunÄsim par automatizÄtÄs testÄÅ”anas projekta attÄ«stÄ«bas plÄniem.
Protams, kamÄr Sportmaster lojalitÄtes sistÄma ir dzÄ«va un turpina attÄ«stÄ«ties, ir iespÄjams izstrÄdÄt arÄ« autotestus gandrÄ«z bezgalÄ«gi. TÄpÄc galvenais attÄ«stÄ«bas virziens ir pÄrklÄjuma zonas paplaÅ”inÄÅ”ana.
Palielinoties automÄtisko testu skaitam, to kopÄjais darbÄ«bas laiks nepÄrtraukti palielinÄsies, un mums atkal bÅ«s jÄatgriežas pie veiktspÄjas jautÄjuma. VisticamÄk, risinÄjums bÅ«s paralÄlo pavedienu skaita palielinÄÅ”ana.
Bet tie ir acÄ«mredzami attÄ«stÄ«bas veidi. Ja mÄs runÄjam par kaut ko nenozÄ«mÄ«gÄku, mÄs izceļam sekojoÅ”o:
- Å obrÄ«d autotesta vadÄ«ba tiek veikta DBVS lÄ«menÄ«, t.i. sekmÄ«gam darbam nepiecieÅ”amas PL/SQL zinÄÅ”anas. Ja nepiecieÅ”ams, sistÄmas vadÄ«ba (piemÄram, palaiÅ”ana vai metadatu izveidoÅ”ana), var izveidot kaut kÄdu admin paneli, izmantojot Jenkins vai ko lÄ«dzÄ«gu.
- Ikvienam patÄ«k kvantitatÄ«vie un kvalitatÄ«vie rÄdÄ«tÄji. AutomatizÄtai testÄÅ”anai Å”Äds universÄls rÄdÄ«tÄjs ir Code Coverage jeb koda pÄrklÄjuma metrika. Izmantojot Å”o rÄdÄ«tÄju, mÄs varam noteikt, cik procentu no mÅ«su pÄrbaudÄmÄs sistÄmas koda sedz automÄtiskÄs pÄrbaudes. SÄkot ar versiju 12.2, Oracle nodroÅ”ina iespÄju aprÄÄ·inÄt Å”o metriku un piedÄvÄ standarta pakotnes DBMS_PLSQL_CODE_COVERAGE izmantoÅ”anu.
MÅ«su automÄtiskÄs pÄrbaudes sistÄma ir tikai nedaudz vairÄk nekÄ gadu veca, un, iespÄjams, ir pienÄcis laiks novÄrtÄt mÅ«su pÄrklÄjumu. ManÄ pÄdÄjÄ projektÄ (nevis Sportmaster projektÄ) tas notika. Gadu pÄc darba pie autotestiem vadÄ«ba izvirzÄ«ja uzdevumu novÄrtÄt, cik procentus no koda mÄs aptveram. Ja segums bÅ«tu lielÄks par 1%, vadÄ«ba bÅ«tu apmierinÄta. MÄs, izstrÄdÄtÄji, gaidÄ«jÄm aptuveni 10% rezultÄtu. MÄs uzstÄdÄ«jÄm koda pÄrklÄjumu, izmÄrÄ«jÄm to un saÅÄmÄm 20%. Lai nosvinÄtu, mÄs devÄmies pÄc balvas, bet kÄ mums gÄja pÄc tÄs un kur devÄmies vÄlÄk, tas ir pavisam cits stÄsts.
- AutomÄtiskie testi var pÄrbaudÄ«t atklÄtos tÄ«mekļa pakalpojumus. Oracle ļauj mums to izdarÄ«t diezgan labi, un mÄs vairs nesastapsimies ar vairÄkÄm problÄmÄm.
- Un, protams, mÅ«su automatizÄto testÄÅ”anas sistÄmu var pielietot citam projektam. SaÅemtais risinÄjums ir universÄls, un tam ir jÄizmanto tikai Oracle. DzirdÄju, ka citi Sportmaster projekti interesÄjas par automÄtisko testÄÅ”anu un, iespÄjams, arÄ« pie viÅiem dosimies.
Atzinumi
Apkoposim. LojalitÄtes sistÄmas projektÄ Sportmaster mums izdevÄs ieviest automatizÄtu testÄÅ”anas sistÄmu. TÄ pamatÄ ir StÄ«vena Feuersteina utPLSQL risinÄjums. Ap utPLSQL ir automÄtiskÄs pÄrbaudes kods un paÅ”rakstÄ«ti papildu moduļi: palaiÅ”anas modulis, datu Ä£enerÄÅ”anas modulis un citi. AutomÄtiskie testi tiek palaisti katru dienu, un, pats galvenais, tie darbojas un ir noderÄ«gi. MÄs esam pÄrliecinÄti, ka esam sÄkuÅ”i izlaist augstÄkas kvalitÄtes programmatÅ«ru. TajÄ paÅ”Ä laikÄ iegÅ«tais risinÄjums ir universÄls un var tikt brÄ«vi piemÄrots jebkuram projektam, kur nepiecieÅ”ams organizÄt Oracle DBVS automatizÄtu testÄÅ”anu.
PS Å is raksts nav Ä«paÅ”i konkrÄts: ir daudz teksta un praktiski nav tehnisku piemÄru. Ja tÄma kopumÄ ir interesanta, tad esam gatavi to turpinÄt un atgriezties ar turpinÄjumu, kurÄ pastÄstÄ«sim, kas ir mainÄ«jies pÄdÄjÄ pusgada laikÄ un sniegsim kodu piemÄrus.
Rakstiet komentÄrus, ja ir punkti, kas bÅ«tu jÄuzsver nÄkotnÄ, vai jautÄjumi, kas jÄatklÄj.
AptaujÄ var piedalÄ«ties tikai reÄ£istrÄti lietotÄji.
Vai rakstÄ«sim par to tÄlÄk?
-
JÄ, protams
-
NÄ paldies
Nobalsoja 12 lietotÄji. 4 lietotÄji atturÄjÄs.
Avots: www.habr.com