Boshqalar

Bosim ostida testdan oʻtkazish (testing): biz avtonom sinov tizimini qanday yaratdik?

Birmuncha vaqt avval dasturni ishchi nusxa (production instance)ga yuklashdan soʻng avtomatik  testdan oʻtkazish (testing) kerak boʻladigan loyihada ishlagandim. Avtomatlashtirilgan testdan oʻtkazish (testing) bu – toʻliq sinovdan oʻtkazilmasdan oldin dasturiy taʼminotga yaqinda qoʻshilgan yoki oʻzgartirilgan funksiyalar oʻz oʻrnida ishlayotganini tezkor tekshirish usuli. Bu usul batafsil testdan oʻtkazishdan avval asosiy funksiyalar ishlayotganiga amin boʻlishga yordam beradi va oʻz-oʻzidan sifatni taʼminlashdagi tezkor bosqich sanaladi. Testdan oʻtkazish sozlamalari reliz turiga qarab dinamik ravishda oʻzgarib turishi kerak, chunki frontend va bekend relizlar turli vaqtlarda chiqarilgan hamda turlicha testdan oʻtkazish sozlamalarini talab etgan boʻladi.

Birmuncha vaqt avval dasturni ishchi nusxa (production instance)ga yuklashdan soʻng avtomatik  testdan oʻtkazish (testing) kerak boʻladigan loyihada ishlagandim. Avtomatlashtirilgan testdan oʻtkazish (testing) bu – toʻliq sinovdan oʻtkazilmasdan oldin dasturiy taʼminotga yaqinda qoʻshilgan yoki oʻzgartirilgan funksiyalar oʻz oʻrnida ishlayotganini tezkor tekshirish usuli. Bu usul batafsil testdan oʻtkazishdan avval asosiy funksiyalar ishlayotganiga amin boʻlishga yordam beradi va oʻz-oʻzidan sifatni taʼminlashdagi tezkor bosqich sanaladi. Testdan oʻtkazish sozlamalari reliz turiga qarab dinamik ravishda oʻzgarib turishi kerak, chunki frontend va bekend relizlar turli vaqtlarda chiqarilgan hamda turlicha testdan oʻtkazish sozlamalarini talab etgan boʻladi.

Testdan oʻtkazish jamoasida esa dasturning ishlashini tekshirish va xatoliklar haqida maʼlum qilish uchun bir soat vaqt bor edi. Biz avtomatik tekshiruv uchun 100 ga yaqin test namunalariga ega avtomatlashgan test toʻplamimizni ishga tushirdik. Ilovaning hajmi tufayli biznes talabiga oid barcha muhim komponentlarning bazaviy funksionalligini tekshirishimiz kerak edi.


Tasavvur qiling, raketani kosmosga uchirmoqchisiz. Parvozdan avval raketada hamma narsa – dvigatel, gadjet, xullas, barchasi bekam-koʻst ishlayotganiga amin boʻlishingiz kerak. Bu ilovamiz bilan qiladigan ishga oʻxshaydi, faqat biz raketa oʻrniga kompyuter dasturidan foydalanamiz.

Ana endi eng qiyini — tekshiruv uchun faqat bir soat vaqt bor. Nega deysizmi? Buni poyezdga chiqishga ulgurishga qiyoslash mumkin. Agar poyezdga ulgurmasangiz, keyingisini kutishga toʻgʻri keladi, bu boshqa ishlarni ham ortga suradi. Biz uchun shu bir soatni yoʻqotish ilovani foydalanuvchilarga topshirish kechikishini bildiradi.

Ana shu bir soat biz uchun eng muhim vaqt. Ilova ishlashga tayyorligiga ishonch hosil qilish uchun hammasini tez tekshirib chiqish kerak. Agar bunga koʻp vaqt sarflasak, bu barchaga — jamoa, kompaniya va hatto ilovani ishlatishni kutayotgan insonlarda ham muammoga sabab boʻlishi mumkin. Shuning uchun ana shu bir soatlik testdan oʻtkazishda har bir soniya qadrli.

