pragmaticProgrammer

43-bob. Ayovsiz test qilish (The Pragmatic Programmer kitobidan tarjima)

    Ushbu maqola dasturni yaxshilab (ayovsiz) test qilish haqida. Maqola, The Pragmatic Programmer kitobining 43 – bobining ba’zi bo‘limlarini tarjimasi hisoblanadi. Bu kitobda dasturchilar uchun juda kerakli maslahatlar berilgan ekan, agar kitobni xali o‘qimagan bo‘lsangiz uni o‘qib chiqishni tavsiya etaman.

 

    Ko‘p dasturchilar test qilishni xush ko‘rmaydilar. Ular dasturni iloji boricha ehtiyot bo‘lib, dasturini biron bir joyida xatolik kelib chiqishi mumkinligini sezgan holatda va dasturni nimjon joylarini aylanib o‘tib test qilishga intiladilar. Ammo pragmatiklar o‘zlarini boshqacha tutishadi. Bizda defekt(kamchilik) larni aynan hozir izlab topishga “motivatsiya” (ishtiyoq) mavjud. Chunki vaqti kelib bizdan boshqa odam shu defektni va xatoni topganida uyalib qolishni xohlamaymiz.

 

    Defektlarni izlashni to‘r yordamida baliqlarni ovlashga o‘xshatish mumkin. Biz kichkina to‘rlarni (modul testlar) tanga baliqlarni tutish uchun va katta to‘rlarni, (kompleks testlar) yovuz akulalarni ovlashda ishlatamiz. Ba’zida baliq chiqib ketishi mumkin, shuning uchun biz iloji boricha ko‘proq sirg‘anuvchan defektlarni tutish maqsadida loyixamiz xovuzida suzib yuruvchi barcha topilgan teshiklarni berkitib boramiz.

 

62-Ko‘rsatma
Ertaroq test qiling. Tez-tez test qiling. Avtomatik tarzda test qiling.

    Bizda dasturni tekst(matn) i paydo bo‘lishi bilan biz uni darxol test qilishni xohlaymiz. Mayda tanga baliqchalar tezda bahaybat odamxo‘r-akulalarga aylanish odatiga ega, akulani tutish esa ancha mushkul. Ammo biz barcha testlarni “qo‘lda” (avtomatik emas) qilishni xohlaymiz.

 

    Ko‘pgina jamoalar o‘z loyihalari uchun murakkab test rejalarni ishlab chiqadi. Ba’zi vaqtlarda ulardan foydalanadilar ham. Ammo biz aniqladikki, avtomatik testlarni ishlatuvchi jamoalarning muvaffaqqiyat qozonishi imkoniyati ko‘proq. Dasturni har “qurilish” jarayonida avtomatik tarzda ishlab ketuvchi testlar tokchada turgan test rejalardan ko‘ra samaraliroq.

 

    Defekt qancha ertaroq aniqlansa, uni to‘g‘irlash shuncha arzonroq tushadi. Smalltalk olamidagi mashhur – “Jindan yozsang, jindak tekshirasan” iborani o‘zimizga olamiz va dasturni ishchi “varianti” bitishi bilan (ba’zi vaqtlarda undan ham avvalroq) uni testini ham yozamiz.

    Aslini olganda muvaffaqqiyatli loyihada ishchi dasturlaridan ko‘ra ularni test qiluvchi dasturlari ko‘proq bo‘ladi. Test dasturlarini yozishga ketgan vaqt xarajatlari o‘zini oqlaydi. Oxir oqibat bu ancha arzonroq tushadi va siz haqiqatdan deyarli defektsiz bo‘lgan maxsulotni dunyoga keltirish imkoniga ega bo‘lasiz. Bundan tashqari, testdan o‘tganingiz, sizga dasturni bo‘lagi “tayyor”ligi haqida ko‘proq ishonch baxsh etadi.

 

