Tès inite nan yon DBMS - ki jan nou fè li nan Sportmaster, dezyèm pati

Premye pati - isit la.

Tès inite nan yon DBMS - ki jan nou fè li nan Sportmaster, dezyèm pati

Imajine sitiyasyon an. Ou ap fè fas ak travay la nan devlope nouvo fonksyonalite. Ou gen devlopman nan men predesesè ou yo. Si nou sipoze ke ou pa gen okenn obligasyon moral, kisa ou ta fè?

Pi souvan, tout ansyen devlopman yo bliye ak tout bagay kòmanse tout ankò. Pèsonn pa renmen fouye nan kòd yon lòt moun, men si ou gen tan, poukisa pa kòmanse kreye pwòp sistèm ou a? Sa a se yon apwòch tipik, epi li se lajman kòrèk. Men, nan pwojè nou an nou te fè li mal. Nou te baze sistèm tès otomatik nan lavni sou devlopman tès inite yo sou utPLSQL soti nan predesesè nou yo, epi Lè sa a, te ale nan travay nan plizyè direksyon paralèl.

  1. Retabli ansyen tès inite yo. Recovery vle di adapte tès yo ak eta ki egziste deja nan sistèm lwayote a ak adapte tès yo ak estanda utPLSQL.
  2. Rezoud yon pwoblèm ak yon konpreyansyon sou ki sa egzakteman, ki metòd ak pwosesis yo kouvri ak ototès. Ou dwe swa kenbe enfòmasyon sa a nan tèt ou, oswa tire konklizyon ki baze dirèkteman sou kòd ototest la. Se poutèt sa, nou deside kreye yon katalòg. Nou te asiyen yon kòd mnemonik inik nan chak tès oto, te kreye yon deskripsyon ak anviwònman anrejistre (pa egzanp, nan ki kondisyon li ta dwe lanse, oswa sa ki ta dwe rive si lansman tès la echwe). Esansyèlman, nou peple metadata yo sou ototès yo epi mete metadata sa yo nan tab estanda utPLSQL chema.
  3. Defini estrateji ekspansyon an, i.e. seleksyon fonksyonalite ki sijè a verifikasyon pa tès otomatik yo. Nou deside peye atansyon sou twa bagay: nouvo amelyorasyon sistèm, ensidan pwodiksyon, ak pwosesis sistèm kle. Se konsa, nou ap devlope nan paralèl ak lage a, asire pi wo bon jan kalite li yo, ansanm elaji sijè ki abòde lan regresyon ak asire fyab sistèm nan kote kritik. Premye kou boutèy sa yo se te pwosesis pou distribye rabè ak bonis sou yon chèk.
  4. Natirèlman, nou te kòmanse devlope nouvo autotests. Youn nan premye travay yo lage se te evalye pèfòmans nan echantiyon predefini nan sistèm nan lwayote. Pwojè nou an gen yon blòk nan demann SQL fiks rijid ki chwazi kliyan ki baze sou kondisyon yo. Pou egzanp, jwenn yon lis tout kliyan ki dènye acha yo te nan yon vil espesifik, oswa yon lis kliyan ki gen kantite lajan an mwayèn achte pi wo a yon sèten valè. Lè nou te ekri tès oto, nou tcheke echantiyon predefini, nou te anrejistre paramèt pèfòmans referans, epi anplis nou te fè tès chaj.
  5. Travay ak autotests ta dwe pratik. De aksyon ki pi komen yo se kouri ototès ak kreye done tès yo. Men ki jan de modil oksilyè parèt nan sistèm nou an: yon modil lansman ak yon modil jenerasyon done.

    Lans la reprezante kòm yon pwosedi inivèsèl ak yon sèl paramèt opinyon tèks. Kòm yon paramèt, ou ka pase kòd mnemonik ototest la, non pake a, non tès la, anviwònman tès oto, oswa yon mo kle rezève. Pwosedi a chwazi ak kouri tout ototest ki satisfè kondisyon yo.

    Modil jenerasyon done yo prezante nan fòm yon pake kote pou chak objè nan sistèm anba tès la (yon tab nan baz done a), yo te kreye yon pwosedi espesyal ki foure done la. Nan pwosedi sa a, valè default yo ranpli otank posib, sa ki asire kreyasyon an nan objè literalman nan klike sou yon dwèt. Ak pou fasilite yo itilize, modèl pou done yo pwodwi yo te kreye. Pou egzanp, kreye yon kliyan nan yon sèten laj ak yon telefòn tès ak yon acha fini.

  6. Autotests yo ta dwe kòmanse epi kouri nan yon tan ki akseptab pou sistèm ou an. Se poutèt sa, yo te òganize yon lansman lannwit chak jou, ki baze sou rezilta yo ki gen yon rapò sou rezilta yo epi yo voye bay ekip devlopman an antye atravè lapòs antrepriz. Apre restore ansyen tès ototès yo ak kreye nouvo, tan total operasyon an te 30 minit. Pèfòmans sa a adapte tout moun, depi lansman an te fèt andeyò lè travay yo.

    Men, nou te oblije travay sou optimize vitès travay la. Se sistèm nan lwayote nan pwodiksyon mete ajou nan mitan lannwit. Kòm yon pati nan youn nan degaje yo, nou te oblije fè chanjman ijan nan mitan lannwit. Tann yon demi èdtan pou rezilta yo nan tès ototès nan twa nan maten an pa t 'fè moun ki responsab pou lage a kontan (salitasyon chod bay Alexey Vasyukov!), ak nan denmen maten anpil mo kalite yo te di nan direksyon pou sistèm nou an. Men, kòm yon rezilta, yo te etabli yon estanda 5 minit pou travay.

    Pou pi vit pèfòmans, nou te itilize de metòd: ototest yo te kòmanse kouri nan twa fil paralèl, erezman sa a trè pratik akòz achitekti nan sistèm lwayote nou an. Epi nou abandone apwòch la kote ototest la pa kreye done tès pou tèt li, men li eseye jwenn yon bagay ki apwopriye nan sistèm nan. Apre yo fin fè chanjman yo, tan total operasyon an te redwi a 3-4 minit.

  7. Yon pwojè ak tès otomatik yo ta dwe kapab deplwaye nan plizyè pozisyon. Nan kòmansman vwayaj nou an, te gen tantativ pou ekri pwòp dosye pakèt nou yo, men li te vin klè ke yon enstalasyon otomatik ekri pwòp tèt ou te laterè konplè, epi nou te vire nan direksyon solisyon endistriyèl. Akòz lefèt ke pwojè a gen yon anpil nan kòd dirèk (premye tout bagay, nou estoke kòd la ototest) ak anpil ti done (done prensipal yo se metadata sou ototès), aplikasyon nan pwojè Liquibase a te tounen trè senp.

    Li se yon sous louvri, bibliyotèk endepandan baz done pou swiv, jere, ak fè respekte chanjman chema baz done yo. Jere atravè liy lòd la oswa kad tankou Apache Maven. Prensip operasyon Liquibase se byen senp. Nou gen yon pwojè òganize nan yon sèten fason, ki gen ladann chanjman oswa scripts ki bezwen yo dwe woule soti nan sèvè a sib, ak dosye kontwòl ki detèmine nan ki sekans ak ak ki paramèt chanjman sa yo ta dwe enstale.

    Nan nivo DBMS, yo kreye yon tab espesyal kote Liquibase estoke boutèy demi lit la. Chak chanjman gen yon hash kalkile, ki konpare chak fwa ant pwojè a ak eta a nan baz done a. Mèsi a Liquibase, nou ka fasilman dewoule chanjman nan sistèm nou an nan nenpòt sikwi. Ototest yo kounye a lanse sou sikui tès ak lage, osi byen ke sou resipyan (sikwi pèsonèl devlopè yo).