Testlar parallel ishlasa-da, sinov tugashi 30—45 daqiqa vaqt oladi. Testlar toʻplami ilovaning oʻta muhim funksiyalarini baholaydigan oddiy, oʻrtacha va murakkab test namunalaridan iborat. Murakkab testlarni sinash 30 daqiqa vaqt olishining sababi testlar yomon tuzilgani emas, balki ilovaning oʻziga xosliklaridadir. Ana shu bir soat ichida avtomatlashgan tekshiruvni yakunlashga urinib, bir qancha qiyinchiliklarga duch keldik.

Duch kelingan qiyinchiliklar

Birinchi muammo

Test oʻtkazish jarayonida koʻpincha muammo kelib chiqmasdi va tekshiruvni vaqtida tugallay olardik. Ammo frontend qismda vaqti-vaqti bilan baʼzi oʻzgarishlar boʻlganidan testdan oʻtkazish jamoasi bexabar qolgan boʻlishi mumkinligi koʻplab muvaffaqiyatsiz testlarga sabab boʻldi. Jamoa barcha xatolarni tahlil qilib, har qanday yangi muammo haqida qolgan 15 daqiqa ichida xabar berishga majbur boʻldi. Foydalanuvchi intefeysidagi arzimas oʻzgarish, masalan, veb-elementning matni yoki xususiyatlarining  oʻzgarishi regressiya siklidan keyin yuz bergan va avtomatlashgan testdan oʻtkazishga katta taʼsir oʻtkazgan.

Masalan, har bir test “Kirish” (Login) sahifasidan oʻtishi kerak. Agar kirish sahifasidagi biror veb-element xususiyati oʻzgarsa, barcha testlar notoʻgʻri ishlaydi. Bu vaziyatda avtomatizatsiya sinovchisi sinov oynasi ichida testlarni topib, tuzatishi va qayta ishga tushirishi kerak boʻladi. Kirish sahifasi “Foydalanuvchi nomi” va “Parol” matnli maydoni, “Kirish” tugmasi kabi veb-elementlardan iborat boʻladi. Agar kirish tugmasidagi matn, identifikator, nom yoki teg oʻzgarsa, test kirish tugmasini taniy olmaydi.



Bu vaziyatda “Kirish” tugmasi oʻzgargan boʻlsa, kirish sahifasidan oʻtadigan barcha testlar bor-yoʻgʻi 5 daqiqadan keyin puchakka chiqadi. Sinovchi keyingi 5 daqiqani nima notoʻgʻri ketganini aniqlashga va yana 5 daqiqani buzilgan testlarni toʻgʻrilashga sarflaydi. Shunday qilib, 15 daqiqani “Kirish” tugmasi oʻzgargani uchun sarflab boʻlamiz. Avtomatlashgan sinovni oʻtkazish uchun 45 daqiqa qoladi.

Ikkinchi muammo

Deployment bilan bogʻliq muammolar ham koʻplab xato testlarga sabab boʻlgan. Bu esa tezda vaziyatni tahlil qilish va masʼul tomonlarga hisobot berishni talab etardi. Baʼzi deployment muammolari takrorlanadigan muammolar boʻlib, ularni tez hal qilish mumkin edi. Ammo barcha muvaffaqiyatsiz testlarni 15 daqiqa ichida tahlil qilib, muammo turini aniqlash oson ish emas.

Masalan, qidiruv testlari ekranga maʼlum “xyz” xatolikni chiqarib, muvaffaqiyatsiz yakunlansa, tajribamizdan kelib chiqqan holda mos “abc” nuqtada xatolik ketganini bilamiz. Bunday holatlarda dasturchilarga “abc” nuqtani toʻgʻrilash kerakligini xabar beramiz. Ammo xato testlarni qoʻlda tasniflash ancha qiyin ish.

Keling, bizda 20 ta xato test bor, ammo ulardan faqat bittasi “xyz” xatolikni izlash tufayli muvaffaqiyatsiz yakunlangan holatni koʻrib chiqaylik. Bu xatolik roʻyxatning oʻrtasi yoki oxirida tursin, qolgan xatoliklar esa “toʻgʻri deb topilmadi”, “yangilash mumkin emas”, “element topilmadi” kabi sabablarni keltirayotgan boʻlsin. Agar bu xatoliklarni qoʻlda tahlil qilishga toʻgʻri kelsa, har bir muvaffaqiyatsiz testni bir boshdan koʻrib chiqishga toʻgʻri keladi va “abc” mavjud emasligi uchun muvaffaqiyatsizlikka uchragan testni topish esa eng kamida 10—15 daqiqa vaqt oladi.

