Profion uned mewn DBMS - sut rydym yn ei wneud yn Sportmaster, rhan dau

Rhan gyntaf - yma.

Profion uned mewn DBMS - sut rydym yn ei wneud yn Sportmaster, rhan dau

Dychmygwch sefyllfa. Rydych chi'n wynebu'r dasg o ddatblygu ymarferoldeb newydd. Mae gennych brofiad gan eich rhagflaenwyr. Gan dybio nad oes gennych unrhyw rwymedigaethau moesol, beth fyddech chi'n ei wneud?

Yn fwyaf aml, anghofir yr holl hen ddatblygiadau ac mae popeth yn dechrau eto. Nid oes neb yn hoffi cloddio i mewn i god rhywun arall, ac os oes gennych amser, beth am ddechrau creu eich system eich hun? Mae hwn yn ddull nodweddiadol, ac ar lawer ystyr mae'n gywir. Ond yn ein prosiect, fe wnaethom ymddwyn yn wahanol. Fe wnaethom seilio system brofi awtomataidd y dyfodol ar y datblygiadau mewn profion uned ar utPLSQL gan ein rhagflaenwyr, ac yna aethom i weithio mewn sawl cyfeiriad cyfochrog.

  1. Adfer hen brofion uned. Mae adferiad yn golygu addasu profion i gyflwr presennol y system deyrngarwch ac addasu profion i safonau utPLSQL.
  2. Datrys y broblem gyda dealltwriaeth, a beth yn union, pa ddulliau a phrosesau, rydym wedi gorchuddio â autotests. Rhaid i chi naill ai gadw'r wybodaeth hon yn eich pen, neu ddod i gasgliadau yn seiliedig yn uniongyrchol ar y cod awtobrofion. Felly, fe benderfynon ni greu catalog. Fe wnaethom neilltuo cod cofrodd unigryw i bob awtobrawf, creu disgrifiad, a gosod y gosodiadau (er enghraifft, o dan ba amodau y dylai redeg, neu beth ddylai ddigwydd os bydd y rhediad prawf yn methu). Yn y bôn, fe wnaethom lenwi'r metadata am yr awtobrofion a gosod y metadata hwn yn nhablau safonol y sgema utPLSQL.
  3. Diffiniad o strategaeth ehangu, h.y. detholiad o swyddogaethau sy'n amodol ar ddilysu gan awtobrofion. Penderfynasom roi sylw i dri pheth: gwelliannau newydd i'r system, digwyddiadau o gynhyrchu, a phrosesau allweddol y system. Felly, rydym yn datblygu ochr yn ochr â rhyddhau, gan sicrhau ei ansawdd uwch, ar yr un pryd ehangu cwmpas yr atchweliad a sicrhau dibynadwyedd y system mewn mannau critigol. Y dagfa gyntaf o'r fath oedd y broses o ddosbarthu gostyngiadau a bonysau gyda siec.
  4. Yn naturiol, rydym yn dechrau datblygu autotests newydd. Un o'r tasgau rhyddhau cyntaf oedd gwerthuso perfformiad samplau rhagddiffiniedig o'r system teyrngarwch. Mae gan ein prosiect floc o ymholiadau sql anhyblyg sefydlog sy'n dewis cleientiaid yn unol ag amodau. Er enghraifft, mynnwch restr o'r holl gwsmeriaid yr oedd eu pryniant diwethaf mewn dinas benodol, neu restr o gwsmeriaid y mae eu swm prynu cyfartalog yn uwch na gwerth penodol. Ar ôl ysgrifennu profion awtomatig, gwnaethom wirio samplau wedi'u diffinio ymlaen llaw, paramedrau perfformiad meincnod sefydlog, ac yn ogystal cawsom brofion llwyth.
  5. Dylai gweithio gydag autotests fod yn gyfleus. Y ddau gam mwyaf cyffredin yw rhedeg awtobrofion a chynhyrchu data profion. Dyma sut yr ymddangosodd dau fodiwl ategol yn ein system: y modiwl lansio a'r modiwl cynhyrchu data.

    Cynrychiolir y lansiwr fel un weithdrefn generig gydag un paramedr testun mewnbwn. Fel paramedr, gallwch basio cod cofleidyddol awtotest, enw pecyn, enw prawf, gosodiad prawf awtomatig, neu allweddair neilltuedig. Mae'r weithdrefn yn dewis ac yn rhedeg pob autotest sy'n bodloni'r amodau.

    Cyflwynir y modiwl cynhyrchu data fel pecyn, lle crëwyd gweithdrefn arbennig ar gyfer pob gwrthrych o'r system dan brawf (tabl yn y gronfa ddata) sy'n mewnosod data yno. Yn y weithdrefn hon, mae'r gwerthoedd diofyn yn cael eu llenwi i'r eithaf, sy'n sicrhau creu gwrthrychau yn llythrennol wrth glicio bys. Ac er hwylustod, crëwyd templedi ar gyfer y data a gynhyrchir. Er enghraifft, creu cleient o oedran penodol gyda ffôn prawf a phryniant wedi'i gwblhau.

  6. Dylai Autotests redeg a rhedeg o fewn amser rhesymol ar gyfer eich system. Felly, trefnwyd lansiad nos dyddiol, yn seiliedig ar y canlyniadau, a chynhyrchir adroddiad ar y canlyniadau a'i anfon at y tîm datblygu cyfan trwy bost corfforaethol. Ar ôl adfer hen brofion awtomatig a chreu rhai newydd, cyfanswm yr amser rhedeg oedd 30 munud. Roedd perfformiad o'r fath yn gweddu i bawb, gan fod y lansiad wedi digwydd yn ystod y tu allan i oriau.

    Ond roedd yn rhaid i ni weithio ar optimeiddio cyflymder y gwaith. Mae'r system teyrngarwch cynhyrchu yn cael ei diweddaru gyda'r nos. Fel rhan o un o'r datganiadau, bu'n rhaid i ni wneud newidiadau ar frys gyda'r nos. Ni wnaeth aros hanner awr am ganlyniadau autotests am dri y bore y person sy'n gyfrifol am y rhyddhau yn hapus (cyfarchion brwd i Alexei Vasyukov!), A'r bore wedyn dywedwyd llawer o eiriau cynnes tuag at ein system. Ond o ganlyniad, gosodwyd safon 5 munud ar gyfer gwaith.

    Er mwyn cyflymu perfformiad, rydym yn defnyddio dau ddull: rydym yn dechrau rhedeg autotests mewn tair edafedd cyfochrog, gan fod hyn yn gyfleus iawn oherwydd pensaernïaeth ein system teyrngarwch. Ac fe wnaethom roi'r gorau i'r dull gweithredu pan nad yw'r awtotest yn creu data prawf iddo'i hun, ond yn ceisio dod o hyd i rywbeth addas yn y system. Ar ôl gwneud newidiadau, gostyngwyd cyfanswm yr amser gweithredu i 3-4 munud.

  7. Dylid gallu lleoli prosiect gyda phrofion awtomatig ar stondinau amrywiol. Ar ddechrau'r daith, bu ymdrechion i ysgrifennu ein ffeiliau swp ein hunain, ond daeth yn amlwg bod gosodiad awtomataidd hunan-ysgrifenedig yn arswyd llwyr, a throisom at atebion diwydiannol. Oherwydd y ffaith bod gan y prosiect lawer o god yn uniongyrchol (yn gyntaf oll, rydym yn storio'r cod awtobrofion) ac ychydig iawn o ddata (y prif ddata yw metadata am awtobrofion), daeth yn hawdd iawn i integreiddio i mewn i'r Prosiect Liquibase.

    Mae'n llyfrgell cronfa ddata annibynnol ffynhonnell agored ar gyfer olrhain, rheoli a chymhwyso newidiadau i sgema cronfa ddata. Wedi'i reoli trwy linell orchymyn neu fframweithiau fel Apache Maven. Mae egwyddor gweithredu Liquibase yn eithaf syml. Mae gennym brosiect wedi'i drefnu mewn ffordd benodol, sy'n cynnwys newidiadau neu sgriptiau y mae angen eu rholio ar y gweinydd targed, a ffeiliau rheoli sy'n pennu ym mha drefn a pha baramedrau y dylid gosod y newidiadau hyn.

    Ar lefel DBMS, crëir tabl arbennig lle mae Liquibase yn storio'r log dychwelyd. Mae gan bob newid hash wedi'i gyfrifo sy'n cael ei gymharu bob tro rhwng y prosiect a'r cyflwr yn y gronfa ddata. Diolch i Liquibase, gallwn yn hawdd gyflwyno newidiadau i'n system i unrhyw gylched. Mae profion awtomatig bellach yn cael eu rhedeg ar gylchedau profi a rhyddhau, yn ogystal ag ar gynwysyddion (cylchedau datblygwr personol).