Tès inite nan yon DBMS - ki jan nou fè li nan Sportmaster, dezyèm pati

Se konsa, ann pale sou rezilta yo nan itilize sistèm tès inite nou an.

  1. Natirèlman, anvan tout bagay, nou konvenki ke nou te kòmanse devlope pi bon lojisyèl. Tès oto yo lanse chak jou epi yo jwenn plizyè douzèn erè chak lage. Anplis, kèk nan erè sa yo se sèlman endirèkteman ki gen rapò ak fonksyonalite a ke nou reyèlman te vle chanje. Gen dout grav ke erè sa yo te jwenn pa tès manyèl.
  2. Kounye a ekip la gen konfyans ke fonksyonalite espesifik ap travay kòrèkteman... Premye a tout, sa a konsène pwosesis kritik nou yo. Pou egzanp, nan sis mwa ki sot pase yo nou pa te gen okenn pwoblèm ak distribisyon an nan rabè ak bonis sou resi, malgre chanjman yo lage, byenke nan peryòd anvan erè ki te fèt ak kèk frekans.
  3. Nou jere diminye kantite iterasyon tès yo. Akòz lefèt ke ototès yo ekri pou nouvo fonksyonalite, analis ak tèsteur a tan pasyèl resevwa kòd ki pi bon kalite, paske li te deja tcheke.
  4. Gen kèk nan devlopman yo nan tès otomatik yo itilize pa devlopè. Pou egzanp, done tès sou resipyan yo kreye lè l sèvi avèk modil la jenerasyon objè.
  5. Li enpòtan ke nou te devlope yon "akseptasyon" nan sistèm nan tès otomatik sou pati nan devlopè. Gen yon konpreyansyon ke sa a se enpòtan ak itil. Men, apati pwòp eksperyans mwen, mwen ka di ke sa a se lwen ka a. Ototest yo bezwen ekri, yo bezwen sipòte ak devlope, rezilta yo dwe analize, e souvan depans tan sa yo tou senpleman pa vo li. Li pi fasil pou ale nan pwodiksyon ak fè fas ak pwoblèm la. Isit la, devlopè yo aliye epi mande nou kouvri fonksyonalite yo ak tès oto.

