ДҚБЖ бірлік сынақтары - біз мұны Sportmaster бағдарламасында қалай жасаймыз, екінші бөлім

Бірінші бөлім - осында.

ДҚБЖ бірлік сынақтары - біз мұны Sportmaster бағдарламасында қалай жасаймыз, екінші бөлім

Жағдайды елестетіп көріңіз. Сіздің алдыңызда жаңа функционалдылықты дамыту міндеті тұр. Сізде бұрынғылардан әзірлемелер бар. Егер сізде моральдық міндеттер жоқ деп есептесек, сіз не істер едіңіз?

Көбінесе ескі оқиғалардың бәрі ұмытылып, бәрі басынан басталады. Ешкім біреудің кодын қазып алуды ұнатпайды, бірақ уақытыңыз болса, неге өз жүйеңізді құруды бастамасқа? Бұл әдеттегі тәсіл және ол негізінен дұрыс. Бірақ жобамызда қателестік. Біз болашақ автоматты тестілеу жүйесін өзіміздің алдарымыздан шыққан utPLSQL жүйесіндегі бірлік сынақтарындағы әзірлемелерге негіздедік, содан кейін бірнеше параллель бағытта жұмыс істей бастадық.

  1. Ескі бірлік сынақтарын қалпына келтіру. Қалпына келтіру сынақтарды адалдық жүйесінің бар күйіне бейімдеу және сынақтарды utPLSQL стандарттарына бейімдеу дегенді білдіреді.
  2. Автотесттермен нақты нені, қандай әдістер мен процестерді қамтитынын түсіну арқылы мәселені шешу. Сіз бұл ақпаратты өз басыңызда сақтауыңыз керек немесе тікелей автотест коды негізінде қорытынды жасауыңыз керек. Сондықтан біз каталог жасауды жөн көрдік. Әрбір автотестке бірегей мнемоникалық код тағайындадық, сипаттама жасадық және параметрлерді жаздырдық (мысалы, оны қандай жағдайларда іске қосу керек немесе сынақты іске қосу сәтсіз болса не болуы керек). Негізінде, біз автотесттер туралы метадеректерді толтырдық және бұл метадеректерді стандартты utPLSQL схема кестелеріне орналастырдық.
  3. Кеңейту стратегиясын анықтау, яғни. автоматтандырылған сынақтар арқылы тексеруге жататын функционалдылықты таңдау. Біз үш нәрсеге назар аударуды шештік: жаңа жүйе жақсартулары, өндіріс оқиғалары және негізгі жүйе процестері. Осылайша, біз шығарумен қатар дамып жатырмыз, оның жоғары сапасын қамтамасыз етеміз, бір уақытта регрессияның ауқымын кеңейтеміз және маңызды жерлерде жүйенің сенімділігін қамтамасыз етеміз. Бірінші осындай тығырыққа тірелген чек бойынша жеңілдіктер мен бонустарды тарату процесі болды.
  4. Әрине, біз жаңа автотесттерді әзірлеуді бастадық. Алғашқы шығарылым тапсырмаларының бірі адалдық жүйесінің алдын ала анықталған үлгілерінің өнімділігін бағалау болды. Біздің жобада шарттар негізінде клиенттерді таңдайтын қатаң бекітілген SQL сұрауларының блогы бар. Мысалы, соңғы сатып алуы белгілі бір қалада болған барлық тұтынушылардың тізімін немесе орташа сатып алу сомасы белгілі бір мәннен жоғары болатын тұтынушылардың тізімін алыңыз. Жазбаша автотесттерді жүргізе отырып, біз алдын ала анықталған үлгілерді тексердік, эталондық өнімділік параметрлерін жазып алдық, сонымен қатар бізде жүктеме сынағы болды.
  5. Автотесттермен жұмыс істеу ыңғайлы болуы керек. Ең көп таралған екі әрекет - автотесттерді іске қосу және сынақ деректерін жасау. Біздің жүйеде осылайша екі көмекші модуль пайда болды: іске қосу модулі және деректерді генерациялау модулі.

    Іске қосу құралы бір мәтін енгізу параметрі бар бір әмбебап процедура ретінде ұсынылған. Параметр ретінде автотест мнемоникалық кодын, бума атауын, сынақ атауын, автотестілеу параметрін немесе сақталған кілт сөзді өткізуге болады. Процедура шарттарды қанағаттандыратын барлық автотесттерді таңдап, іске қосады.

    Деректерді генерациялау модулі тексерілетін жүйенің әрбір объектісі үшін (деректер қорындағы кесте) мәліметтерді енгізетін арнайы процедура жасалған пакет түрінде ұсынылған. Бұл процедурада әдепкі мәндер мүмкіндігінше толтырылады, бұл саусақты басу арқылы нысандарды құруды қамтамасыз етеді. Ал пайдаланудың қарапайымдылығы үшін жасалған деректерге үлгілер жасалды. Мысалы, сынақ телефоны және аяқталған сатып алуы бар белгілі бір жастағы клиентті жасаңыз.

  6. Автотесттер жүйеңіз үшін қолайлы уақытта басталып, іске қосылуы керек. Сондықтан күнделікті түнгі іске қосу ұйымдастырылды, оның нәтижелері бойынша нәтижелер туралы есеп жасалады және корпоративтік пошта арқылы бүкіл әзірлеу тобына жіберіледі. Ескі автотесттерді қалпына келтіріп, жаңаларын жасағаннан кейін жалпы жұмыс уақыты 30 минутты құрады. Бұл қойылым барлығына ұнады, өйткені ұшыру жұмыс уақытынан тыс уақытта өтті.

    Бірақ жұмыс жылдамдығын оңтайландыру бойынша жұмыс істеуге тура келді. Өндірістегі адалдық жүйесі түнде жаңартылады. Шығарылымдардың бірінің бөлігі ретінде түнде шұғыл өзгерістер енгізуге тура келді. Түнгі сағат үште автотест нәтижелерін жарты сағат күту босатуға жауапты адамды қуанта алмады (Алексей Васюковке жалынды сәлем!), ал келесі күні таңертең біздің жүйеге көптеген жылы сөздер айтылды. Бірақ нәтижесінде 5 минуттық жұмыс нормасы белгіленді.

    Өнімділікті жылдамдату үшін біз екі әдісті қолдандық: автотесттер үш параллель ағында орындала бастады, бақытымызға орай, бұл біздің адалдық жүйеміздің архитектурасына байланысты өте ыңғайлы. Және біз автотест өзі үшін сынақ деректерін жасамайтын, бірақ жүйеде қолайлы нәрсені табуға тырысатын тәсілден бас тарттық. Өзгерістерді енгізгеннен кейін жалпы жұмыс уақыты 3-4 минутқа дейін қысқарды.

  7. Автоматты сынақтары бар жобаны әртүрлі стендтерде орналастыру мүмкіндігі болуы керек. Саяхатымыздың басында өзіміздің пакеттік файлдарымызды жазу әрекеттері болды, бірақ өздігінен жазылған автоматтандырылған қондырғының қорқынышты екені белгілі болды және біз өнеркәсіптік шешімдерге бет бұрдық. Жобада көптеген тікелей кодтар (біріншіден, біз автотест кодын сақтаймыз) және өте аз деректер (негізгі деректер автотесттер туралы метадеректер) болғандықтан, Liquibase жобасында іске асыру өте қарапайым болып шықты.

    Бұл дерекқор схемасының өзгерістерін қадағалауға, басқаруға және орындауға арналған ашық бастапқы дерекқордан тәуелсіз кітапхана. Пәрмен жолы немесе Apache Maven сияқты шеңберлер арқылы басқарылады. Liquibase жұмыс принципі өте қарапайым. Бізде белгілі бір жолмен ұйымдастырылған жоба бар, ол мақсатты серверге шығарылуы қажет өзгерістерден немесе сценарийлерден және осы өзгерістердің қандай ретпен және қандай параметрлермен орнатылу керектігін анықтайтын басқару файлдарынан тұрады.

    ДҚБЖ деңгейінде арнайы кесте құрылады, онда Liquibase ауысу журналын сақтайды. Әрбір өзгерісте жоба мен дерекқордағы күй арасында әр уақытта салыстырылатын есептелген хэш болады. Liquibase арқасында біз жүйеміздегі өзгерістерді кез келген тізбекке оңай енгізе аламыз. Автотесттер енді сынақ және босату схемаларында, сондай-ақ контейнерлерде (әзірлеушілердің жеке схемалары) іске қосылады.