Profion uned mewn DBMS - sut rydym yn ei wneud yn Sportmaster, rhan dau

Felly, gadewch i ni siarad am ganlyniadau cymhwyso ein system profi uned.

  1. Wrth gwrs, yn gyntaf oll, rydym yn argyhoeddedig ein bod wedi dechrau datblygu meddalwedd gwell. Mae Autotests yn rhedeg bob dydd ac yn dod o hyd i ddwsinau o fygiau bob rhyddhad. Ar ben hynny, dim ond yn anuniongyrchol y mae rhai o'r gwallau hyn yn ymwneud â'r swyddogaethau yr oeddem am eu newid mewn gwirionedd. Mae amheuon cryf y canfuwyd y gwallau hyn trwy brofion â llaw.
  2. Daeth y tîm yn hyderus bod swyddogaethau penodol yn gweithio'n gywir... Yn gyntaf oll, mae hyn yn ymwneud â'n prosesau hanfodol. Er enghraifft, dros y chwe mis diwethaf, nid ydym wedi cael unrhyw broblemau gyda dosbarthiad gostyngiadau a bonysau trwy siec, er gwaethaf y newidiadau a wnaed bob datganiad, er bod gwallau wedi digwydd yn aml mewn cyfnodau blaenorol.
  3. Llwyddom i leihau nifer yr iteriadau profi. Oherwydd bod profion awtomatig yn cael eu hysgrifennu ar gyfer swyddogaethau newydd, mae dadansoddwyr a phrofwyr rhan-amser yn cael cod o ansawdd uwch, oherwydd mae eisoes wedi'i wirio.
  4. Mae datblygwyr yn defnyddio rhan o ddatblygiadau profi awtomataidd. Er enghraifft, mae data prawf ar gynwysyddion yn cael ei greu gan ddefnyddio'r modiwl cynhyrchu gwrthrychau.
  5. Mae’n bwysig ein bod wedi datblygu “derbyn” o’r system brofi awtomataidd gan ddatblygwyr. Mae yna ddealltwriaeth bod hyn yn bwysig ac yn ddefnyddiol. Ac o fy mhrofiad fy hun, gallaf ddweud bod hyn ymhell o fod yn wir. Mae angen ysgrifennu profion awtomatig, mae angen eu cynnal a'u datblygu, dadansoddi'r canlyniadau, ac yn aml nid yw'r costau amser hyn yn werth chweil. Mae'n llawer haws mynd i gynhyrchu a delio â phroblemau yno. Yn ein gwlad, datblygwyr llinell i fyny ac yn gofyn i gwmpasu eu swyddogaeth gyda autotests.