63-Ko‘rsatma
Dastur testdan o‘tmaguncha yozilgan hisoblanmaydi.

    Siz dasturni bir bo‘lagini yozib bo‘lganingiz, xo‘jayinni yoki buyurtmachini oldiga borib unga “bitganligi” haqida xabar berish kerakligini anglatmaydi. Dastur tayyor emas. Avvalam bor, reallikda dastur hech qachon tayyor bo‘lmaydi. Va bundan ham muhimi, to yozgan dasturingiz barcha mavjud bo‘lgan testlardan o‘tmagunga qadar siz dasturingizni biror kim ishlatishi haqida gapira olmaysiz.

 

    Butun loyiha miqyosida test qilishning uchta asosiy omillarini ko‘rib chiqish lozim: nimani test qilish, qanday qilib test qilish va qachon test qilish.

 

Nimani test qilish lozim
Dasturlarni test qilishni bir necha xil usullari mavjud:

  •     Modullik test qilish
  •     Kompleks test qilish
  •     To‘g‘rilikni tasdiqlash va “verifikatsiya”
  •     Resurslarni etishmasligi holatida test qilish, xatoliklar va ularni to‘g‘irlash
  •     Unumdorlik testlari
  •     Foydalanish qulayligi testlari

Ushbu ro‘yxat to‘liq emas va ba’zi maxsus loyihalarda boshqa test qilish usullarini ham qo‘llash kerak bo‘ladi. Ammo bu sizga yaxshi boshlang‘ich asos bo‘ladi.

 

Modullik test qilish
Modullik test bu dasturni biron bir modulini test qilish uchun tuzilgan dastur. Bu mavzu “Test qilishga oson dastur” bo‘limida yoritilgan. Modullik test qilish ushbu bobda gap ketadigan barcha boshqa testlarni asosi hisoblanadi. Agarda modullar o‘zi alohida ishlamasa, turgan gapki ular birgalikda ham yaxshi ishlay olmaydi. Dastudagi barcha modullar ishlashni davom etish uchun albatta modullik testlardan o‘tishi lozim. Har bir modullar individual testlashdan o‘tgandan so‘ng, siz yangi bosqichga tayyorsiz. Siz modullar bir birini qanday ishlatayotganini va butun tizim bilan qanday uyg‘unlikda ishlayotganligini tekshirishingiz shart.

 

Kompleks test qilish
Kompleks test qilish loyiha tashkil topgan asosiy tizimlar yaxshi ishlayotganini va bir biri bilan to‘g‘ri munosabat qilayotganini ko‘rsatib beradi. Yaxshi tekshirilgan kontrakt(kelishuv) lar bo‘lgan holatda intergatsiya bilan bog‘liq bo‘lgan har qanday muammolarini aniqlash qiyin bo‘lmaydi. Aks xolda integratsiya jarayoni defektlarni ko‘payishi uchun yaxshigina zaminga aylanadi. Aslida ko‘p xolatlarda bu tizimdagi defektlarni eng yirik va yagona manbai bo‘ladi. Komplekst test qilish modullik test qilishning davomi hisoblanib, ular orasidagi farq, siz endi barcha tizimlar bir birlarini kontraktlariga qanchalik amal qilayotganini tekshirasiz.

 