ДҚБЖ бірлік сынақтары - біз мұны Sportmaster бағдарламасында қалай жасаймыз, екінші бөлім

Сонымен, біздің бірлік тестілеу жүйесін пайдалану нәтижелері туралы сөйлесейік.

  1. Әрине, ең алдымен біз жақсырақ бағдарламалық қамтамасыз етуді жасай бастағанымызға сенімдіміз. Автотесттер күн сайын іске қосылады және әр шығарылымда ондаған қателер табылады. Сонымен қатар, бұл қателердің кейбірі біз шынымен өзгерткіміз келген функционалдылыққа жанама түрде қатысты. Бұл қателер қолмен тестілеу арқылы табылды деген үлкен күмән бар.
  2. Енді команда нақты функцияның дұрыс жұмыс істеп жатқанына сенімді... Бұл, ең алдымен, біздің маңызды процестерімізге қатысты. Мысалы, соңғы алты айда бізде шығарылымдағы өзгерістерге қарамастан, түбіртектер бойынша жеңілдіктер мен бонустарды бөлуде проблемалар болған жоқ, дегенмен алдыңғы кезеңдерде белгілі бір жиілікте қателер орын алған.
  3. Біз тестілеу итерацияларының санын азайта алдық. Автотесттер жаңа функционалдылық үшін жазылғандықтан, аналитиктер мен толық емес тестерлер жоғары сапалы код алады, өйткені ол әлдеқашан тексерілген.
  4. Автоматтандырылған тестілеудегі кейбір әзірлемелерді әзірлеушілер пайдаланады. Мысалы, контейнерлердегі сынақ деректері нысанды генерациялау модулінің көмегімен жасалады.
  5. Әзірлеушілер тарапынан автоматтандырылған тестілеу жүйесін «қабылдау» жасағанымыз маңызды. Бұл маңызды және пайдалы деген түсінік бар. Бірақ өз тәжірибемнен бұл жағдайдан алыс деп айта аламын. Автотесттерді жазу керек, оларды қолдау және дамыту, нәтижелерді талдау қажет және көбінесе бұл уақыт шығындары жай ғана тұрмайды. Өндіріске бару және онда проблемаларды шешу оңайырақ. Мұнда әзірлеушілер қатарға тұрып, олардың функционалдығын автотесттермен қамтуды сұрайды.

