Test — dasturiy mahsulotning ma’lum shartlarda kutilgan xatti-harakatini tekshiradigan jarayon yoki bajariladigan tekshiruv. Test xato yo‘qligini mutlaq isbotlamaydi; u tanlangan kirishlar va sharoitlarda natijaning talablarga mosligini ko‘rsatadi. Test holati kirish ma’lumoti, bajarish sharti, kutilgan natija va haqiqiy natijadan tashkil topadi.
Test darajalari
Unit test funksiya, klass yoki kichik modulni tashqi bog‘liqliklardan ajratib tekshiradi. U tez bajariladi va xato joyini tor doirada ko‘rsatadi. Integration test ma’lumotlar bazasi, message broker, fayl tizimi yoki bir nechta modulning birgalikdagi ishlashini tekshiradi. System test butun tizimni talablarga nisbatan baholaydi.
End-to-end test foydalanuvchi oqimini realga yaqin muhitda boshidan oxirigacha bajaradi. U ko‘p qatlamni qamrab oladi, lekin sekinroq va tashqi holatlarga sezgirroq bo‘lishi mumkin. Shu sababli test to‘plamida ko‘p tez unit testlar, kamroq integration va tanlangan end-to-end testlar ishlatiladi.
Test holatini tuzish
Normal qiymatlar bilan birga chegaraviy holatlar tekshiriladi. Masalan, uzunlik 1–100 oralig‘ida bo‘lsa, 0, 1, 100 va 101 qiymatlari muhim. Equivalence partitioning bir xil xatti-harakat kutiladigan kirishlarni guruhlaydi. Decision table bir nechta shart kombinatsiyasini, state transition testi esa holatlar orasidagi ruxsat etilgan o‘tishlarni tekshiradi.
Test deterministik bo‘lishi kerak: kod o‘zgarmaganida u tasodifiy muvaffaqiyat yoki xato bermasligi maqsadga muvofiq. Vaqt, tarmoq va umumiy global holatga bog‘liq flaky test ishonchni pasaytiradi. Tasodifiy testda seed qayd qilinsa, xatoni qayta hosil qilish mumkin.
Test double
Stub oldindan belgilangan javob qaytaradi. Mock chaqiruvlar qanday amalga oshirilganini tekshiradi. Fake soddalashtirilgan, ammo ishlaydigan implementatsiya bo‘lishi mumkin, masalan xotiradagi ma’lumotlar bazasi. Tashqi komponentni almashtirish testni tezlashtiradi, lekin mock haqiqiy servis xatti-harakatidan uzoqlashsa test noto‘g‘ri ishonch beradi.
Avtomatlashtirish va qamrov
CI pipeline har commit yoki pull requestda testlarni bajaradi. Muvaffaqiyatsiz test buildni to‘xtatishi mumkin. Code coverage qaysi qator, branch yoki funksiyalar test vaqtida bajarilganini o‘lchaydi. Yuqori coverage testlarning sifatli ekanini o‘zi kafolatlamaydi; assertionsiz bajarilgan kod ham qamrovga kirishi mumkin.
Regression test ilgari topilgan xatoning qaytmasligini tekshiradi. Performance, load, security va usability testlari funksional to‘g‘rilikdan boshqa xususiyatlarni baholaydi. Ularning muhiti, ma’lumot hajmi va muvaffaqiyat mezoni oldindan belgilanadi.
Test oracle va ma’lumot
Test oracle — natijaning to‘g‘riligini aniqlaydigan manba. Oddiy unit testda bu oldindan yozilgan qiymat, murakkab hisobda tasdiqlangan reference implementatsiya yoki matematik xususiyat bo‘lishi mumkin. Oracle noto‘g‘ri bo‘lsa, to‘g‘ri kod ham testdan yiqiladi yoki xatoli kod o‘tadi.
Test ma’lumoti ishlab chiqarishdagi shaxsiy yozuvlarning nazoratsiz nusxasi bo‘lmaydi. Sintetik dataset, anonimlashtirilgan nusxa yoki maxsus fixture ishlatiladi. Har test o‘z holatini yaratib, tugagach tozalasa testlar bajarilish tartibiga bog‘lanmaydi. Database transaction rollback yoki vaqtinchalik container izolyatsiyani ta’minlashi mumkin.
Mutation testing
Mutation testing dasturga kichik sun’iy xato, masalan shart operatorini almashtirish kiritadi. Testlar ushbu mutantni aniqlasa, u “o‘ldirilgan” hisoblanadi. Mutant yashab qolsa, test assertioni yetarli emasligi yoki o‘zgarish amalda ekvivalent ekanini tekshirish kerak. Bu usul coverage foizidan ko‘ra testning xatoni ushlash qobiliyatini baholaydi.
Bog‘liq tushunchalar
Unit test, integration test, end-to-end test, assertion, mock, code coverage, CI