Uchinchi muammo

Avtomatlashgan testni ishdan tashqari soatlarda qilardik, bunda bir kishi deployment tugaganidan keyin elektron xabarlarni yuboradigan aloqachi vazifasini bajarardi. Meniki bilan qoʻshib hisoblaganda, har bir test jamoasida kamida 10—12 jamoa uning funksionalligini tekshirardi. Deploymentning kechikishi yoki tungi vaqtda ham avtomatlashgan testni boshlashdan avval koʻp soatlik kutishlar bosimni yanada kuchaytirardi. Avtomatlashgan testlarni olib borayotgan kishi elektron pochtani doimiy tarzda tekshirishga majbur edi. Baʼzida ular koʻp kutgani uchun deployment haqidagi elektron xabarlarni oʻtkazib yuboradi, bu esa testdan oʻtkazish davomiyligini qisqartiradi. Bosim tufayli notoʻgʻri konfiguratsiyalangan testlarni boshlab yuborish holati ham kuzatilgan, bunday paytda testni toʻxtatib, toʻgʻri konfiguratsiya bilan qayta boshlashga toʻgʻri kelardi.

Agar avtomatizatsiya sinovchisi deployment xabarlarini qabul qilingandan 10 daqiqa keyin koʻrsa yoki xabar yoʻqligidan tashvishlanib, testni notoʻgʻri konfiguratsiya bilan boshlab yuborsa, xatoni tushunganda jarayonni oʻrtasidan toʻxtatib, toʻgʻri konfiguratsiya bilan qaytadan boshlashiga toʻgʻri kelardi. Bu esa 20 dan 30 daqiqagacha vaqt olib, avtomatlashgan testdan oʻtkazish uchun bor-yoʻgʻi 30 daqiqa vaqt qoldiradi.


Biz bu muammolarni rahbariyat eʼtiboriga havola qilib, sinov jarayonini uzaytirish yoki toʻplamdagi testlar sonini kamaytirish orqali hal qildik. Ammo vaqtni uzaytirish xarajatlarning koʻpayishiga olib kelardi, chunki masʼul tomonlar va menikidan boshqa jamoalar ham avtomatlashgan testdan oʻtkazish jarayonining bir qismi edi. Boshqa tomondan testlar sonini kamaytirish ilova sifatini xavf ostiga qoʻyishi mumkin. Rahbariyat esa javob tariqasida avtomatlashgan testdan oʻtkazishni olib borish uchun bizga qoʻshimcha ikki kishini berishga qaror qildi.

Shunday qilib biz quyidagi muammolarning yechimini izladik:

  • Veb-elementlar oʻzgarishiga moslasha oladigan test tizimini yaratish;

  • Sinovdagi koʻplab xatoliklarni tez tahlil qiladigan yechim va sinov natijasining hisobotini taqdim qilish;

  • Deployment haqida xabar kelishi bilan avtomatik testlarni boshlash, elektron xabarlarni tushunadigan va testni amalga oshirish uchun toʻgʻri konfiguratsiya tanlash.

Yechim

Biz ancha vaqt davomida tadqiqotimizni davom ettirdik, kundalik vazifalarni bajarish bilan birga qiyinchiliklarga qaramay avtomatlashgan testdan oʻtkazishni ham amalga oshirdik. Vaqt oʻtishi bilan har bir muammoga yechim topdik, bu esa avtonom sinov tizimi (framework) yaralishiga olib keldi.


Mail Reader

Mail Reader deployment haqida elektron xabar kelishi bilan avtomatik testlarning ishga tushishini taʼminlaydi, elektron xabarlarni tushunadi va testlarni amalga oshirish uchun toʻgʻri konfiguratsiya tanlay oladi.