To‘g‘rilikni tekshirish va verifikatsiya
Qo‘lingizga ishlovchi foydalanuvchi interfeysi yoki uni prototipi kelishi bilan, siz quyidagi savolga javob berishingizga to‘g‘ri keladi: bu narsa haqiqatdan ham foydalanuvchilar sizga aytgan va ular ko‘rmoqchi bo‘lgan narsami? Mahsulot tizimni funksional talablariga javob beradimi? Buni ham test qilish lozim. Noto‘g‘ri savollarga javob beruvchi defektsiz tizim, foyda keltirmaydi. Foydalanuvchini ishlash sxemalari qandayligini va ularni dasturchi qiladigan test ma’lumotlaridan farqi borligini anglamoq lozim (misol tariqasida “Otladka” bobida keltirilgan mo‘yqalam bilan chizish tarixiga e’tibor bering). Resurslar yetishmovchiligi sharoitida test qilish, xatoliklar va ularni to‘g‘irlash.

 

    Endi siz tizim ideal sharoitda qanday ishlashini tushunasiz, siz uni real sharoitlarda qanday ishlashini tekshirishingiz kerak. Real hayotda dasturlaringizni resurslari chegaralangan – ular tugab boradi. Dasturingiz quyidagi cheklovlarga duch kelishi mumkin:

  •     Xotira hajmi
  •     Qattiq disk o‘lchami hajmi
  •     Protsessorni quvvati
  •     Takt chastotasi
  •     Disk almashinuvi tezligi
  •     Tarmoqni o‘tkazuvchanlik qobiliyati
  •     Rangli palitra
  •     Ekranni “razresheniya”si

 

    Siz diskda joy yetishmasligini va xotira hajmini haqiqatdan ham tekshirishingiz mumkin, ammo qolgan cheklovlarni ham tekshirib turasizmi? Dasturingiz 640×480 o‘lchamda va 256 ta rangda ishlaydimi? 1600×1280 o‘lchamidachi va bunda uni ko‘rinishi juda kichik bo‘lib ketmaydimi? Paketli buyruq to arxivatsiya dasturini yoqiladigan vaqtigacha ishlashni tugatadimi?
Siz Operatsion tizimdagi cheklovlar mavujdligini, video tizimdagi kamchiliklarni aniqlashingiz mumkin va ularga keraklicha moslashib olishingiz ham mumkin. Ammo barcha xatoliklarning ham qayta tiklab bo‘lmaydi. Agar dastur xotira etishmasligini aniqlasa, sizni faoliyatingiz chegaralangan: sizga dasturni ishini to‘g‘ri tamomlashga resurslar yetishmay qoladi.

 

    Tizimni ish faoliyati buzilganida, bu jarayon chiroyli bo‘ladimi? Bu holatda u bajara olishi mumkin bo‘lgan ishni eng yaxshisini bajara oladimi, – o‘z holatini saqlab qolib ma’lumotlar yo‘qolishini oldini oladimi? Yoki u foydalanuvchiga “Xavfsizlikga tegishli xatolik” yoki “core dump” (tizimni yadrosini o‘chishi) degan xatolikni chiqaradimi?

 

Unumdorlikni test qilish
Unumdorlikni test qilish, “nagruzka”li test qilish yoki tizimni real ishlatiladigan sharoitda test qilish ham loyihani muhim omillaridan bo‘lishi mumkin. O‘zingizga savol bering, dastur real hayotdagi sharoitdagi unumdorlikga bo‘lgan – kutilayotgan foydalanuvchilar soniga, bir vaqt birligidagi ulanishlar yoki tranzaktsiyalar soniga talablarga javob beradimi. Ba’zi dasturlar bilan ishlashda sizga maxsus test qiluvchi qurilmalar yoki real “nagruzka”larni “imitatsiya” qiluvchi dasturlar kerak bo‘lishi mumkin.

 

Foydalanish qulayligini test qilish
Foydalanish qulayligini test qilish yuqorida muhokama qilingan test qilish tadbirlaridan farq qiladi. U real foydalanuvchilar bilan, real sharoitlarda amalga oshiriladi. Foydalanish qulayligini inson faktori tomonidan ko‘rib chiqamiz. Talablarni tahlil qilish jarayonida alohida e’tiborni talab etadigan tushunmovchiliklar kelib chiqdimi? Dastur foydalanuvchiga uning qo‘llarini davomi bo‘ladiganday mos keladimi? Xuddi to‘g‘riligini tasdiqlash va verifikatsiya qilinganidek, siz foydalanish qulayligini iloji boricha ertaroq xali o‘zgartirishlar kiritishga vaqt borida test qilishingiz kerak. Juda katta loyihalarda esa siz inson faktori sohasida mutaxassislarni ham jalb qilishingiz mumkin. Foydalanish qulayligiga mos kelmaslik alomati ham xuddi sonni 0 ga bo‘lishdek defekt xisoblanadi.

 

Farxod Dadajonov tarjimasi

(537 marta o'qilgan, bugun 1 marta o'qildi)

O'xshash maqolalar: