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
- Nega texnika kerak: "hammasini tekshiraman" degan xayol
- Test dizayn texnikalari xaritasi
- Equivalence Partitioning (EP)
- Boundary Value Analysis (BVA)
- Raqam bo'lmagan tuzoqlar: format, probel va so'm
- Decision Table testing
- Texnikalarni birlashtirish: checkout formasi
- Ko'p uchraydigan xatolar
- Amaliy mashqlar
- Xulosa
- 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:
| Tushuncha | Ma'nosi | Misol (yosh maydoni) |
|---|---|---|
| Test condition | Nimani tekshiramiz | "Yosh chegarasi to'g'ri ishlaydi" |
| Coverage item | Texnika 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:
| Guruh | Texnikalar | Nimaga tayanadi | Kursda |
|---|---|---|---|
| Black-box (specification-based) | Equivalence Partitioning, Boundary Value Analysis, Decision Table, State Transition | Talab, spetsifikatsiya — ichki kodni bilmasdan | QA 5, QA 6 |
| White-box (structure-based) | Statement testing, Branch testing | Kodning ichki tuzilishi | QA 6 |
| Experience-based | Error guessing, Exploratory testing, Checklist-based testing | Tester tajribasi va bilimi | QA 6 |
| Collaboration-based | Collaborative user story writing, Acceptance criteria, ATDD | Jamoaviy muloqot — defektning oldini olish | QA 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:
| Partition | Qiymatlar | Turi | Vakil qiymat | Kutilgan natija |
|---|---|---|---|---|
| P1 | 0–17 | invalid | 10 | "Muddatli to'lov 18 yoshdan" xabari |
| P2 | 18–65 | valid | 40 | Ariza davom etadi |
| P3 | 66 va undan katta | invalid | 80 | "Muddatli to'lov 65 yoshgacha" xabari |
Keyin format bo'yicha alohida partition'lar — bu boshqa test condition:
| Partition | Vakil qiymat | Kutilgan natija |
|---|---|---|
| Bo'sh | "" | "Yoshni kiriting" |
| Raqam emas | yigirma | "Faqat raqam kiriting" |
| Manfiy | -5 | Rad etiladi |
| Kasr | 25.5 | Rad 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'plam | Partition | Turi | Vakil |
|---|---|---|---|
| Uzunlik | 0–7 | invalid | Ab1 (3 belgi) |
| Uzunlik | 8–64 | valid | Bozor2026 (9 belgi) |
| Uzunlik | 65+ | invalid | 65 belgili harf+raqam qatori |
| Tarkib | harf + raqam | valid | Bozor2026 |
| Tarkib | faqat harf | invalid | faqatharflar |
| Tarkib | faqat raqam | invalid | 1234567890 |
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).
| TC | Kiritish | Uzunlik | Tarkib | Kutilgan |
|---|---|---|---|---|
| TC-P1 | Bozor2026 | 8–64 ✅ | harf+raqam ✅ | Parol qabul qilinadi |
| TC-P2 | Ab1 | 0–7 ❌ | harf+raqam ✅ | "Kamida 8 belgi" |
| TC-P3 | 65 belgi (harf+raqam) | 65+ ❌ | harf+raqam ✅ | "Ko'pi bilan 64 belgi" |
| TC-P4 | faqatharflar | 8–64 ✅ | faqat harf ❌ | "Kamida 1 raqam" |
| TC-P5 | 1234567890 | 8–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
| Partition | Vakil | Kutilgan |
|---|---|---|
| ≤ 0 | 0 | Rad etiladi |
| 1–99 | 5 | Savatcha yangilanadi |
| ≥ 100 | 150 | Rad etiladi |
| Butun emas | 1.5 | Rad etiladi |
| Raqam emas | ikki | Rad 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
| Partition | Vakil | Turi |
|---|---|---|
| To'g'ri format | +998901234567 | valid |
| Boshqa davlat kodi | +77011234567 | invalid |
| 8 ta raqam | +99890123456 | invalid |
| 10 ta raqam | +9989012345678 | invalid |
| Harf bor | +99890123456a | invalid |
| Bo'sh | "" | invalid |
| Probel bilan | +998 90 123 45 67 | noma'lum |
| Plyussiz | 998901234567 | noma'lum |
| Mahalliy | 901234567 | noma'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:
| Partition | Qiymatlar | Chegara qiymatlari |
|---|---|---|
| Q (juda yosh, invalid) | 0–17 | 0 va 17 |
| P (valid) | 18–65 | 18 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}
| TC | Yosh | Partition | Kutilgan |
|---|---|---|---|
| TC-B1 | 0 | Q (min) | Rad etiladi |
| TC-B2 | 17 | Q (max) | Rad etiladi |
| TC-B3 | 18 | P (min) | Qabul qilinadi |
| TC-B4 | 65 | P (max) | Qabul qilinadi |
| TC-B5 | 66 | R (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:
| Chegara | 3-value item'lari |
|---|---|
| 0 | 0, 1 (−1 domenda yo'q) |
| 17 | 16, 17, 18 |
| 18 | 17, 18, 19 |
| 65 | 64, 65, 66 |
| 66 | 65, 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 turi | Qiymatlar | Natija (bug'li kod) | Bug topildimi? |
|---|---|---|---|
| 2-value | 299 999 → 20 000 ✅, 300 000 → 0 ✅ | Ikkalasi ham o'tadi | ❌ Yo'q |
| 3-value | qo'shimcha 300 001 → kutilgan 0, haqiqiy 20 000 | Test 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 / qoida | Partition'lar | 2-value | 3-value |
|---|---|---|---|
| Parol uzunligi 8–64 | 0–7, 8–64, 65+ | 0, 7, 8, 64, 65 | 0, 1, 6, 7, 8, 9, 63, 64, 65, 66 |
| Miqdor 1–99 (API, butun son) | ≤0, 1–99, ≥100 | 0, 1, 99, 100 | −1, 0, 1, 2, 98, 99, 100, 101 |
| Bepul yetkazish ≥ 300 000 | 0–299 999, 300 000+ | (0), 299 999, 300 000 | (0, 1), 299 998, 299 999, 300 000, 300 001 |
| Qidiruv 2–100 belgi | 0–1, 2–100, 101+ | 0, 1, 2, 100, 101 | 0, 1, 2, 3, 99, 100, 101, 102 |
| Sharh matni 10–1000 belgi | 0–9, 10–1000, 1001+ | 0, 9, 10, 1000, 1001 | 0, 1, 8, 9, 10, 11, 999, 1000, 1001, 1002 |
| Yulduz 1–5 | ≤0, 1–5, ≥6 | 0, 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
maxlengthbilan 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:
| Qoida | Chegara atrofidagi testlar | Talabdan so'raladigan savol |
|---|---|---|
| SMS kod 120 soniya amal qiladi | 119 s, 120 s, 121 s | Aynan 120-soniyada kod hali amal qiladimi? |
| Qayta yuborish 60 soniyadan keyin | 59 s (tugma o'chiq), 60 s (yoqiq) | Taymer serverdami yoki ilovada? |
| 3 noto'g'ri urinish → 15 daqiqa blok | 2-xato (blok yo'q), 3-xato (blok); 14:59 va 15:00 | Blok aynan 15:00 da tugaydimi? |
| Qaytarish yetkazilgandan 10 kun ichida | 10-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 <= 10o'rnigax == 10yozilgan 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:
| Tuzoq | Misol | Nima buzilishi mumkin |
|---|---|---|
| Bo'sh yoki faqat probel | "", " " | Bo'sh qiymat 0 deb qabul qilinadi |
| Bosh/oxiridagi probel | " 25 " | Validatsiya trim qilmaydi |
| Kasr ajratgich | 25.5 va 25,5 | Rus/o'zbek lokalida vergul — kasr ajratgich |
| Boshidagi nol | 018, SMS kod 012345 | Kod son sifatida o'qilsa 12345 bo'lib qoladi |
| Juda katta son | 99999999999999999999 | JavaScript Number aniqligi 2^53 dan keyin yo'qoladi |
| Belgili son | +18, -0 | Kutilmagan qabul qilish |
| Ming ajratgich | 1 000 000, 1,000,000, 1.000.000 | Narx noto'g'ri o'qiladi |
| Bo'linmas probel (NBSP) | Excel'dan nusxalangan 300 000 | Ko'zga ko'rinmaydi, lekin parse buziladi |
| Valyuta bilan | 300 000 so'm, 300000 UZS | Matn qismi sababli xato |
| Ortiqcha yangi qator | nusxalangan 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.
012345kodli 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:
| Belgi | Ma'nosi |
|---|---|
T | Shart bajarilgan (true) |
F | Shart bajarilmagan (false) |
– | Shart natijaga ta'sir qilmaydi (irrelevant) |
N/A | Bunday kombinatsiya bo'lishi mumkin emas (infeasible) |
X | Harakat 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.
| R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 | |
|---|---|---|---|---|---|---|---|---|
| C1: Yangi mijozmi? | T | T | T | T | F | F | F | F |
| C2: Amaldagi 15% promo-kod bormi? | T | T | F | F | T | T | F | F |
| C3: Premium a'zomi? | T | F | T | F | T | F | T | F |
| A1: 10% chegirma | X | X | ||||||
| A2: 15% chegirma | X | X | X | X | ||||
| A3: Premium bo'yicha bepul yetkazish | X | X | X | X |
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:
| M1 | M2 | M3 | M4 | M5 | M6 | |
|---|---|---|---|---|---|---|
| C1: Yangi mijoz | – | – | T | T | F | F |
| C2: 15% promo | T | T | F | F | F | F |
| C3: Premium | T | F | T | F | T | F |
| A1: 10% | X | X | ||||
| A2: 15% | X | X | ||||
| A3: Bepul yetkazish (premium) | X | X | X |
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.
| TC | Ustun | Mijoz | Promo | Kutilgan chegirma | Kutilgan yetkazish | Kutilgan jami |
|---|---|---|---|---|---|---|
| TC-D1 | M1 | Eski, Premium | BAHOR15 | 37 500 (15%) | 0 | 212 500 |
| TC-D2 | M2 | Eski, oddiy | BAHOR15 | 37 500 (15%) | 20 000 | 232 500 |
| TC-D3 | M3 | Yangi, Premium | — | 25 000 (10%) | 0 | 225 000 |
| TC-D4 | M4 | Yangi, oddiy | — | 25 000 (10%) | 20 000 | 245 000 |
| TC-D5 | M5 | Eski, Premium | — | 0 | 0 | 250 000 |
| TC-D6 | M6 | Eski, oddiy | — | 0 | 20 000 | 270 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:
- 300 000 chegarasi chegirmadan oldingi summadami yoki keyingisidami? 320 000 so'mlik savatcha 15% bilan 272 000 bo'ladi. Yetkazish bepulmi?
- Promo-kod 5% bo'lsa va mijoz yangi bo'lsa — "kattasi" qoidasi bo'yicha 10% qo'llanadimi? Foydalanuvchiga promo "qabul qilinmadi" deb ko'rsatiladimi?
- Muddati o'tgan promo kiritilsa, yangi mijozning 10% i saqlanib qoladimi?
- Chegirma yetkazish narxiga ham qo'llanadimi?
Har bir savol — kelajakdagi bug'ning oldi olingan joyi.
6.6. Ikkinchi kichik jadval: yetkazib berish
| Y1 | Y2 | Y3 | Y4 | |
|---|---|---|---|---|
| C1: Premium a'zo | T | T | F | F |
| C2: Summa ≥ 300 000 | T | F | T | F |
| A1: Bepul | X | X | X | |
| A2: 20 000 so'm | X |
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:
| Element | Qoida | Texnika |
|---|---|---|
| Miqdor | 1–99 | EP + BVA |
| Promo-kod | 6–12 belgi, A–Z va 0–9 | EP (uzunlik, belgilar, holat) + BVA (uzunlik) |
| To'lov usuli | Uzcard, Humo, Visa, Mastercard, naqd | EP (har usul — alohida partition) |
| Narx hisobi | Chegirma va yetkazish qoidalari | Decision table |
| Muddatli to'lov | Yosh 18–65, summa 500 000 – 30 000 000, muddat 3/6/12 oy | EP + BVA (yosh, summa), EP (muddat) |
Ish tartibi:
- Har bir element uchun partition'larni yozing.
- Tartiblangan partition'larga BVA qo'llang.
- Qoidalar kombinatsiyasini decision table'ga soling.
- Valid partition'larni Each Choice bilan oz sonli testlarga "joylang".
- Invalid partition'larni bittadan, qolgan maydonlar valid holda tekshiring.
- Risk bo'yicha tartiblang: pul va to'lov — birinchi.
Natijadagi namuna to'plam:
| TC | Ma'lumot | Texnika | Kutilgan |
|---|---|---|---|
| TC-C01 | Miqdor 2, promo yo'q, Uzcard | Baza (valid) | Buyurtma CREATED |
| TC-C02 | Miqdor 99, Humo | BVA (max) | Qabul qilinadi |
| TC-C03 | Miqdor 100 (API orqali) | BVA (max+1) | 400/422, savatcha o'zgarmaydi |
| TC-C04 | Promo BAHOR (5 belgi) | BVA (min−1) | "Promo-kod 6–12 belgi" |
| TC-C05 | Promo ABCDEF123456 (12 belgi, xayoliy, amaldagi) | BVA (max) | Qabul qilinadi |
| TC-C06 | Promo bahor15 (kichik harf) | EP (belgilar) | Talabda yo'q — so'rash kerak |
| TC-C07 | Visa, Mastercard, naqd | EP (har usul) | Har biri alohida o'tadi |
| TC-C08 | Muddatli: yosh 18, summa 500 000, 3 oy | BVA (min'lar) | Ariza qabul qilinadi |
| TC-C09 | Muddatli: summa 499 999 | BVA (min−1) | Rad etiladi |
| TC-C10 | Muddatli: yosh 66 | BVA (max+1) | Rad etiladi |
| TC-C11 | Muddatli: 9 oy | EP (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}
| Xato | Nima bo'ladi | To'g'risi |
|---|---|---|
| Kesishuvchi partition'lar ("0–18" va "18–65") | 18 qaysi guruhga tegishli — noaniq | Partition'lar kesishmasin |
| Invalid partition'larni unutish | Faqat "baxtli yo'l" tekshiriladi | Har bir invalid partition — alohida test |
| Bitta testda ikkita invalid qiymat | Defect masking | Bir testda ko'pi bilan bitta invalid |
| Tartibsiz to'plamga BVA | Ma'nosiz testlar | To'lov usuli, {3, 6, 12} — faqat EP |
| Faqat ichki chegaralar | Bo'sh qator, max+1 uzunlik tekshirilmaydi | Domen chegaralarini ham yozing |
| "3-value = 6 nuqta" | Ichki chegarada 2 ta nuqta tushib qoladi | Har bir ichki chegarada 4 nuqta |
| "gacha" so'zini tekshirmaslik | Chegara kiradimi — noma'lum | "(shu jumladan)" deb aniqlashtiring |
| Decision table'ni o'ylamasdan qisqartirish | Bug yashirinadi | Faraz 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:
| Partition | Vakil | Kutilgan |
|---|---|---|
| 6 raqam | 482915 | Tekshiruvga yuboriladi |
| 6 raqam, boshida nol | 012345 | Tekshiruvga yuboriladi (nol yo'qolmasligi kerak!) |
| 5 raqam | 48291 | "Kod 6 raqamdan iborat" |
| 7 raqam | 4829150 | Rad etiladi yoki 6 tadan ortig'i yozilmaydi |
| Harf bor | 48a915 | Rad etiladi |
| Bo'sh | "" | Tugma faol emas yoki xabar |
| Probel bilan | 482 915 | Talabda yo'q — so'rash kerak |
Biznes partition'lari:
| Partition | Kutilgan |
|---|---|
| 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.
| BVA | Summa | Kutilgan yetkazish |
|---|---|---|
| 2-value | 299 999 | 20 000 |
| 2-value | 300 000 | 0 |
| 3-value (qo'shimcha) | 299 998 | 20 000 |
| 3-value (qo'shimcha) | 300 001 | 0 |
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>
| Partition | Qiymatlar | Turi |
|---|---|---|
| Q | 0 – 499 999 | invalid (juda kichik) |
| P | 500 000 – 30 000 000 | valid |
| R | 30 000 001 va undan katta | invalid (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):
| Partition | Vakil | Kutilgan |
|---|---|---|
| A–Z va 0–9 | BAHOR15 | Valid |
| Kichik harf | bahor15 | Talabda yo'q: rad etiladimi yoki katta harfga o'giriladimi? |
| Maxsus belgi | BAHOR-15 | Rad etiladi |
| Probel | BAHOR 15 | Rad etiladi (yoki trim — so'rang) |
| Kirill "egizak" harflar | ВАНОR15 (В, А, Н — kirillcha) | Rad etiladi — ko'rinishi bir xil, kodi boshqa |
| Emoji | BAHOR🎁 | Rad etiladi |
Holat (EP):
| Partition | Kutilgan |
|---|---|
| Amaldagi, minimal summa bajarilgan, birinchi marta | Chegirma 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.
| Yosh | Kutilgan | Haqiqiy (bug'li kod) | Natija |
|---|---|---|---|
| 0 | Rad | Rad | ✅ |
| 17 | Rad | Rad | ✅ |
| 18 | Qabul | Qabul | ✅ |
| 65 | Qabul | Rad | ❌ Bug topildi |
| 66 | Rad | Rad | ✅ |
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>
| M1 | M2 | M3 | M4 | M5 | |
|---|---|---|---|---|---|
| C1: Bloklangan | T | F | F | F | F |
| C2: Muddati o'tgan | – | T | F | F | F |
| C3: Kod to'g'ri | – | – | T | F | F |
| C4: 3-noto'g'ri urinish | – | – | – | F | T |
| Kirish | X | ||||
| "Kod noto'g'ri" | X | X | |||
| "Kod eskirgan" | X | ||||
| 15 daqiqaga bloklash | X | ||||
| "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.
| TC | Yosh | Summa | Muddat | Kutilgan |
|---|---|---|---|---|
| E1 | 30 | 1 000 000 | 3 | Qabul |
| E2 | 45 | 5 000 000 | 6 | Qabul |
| E3 | 60 | 20 000 000 | 12 | Qabul |
| E4 | 16 | 1 000 000 | 3 | Rad (yosh) |
| E5 | 70 | 1 000 000 | 3 | Rad (yosh) |
| E6 | 30 | 300 000 | 3 | Rad (summa) |
| E7 | 30 | 35 000 000 | 3 | Rad (summa) |
| E8 | 30 | 1 000 000 | 9 | Rad (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