Azimjon Abdurasulov

QA 5: Test dizayn texnikalari (1) — Equivalence Partitioning, Boundary Value Analysis va Decision Table

🧪 QA Engineer — Zero to Hero

QA 5: Test dizayn texnikalari (1) — Equivalence Partitioning, Boundary Value Analysis va Decision Table

Holat: 2026-yil oktabr. Dars ISTQB CTFL v4.0.1 syllabus'ining 4.2-bo'limi (black-box texnikalar) va ISTQB'ning rasmiy "Boundary Value Analysis" white paper'i asosida yozilgan. Barcha misollar xayoliy DemoBozor do'konining qoidalariga tayanadi.

Bu darsdan keyin siz: cheksiz ko'p kiritish variantlaridan kichik, lekin kuchli test to'plamini tizimli ravishda chiqara olasiz.

  • har qanday maydon uchun valid va invalid equivalence partition'larni ajratasiz;
  • 2-value va 3-value BVA bilan chegara qiymatlarini aniq hisoblaysiz (ko'pchilik adashadigan joyni ham bilasiz);
  • murakkab biznes qoidani decision table'ga aylantirib, talablardagi bo'shliqlarni topasiz;
  • texnikalarni birlashtirib, checkout formasi uchun to'liq test to'plami tuzasiz.

Mundarija

  1. Nega texnika kerak: "hammasini tekshiraman" degan xayol
  2. Test dizayn texnikalari xaritasi
  3. Equivalence Partitioning (EP)
  4. Boundary Value Analysis (BVA)
  5. Raqam bo'lmagan tuzoqlar: format, probel va so'm
  6. Decision Table testing
  7. Texnikalarni birlashtirish: checkout formasi
  8. Ko'p uchraydigan xatolar
  9. Amaliy mashqlar
  10. Xulosa
  11. Manbalar

1. Nega texnika kerak: "hammasini tekshiraman" degan xayol {#nega-texnika}

DemoBozor'ning muddatli to'lov (foizsiz bo'lib to'lash) arizasida "Yosh" maydoni bor. Talab oddiy: 18 yoshdan 65 yoshgacha (shu jumladan). Agar maydon 0 dan 150 gacha butun son qabul qilsa — bu 151 ta qiymat. Yana "Summa" (500 000 – 30 000 000 so'm) va "Muddat" (3, 6 yoki 12 oy) maydonlari bor. Hammasini birga tekshirsak, kombinatsiyalar soni milliardlarga yetadi.

ISTQB'ning 2-printsipi buni rasman aytadi: barcha variantni tekshirish (exhaustive testing) mumkin emas (batafsil — QA 2). Demak savol "hammasini qanday tekshiraman?" emas, balki "qaysi kichik to'plam qolgan hammasini ishonchli ifodalaydi?".

Test dizayn texnikalari aynan shu savolga javob beradi. ISTQB syllabus'i ularni shunday ta'riflaydi: texnikalar nisbatan kichik, lekin yetarli test case to'plamini tizimli ravishda ishlab chiqishga yordam beradi.

Hayotiy analogiya: laboratoriya butun qonni emas, bitta probirkani tekshiradi. Chunki probirkadagi qon butun organizmdagi qonni ifodalaydi. Equivalence partitioning ham xuddi shunday ishlaydi: bitta qiymat butun guruhni ifodalaydi.

Har bir texnika uchta narsani beradi:

TushunchaMa'nosiMisol (yosh maydoni)
Test conditionNimani tekshiramiz"Yosh chegarasi to'g'ri ishlaydi"
Coverage itemTexnika aytgan "tekshirish nuqtasi"17, 18, 65, 66 qiymatlari
Coverage (qamrov)Bajarilgan item'lar / jami item'lar × 100%4 tadan 4 tasi → 100%

🧠 Esda tuting: Texnika — bu ijodni o'ldiradigan qolip emas. U sizga "qayerga qarash kerak"ligini aytadi, qolganini tajriba va savollar to'ldiradi.

🎯 Intervyuda: "Nega hamma kiritishlarni tekshirib bo'lmaydi?" — Kombinatsiyalar soni amalda cheksiz; shuning uchun EP, BVA va decision table kabi texnikalar bilan risk va qamrovga asoslangan kichik, lekin samarali to'plam tanlaymiz.


2. Test dizayn texnikalari xaritasi {#texnikalar-xaritasi}

ISTQB CTFL v4.0 texnikalarni to'rt guruhga ajratadi:

GuruhTexnikalarNimaga tayanadiKursda
Black-box (specification-based)Equivalence Partitioning, Boundary Value Analysis, Decision Table, State TransitionTalab, spetsifikatsiya — ichki kodni bilmasdanQA 5, QA 6
White-box (structure-based)Statement testing, Branch testingKodning ichki tuzilishiQA 6
Experience-basedError guessing, Exploratory testing, Checklist-based testingTester tajribasi va bilimiQA 6
Collaboration-basedCollaborative user story writing, Acceptance criteria, ATDDJamoaviy muloqot — defektning oldini olishQA 3, QA 6

Black-box texnikalarning katta afzalligi: test case'lar kod qanday yozilganiga bog'liq emas. Dasturchi kodni qayta yozsa ham, talab o'zgarmagan bo'lsa, testlaringiz hamon foydali.

Bu darsda black-box guruhining uchta texnikasini o'rganamiz. To'rtinchisi — state transition — keyingi darsda.


3. Equivalence Partitioning (EP) {#ep}

3.1. G'oya

Equivalence Partitioning ma'lumotlarni partition'larga (ekvivalent guruhlarga) bo'ladi. Bitta partition ichidagi barcha qiymatlarni tizim bir xil qayta ishlaydi deb kutiladi. Shuning uchun, agar bitta qiymat defektni topsa, shu partition'dagi boshqa qiymat ham uni topadi. Natija: har partition'dan bitta test yetarli.

Syllabus qo'yadigan qoidalar:

  • partition'lar kesishmaydi va bo'sh emas;
  • partition kiritishlar uchungina emas: chiqishlar (output), konfiguratsiya, ichki qiymatlar, vaqtga bog'liq qiymatlar va interfeys parametrlari uchun ham tuziladi;
  • valid partition — tizim qabul qilib qayta ishlashi kerak bo'lgan qiymatlar; invalid partition — rad etilishi yoki e'tiborsiz qoldirilishi kerak bo'lganlar.

Qamrov formulasi: EP coverage = (kamida bitta test tekkan partition'lar) / (aniqlangan barcha partition'lar) × 100%. Invalid partition'lar ham hisobga kiradi.

3.2. Misol 1: muddatli to'lov — yosh 18–65

Avval biznes qoidasi bo'yicha bo'lamiz:

PartitionQiymatlarTuriVakil qiymatKutilgan natija
P10–17invalid10"Muddatli to'lov 18 yoshdan" xabari
P218–65valid40Ariza davom etadi
P366 va undan kattainvalid80"Muddatli to'lov 65 yoshgacha" xabari

Keyin format bo'yicha alohida partition'lar — bu boshqa test condition:

PartitionVakil qiymatKutilgan natija
Bo'sh"""Yoshni kiriting"
Raqam emasyigirma"Faqat raqam kiriting"
Manfiy-5Rad etiladi
Kasr25.5Rad etiladi yoki butun songa keltiriladi — talabda yo'q, so'rash kerak

💡 Maslahat: Biznes qoidasini (18–65) va formatni (raqammi?) bitta jadvalga aralashtirmang. Ular odatda kodning turli qatlamlarida (UI validatsiya va server mantiqi) yashaydi va turli bug'lar beradi.

3.3. Misol 2: parol — 8–64 belgi, kamida 1 harf va 1 raqam

Sotuvchi web panelining paroli uchun ikkita partition to'plami bor:

To'plamPartitionTuriVakil
Uzunlik0–7invalidAb1 (3 belgi)
Uzunlik8–64validBozor2026 (9 belgi)
Uzunlik65+invalid65 belgili harf+raqam qatori
Tarkibharf + raqamvalidBozor2026
Tarkibfaqat harfinvalidfaqatharflar
Tarkibfaqat raqaminvalid1234567890

Bir nechta to'plam bo'lganda eng oddiy qamrov mezoni — Each Choice coverage: har to'plamdagi har partition kamida bir marta tekshiriladi (kombinatsiyalar hisobga olinmaydi).

TCKiritishUzunlikTarkibKutilgan
TC-P1Bozor20268–64 ✅harf+raqam ✅Parol qabul qilinadi
TC-P2Ab10–7 ❌harf+raqam ✅"Kamida 8 belgi"
TC-P365 belgi (harf+raqam)65+ ❌harf+raqam ✅"Ko'pi bilan 64 belgi"
TC-P4faqatharflar8–64 ✅faqat harf ❌"Kamida 1 raqam"
TC-P512345678908–64 ✅faqat raqam ❌"Kamida 1 harf"

Beshta test 6 ta partition'ning hammasini qamradi. E'tibor bering: har testda ko'pi bilan bitta invalid partition. Agar Ab (qisqa va raqamsiz) kiritsak, tizim birinchi xatoni ko'rsatib to'xtashi mumkin — ikkinchi tekshiruv umuman ishlamay qoladi va undagi bug yashirinadi. Buni defect masking deyiladi.

EP talabdagi bo'shliqlarni ham ochadi. Savollar:

  • Kirill harflari "harf" hisoblanadimi (Бозор2026)?
  • Maxsus belgilar (!, _) va probelga ruxsat bormi?
  • 64 belgi — baytmi yoki belgi? (Emoji bir nechta bayt egallaydi.)

3.4. Misol 3: savatchadagi miqdor — 1–99

PartitionVakilKutilgan
≤ 00Rad etiladi
1–995Savatcha yangilanadi
≥ 100150Rad etiladi
Butun emas1.5Rad etiladi
Raqam emasikkiRad etiladi

Mobil ilovada miqdor ko'pincha − / + tugmalari bilan o'zgaradi va 100 ni UI orqali kiritib bo'lmaydi. Lekin API'ga (PATCH /api/v1/cart/items/{id}, xayoliy endpoint) {"quantity": 100} yuborish mumkin. Invalid partition'ni UI yopgan bo'lsa ham, uni API darajasida tekshiring (batafsil — QA 11).

3.5. Misol 4: telefon raqam — +998 va 9 raqam

PartitionVakilTuri
To'g'ri format+998901234567valid
Boshqa davlat kodi+77011234567invalid
8 ta raqam+99890123456invalid
10 ta raqam+9989012345678invalid
Harf bor+99890123456ainvalid
Bo'sh""invalid
Probel bilan+998 90 123 45 67noma'lum
Plyussiz998901234567noma'lum
Mahalliy901234567noma'lum

Oxirgi uch qator — EP'ning eng qimmatli natijasi: talab ularni aytmaydi. Foydalanuvchi raqamni kontaktlardan probel bilan nusxalaydi — bu real holat. Savol: "Formatlangan raqamni qabul qilib, normallashtiramizmi yoki rad etamizmi?" Javob olinmaguncha test case'ni yozmang.

3.6. Chiqish (output) partition'lari

EP faqat kiritishlar uchun emas. Yetkazib berish narxi ikki xil natija beradi: 0 (bepul) yoki 20 000 so'm. Har bir natija — partition. Demak kamida ikkita test kerak: biri bepul yetkazishga olib keladigan (masalan, 350 000 so'mlik savatcha), biri pullik yetkazishga olib keladigan (masalan, 120 000 so'mlik savatcha).

🎯 Intervyuda: "EP'da nechta test case kerak?" — Har bir partition (invalid'lar ham) uchun kamida bittadan. Bir nechta parametr bo'lsa — Each Choice coverage, va invalid partition'lar defect masking bo'lmasligi uchun alohida testlarda tekshiriladi.


4. Boundary Value Analysis (BVA) {#bva}

4.1. Nega aynan chegaralar?

Dasturchilar eng ko'p chegarada adashadi: > o'rniga >=, < o'rniga <=, sikl bir marta ko'p yoki kam aylanadi (off-by-one). Talab "18 yoshdan 65 yoshgacha (shu jumladan)" — lekin kodda shunday yozilgan bo'lishi mumkin:

// Talab: 18–65 yosh, ikkala chegara ham kiradi
if (age > 18 && age <= 65) {
  allowInstallment(); // BUG: 18 yoshli foydalanuvchi rad etiladi
}

40 yoshli foydalanuvchi bilan test o'tadi. Faqat 18 qiymati bug'ni ko'rsatadi. BVA aynan shuning uchun bor.

BVA faqat tartiblangan (ordered) partition'larda ishlaydi: sonlar, uzunliklar, sanalar, summalar. To'lov usuli (Uzcard, Humo, Visa...) yoki muddat to'plami {3, 6, 12} uchun BVA ma'nosiz — ular uchun faqat EP.

4.2. Chegara qiymati — partition'ning min va max'i

ISTQB white paper'i muhim farqni ta'kidlaydi: chegara qiymati (boundary value) ikki partition orasidagi "chiziq" emas, balki partition'ning o'z eng kichik va eng katta elementi.

Yosh misolida domen — 0 dan boshlanadigan butun sonlar:

PartitionQiymatlarChegara qiymatlari
Q (juda yosh, invalid)0–170 va 17
P (valid)18–6518 va 65
R (juda katta, invalid)66, 67, ...66 (yuqori chegarasi yo'q)

Yosh 18–65: equivalence partition'lar, 2-value va 3-value BVA nuqtalari

4.3. 2-value BVA

Har bir chegara qiymati uchun ikkita coverage item: chegaraning o'zi va qo'shni partition'dagi eng yaqin qo'shnisi. Amalda bu barcha chegara qiymatlari to'plamiga teng:

2-value: {0, 17, 18, 65, 66}

TCYoshPartitionKutilgan
TC-B10Q (min)Rad etiladi
TC-B217Q (max)Rad etiladi
TC-B318P (min)Qabul qilinadi
TC-B465P (max)Qabul qilinadi
TC-B566R (min)Rad etiladi

4.4. 3-value BVA

Har bir chegara qiymati uchun uchta coverage item: chegaraning o'zi va ikkala qo'shnisi — qaysi partition'ga tegishli bo'lishidan qat'i nazar:

Chegara3-value item'lari
00, 1 (−1 domenda yo'q)
1716, 17, 18
1817, 18, 19
6564, 65, 66
6665, 66, 67

Birlashmasi: 3-value: {0, 1, 16, 17, 18, 19, 64, 65, 66, 67} — 2-value'ga qo'shimcha 1, 16, 19, 64, 67.

⚠️ Diqqat: Ko'p maqola va kurslarda "3-value BVA = 17, 18, 19, 64, 65, 66" deb yoziladi. Bu faqat valid partition chegaralarini (18 va 65) olganda chiqadi. ISTQB white paper'iga ko'ra 17 va 66 ham chegara qiymati — ular invalid partition'lar chegarasi. Shuning uchun ikki partition orasidagi har bir ichki chegarada 3-value BVA to'rtta nuqta beradi (16, 17, 18, 19). Intervyuda ikkala talqinni bilib, rasmiysini tushuntira olsangiz — katta plyus.

4.5. 3-value nimasi bilan kuchliroq?

Syllabus'dagi misolni DemoBozor'ga ko'chiramiz. Talab: mahsulotlar summasi ≥ 300 000 so'm bo'lsa, yetkazish bepul. Dasturchi xato yozdi:

function deliveryFee(subtotal) {
  // To'g'risi: subtotal >= 300000
  return subtotal === 300000 ? 0 : 20000; // BUG: faqat aynan 300 000 da bepul
}
BVA turiQiymatlarNatija (bug'li kod)Bug topildimi?
2-value299 999 → 20 000 ✅, 300 000 → 0 ✅Ikkalasi ham o'tadi❌ Yo'q
3-valueqo'shimcha 300 001 → kutilgan 0, haqiqiy 20 000Test yiqiladi✅ Ha

2-value to'plami bug'ni ko'rmadi, 3-value'dagi 300 001 ko'rdi. Shuning uchun xavfli joylarda (pul, limit, xavfsizlik) 3-value BVA'ni tanlang.

4.6. DemoBozor'ning boshqa chegaralari

Maydon / qoidaPartition'lar2-value3-value
Parol uzunligi 8–640–7, 8–64, 65+0, 7, 8, 64, 650, 1, 6, 7, 8, 9, 63, 64, 65, 66
Miqdor 1–99 (API, butun son)≤0, 1–99, ≥1000, 1, 99, 100−1, 0, 1, 2, 98, 99, 100, 101
Bepul yetkazish ≥ 300 0000–299 999, 300 000+(0), 299 999, 300 000(0, 1), 299 998, 299 999, 300 000, 300 001
Qidiruv 2–100 belgi0–1, 2–100, 101+0, 1, 2, 100, 1010, 1, 2, 3, 99, 100, 101, 102
Sharh matni 10–1000 belgi0–9, 10–1000, 1001+0, 9, 10, 1000, 10010, 1, 8, 9, 10, 11, 999, 1000, 1001, 1002
Yulduz 1–5≤0, 1–5, ≥60, 1, 5, 6−1, 0, 1, 2, 4, 5, 6, 7

Qavs ichidagilar — domen chegaralari. Masalan, bo'sh savatcha bilan checkout qilib bo'lmaydi, shuning uchun 0 so'mlik summa amalda erishib bo'lmaydigan (infeasible) coverage item. White paper'da ham shunday: login uzunligi uchun −1 qiymati umuman yo'q.

💡 Maslahat: Uzunlik chegaralarida UI ko'pincha maxlength bilan yuqori chegarani "yopib" qo'yadi — 65-belgini yozib bo'lmaydi. Lekin server ham tekshirishi shart. 65 va 66 belgili qiymatlarni API orqali yuboring.

4.7. Vaqt va sanadagi chegaralar

BVA vaqtga ham qo'llanadi:

QoidaChegara atrofidagi testlarTalabdan so'raladigan savol
SMS kod 120 soniya amal qiladi119 s, 120 s, 121 sAynan 120-soniyada kod hali amal qiladimi?
Qayta yuborish 60 soniyadan keyin59 s (tugma o'chiq), 60 s (yoqiq)Taymer serverdami yoki ilovada?
3 noto'g'ri urinish → 15 daqiqa blok2-xato (blok yo'q), 3-xato (blok); 14:59 va 15:00Blok aynan 15:00 da tugaydimi?
Qaytarish yetkazilgandan 10 kun ichida10-kun (ruxsat), 11-kun (rad)Kun qanday sanaladi: kalendar kunimi yoki 240 soatmi? Yarim tunda Asia/Tashkent bo'yicha hisoblanadimi?

120 soniyani kutib o'tirish shart emas: staging muhitida dasturchilardan TTL'ni sozlanadigan qilishni yoki server vaqtini o'zgartiradigan test hook'ini so'rang. Bu — testlanuvchanlik (testability) talabi.

🇺🇿 Mahalliy kontekst: O'zbekcha "18 yoshdan 65 yoshgacha" iborasi ikki xil o'qiladi: 65 kiradimi yoki yo'qmi? Talablarda doim "(shu jumladan)" yoki "≤ 65" deb aniq yozdiring. Bu kichik so'z ko'plab bahs va bug'lardan saqlaydi.

🎯 Intervyuda: "2-value va 3-value BVA farqi nima?" — 2-value'da har bir chegara qiymati uchun ikkita item (chegara va qo'shni partition'dagi qo'shnisi), 3-value'da uchta (chegara va ikkala qo'shnisi). 3-value qattiqroq: masalan x <= 10 o'rniga x == 10 yozilgan bug'ni faqat 3-value'dagi 9 qiymati topadi.


5. Raqam bo'lmagan tuzoqlar: format, probel va so'm {#tuzoqlar}

EP va BVA "toza" sonlar bilan ishlaydi. Real foydalanuvchi esa matn kiritadi. Har bir sonli maydon uchun bu tuzoqlarni ham tekshiring:

TuzoqMisolNima buzilishi mumkin
Bo'sh yoki faqat probel"", " "Bo'sh qiymat 0 deb qabul qilinadi
Bosh/oxiridagi probel" 25 "Validatsiya trim qilmaydi
Kasr ajratgich25.5 va 25,5Rus/o'zbek lokalida vergul — kasr ajratgich
Boshidagi nol018, SMS kod 012345Kod son sifatida o'qilsa 12345 bo'lib qoladi
Juda katta son99999999999999999999JavaScript Number aniqligi 2^53 dan keyin yo'qoladi
Belgili son+18, -0Kutilmagan qabul qilish
Ming ajratgich1 000 000, 1,000,000, 1.000.000Narx noto'g'ri o'qiladi
Bo'linmas probel (NBSP)Excel'dan nusxalangan 300 000Ko'zga ko'rinmaydi, lekin parse buziladi
Valyuta bilan300 000 so'm, 300000 UZSMatn qismi sababli xato
Ortiqcha yangi qatornusxalangan 482915⏎SMS kod "noto'g'ri" bo'ladi

⚠️ Diqqat: SMS kod, karta raqami, pochta indeksi — bu matn, son emas. Ular ustida arifmetika qilinmaydi. Agar dasturchi ularni son turida saqlasa, boshidagi nollar yo'qoladi. 012345 kodli test bunday bug'ni darhol ochadi.

DemoBozor'da narxlar butun so'mda saqlanadi (bazada INTEGER). Demak summalarda eng yaqin qo'shni ±1 so'm: 300 000 chegarasining qo'shnilari — 299 999 va 300 001.


6. Decision Table testing {#decision-table}

6.1. Qachon kerak?

Talab "agar ... va ... bo'lsa, unda ..." ko'rinishida bo'lsa — decision table vaqti. U shartlar kombinatsiyasini va ularga mos harakatlarni jadvalga yig'adi. Syllabus belgilashlari:

BelgiMa'nosi
TShart bajarilgan (true)
FShart bajarilmagan (false)
–Shart natijaga ta'sir qilmaydi (irrelevant)
N/ABunday kombinatsiya bo'lishi mumkin emas (infeasible)
XHarakat sodir bo'ladi; bo'sh katak — sodir bo'lmaydi

Qoidalar:

  • To'liq jadval — barcha kombinatsiyalar: n ta ikkilik shart uchun 2ⁿ ustun.
  • Imkonsiz kombinatsiyali ustunlar o'chiriladi.
  • Natijaga ta'sir qilmaydigan shartli ustunlar birlashtiriladi (minimallashtirish).
  • Coverage = tekshirilgan ustunlar / barcha mumkin (feasible) ustunlar × 100%.

6.2. DemoBozor chegirmalari: to'liq jadval

DemoBozor qoidalari: yangi mijoz (birinchi buyurtma) — 10%; promo-kod — odatda 15%; chegirmalar qo'shilmaydi, kattasi qo'llanadi; Premium a'zo har doim bepul yetkazish oladi.

Bu bo'limda 15% li BAHOR15 (xayoliy) promo-kodini olamiz.

R1R2R3R4R5R6R7R8
C1: Yangi mijozmi?TTTTFFFF
C2: Amaldagi 15% promo-kod bormi?TTFFTTFF
C3: Premium a'zomi?TFTFTFTF
A1: 10% chegirmaXX
A2: 15% chegirmaXXXX
A3: Premium bo'yicha bepul yetkazishXXXX

R1 va R2 da yangi mijoz ham, promo-kod ham bor. Chegirmalar qo'shilmaydi (10% + 15% = 25% emas) — kattasi, 15% qo'llanadi.

6.3. Minimallashtirilgan jadval

C2 = T bo'lsa, C1 natijaga ta'sir qilmaydi (15% baribir yutadi). Demak R1 bilan R5, R2 bilan R6 birlashadi:

M1M2M3M4M5M6
C1: Yangi mijoz––TTFF
C2: 15% promoTTFFFF
C3: PremiumTFTFTF
A1: 10%XX
A2: 15%XX
A3: Bepul yetkazish (premium)XXX

8 ustun o'rniga 6 ta. 100% coverage uchun 6 ta test kerak.

⚠️ Diqqat: Minimallashtirish faqat "C1 haqiqatan ta'sir qilmaydi" degan farazga asoslanadi. Agar dasturchi kodda avval C1 ni tekshirib, keyin promo'ni umuman ko'rmasa — birlashtirilgan ustun bu bug'ni yashiradi. Pul bilan bog'liq kritik qoidalarda to'liq jadvalni saqlash xavfsizroq.

Agar biznes "yangi mijoz Premium bo'la olmaydi" desa, C1 = T va C3 = T bo'lgan ustunlar N/A (infeasible) bo'lib, jadvaldan o'chiriladi. Hozircha DemoBozor qoidalarida bunday cheklov yo'q.

6.4. Test case'lar

Hamma testlarda mahsulotlar summasi 250 000 so'm — 300 000 dan kam, shuning uchun bepul yetkazish faqat Premium tufayli bo'lishi mumkin. Bu chegirma va yetkazish qoidalarini bir-biridan ajratib tekshirish imkonini beradi.

TCUstunMijozPromoKutilgan chegirmaKutilgan yetkazishKutilgan jami
TC-D1M1Eski, PremiumBAHOR1537 500 (15%)0212 500
TC-D2M2Eski, oddiyBAHOR1537 500 (15%)20 000232 500
TC-D3M3Yangi, Premium—25 000 (10%)0225 000
TC-D4M4Yangi, oddiy—25 000 (10%)20 000245 000
TC-D5M5Eski, Premium—00250 000
TC-D6M6Eski, oddiy—020 000270 000

M1 da C1 "–". Biz eski mijozni oldik; vaqt bo'lsa, yangi mijoz bilan ham bir marta tekshirib qo'yish (R1) — arzon sug'urta.

6.5. Jadval talabdagi bo'shliqlarni ochadi

Syllabus aytganidek, decision table talabdagi bo'shliq va qarama-qarshiliklarni topishga yordam beradi. Jadvalni tuzayotganda PO'ga beriladigan savollar:

  1. 300 000 chegarasi chegirmadan oldingi summadami yoki keyingisidami? 320 000 so'mlik savatcha 15% bilan 272 000 bo'ladi. Yetkazish bepulmi?
  2. Promo-kod 5% bo'lsa va mijoz yangi bo'lsa — "kattasi" qoidasi bo'yicha 10% qo'llanadimi? Foydalanuvchiga promo "qabul qilinmadi" deb ko'rsatiladimi?
  3. Muddati o'tgan promo kiritilsa, yangi mijozning 10% i saqlanib qoladimi?
  4. Chegirma yetkazish narxiga ham qo'llanadimi?

Har bir savol — kelajakdagi bug'ning oldi olingan joyi.

6.6. Ikkinchi kichik jadval: yetkazib berish

Y1Y2Y3Y4
C1: Premium a'zoTTFF
C2: Summa ≥ 300 000TFTF
A1: BepulXXX
A2: 20 000 so'mX

Minimallashtirilgani: (T, –) → bepul; (F, T) → bepul; (F, F) → 20 000. 3 ta test yetarli. C2 shartining o'zi esa chegara — uni BVA bilan (299 999 / 300 000) alohida tekshiramiz. Texnikalar shunday birga ishlaydi.

🎯 Intervyuda: "Uchta ikkilik shartli decision table'da nechta ustun bor?" — To'liq jadvalda 2³ = 8 ta. Imkonsiz ustunlar o'chiriladi, natijaga ta'sir qilmaydigan shartlar "–" bilan birlashtiriladi. Coverage — tekshirilgan feasible ustunlar ulushi.


7. Texnikalarni birlashtirish: checkout formasi {#birlashtirish}

Real ekranda texnikalar alohida yashamaydi. DemoBozor checkout'ida quyidagilar bor:

ElementQoidaTexnika
Miqdor1–99EP + BVA
Promo-kod6–12 belgi, A–Z va 0–9EP (uzunlik, belgilar, holat) + BVA (uzunlik)
To'lov usuliUzcard, Humo, Visa, Mastercard, naqdEP (har usul — alohida partition)
Narx hisobiChegirma va yetkazish qoidalariDecision table
Muddatli to'lovYosh 18–65, summa 500 000 – 30 000 000, muddat 3/6/12 oyEP + BVA (yosh, summa), EP (muddat)

Ish tartibi:

  1. Har bir element uchun partition'larni yozing.
  2. Tartiblangan partition'larga BVA qo'llang.
  3. Qoidalar kombinatsiyasini decision table'ga soling.
  4. Valid partition'larni Each Choice bilan oz sonli testlarga "joylang".
  5. Invalid partition'larni bittadan, qolgan maydonlar valid holda tekshiring.
  6. Risk bo'yicha tartiblang: pul va to'lov — birinchi.

Natijadagi namuna to'plam:

TCMa'lumotTexnikaKutilgan
TC-C01Miqdor 2, promo yo'q, UzcardBaza (valid)Buyurtma CREATED
TC-C02Miqdor 99, HumoBVA (max)Qabul qilinadi
TC-C03Miqdor 100 (API orqali)BVA (max+1)400/422, savatcha o'zgarmaydi
TC-C04Promo BAHOR (5 belgi)BVA (min−1)"Promo-kod 6–12 belgi"
TC-C05Promo ABCDEF123456 (12 belgi, xayoliy, amaldagi)BVA (max)Qabul qilinadi
TC-C06Promo bahor15 (kichik harf)EP (belgilar)Talabda yo'q — so'rash kerak
TC-C07Visa, Mastercard, naqdEP (har usul)Har biri alohida o'tadi
TC-C08Muddatli: yosh 18, summa 500 000, 3 oyBVA (min'lar)Ariza qabul qilinadi
TC-C09Muddatli: summa 499 999BVA (min−1)Rad etiladi
TC-C10Muddatli: yosh 66BVA (max+1)Rad etiladi
TC-C11Muddatli: 9 oyEP (invalid qiymat)Rad etiladi

E'tibor bering: muddat {3, 6, 12} uchun BVA qilmadik. Bu to'plam uzluksiz emas (4 va 5 kirmaydi), shuning uchun "chegara" tushunchasi bu yerda ishlamaydi. 3, 6, 12 — har biri alohida valid qiymat, 9 esa invalid.


8. Ko'p uchraydigan xatolar {#xatolar}

XatoNima bo'ladiTo'g'risi
Kesishuvchi partition'lar ("0–18" va "18–65")18 qaysi guruhga tegishli — noaniqPartition'lar kesishmasin
Invalid partition'larni unutishFaqat "baxtli yo'l" tekshiriladiHar bir invalid partition — alohida test
Bitta testda ikkita invalid qiymatDefect maskingBir testda ko'pi bilan bitta invalid
Tartibsiz to'plamga BVAMa'nosiz testlarTo'lov usuli, {3, 6, 12} — faqat EP
Faqat ichki chegaralarBo'sh qator, max+1 uzunlik tekshirilmaydiDomen chegaralarini ham yozing
"3-value = 6 nuqta"Ichki chegarada 2 ta nuqta tushib qoladiHar bir ichki chegarada 4 nuqta
"gacha" so'zini tekshirmaslikChegara kiradimi — noma'lum"(shu jumladan)" deb aniqlashtiring
Decision table'ni o'ylamasdan qisqartirishBug yashirinadiFaraz to'g'riligini dasturchi bilan tasdiqlang

9. Amaliy mashqlar {#mashqlar}

Mashq 1: SMS kod uchun EP

DemoBozor'da kirish SMS kod bilan: kod — 6 raqam, 120 soniya amal qiladi, 3 marta noto'g'ri kiritilsa raqam 15 daqiqaga bloklanadi. Kod maydoni uchun format va biznes partition'larini yozing, har biriga vakil qiymat va kutilgan natija bering.

<details> <summary>💡 Javobni ko'rish</summary>

Format partition'lari:

PartitionVakilKutilgan
6 raqam482915Tekshiruvga yuboriladi
6 raqam, boshida nol012345Tekshiruvga yuboriladi (nol yo'qolmasligi kerak!)
5 raqam48291"Kod 6 raqamdan iborat"
7 raqam4829150Rad etiladi yoki 6 tadan ortig'i yozilmaydi
Harf bor48a915Rad etiladi
Bo'sh""Tugma faol emas yoki xabar
Probel bilan482 915Talabda yo'q — so'rash kerak

Biznes partition'lari:

PartitionKutilgan
To'g'ri va amaldagi kod (≤ 120 s)Kirish muvaffaqiyatli
To'g'ri, lekin muddati o'tgan (> 120 s)"Kod muddati tugagan"
Noto'g'ri kod (1- yoki 2-urinish)"Kod noto'g'ri", urinishlar soni kamayadi
Noto'g'ri kod (3-urinish)Raqam 15 daqiqaga bloklanadi
Bloklangan raqam"Raqam vaqtincha bloklangan"

012345 — eng foydali test: kod son sifatida saqlansa yoki taqqoslansa, bug darhol chiqadi.

</details>

Mashq 2: bepul yetkazish chegarasi

Qoida: mahsulotlar summasi ≥ 300 000 so'm bo'lsa yetkazish bepul, aks holda 20 000 so'm. Summalar butun so'mda. 2-value va 3-value BVA bo'yicha ichki chegara uchun test qiymatlarini va kutilgan yetkazish narxini yozing.

<details> <summary>💡 Javobni ko'rish</summary>

Partition'lar: 0–299 999 (20 000 so'm) va 300 000+ (bepul). Chegara qiymatlari: 299 999 va 300 000.

BVASummaKutilgan yetkazish
2-value299 99920 000
2-value300 0000
3-value (qo'shimcha)299 99820 000
3-value (qo'shimcha)300 0010

Domen chegarasi 0 (va 3-value'da 1) — bo'sh savatcha bilan checkout bo'lmagani uchun amalda infeasible. Buni test hujjatida izoh bilan qayd eting.

</details>

Mashq 3: muddatli to'lov summasi

Muddatli to'lov 500 000 dan 30 000 000 so'mgacha (ikkala chegara ham kiradi). Partition'larni yozing va 2-value hamda 3-value BVA qiymatlarini sanab chiqing (domen — 0 dan boshlanadigan butun so'm).

<details> <summary>💡 Javobni ko'rish</summary>

PartitionQiymatlarTuri
Q0 – 499 999invalid (juda kichik)
P500 000 – 30 000 000valid
R30 000 001 va undan kattainvalid (juda katta)

2-value: 0, 499 999, 500 000, 30 000 000, 30 000 001

3-value: 0, 1, 499 998, 499 999, 500 000, 500 001, 29 999 999, 30 000 000, 30 000 001, 30 000 002

Kutilgan natija: P ichidagilar (500 000, 500 001, 29 999 999, 30 000 000) — qabul; qolganlari — rad etiladi.

</details>

Mashq 4: promo-kod

Promo-kod: 6–12 belgi, faqat A–Z va 0–9 (katta harf), har foydalanuvchi bir marta, amal qilish muddati va minimal summa bor. Uzunlik uchun BVA, belgilar va holat uchun EP partition'larini yozing.

<details> <summary>💡 Javobni ko'rish</summary>

Uzunlik (BVA): partition'lar 0–5, 6–12, 13+.

  • 2-value: 0, 5, 6, 12, 13
  • 3-value: 0, 1, 4, 5, 6, 7, 11, 12, 13, 14

Belgilar (EP):

PartitionVakilKutilgan
A–Z va 0–9BAHOR15Valid
Kichik harfbahor15Talabda yo'q: rad etiladimi yoki katta harfga o'giriladimi?
Maxsus belgiBAHOR-15Rad etiladi
ProbelBAHOR 15Rad etiladi (yoki trim — so'rang)
Kirill "egizak" harflarВАНОR15 (В, А, Н — kirillcha)Rad etiladi — ko'rinishi bir xil, kodi boshqa
EmojiBAHOR🎁Rad etiladi

Holat (EP):

PartitionKutilgan
Amaldagi, minimal summa bajarilgan, birinchi martaChegirma qo'llanadi
Muddati o'tgan"Promo-kod muddati tugagan"
Minimal summa bajarilmagan"Minimal summa: ..."
Shu foydalanuvchi oldin ishlatgan"Promo-kod allaqachon ishlatilgan"
Mavjud emas"Promo-kod topilmadi"

Kirill egizak harflar — o'zbek muhitida juda real: klaviatura kirillchada qolib ketgan foydalanuvchi aynan shunday kod yozadi.

</details>

Mashq 5: bug'ni qaysi qiymat topadi?

Talab: muddatli to'lov 18–65 yosh (shu jumladan). Kod:

if (age >= 18 && age < 65) {
  allowInstallment();
}

2-value BVA to'plamidagi qaysi qiymat bu bug'ni ochadi? Kutilgan va haqiqiy natijani yozing.

<details> <summary>💡 Javobni ko'rish</summary>

2-value to'plami: 0, 17, 18, 65, 66.

YoshKutilganHaqiqiy (bug'li kod)Natija
0RadRad✅
17RadRad✅
18QabulQabul✅
65QabulRad❌ Bug topildi
66RadRad✅

Faqat 65 bug'ni ochadi. 40 yoki 50 kabi "o'rtacha" qiymatlar bilan bu bug hech qachon topilmaydi.

</details>

Mashq 6: SMS kirish uchun decision table

Shartlar: C1 — raqam hozir bloklanganmi; C2 — kod muddati o'tganmi (> 120 s); C3 — kod to'g'rimi; C4 — bu urinish ketma-ket 3-noto'g'ri urinishmi. Harakatlar: kirish, "kod noto'g'ri", "kod eskirgan", raqamni 15 daqiqaga bloklash, "raqam bloklangan". Minimallashtirilgan jadval tuzing va qaysi faraz(lar)ni PO bilan tasdiqlash kerakligini yozing.

<details> <summary>💡 Javobni ko'rish</summary>

M1M2M3M4M5
C1: BloklanganTFFFF
C2: Muddati o'tgan–TFFF
C3: Kod to'g'ri––TFF
C4: 3-noto'g'ri urinish–––FT
KirishX
"Kod noto'g'ri"XX
"Kod eskirgan"X
15 daqiqaga bloklashX
"Raqam bloklangan"X

To'liq jadvalda 2⁴ = 16 ustun bo'lardi. Minimallashtirilgani — 5 ta, demak 5 ta test.

PO bilan tasdiqlanadigan farazlar:

  • Muddati o'tgan kod bilan urinish "noto'g'ri urinish" sifatida sanaladimi? (Biz "yo'q" deb oldik — M2.)
  • To'g'ri kod kiritilsa, noto'g'ri urinishlar hisoblagichi nolga tushadimi?
  • Blok paytida yangi SMS so'rash mumkinmi?

</details>

Mashq 7: Each Choice — muddatli to'lov formasi

Partition'lar: Yosh — <18, 18–65, >65; Summa — <500 000, 500 000–30 000 000, >30 000 000; Muddat — 3, 6, 12 (valid, har biri o'z grafigini hisoblaydi) va "boshqa" (invalid). Defect masking'siz Each Choice coverage uchun minimal nechta test kerak? Ularni yozing.

<details> <summary>💡 Javobni ko'rish</summary>

Valid partition'lar: yosh — 1 ta, summa — 1 ta, muddat — 3 ta. Ularni joylash uchun kamida 3 ta to'liq valid test kerak (muddatning uchta qiymati tufayli). Invalid partition'lar: yosh — 2, summa — 2, muddat — 1, jami 5 ta, har biri alohida testda. Jami 8 ta test.

TCYoshSummaMuddatKutilgan
E1301 000 0003Qabul
E2455 000 0006Qabul
E36020 000 00012Qabul
E4161 000 0003Rad (yosh)
E5701 000 0003Rad (yosh)
E630300 0003Rad (summa)
E73035 000 0003Rad (summa)
E8301 000 0009Rad (muddat)

Bu to'plam EP'ni qamraydi. Chegaralar (17/18, 65/66, 499 999/500 000 ...) uchun BVA testlarini alohida qo'shasiz.

</details>


O'zingizni tekshiring {#ozingizni-tekshiring}

  • [ ] Har qanday maydon uchun valid va invalid partition'larni kesishmaydigan qilib ajrata olaman
  • [ ] Nega bitta testda bitta invalid qiymat bo'lishi kerakligini tushuntira olaman
  • [ ] 2-value va 3-value BVA to'plamini white paper bo'yicha to'g'ri hisoblayman
  • [ ] BVA qayerda ishlamasligini bilaman (tartibsiz va uzluksiz bo'lmagan to'plamlar)
  • [ ] Biznes qoidani to'liq va minimallashtirilgan decision table'ga aylantira olaman
  • [ ] Texnikalarni birlashtirib, real forma uchun test to'plami tuza olaman

Xulosa {#xulosa}

  • Hammasini tekshirib bo'lmaydi; texnikalar kichik, lekin yetarli to'plamni tizimli tanlashga yordam beradi.
  • EP: har partition'dan bitta vakil; invalid partition'lar ham coverage'ga kiradi; bir testda bitta invalid qiymat.
  • BVA: faqat tartiblangan partition'larda. 2-value — chegara qiymatlari; 3-value — chegara va ikkala qo'shnisi. Ichki chegarada 3-value to'rtta nuqta beradi.
  • 3-value BVA 2-value ko'rmaydigan bug'larni ham topadi (>= o'rniga == kabi).
  • Decision table shartlar kombinatsiyasini to'liq ko'rsatadi, minimallashtirish testlar sonini kamaytiradi, eng muhimi — talabdagi bo'shliqlarni ochadi.
  • Real ekranda texnikalar birga ishlaydi: EP + BVA + decision table + risk bo'yicha tartiblash.
  • Keyingi dars: QA 6: Test dizayn texnikalari (2) — State Transition, Pairwise, Use Case, White-box va Exploratory

Manbalar {#manbalar}

  1. ISTQB — Certified Tester Foundation Level Syllabus v4.0.1 (PDF)
  2. ISTQB — Boundary Value Analysis According to the ISTQB Foundation Level Syllabus (M. Hamburg, A. Roman)
  3. ISTQB Glossary

Markdown manba

iOS Lessons