Beth sydd nesaf

Profion uned mewn DBMS - sut rydym yn ei wneud yn Sportmaster, rhan dau

Gadewch i ni siarad am gynlluniau datblygu'r prosiect profi awtomataidd.

Wrth gwrs, cyn belled â bod system teyrngarwch Sportmaster yn fyw ac yn parhau i ddatblygu, gellir datblygu awtobrofion bron yn ddiddiwedd hefyd. Felly, prif gyfeiriad y datblygiad yw ehangu'r ardal ddarlledu.

Wrth i nifer yr awtobrofion gynyddu, bydd cyfanswm amser eu gwaith yn cynyddu'n raddol, a bydd yn rhaid inni ddychwelyd eto at fater perfformiad. Yn fwyaf tebygol, yr ateb fydd cynyddu nifer yr edafedd cyfochrog.

Ond mae'r rhain yn ffyrdd amlwg o ddatblygu. Os byddwn yn siarad am rywbeth nad yw'n ddibwys, rydym yn tynnu sylw at y canlynol:

  1. Nawr mae profion awtomatig yn cael eu rheoli ar lefel DBMS, h.y. mae angen gwybodaeth o PL/SQL ar gyfer gwaith llwyddiannus. Os oes angen, gall rhyw fath o banel gweinyddol ddefnyddio Jenkins neu rywbeth tebyg i reoli system (er enghraifft, lansio neu greu metadata).
  2. Mae pawb yn caru dangosyddion meintiol ac ansoddol. Ar gyfer profion awtomatig, dangosydd cyffredinol o'r fath yw Cwmpas y Cod neu fetrig cwmpas cod. Gan ddefnyddio'r dangosydd hwn, gallwn benderfynu pa ganran o god ein system dan brawf sy'n cael ei gwmpasu gan awtobrofion. Gan ddechrau o fersiwn 12.2, mae Oracle yn darparu'r gallu i gyfrifo'r metrig hwn ac yn awgrymu defnyddio'r pecyn safonol DBMS_PLSQL_CODE_COVERAGE.

    Mae ein system awtotest ychydig dros flwydd oed ac efallai ei bod hi'n bryd gwerthuso'r cwmpas. Yn fy mhrosiect diwethaf (prosiect nad yw gan Sportmaster), digwyddodd hyn. Flwyddyn ar ôl gweithio ar awtobrofion, gosododd y rheolwyr y dasg o asesu pa ganran o'r cod a gwmpaswyd gennym. Gyda mwy nag 1% o sylw, byddai'r rheolwyr yn hapus. Roeddem ni, y datblygwyr, yn disgwyl canlyniad o tua 10%. Fe wnaethom sgriwio cwmpas y cod, ei fesur, cael 20%. I ddathlu, aethon ni am y wobr, ond mae sut aethon ni amdani a ble aethon ni wedyn yn stori hollol wahanol.

  3. Gall Autotests brofi gwasanaethau gwe agored. Mae Oracle yn caniatáu ichi wneud hyn, ac ni fyddwn yn dod ar draws nifer o broblemau mwyach.
  4. Ac, wrth gwrs, gellir cymhwyso ein system brofi awtomataidd i brosiect arall. Mae'r ateb a gawsom yn gyffredinol a dim ond yn gofyn am ddefnyddio Oracle. Clywais fod diddordeb mewn profion awtomataidd ar brosiectau eraill Sportmaster ac, efallai, awn atyn nhw.