Ki sa ki nan pwochen an

Tès inite nan yon DBMS - ki jan nou fè li nan Sportmaster, dezyèm pati

Ann pale sou plan devlopman yo pou pwojè tès otomatik la.

Natirèlman, osi lontan ke sistèm lwayote Sportmaster a vivan epi li kontinye devlope, li posib tou pou devlope ototès prèske alkole. Se poutèt sa, direksyon prensipal devlopman ap agrandi zòn pwoteksyon an.

Kòm kantite ototès ogmante, tan total operasyon yo ap piti piti ogmante, epi nou pral ankò gen pou retounen nan pwoblèm nan nan pèfòmans. Gen plis chans, solisyon an pral ogmante kantite fil paralèl.

Men, sa yo se fason evidan nan devlopman. Si nou pale sou yon bagay ki pa trivial, nou mete aksan sou sa ki annapre yo:

  1. Kounye a, jesyon ototest fèt nan nivo DBMS, i.e. konesans nan PL/SQL obligatwa pou travay siksè. Si sa nesesè, jesyon sistèm (pa egzanp, lanse oswa kreye metadata), ou ka kreye kèk kalite panèl admin lè l sèvi avèk Jenkins oswa yon bagay ki sanble.
  2. Tout moun renmen endikatè quantitative ak kalitatif. Pou tès otomatize, yon endikatè inivèsèl konsa se Kouvèti Kòd oswa mezi pwoteksyon kòd. Sèvi ak endikatè sa a, nou ka detèmine ki pousantaj nan kòd la nan sistèm nou an anba tès ki kouvri pa autotests. Apati vèsyon 12.2, Oracle bay kapasite pou kalkile metrik sa a epi li ofri pakè estanda DBMS_PLSQL_CODE_COVERAGE.

    Sistèm ototest nou an gen jis plis pase yon ane e petèt kounye a se moman pou evalye pwoteksyon nou an. Nan dènye pwojè mwen an (pa yon pwojè Sportmaster) se sa ki te pase. Yon ane apre travay sou ototès, jesyon mete travay la nan evalye ki pousantaj nan kòd la nou kouvri. Avèk yon pwoteksyon ki gen plis pase 1%, jesyon ta dwe kontan. Nou menm, devlopè yo, te espere yon rezilta apeprè 10%. Nou enstale kouvèti kòd, mezire li, epi nou jwenn 20%. Pou selebre, nou te ale jwenn pri a, men ki jan nou te ale jwenn li ak kote nou te ale pita se yon istwa konplètman diferan.

  3. Autotests ka tcheke sèvis entènèt ekspoze. Oracle pèmèt nou fè sa byen byen, epi nou p ap rankontre yon kantite pwoblèm ankò.
  4. Epi, nan kou, sistèm tès otomatik nou an ka aplike nan yon lòt pwojè. Solisyon nou te resevwa a se inivèsèl epi li sèlman mande pou itilize Oracle. Mwen tande ke lòt pwojè Sportmaster yo enterese nan tès otomatik e petèt nou pral ale nan yo.

Jwenn

Ann rezime. Sou pwojè a sistèm lwayote nan Sportmaster, nou jere aplike yon sistèm tès otomatik. Li baze sou solisyon utPLSQL ki soti nan Stephen Feuerstein. Anviwon utPLSQL gen kòd ototest ak modil oksilyè ekri pwòp tèt ou: modil lansman, modil jenerasyon done ak lòt moun. Autotests yo lanse chak jou epi, sa ki pi enpòtan, yo travay epi yo itil. Nou gen konfyans ke nou te kòmanse lage pi bon kalite lojisyèl. An menm tan an, solisyon an ki kapab lakòz se inivèsèl epi yo ka lib aplike nan nenpòt pwojè kote li nesesè yo òganize tès otomatik sou Oracle DBMS la.

PS Atik sa a pa trè espesifik: gen yon anpil nan tèks ak pratikman pa gen okenn egzanp teknik. Si sijè a jeneralman enteresan, Lè sa a, nou pare pou kontinye li epi retounen ak yon kontinyasyon, kote nou pral di w sa ki te chanje nan sis mwa ki sot pase yo epi bay egzanp kòd.

Ekri kòmantè si gen pwen ki ta dwe mete aksan sou alavni, oswa kesyon ki mande divilgasyon.

Se sèlman itilizatè ki anrejistre ki ka patisipe nan sondaj la. Enskri, tanpri.

Eske nou ekri plis sou sa?

  • Oh asire w

  • Non mèsi

12 itilizatè yo te vote. 4 itilizatè te absteni.

Sous: www.habr.com

Add nouvo kòmantè