Keling, endi “Uchinchi muammo” boʻlimida yoritilgan hodisani koʻrib chiqamiz. Endi notoʻgʻri konfiguratsiya bilan ishga tushirilgan testlar boʻlmaydi. Bu Mail Reader deployment haqida elektron xabar kelishi bilan sinov jarayonini boshlaydi. U elektron xabarlarni tasniflash uchun mashinaviy oʻqitishning sodda metodlarini qoʻllaydi, frontend va bekend oʻzgarishlarga oid xabarlarni farqlaydi. Bundan tashqari, u frontend va backend oʻzgarishlar uchun turli konfiguratsiyalarni qoʻllab, test konfiguratsiyasini deployment turiga qarab moslaydi. Mail Reader elektron xabar matnini tez tushunadi, kerakli konfiguratsiyani tanlaydi va testni aniqlik hamda tezkorlik bilan boshlab beradi.

Oʻz-oʻzini tiklash

Oʻz-oʻzini tiklash dinamik ravishda oʻzgaradigan foydalanuvchi interfeysiga oid.

Quyidagi videoda oʻz-oʻzini tiklash foydalanuvchi interfeysining dinamik tarzda oʻzgarayotgan elementlarini qanday qilib bartaraf etishi koʻrsatilgan

Endi esa “Birinchi muammo” boʻlimida tasvirlangan “Kirish” tugmasi misolini koʻrib chiqamiz. Agar tizimga kirish tugmasi xususiyatlari oʻzgargan boʻlsa va test ssenariysidagi veb-elementlar selektori tizimga kirish tugmasini topa olmasa, oʻz-oʻzini tiklash mexanizmi ishga tushadi. U yangi kirish tugmasini topadi va test ssenariysidagi elementlar selektorini yangilaydi, bu esa sinov davom etishiga imkon beradi. Oʻz-oʻzini tiklash qarori muammoni qoʻlda hal qilganda sarflanadigan 15 daqiqadan farqli ravishda 1—2 daqiqa ichida amalga oshiriladi. 

Test natijasi analizatori

Test natijasi analizatori test natijalarining tahlili va tasnifining tez hamda oson bajarilishini taʼminlaydi.

Pastdagi videoda test natijalari analizatori tezkor tahlilni qanday yengillashtirishi koʻrsatilgan. 

“Ikkinchi muammo” boʻlimida keltirilgan misolda test natijalari analizatorini qoʻllash jarayonni yengillashtiradi. Analizator har bir muvaffaqiyatsiz testda qanday xatolar borligini qoʻlda tekshirib chiqish oʻrniga testni amalga oshirishdagi noyob xatolar roʻyxatini shakllantiradi va ularni mos muvaffaqiyatsiz test namunalari bilan birlashtirib chiqadi. Test natijalari analizatorining bazaviy versiyasi yordamida tahlil 5 daqiqaga ham bormay amalga oshiriladi va anchagina vaqtni tejaydi. Bundan tashqari, mukammal versiya tahlil jarayonini avtomatlashtiradi va jarayonni bir necha soniyalarda yakunlaydi. Mukammal versiya haqidagi maʼlumotni keyingi maqolada topish mumkin.

Xulosa

Avtomatlashgan testdan oʻtkazish boʻylab murakkab sayohatimizga xulosa qiladigan boʻlsak, tezkor fikrlash, adaptivlik va yaxshi kommunikatsiya muhim faktorlar ekanini tushundik. Biz frontenddagi yoqimsiz oʻzgarishlardan tortib deployment bilan bogʻliq muammolarga ham duch keldik. Ammo hikoyamizdagi eng muhim qahramon oʻzimiz yaratgan avtonom sinov tizimi boʻladi. Bu testdan oʻtkazish bilan bogʻliq oʻyinimizni oʻzgartirib, oldindan tayyor boʻlish samara berishini isbotladi. Bu maqolada testdan oʻtkazishda qanday qilib samarali va ishonchliroq yondashuvga oʻtganimiz, bizning muammolarimiz, gʻalabalarimiz haqida gapirildi. Sayohatimiz sizga ham oʻz sinov sarguzashtlaringizda bir necha gʻoya beradi, degan umiddaman. 

 

Manba: Testing Under Pressure: How We Built an Autonomous Testing Framework

#testing
#machine learning
Mohirdev Telegram

Telegram kanalimizga obuna bo’lishni unutmang

Obuna bo'lish
medium.com

medium.com