Ары қарай не

ДҚБЖ бірлік сынақтары - біз мұны Sportmaster бағдарламасында қалай жасаймыз, екінші бөлім

Автоматтандырылған тестілеу жобасының даму жоспарлары туралы сөйлесейік.

Әрине, Sportmaster адалдық жүйесі өмір сүріп, дамуын жалғастырып жатқанда, автотесттерді де шексіз дерлік әзірлеуге болады. Сондықтан дамудың негізгі бағыты қамту аймағын кеңейту болып табылады.

Автотесттердің саны артқан сайын олардың жалпы жұмыс уақыты тұрақты түрде артады және біз өнімділік мәселесіне қайтадан оралуымыз керек. Сірә, шешім параллель жіптердің санын көбейту болады.

Бірақ бұл дамудың айқын жолдары. Егер біз тривиальды емес нәрсе туралы айтатын болсақ, біз мыналарды атап өтеміз:

  1. Қазіргі уақытта автотестті басқару ДҚБЖ деңгейінде орындалады, яғни. табысты жұмыс істеу үшін PL/SQL білімі қажет. Қажет болса, жүйені басқару (мысалы, метадеректерді іске қосу немесе жасау), сіз Jenkins немесе соған ұқсас нәрсе арқылы басқару панелінің қандай да бір түрін жасай аласыз.
  2. Әр адам сандық және сапалық көрсеткіштерді жақсы көреді. Автоматтандырылған тестілеу үшін мұндай әмбебап көрсеткіш кодты қамту немесе кодты қамту көрсеткіші болып табылады. Бұл көрсеткішті пайдалана отырып, біз тексерілетін жүйе кодының қанша пайызы автотесттермен қамтылғанын анықтай аламыз. 12.2 нұсқасынан бастап Oracle бұл көрсеткішті есептеу мүмкіндігін береді және стандартты DBMS_PLSQL_CODE_COVERAGE бумасын пайдалануды ұсынады.

    Біздің автотест жүйеміздің жұмыс істегеніне небәрі бір жыл болды, мүмкін қазір біздің қамтуымызды бағалаудың уақыты келді. Менің соңғы жобамда (Sportmaster жобасы емес) осылай болды. Автотесттермен жұмыс істегеннен кейін бір жылдан кейін басшылық кодтың қанша пайызын қамтитынымызды бағалау міндетін қойды. Қамту деңгейі 1%-дан асса, басшылық қуанады. Біз, әзірлеушілер, шамамен 10% нәтиже күткен. Біз кодты қамтуды орнаттық, оны өлшеп, 20% алдық. Тойлау үшін біз жүлдені алуға бардық, бірақ оны алу үшін қалай бардық, кейін қайда бардық - бұл мүлдем басқа әңгіме.

  3. Автотесттер ашық веб-қызметтерді тексере алады. Oracle бізге мұны өте жақсы орындауға мүмкіндік береді және біз бұдан былай бірқатар мәселелерге тап болмаймыз.
  4. Және, әрине, біздің автоматтандырылған тестілеу жүйесін басқа жобаға қолдануға болады. Біз алған шешім әмбебап және тек Oracle пайдалануды талап етеді. Басқа Sportmaster жобалары автоматты тестілеуге қызығушылық танытады деп естідім, мүмкін біз оларға барамыз.

қорытындылар

Қорытындылайық. Sportmaster-тегі адалдық жүйесі жобасында біз автоматтандырылған тестілеу жүйесін енгізе алдық. Ол Стивен Фейерштейннің utPLSQL шешіміне негізделген. utPLSQL айналасында автотест коды және қосалқы өздігінен жазылатын модульдер бар: іске қосу модулі, деректерді генерациялау модулі және т.б. Автотесттер күн сайын іске қосылады және ең бастысы олар жұмыс істейді және пайдалы. Біз жоғары сапалы бағдарламалық қамтамасыз етуді шығара бастағанымызға сенімдіміз. Сонымен бірге алынған шешім әмбебап болып табылады және Oracle ДҚБЖ автоматтандырылған тестілеуді ұйымдастыру қажет болған кез келген жобаға еркін қолданылуы мүмкін.

PS Бұл мақала өте нақты емес: мәтін көп және техникалық мысалдар іс жүзінде жоқ. Егер тақырып жалпы қызықты болса, онда біз оны жалғастыруға дайынбыз және соңғы алты айда не өзгергенін айтып, кодтық мысалдар келтіреміз.

Болашақта баса назар аудару керек тұстар немесе ашуды қажет ететін сұрақтар болса, түсініктеме жазыңыз.

Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. Кіру, өтінемін.

Бұл туралы толығырақ жазамыз ба?

  • Иә, әрине

  • Жок, рахмет

12 пайдаланушы дауыс берді. 4 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру