Dasturchilar uchun testlashning zarurligi
Yaqin orada bir necha darajadagi ma'ruzalar aynan dasturchilarga kerak bo'lgan ko'rinishda testlashga bag'ishlanadi. Ammo, avval nima uchun testlash kerak va nima ekanligini aniqlab olaylik.
Dasturiy ta'minotga nisbatan aytish mumkinki, testlashning asosiy vazifasi dasturning:
- o'z vazifasini bajarishini tekshirish
- noto'g'ri ishlamasligini tekshirish
Ikkinchi nuqta, aslida, birinchi nuqta kabi muhim, lekin bu haqda keyinroq gaplashamiz.
Birinchi punktdan boshlaylik. "Dastur nima qilish kerakligini qiladi" deganda nimani anglatadi?
Avvalo, kimdir dasturdan foydalanishning barcha senariylarini tuzishi kerak. Ikkinchidan, ular dastur qanday ishlashi kerakligini, foydalanuvchi qanday harakat qilishi kerakligini va qanday natijalar kutilayotganini tavsiflashlari kerak. Keyin davom ettirish shart emas.
"Foydalanuvchi qanday harakat qilishi kerak" deb yozganimiz zahoti, yaxshi hujjatlashtirishning butun g'oyasi yo'q bo'lib ketadi. Odamlar mashina emas, hatto ko'p hollarda odamlar dastur bilan o'zlari xohlagan tarzda muomala qilishadi. Hech kim texnika bilan tanishishni qo'llanmani o'qishdan boshlamaydi. Bu haqiqat.
Shunday qilib, yangi faktni olamiz: dasturiy ta'minotning ishlash xususiyati shundaki, unda juda ko'p turli ishlash senariylari mavjud. Ba'zilari aniq, boshqalarini hujjatlashtirish mumkin, uchinchisini taxmin qilish mumkin, to'rtinchisini tushunish mumkin, qolgan 50% esa hatto hayolingizga kelmaydi.
Dasturchining nuqtai nazaridan, aksariyat xatolar aslida xato emas. Xato - bu dasturning noto'g'ri yoki kutilgandek ishlamog'i. Ko‘pgina holatlar mavjud, dasturning qanday ishlashi kerakligi yoki bir-biriga zid keladigan senariylarning tushunarsizligi...
Ssenariylar cheksiz ko'p, va mahsulotda har doim kutilganidek ishlamagan holatlar bo'ladi (dasturchi faqat bir necha o'nlab senariylar uchun kod yozgan). Shuning uchun, har qanday dasturda har doim xatolar mavjud va har qanday mahsulotni cheksiz yaxshilash mumkin, deb aytish mumkin.
Keyingi hammasi mantiqiy o'ylashga bog'liq. Dasturchi avval yirik xatolarni tuzatadi, keyin kichikroq xatolarni - va hokazo. Va nihoyat, mahsulot egasi uni yanada rivojlantirish iqtisodiy jihatdan maqsadga muvofiq emas deb hisoblagan bosqich keladi.
Lekin tan olingan xatolarga qaytaylik: dastur aniq boshqa narsa qiladi, qulab tushdi, biror narsa buzildi va hokazo. Bunday xatolarni shartli ravishda 3 toifaga ajratish mumkin: katta, o'rta va kichik.
Ko'pincha, dasturchi o'rta yoki hatto kichik xatolarni tuzatish ustida ishlaydi, garchi loyihada yana ko'plab jiddiy muammolar mavjud. U shunchaki ularni topmagan, shuning uchun o'ziga ma'lum bo'lgan eng kattalar ustida ishlaydi.
Shuning uchun har qanday loyihada testchilar bo'lishi kerak. Bu odamlar mahsulotni turli burchaklardan ko'rishni maxsus o'rganishadi. Shunday qilib, dasturning ko'proq ishlash senariylarini ko'rish mumkin. Ularning vazifasi xatolarni topish va ularni yozishdir (bir xatoni bir necha marta topmaslik uchun).
Testlash — bu xatolarni topishga qaratilgan jarayon. Bu xatolar topilishi, tasvirlanishi va ustuvorliklari aniqlanishi kerak. Faqat xatolar ustuvorligi belgilangandan keyingina dasturiy ta'minotni samarali yaxshilash jarayoni haqida gapirish mumkin.
Unutma, muammoni hal qilishning birinchi qadam bu muammoning mavjudligini tan olishdir. Bilinmagan xatoni tuzatish mumkin emas.
Testlashni avtomatlashtirish
Fikrimcha, hammamiz testlash muhim ekanligiga rozi bo'ldik, shunday ekan, testlashga dasturchilar kabi qarashni ko'rib chiqaylik. Dasturchilar testlashga qanday qarashadi? Dasturchilar boshqa odamlarning ishlarini avtomatlashtiradilar. Yo'q bo'ladigan so'nggi kasb dasturchi kasbi bo'ladi.
Har qanday jarayonni, duch kelganimizda, avtomatlashtiramiz. Demak, testlashni ham avtomatlashtirish kerak. Xatolarni qanday avtomatlashtirish mumkin? Qisqa javob: hech qanday. Ammo bu yerda yana dasturchi ekanligimiz yordam beradi.
Dasturiy ta'minot ishlab chiqish jarayoni doimiy o'zgarishlar kiritishdan iborat. Aynan doimiy o'zgarishlar kiritishda dasturchilar juda tez-tez yaqinda yaxshi ishlagan narsani buzib qo'yadilar.
Va testchilar yangi xatolarni topish o'rniga, biz bilan juda yaxshi ishlagan narsani buzmasligimizni doimo tekshirishlari kerak. Shunday deb ataladigan regressiya testlash. Aynan shu testlash turini avtomatlashtirish mumkin va kerak.
Bu yerda barcha dasturlarni ikki qismga bo'lish mumkin:
- dastur odam bilan o'zaro aloqada bo'ladi
- dastur boshqa dastur bilan o'zaro aloqada bo'ladi
Birinchi variant qiyinroq avtomatlashtiriladi, unga maxsus testchilar-avtomatizatorlar kerak, ularni QA Automation yoki Software Test Engineer deb ham atashadi.
Aytgancha, ikkinchi variantni o'zingiz avtomatlashtirishingiz mumkin va kerak. Agar sizning dastur qismingiz:
- yaxshi ishlaydi
- allaqachon testdan o'tgan
- aloqida modul yoki mantiqiy blok sifatida bajarilgan
- rejalangan o'zgarishlarga ega emas
- undan boshqa modullar yoki dasturlar bog'liq
- funksionallikning buzilishi qimmatga tushadi
Uning amaldagi funksionalligining asosiy jihatlarini tuzatadigan testlarni yozishga vaqt ajratishni tavsiya qilaman. Bunga ish vaqtingizning 5% yoki oyiga 1 kun ajratish mantiqan bo'ladi.
Faqat test uchun test yozish kerak emas.
Hech kim sizning testlaringizni qo'llab-quvvatlamaydi. Na boshqa dasturchilar, na siz o'zingiz. Hech kim shunday qilmaydi. Yozilgan testlarning 99% tashlab qo'yilgan va/yoki o'chirilgan. Agar test yozmaslik mumkin bo'lsa — yozmang. Faqat ularsiz hech qanday holatda bo'lmasa, yozing.
Testlash turlari
Har bir dasturchi, agar u maxsus ta'lim olmagan bo'lsa, testlash nima ekanligini o'z so'zlarida aytib berishi mumkin: dastur kerak bo'lgan narsani bajara oladimi yoki yo'qmi. Biroq, bu sohada mutaxassislar testlashning butun yo'nalishlarini (turlarini) ajratib ko'rsatadilar.
Barcha testlash, haqiqatdan ham, dasturlar ishonchliligini va tayyorgarligini tekshirish atrofida aylanadi, lekin testlash yo'nalishlarini yaxshiroq tushunish uchun bir necha misollarni ko'rib chiqaylik.
Aytaylik, siz tipik internet-do‘konni testlaysiz. Keyin testlash yo'nalishlarini quyidagi turlarga bo'lish mumkin: samaradorlikni testlash, funksional testlash, integratsion testlash va modul testlash.
Agar sayt egasi jiddiy reklama kampaniyasini boshlasa, saytga bir vaqtning o'zida boshlarida ko'p foydalanuvchilar keladi. Sayt yiqilmasligi mumkin, lekin uning ba'zi qismlari sekin ishlashi yoki umuman ishlamay qolishi mumkin.
Bu yuz bermasligi uchun, bunday muammolarni oldindan aniqlashingiz va ularni hal qilish uchun choralar ko'rishingiz kerak. Bu yuklash testlash yordamida amalga oshiriladi yoki uni samaradorlikni testlash deb ham atashadi.
Shuningdek, siz API ning backendini qanday ishlashini tekshirishni xohlashingiz va uning har bir funktsiyasini testlashingiz mumkin: ro'yxatdan o'tish, login, savatchaga qo'shish, to'lovlarni qayta ishlash, ma'lumotlar bazasiga yozish va hokazo. Barchasi TK ga ko'ra ishlashi kerak. Bunday holda, funksional testlashni amalga oshirish kerak.
Sizning internet-do'koningiz ehtimol boshqa xizmatlar bilan integratsiyalangan: xat va SMSlarni yuborish, to'lov tizimlari, onlayn qo'llab-quvvatlash chatlari, foydalanuvchilardan fikr-mulohaza yig'ish, reklama tizimlari va hokazo. Bularning barchasi qanday ishlashini tekshirish uchun integratsion testlash o'tkazishingiz kerak.
Va nihoyat, murakkab mahsulotlar ko'pincha mustaqil modullarga ajratiladi. Bunday modullardan yakuniy mahsulotni yig'ish mumkin, xuddi konstruktor kabi. Agar siz ushbu modulni ishlab chiqish yoki bu modullar bilan ishlash bilan shug'ullanayotgan bo'lsangiz, u holda sizga kerak modul testlashni o'tkazish kerak bo'ladi.
Xulosa qilib aytganda, funksional testlash har bir alohida funktsiyani tekshirish uchun kerak. Integratsion — mahsulotingizning katta modullari va tizimlari o'zaro aloqasini testlash uchun. Modul — alohida modulni tekshirish uchun, va samaradorlikni testlash — saytning yuk ostida ishlashini tekshirish uchun.
Testlash turlari bundan ham ko'proq bo'lishi mumkin: mahsulot qanchalik murakkab bo'lsa, uning rivojlanishining ko'proq jihatlari nazoratga muhtoj.
GO TO FULL VERSION