Միավորի թեստերը DBMS-ում. ինչպես ենք մենք դա անում Sportmaster-ում, մաս երկրորդ

Առաջին մաս - այստեղ.

Միավորի թեստերը DBMS-ում. ինչպես ենք մենք դա անում Sportmaster-ում, մաս երկրորդ

Պատկերացրեք իրավիճակը. Ձեր առջեւ խնդիր է դրված նոր ֆունկցիոնալություն մշակել: Դուք զարգացումներ ունեք ձեր նախորդներից։ Եթե ​​ենթադրենք, որ դուք բարոյական պարտավորություններ չունեք, ի՞նչ կանեիք։

Ամենից հաճախ մոռացվում են բոլոր հին զարգացումները, և ամեն ինչ սկսվում է նորից: Ոչ ոք չի սիրում փորփրել ուրիշի ծածկագիրը, բայց եթե ժամանակ ունես, ինչու չսկսել ստեղծել քո սեփական համակարգը: Սա տիպիկ մոտեցում է, և այն մեծ մասամբ ճիշտ է։ Բայց մեր նախագծում մենք դա սխալ արեցինք։ Մենք ապագա ավտոմատ թեստավորման համակարգը հիմնեցինք մեր նախորդների utPLSQL-ի միավորային թեստերի զարգացումների վրա, այնուհետև անցանք մի քանի զուգահեռ ուղղություններով:

  1. Հին միավորի թեստերի վերականգնում: Վերականգնում նշանակում է թեստերի հարմարեցում հավատարմության համակարգի առկա վիճակին և թեստերի հարմարեցում utPLSQL ստանդարտներին:
  2. Խնդրի լուծում՝ հասկանալով, թե կոնկրետ ինչ, ինչ մեթոդներ և գործընթացներ են ծածկված ավտոթեստերով: Դուք կամ պետք է պահեք այս տեղեկատվությունը ձեր գլխում, կամ եզրակացություններ անեք՝ հիմնվելով անմիջապես autotest ծածկագրի վրա: Հետեւաբար, մենք որոշեցինք ստեղծել կատալոգ: Մենք յուրաքանչյուր ինքնաթեստին հատկացրել ենք յուրահատուկ մնեմոնիկ կոդ, ստեղծել ենք նկարագրություն և գրանցել կարգավորումներ (օրինակ՝ ինչ պայմաններում այն ​​պետք է գործարկվի, կամ ինչ պետք է տեղի ունենա, եթե փորձնական մեկնարկը ձախողվի): Ըստ էության, մենք լրացրել ենք ավտոմատ փորձարկումների մետատվյալները և տեղադրել այդ մետատվյալները ստանդարտ utPLSQL սխեմաների աղյուսակներում:
  3. Ընդլայնման ռազմավարության սահմանում, այսինքն. ֆունկցիոնալության ընտրություն, որը ենթակա է ստուգման ավտոմատացված թեստերի միջոցով: Մենք որոշեցինք ուշադրություն դարձնել երեք բանի վրա՝ նոր համակարգի բարելավումներ, արտադրության միջադեպեր և հիմնական համակարգի գործընթացներ: Այսպիսով, մենք զարգանում ենք թողարկմանը զուգահեռ՝ ապահովելով դրա ավելի բարձր որակը, միաժամանակ ընդլայնելով ռեգրեսիայի շրջանակը և ապահովելով համակարգի հուսալիությունը կրիտիկական վայրերում։ Առաջին նման խոչընդոտը չեկի վրա զեղչերի և բոնուսների բաշխման գործընթացն էր:
  4. Բնականաբար, մենք սկսեցինք մշակել նոր ավտոթեստեր։ Թողարկման առաջին առաջադրանքներից մեկը հավատարմության համակարգի նախապես սահմանված նմուշների կատարողականի գնահատումն էր: Մեր նախագիծն ունի խիստ ֆիքսված SQL հարցումների բլոկ, որն ընտրում է հաճախորդներին՝ հիմնվելով պայմանների վրա: Օրինակ՝ ստացեք բոլոր հաճախորդների ցուցակը, որոնց վերջին գնումը կատարվել է որոշակի քաղաքում, կամ այն ​​հաճախորդների ցուցակը, որոնց գնման միջին գումարը որոշակի արժեքից բարձր է: Ունենալով գրավոր ինքնաթեստեր, մենք ստուգեցինք նախապես սահմանված նմուշները, գրանցեցինք հենանիշի կատարողականի պարամետրերը, և լրացուցիչ մենք ունեցանք բեռնվածության թեստավորում:
  5. Ավտոթեստերի հետ աշխատելը պետք է հարմար լինի. Ամենատարածված երկու գործողություններն են ավտոմատ թեստավորումը և թեստային տվյալների ստեղծումը: Այսպես մեր համակարգում հայտնվեցին երկու օժանդակ մոդուլներ՝ գործարկման մոդուլ և տվյալների ստեղծման մոդուլ։

    Գործարկիչը ներկայացված է որպես մեկ ունիվերսալ ընթացակարգ՝ տեքստի մուտքագրման մեկ պարամետրով: Որպես պարամետր, դուք կարող եք փոխանցել autotest մնեմոնիկ կոդը, փաթեթի անունը, թեստի անունը, autotest պարամետրը կամ վերապահված հիմնաբառը: Ընթացակարգը ընտրում և գործարկում է բոլոր ինքնաթեստերը, որոնք բավարարում են պայմաններին:

    Տվյալների ստեղծման մոդուլը ներկայացված է փաթեթի տեսքով, որում փորձարկվող համակարգի յուրաքանչյուր օբյեկտի համար (շտեմարանում աղյուսակ) ստեղծվել է հատուկ ընթացակարգ, որը տվյալներ է տեղադրում այնտեղ։ Այս ընթացակարգում լռելյայն արժեքները լրացվում են հնարավորինս, ինչը ապահովում է օբյեկտների ստեղծումը բառացիորեն մատի սեղմումով: Իսկ օգտագործման հարմարավետության համար ստեղծվել են գեներացված տվյալների կաղապարներ։ Օրինակ՝ ստեղծեք որոշակի տարիքի հաճախորդ՝ թեստային հեռախոսով և ավարտված գնումով:

  6. Ավտոփորձարկումները պետք է սկսվեն և գործարկվեն ձեր համակարգի համար ընդունելի ժամանակում: Հետևաբար, կազմակերպվեց ամենօրյա գիշերային մեկնարկ, որի արդյունքների հիման վրա գեներացվում է արդյունքների վերաբերյալ հաշվետվություն և կորպորատիվ փոստով ուղարկվում զարգացման ողջ թիմին: Հին ավտոթեստերը վերականգնելուց և նորերը ստեղծելուց հետո ընդհանուր գործառնական ժամանակը կազմել է 30 րոպե: Այս ներկայացումը սազում էր բոլորին, քանի որ մեկնարկը տեղի ունեցավ աշխատանքային ժամերից դուրս։

    Բայց մենք պետք է աշխատեինք աշխատանքի արագության օպտիմալացման վրա։ Արտադրության մեջ հավատարմության համակարգը թարմացվում է գիշերը: Թողարկումներից մեկի շրջանակներում մենք ստիպված էինք շտապ փոփոխություններ կատարել գիշերը: Առավոտյան ժամը երեքին ավտոթեստերի արդյունքներին կես ժամ սպասելը չուրախացրեց ազատման համար պատասխանատուին (ջերմ ողջույններ Ալեքսեյ Վասյուկովին), իսկ հաջորդ առավոտ շատ բարի խոսքեր ասվեցին մեր համակարգի հասցեին։ Բայց արդյունքում հաստատվեց աշխատանքի 5 րոպեանոց չափորոշիչ։

    Գործողությունը արագացնելու համար մենք օգտագործեցինք երկու մեթոդ. ավտոմատ փորձարկումները սկսեցին աշխատել երեք զուգահեռ թելերով, բարեբախտաբար դա շատ հարմար է մեր հավատարմության համակարգի ճարտարապետության շնորհիվ: Եվ մենք հրաժարվեցինք այն մոտեցումից, որտեղ autotest-ը չի ստեղծում թեստային տվյալներ իր համար, այլ փորձում է համակարգում հարմար բան գտնել։ Փոփոխությունները կատարելուց հետո ընդհանուր գործառնական ժամանակը կրճատվել է մինչև 3-4 րոպե:

  7. Ավտոմատ փորձարկումներով նախագիծը պետք է կարողանա տեղակայվել տարբեր կանգառներում: Մեր ճանապարհորդության սկզբում փորձեր եղան գրելու մեր սեփական խմբաքանակային ֆայլերը, բայց պարզ դարձավ, որ ինքնագրված ավտոմատ տեղադրումը կատարյալ սարսափ էր, և մենք դիմեցինք արդյունաբերական լուծումներին: Հաշվի առնելով այն հանգամանքը, որ նախագիծը պարունակում է շատ ուղիղ կոդ (առաջին հերթին, մենք պահպանում ենք autotest կոդը) և շատ քիչ տվյալներ (հիմնական տվյալները մետատվյալներն են autotests-ի վերաբերյալ), Liquibase նախագծում իրականացումը պարզվեց, որ շատ պարզ է:

    Այն բաց կոդով, տվյալների բազայից անկախ գրադարան է՝ տվյալների բազայի սխեմայի փոփոխությունները հետևելու, կառավարելու և պարտադրելու համար: Կառավարվում է հրամանի տողի կամ շրջանակների միջոցով, ինչպիսիք են Apache Maven-ը: Liquibase-ի շահագործման սկզբունքը բավականին պարզ է. Մենք ունենք որոշակի ձևով կազմակերպված նախագիծ, որը բաղկացած է փոփոխություններից կամ սկրիպտներից, որոնք պետք է փոխանցվեն թիրախային սերվերին, և վերահսկիչ ֆայլեր, որոնք որոշում են, թե ինչ հաջորդականությամբ և ինչ պարամետրերով պետք է տեղադրվեն այդ փոփոխությունները:

    DBMS մակարդակում ստեղծվում է հատուկ աղյուսակ, որտեղ Liquibase-ը պահում է rollover log-ը: Յուրաքանչյուր փոփոխություն ունի հաշվարկված հեշ, որը ամեն անգամ համեմատվում է նախագծի և տվյալների բազայի վիճակի միջև: Liquibase-ի շնորհիվ մենք հեշտությամբ կարող ենք փոփոխություններ կատարել մեր համակարգում ցանկացած շղթայում: Ինքնաթեստերն այժմ գործարկվում են փորձարկման և թողարկման սխեմաների, ինչպես նաև բեռնարկղերի (մշակողների անձնական սխեմաների) վրա:

Միավորի թեստերը DBMS-ում. ինչպես ենք մենք դա անում Sportmaster-ում, մաս երկրորդ

Այսպիսով, եկեք խոսենք մեր միավորի փորձարկման համակարգի օգտագործման արդյունքների մասին:

  1. Իհարկե, առաջին հերթին մենք համոզված ենք, որ սկսել ենք ավելի լավ ծրագրեր մշակել։ Ամեն օր մեկնարկում են ավտոմատ թեստեր, և յուրաքանչյուր թողարկում հայտնաբերվում են տասնյակ սխալներ: Ավելին, այս սխալներից որոշները միայն անուղղակիորեն կապված են այն ֆունկցիոնալության հետ, որը մենք իսկապես ցանկանում էինք փոխել: Լուրջ կասկածներ կան, որ այդ սխալները հայտնաբերվել են ձեռքով թեստավորման միջոցով:
  2. Թիմն այժմ վստահ է, որ կոնկրետ ֆունկցիոնալությունը ճիշտ է աշխատում... Առաջին հերթին դա վերաբերում է մեր կրիտիկական գործընթացներին: Օրինակ, վերջին վեց ամիսների ընթացքում մենք որևէ խնդիր չենք ունեցել անդորրագրերի վրա զեղչերի և բոնուսների բաշխման հետ կապված՝ չնայած թողարկման փոփոխություններին, թեև նախորդ ժամանակաշրջաններում սխալները տեղի են ունեցել որոշակի հաճախականությամբ։
  3. Մեզ հաջողվեց նվազեցնել թեստավորման կրկնությունների քանակը։ Հաշվի առնելով այն հանգամանքը, որ ավտոմատ թեստերը գրված են նոր ֆունկցիոնալության համար, վերլուծաբանները և կես դրույքով փորձարկողները ստանում են ավելի բարձր որակի ծածկագիր, քանի որ այն արդեն ստուգված է։
  4. Ավտոմատացված թեստավորման որոշ զարգացումներ օգտագործվում են մշակողների կողմից: Օրինակ, բեռնարկղերի թեստային տվյալները ստեղծվում են օբյեկտների ստեղծման մոդուլի միջոցով:
  5. Կարևոր է, որ մենք մշակել ենք ավտոմատացված թեստավորման համակարգի «ընդունում» մշակողների կողմից: Կա հասկացողություն, որ սա կարևոր և օգտակար է: Բայց իմ սեփական փորձից կարող եմ ասել, որ դա հեռու է դեպքից։ Ավտոթեստերը պետք է գրվեն, դրանք պետք է աջակցվեն և մշակվեն, արդյունքները պետք է վերլուծվեն, և հաճախ այդ ժամանակի ծախսերը պարզապես չարժեն: Շատ ավելի հեշտ է գնալ արտադրության և այնտեղ խնդիրներ լուծել: Այստեղ մշակողները հերթ են կանգնում և խնդրում մեզ ծածկել իրենց ֆունկցիոնալությունը ավտոթեստերով:

Ինչ է հաջորդը

Միավորի թեստերը DBMS-ում. ինչպես ենք մենք դա անում Sportmaster-ում, մաս երկրորդ

Խոսենք ավտոմատացված թեստավորման նախագծի զարգացման պլանների մասին։

Իհարկե, քանի դեռ Sportmaster-ի հավատարմության համակարգը կենդանի է և շարունակում է զարգանալ, հնարավոր է նաև գրեթե անվերջ զարգացնել ավտոթեստերը: Ուստի զարգացման հիմնական ուղղությունը ծածկույթի ընդլայնումն է։

Ինքնաթեստերի քանակի ավելացման հետ մեկտեղ դրանց ընդհանուր գործառնական ժամանակը անշեղորեն կավելանա, և մենք կրկին ստիպված կլինենք վերադառնալ կատարողականի խնդրին: Ամենայն հավանականությամբ, լուծումը կլինի զուգահեռ թելերի քանակի ավելացումը։

Բայց սրանք զարգացման ակնհայտ ուղիներ են։ Եթե ​​խոսենք ավելի ոչ տրիվիալ բանի մասին, ապա առանձնացնում ենք հետևյալը.

  1. Ներկայումս ավտոմատ փորձարկման կառավարումն իրականացվում է DBMS մակարդակով, այսինքն. Հաջող աշխատանքի համար անհրաժեշտ է PL/SQL-ի իմացություն: Անհրաժեշտության դեպքում, համակարգի կառավարում (օրինակ, մետատվյալների գործարկում կամ ստեղծում), կարող եք ստեղծել ինչ-որ ադմինիստրատորի վահանակ՝ օգտագործելով Jenkins-ը կամ նման բան:
  2. Բոլորը սիրում են քանակական և որակական ցուցանիշներ։ Ավտոմատացված թեստավորման համար նման համընդհանուր ցուցիչ է ծածկույթի ծածկույթը կամ ծածկույթի մետրիկը: Օգտագործելով այս ցուցանիշը՝ մենք կարող ենք որոշել, թե մեր փորձարկվող համակարգի կոդի քանի տոկոսն է ծածկված ավտոթեստերով։ Սկսած 12.2 տարբերակից՝ Oracle-ն ապահովում է այս ցուցանիշը հաշվարկելու հնարավորություն և առաջարկում է օգտագործել ստանդարտ DBMS_PLSQL_CODE_COVERAGE փաթեթը:

    Մեր ավտոթեստավորման համակարգը մեկ տարուց մի փոքր ավելի վաղեմություն ունի, և գուցե հիմա ժամանակն է գնահատել մեր ծածկույթը: Իմ վերջին նախագծում (ոչ Sportmaster նախագծում) այսպես եղավ: Ավտոթեստերի վրա աշխատելուց մեկ տարի անց ղեկավարությունը խնդիր դրեց գնահատել, թե ծածկագրի քանի տոկոսն ենք ծածկում: 1%-ից ավելի լուսաբանման դեպքում ղեկավարությունը ուրախ կլիներ: Մենք՝ մշակողներս, ակնկալում էինք մոտ 10% արդյունք։ Մենք տեղադրեցինք ծածկույթի ծածկույթը, չափեցինք այն և ստացանք 20%: Տոնելու համար մենք գնացինք մրցանակը ստանալու, բայց թե ինչպես գնացինք այն ստանալու և ուր գնացինք հետո, բոլորովին այլ պատմություն է:

  3. Ավտոփորձարկումները կարող են ստուգել բացված վեբ ծառայությունները: Oracle-ը մեզ թույլ է տալիս դա անել բավականին լավ, և մենք այլևս չենք հանդիպի մի շարք խնդիրների։
  4. Եվ, իհարկե, մեր ավտոմատացված թեստավորման համակարգը կարող է կիրառվել մեկ այլ նախագծի համար: Մեր ստացած լուծումը ունիվերսալ է և պահանջում է միայն Oracle-ի օգտագործումը: Ես լսել եմ, որ Sportmaster-ի մյուս նախագծերը հետաքրքրված են ավտոմատ թեստավորումով, և միգուցե մենք գնանք դրանց:

Արդյունքները

Եկեք ամփոփենք. Sportmaster-ում հավատարմության համակարգի նախագծում մեզ հաջողվեց ներդրել ավտոմատացված թեստավորման համակարգ: Այն հիմնված է Stephen Feuerstein-ի utPLSQL լուծման վրա: utPLSQL-ի շուրջ կա autotest կոդ և օժանդակ ինքնուրույն գրված մոդուլներ՝ գործարկման մոդուլ, տվյալների ստեղծման մոդուլ և այլն: Ավտոթեստերը ամեն օր մեկնարկում են, և որ ամենակարևորն է, դրանք գործում են և օգտակար: Մենք վստահ ենք, որ սկսել ենք ավելի բարձր որակի ծրագրեր թողարկել: Միևնույն ժամանակ, ստացված լուծումը ունիվերսալ է և կարող է ազատորեն կիրառվել ցանկացած նախագծի համար, որտեղ անհրաժեշտ է Oracle DBMS-ի վրա ավտոմատ թեստավորում կազմակերպել:

Հ.Գ. Այս հոդվածն այնքան էլ կոնկրետ չէ. կան շատ տեքստեր և գործնականում ոչ մի տեխնիկական օրինակ: Եթե ​​թեման ընդհանուր առմամբ հետաքրքիր է, ապա մենք պատրաստ ենք այն շարունակել և վերադառնալ շարունակությամբ, որտեղ կպատմենք, թե ինչ է փոխվել վերջին վեց ամիսների ընթացքում և կներկայացնենք կոդերի օրինակներ։

Գրեք մեկնաբանություններ, եթե կան կետեր, որոնք պետք է ընդգծվեն ապագայում, կամ հարցեր, որոնք պահանջում են բացահայտում:

Հարցմանը կարող են մասնակցել միայն գրանցված օգտվողները։ Մուտք գործել, խնդրում եմ:

Այս մասին ավելին գրե՞նք։

  • Այո, իհարկե

  • Ոչ, շնորհակալություն

Քվեարկել է 12 օգտատեր։ 4 օգտատեր ձեռնպահ է մնացել։

Source: www.habr.com

Добавить комментарий