Canfyddiadau

Gadewch i ni ailadrodd. Ar y prosiect system teyrngarwch yn Sportmaster, fe wnaethom lwyddo i weithredu system brofi awtomataidd. Ei sail yw'r datrysiad utPLSQL gan Stephen Feuerstein. O gwmpas utPLSQL mae'r cod ar gyfer awtobrofion a modiwlau hunan-ysgrifenedig ategol: lansiwr, modiwl cynhyrchu data, ac eraill. Mae Autotests yn rhedeg yn ddyddiol ac, yn bwysicaf oll, yn gweithio ac yn elwa. Rydym yn argyhoeddedig ein bod wedi dechrau rhyddhau meddalwedd o ansawdd uwch. Ar yr un pryd, mae'r datrysiad canlyniadol yn gyffredinol a gellir ei gymhwyso'n rhydd i unrhyw brosiect lle mae angen trefnu profion awtomataidd ar yr Oracle DBMS.

ON Nid oedd yr erthygl hon yn benodol iawn: mae yna lawer o destun ac bron dim enghreifftiau technegol. Os yw'r pwnc yn ddiddorol yn fyd-eang, yna rydym yn barod i barhau ag ef a dychwelyd gyda pharhad, lle byddwn yn dweud wrthych beth sydd wedi newid dros y chwe mis diwethaf ac yn rhoi enghreifftiau cod.

Ysgrifennwch sylwadau os oes pwyntiau y dylid eu pwysleisio yn y dyfodol, neu gwestiynau sydd angen eu datgelu.

Dim ond defnyddwyr cofrestredig all gymryd rhan yn yr arolwg. Mewngofnodios gwelwch yn dda.

A ddylem ni ysgrifennu mwy am hyn?

  • Ie, wrth gwrs

  • Dim Diolch

Pleidleisiodd 12 o ddefnyddwyr. Ymataliodd 4 o ddefnyddwyr.

Ffynhonnell: hab.com

Ychwanegu sylw