# QA 8: Bug report va Bug Life Cycle — Severity vs Priority, Jira va yaxshi bug yozish san'ati

> **Holat:** 2026-yil oktabr. Dars ISTQB CTFL v4.0.1 syllabus'ining 5.5-bo'limi (defect management), Atlassian'ning Jira Cloud hujjatlari (statuslar, prioritetlar, JQL) va Chrome DevTools hujjatlariga tayanadi. JQL misollari rasmiy sintaksis bo'yicha tekshirilgan.

> **Bu darsdan keyin siz:** dasturchi birinchi o'qishdayoq tushunadigan, qayta hosil qila oladigan va to'g'ri ustuvorlik bilan tuzatadigan bug report yozasiz.

- bug'ni "bug emas"dan (feature request, works as designed, false positive) ajratasiz;
- sarlavha formulasi, aniq qadamlar va dalillar bilan to'liq report yozasiz;
- severity va priority'ni mustaqil baholaysiz;
- bug hayot siklini va Jira workflow'ini boshqarasiz, JQL bilan kerakli bug'larni topasiz;
- "menda ishlayapti" va beqaror bug'lar bilan professional ishlaysiz.

## Mundarija

1. [Bug nima va nima emas](#bug-nima)
2. [Yaxshi bug report anatomiyasi](#anatomiya)
3. [Qayta hosil qilish qadamlarini yozish san'ati](#steps)
4. [Severity va Priority](#severity-priority)
5. [Bug Life Cycle](#lifecycle)
6. [Jira'da bug bilan ishlash](#jira)
7. [Yomon va yaxshi report'lar: 3 juft](#misollar)
8. [Ko'p uchraydigan xatolar](#xatolar)
9. [Dasturchilar bilan ishlash](#hamkorlik)
10. [Beqaror (intermittent) bug'larni tergov qilish](#intermittent)
11. [Front-end'mi yoki back-end'mi?](#front-yoki-back)
12. [Amaliy mashqlar](#mashqlar)
13. [Xulosa](#xulosa)
14. [Manbalar](#manbalar)

---

## 1. Bug nima va nima emas {#bug-nima}

QA ishining eng ko'rinadigan natijasi — bug report. Dasturchi uni o'qiydi, PO uning asosida reliz qarorini qabul qiladi, menejer esa sifat holatini shu orqali ko'radi. Yomon report vaqt yo'qotadi; yaxshi report bug'ni ertaroq tuzattiradi.

Lekin har bir "g'alati narsa" bug emas. ISTQB ham buni ta'kidlaydi: xabar qilingan anomaliya **real defekt** chiqishi ham, **boshqa narsa** (false positive, o'zgartirish so'rovi) chiqishi ham mumkin — bu defect management jarayonida aniqlanadi.

| Turi                  | Ma'nosi                                       | DemoBozor misoli                                         | Odatda nima qilinadi                    |
| --------------------- | --------------------------------------------- | -------------------------------------------------------- | --------------------------------------- |
| **Bug (defekt)**      | Xatti-harakat talabga yoki aniq kutilmaga zid | `BAHOR15` qo'llanganda chegirma 10% bo'ladi (talab: 15%) | Bug report                              |
| **Talabdagi defekt**  | Talabning o'zi xato yoki qarama-qarshi        | Bir joyda "yosh 18–65", boshqa joyda "21 yoshdan"        | Talabga bug yoki savol, PO'ga           |
| **Feature request**   | Talabda yo'q, yangi imkoniyat                 | "Promo-kodni QR orqali skanerlash"                       | Backlog'ga story                        |
| **Enhancement**       | Mavjud funksiyani yaxshilash                  | "Qidiruvda filtrlarni saqlab qolish"                     | Improvement tiketi                      |
| **Works as designed** | Talabga mos, garchi kutilmagan bo'lsa ham     | 10% va 15% qo'shilmaydi — kattasi qo'llanadi             | Rejected (WAD); UX savol bo'lsa — PO'ga |
| **False positive**    | Test noto'g'ri, mahsulot to'g'ri              | Eskirgan test case, noto'g'ri test data                  | Testware'ni tuzatish                    |
| **Duplicate**         | Shu bug allaqachon yozilgan                   | Ikki tester bir xil Humo xatosini yozdi                  | Asosiysiga bog'lab yopish               |

> **💡 Maslahat:** Bug yozishdan oldin bir daqiqa sarflab o'zingizdan so'rang: "Kutilgan natijani qayerdan bilaman?" Javob talab, acceptance criteria, dizayn maketi, API kontrakti yoki umumqabul qilingan standart bo'lishi kerak. "Menimcha shunday bo'lishi kerak" — bu bug emas, taklif.

---

## 2. Yaxshi bug report anatomiyasi {#anatomiya}

ISTQB dinamik testda yoziladigan defect report'ning odatiy tarkibini sanaydi. Jira'dagi mos maydonlari bilan:

| ISTQB elementi             | Jira'da                                  | Izoh                                        |
| -------------------------- | ---------------------------------------- | ------------------------------------------- |
| Noyob identifikator        | Key (`DB-2231`)                          | Avtomatik                                   |
| Qisqa mazmunli sarlavha    | Summary                                  | Eng muhim qator — pastda formula            |
| Sana, tashkilot, muallif   | Created, Reporter                        | Avtomatik                                   |
| Test obyekti va muhit      | Environment, Affects version             | Build, OT, qurilma, brauzer, backend muhiti |
| Kontekst                   | Bog'langan test case, story              | Qaysi test, qaysi texnika, qaysi data       |
| Nosozlik tavsifi           | Description: qadamlar, log'lar, dalillar | Qayta hosil qilish uchun yetarli            |
| Kutilgan va haqiqiy natija | Description                              | Aniq raqam va matnlar bilan                 |
| Severity                   | Ko'pincha alohida (custom) maydon        | Ta'sir darajasi                             |
| Priority                   | Priority                                 | Tuzatish navbati                            |
| Status                     | Status                                   | Workflow bo'yicha                           |
| Havolalar                  | Linked work items                        | Test case, story, duplicate                 |

### Sarlavha formulasi

**[Qayerda] + [Nima bo'ldi] + [Qachon / qaysi sharoitda]**

| Yomon                | Yaxshi                                                                                |
| -------------------- | ------------------------------------------------------------------------------------- |
| "Promo ishlamayapti" | "[Web] Checkout: BAHOR15 promo-kodi 15% o'rniga 10% chegirma beradi (yangi mijozda)"  |
| "Crash"              | "[iOS] Sharh: 10 MB dan katta rasm biriktirilganda ilova yopiladi"                    |
| "API xato"           | "[API] PATCH /api/v1/cart/items/{id}: quantity=100 bo'lsa 500 qaytadi (kutilgan 4xx)" |
| "Kirillda xato"      | "[Android] Savatcha (kirill): promo qo'llangandan keyin jami summa 'NaN' ko'rinadi"   |

Yaxshi sarlavhani o'qigan odam report'ni ochmasdan ham muammoni tushunadi va dublikatni qidira oladi.

### Muhit (environment) — nimalarni yozish shart

| Platforma | Yoziladi                                                                                  |
| --------- | ----------------------------------------------------------------------------------------- |
| Web       | Brauzer va versiyasi, OT, ekran o'lchami, til, akkaunt turi                               |
| Mobil     | Qurilma modeli, OT versiyasi, ilova versiyasi **va build raqami**, tarmoq (Wi-Fi/4G), til |
| Backend   | Muhit (staging/production), API versiyasi, feature flag'lar                               |
| Har doim  | Test akkaunt (shaxsiy ma'lumotsiz!), vaqt (Asia/Tashkent)                                 |

### Dalillar (attachments)

- **Screenshot** — kerakli joy belgilangan va qirqilgan; to'liq ekran va 4K kerak emas.
- **Ekran yozuvi** — qisqa (30–60 soniya), mobilda bosishlar ko'rinadigan.
- **Console xatolari** — DevTools → Console'dan matn sifatida (screenshot emas).
- **HAR fayl** — Chrome DevTools Network panelida standart holatda **"Export HAR (sanitized)"** maxfiy ma'lumotlarsiz eksport qiladi. Tokenlar bilan to'liq eksport uchun alohida sozlama yoqilishi kerak — buni faqat zarur bo'lganda va xavfsiz kanal orqali qiling.
- **Mobil trafik** — Proxyman sessiyasi ([QA 15](/ios-lessons/qa-proxyman)).
- **Server log'lari** — request ID bilan ([QA 13](/ios-lessons/qa-terminal-git-logs)).
- **Bazadagi holat** — SQL so'rov natijasi ([QA 12](/ios-lessons/qa-sql)).

> **⚠️ Diqqat:** Report'ga hech qachon haqiqiy foydalanuvchining telefon raqami, karta raqami, token yoki parolini qo'ymang. Skrinshot va log'lardagi shaxsiy ma'lumotlarni yashiring (mask). Bug tracker'ni ko'p odam o'qiydi.

### Qayta hosil qilinishi (reproducibility)

`Har doim (5/5)`, `Ba'zan (3/10)`, `Bir marta`. Bu raqam dasturchiga qancha vaqt sarflashini va qanday yondashishini aytadi.

---

## 3. Qayta hosil qilish qadamlarini yozish san'ati {#steps}

Qadamlar — report'ning yuragi. Qoidalar:

1. **Ma'lum holatdan boshlang:** "toza o'rnatilgan ilova", "tizimdan chiqilgan", "test akkaunt `+998900000005`".
2. **Raqamlang, har qadamda bitta harakat.**
3. **Aniq ma'lumot:** "promo kiriting" emas — "`BAHOR15` ni kiriting".
4. **Minimal qiling:** keraksiz qadamlarni olib tashlab ko'ring — bug saqlanib qolsa, olib tashlang.
5. **Kutilgan natija manbasi:** talab yoki acceptance criteria'ga havola.
6. **Haqiqiy natija aniq:** xabar matni so'zma-so'z, raqamlar, HTTP status.

Report yuborishdan oldingi **izolyatsiya checklist'i**:

- [ ] Bug'ni 2–3 marta qayta hosil qildim
- [ ] Boshqa brauzer yoki qurilmada tekshirdim
- [ ] Boshqa test akkauntda tekshirdim
- [ ] Eng oxirgi build'da tekshirdim
- [ ] Kesh tozalangan yoki inkognito rejimda tekshirdim
- [ ] Jira'da dublikat qidirdim (sarlavhadagi kalit so'zlar bilan)

Universal shablon:

```text
Sarlavha: [Platforma] Ekran: nima bo'ladi — qaysi sharoitda

Muhit:        staging · iOS 26.x · iPhone 15 · DemoBozor 2.0.0 (412) · til: o'zbek (lotin)
Akkaunt:      test akkaunt +998900000005 (yangi mijoz, Premium emas)
Old shart:    savatchada 250 000 so'mlik mahsulot
Qadamlar:
  1. ...
  2. ...
Kutilgan:     ... (talab: DB-205, AC-3)
Haqiqiy:      ...
Takrorlanish: 5/5
Dalillar:     video.mp4, console.txt, request-id: 7f3c9a...
Severity:     Major      Priority (taklif): P1
Bog'liq:      TC-210-03
```

---

## 4. Severity va Priority {#severity-priority}

Ikki tushuncha, ikki xil savol:

|                    | Severity (jiddiylik)                                          | Priority (ustuvorlik)                                                 |
| ------------------ | ------------------------------------------------------------- | --------------------------------------------------------------------- |
| **Savol**          | Bug tizimga va foydalanuvchiga **qanchalik zarar** yetkazadi? | Uni **qachon** tuzatamiz?                                             |
| **ISTQB ta'rifi**  | Stakeholder manfaatlari yoki talablarga ta'sir darajasi       | Tuzatish ustuvorligi                                                  |
| **Kim baholaydi**  | Odatda QA (texnik ta'sir)                                     | PO / triage (biznes qarori)                                           |
| **Nimaga qaraydi** | Funksiya ishlaydimi, ma'lumot yo'qoladimi, aylanma yo'l bormi | Severity + necha foydalanuvchi + biznes muddat + obro' + aylanma yo'l |

### Severity darajalari

| Daraja       | Ma'nosi                                                | DemoBozor misoli                                                 |
| ------------ | ------------------------------------------------------ | ---------------------------------------------------------------- |
| **Blocker**  | Asosiy ish umuman bajarilmaydi, testlash ham to'xtaydi | Ilova ochilishi bilan yopiladi (crash)                           |
| **Critical** | Muhim funksiya ishlamaydi yoki ma'lumot/pul yo'qoladi  | Humo bilan to'lov 500 qaytaradi; savatcha o'z-o'zidan tozalanadi |
| **Major**    | Funksiya noto'g'ri ishlaydi, lekin aylanma yo'l bor    | Promo 15% o'rniga 10%; qidiruv kirill so'rovni topmaydi          |
| **Minor**    | Kichik noqulaylik, asosiy oqimga ta'sir yo'q           | Buyurtmalar tarixida sana `dd/mm/yyyy` (kutilgan `dd.mm.yyyy`)   |
| **Trivial**  | Kosmetik                                               | "Biz haqimizda" sahifasida footer 1 px siljigan                  |

### Priority darajalari

| Daraja | Ma'nosi                           |
| ------ | --------------------------------- |
| **P0** | Darhol — hotfix, ish to'xtatiladi |
| **P1** | Shu sprint yoki relizda albatta   |
| **P2** | Keyingi relizda                   |
| **P3** | Vaqt bo'lganda, backlog           |

Jira'ning standart prioritetlari: **Highest, High, Medium, Low, Lowest**. Severity esa ko'p jamoalarda alohida maydon sifatida qo'shiladi.

### Ular mustaqil!

![Severity va priority matritsasi: DemoBozor misollari bilan to'rtta kvadrant](/lessons/images/qa/qa_08_severity_priority.svg)

Eng ko'p so'raladigan ikki kvadrant:

- **Yuqori severity, past priority:** admin panelida kamdan-kam ishlatiladigan "buyurtmalarni PDF'ga eksport" tugmasi ilovani yopadi. Crash — jiddiy. Lekin uni oyiga bir-ikki xodim ishlatadi va aylanma yo'l bor (web'dan eksport). Keyingi relizga qoldirsa bo'ladi.
- **Past severity, yuqori priority:** bosh sahifadagi aksiya bannerida "50% chegirma" yozilgan, aslida 15%. Texnik jihatdan bu bitta matn (kosmetik), lekin mijozlar aldangan bo'ladi — huquqiy va obro' riski. Darhol tuzatiladi.

> **🎯 Intervyuda:** "Yuqori severity va past priority'ga misol keltiring" — Kam ishlatiladigan va aylanma yo'li bor funksiyadagi crash. "Past severity, yuqori priority?" — Bosh sahifadagi brend nomi yoki narxdagi xato matn: texnik ta'sir kichik, biznes ta'siri katta.

---

## 5. Bug Life Cycle {#lifecycle}

Har bir bug topilgandan yopilgunicha holatlardan o'tadi. ISTQB misol statuslarni sanaydi: open, deferred, duplicate, waiting to be fixed, awaiting confirmation testing, re-opened, closed, rejected. Kompaniyalar ularni o'z workflow'iga moslaydi. Odatiy ko'rinish:

![Bug hayot sikli: asosiy yo'l, triage natijalari va qayta ochilish](/lessons/images/qa/qa_08_bug_lifecycle.svg)

| Status                   | Ma'nosi                                                       | Kim o'tkazadi              |
| ------------------------ | ------------------------------------------------------------- | -------------------------- |
| **New**                  | Yangi yozilgan                                                | QA                         |
| **Triaged / Open**       | Ko'rib chiqildi: haqiqiy bug, severity va priority belgilandi | Triage (PO, Tech Lead, QA) |
| **Assigned**             | Dasturchiga biriktirildi                                      | Tech Lead                  |
| **In Progress**          | Tuzatilmoqda                                                  | Dasturchi                  |
| **Fixed / Resolved**     | Kod tuzatildi (PR merge qilindi)                              | Dasturchi                  |
| **Ready for QA**         | Tuzatish test muhitiga deploy qilindi, tekshirishni kutmoqda  | Dasturchi / CI             |
| **Verified**             | Confirmation test o'tdi                                       | QA                         |
| **Closed**               | Reliz qilindi yoki yakuniy yopildi                            | QA / PO                    |
| **Reopened**             | Retest muvaffaqiyatsiz yoki muammo qaytdi                     | QA                         |
| **Rejected**             | Bug emas (works as designed, noto'g'ri test)                  | Triage                     |
| **Duplicate**            | Mavjud bug'ning takrori                                       | Triage                     |
| **Cannot Reproduce**     | Hech kim qayta hosil qila olmadi                              | Dasturchi / QA             |
| **Deferred / Won't Fix** | Tuzatish keyinga qoldirildi yoki umuman tuzatilmaydi          | PO                         |

Jira'da yopilgan tiketning **resolution** maydoni ham bo'ladi; standart qiymatlar: Done, Won't do, Duplicate, Cannot reproduce.

Muhim amaliyotlar:

- **Ready for QA** dan keyin ikki ish qilinadi: **confirmation test** (aynan shu bug tuzaldimi?) va tuzatish atrofida **regression** (boshqa narsa buzilmadimi?) — [QA 4](/ios-lessons/qa-levels-types).
- **Reopen yoki yangi bug?** Simptom aynan o'sha bo'lsa — reopen. Boshqa simptom chiqsa — yangi bug, eskisiga havola bilan.
- **Cannot Reproduce** — "yopish" degani emas: qanday muhitda tekshirilgani yoziladi; muammo qaytsa, qayta ochiladi.

---

## 6. Jira'da bug bilan ishlash {#jira}

Jira — eng keng tarqalgan issue tracker. Atlassian'ning Jira Cloud hujjatlarida "issue" o'rniga endi **"work item"** atamasi ishlatiladi — ikkalasini ham uchratasiz. Jamoa sozlamasiga qarab tiket turlari: **Bug**, Story, Task, Epic, Sub-task.

Bug uchun asosiy maydonlar: Summary, Description, Priority, Components (masalan, `Checkout`), Affects version, Fix version, Labels (`regression`, `ios`), Environment, Attachments, Linked work items.

### JQL — Jira Query Language

JQL bilan istalgan bug'lar ro'yxatini bir qatorda topasiz va filtr sifatida saqlaysiz:

```text
project = DB AND issuetype = Bug AND status = "Ready for QA" ORDER BY priority DESC
```

```text
project = DB AND issuetype = Bug AND resolution is EMPTY AND priority in (Highest, High)
```

```text
issuetype = Bug AND component = Checkout AND created >= -7d
```

```text
issuetype = Bug AND fixVersion = "2.0" AND status WAS "Reopened"
```

```text
issuetype = Bug AND status CHANGED FROM "Ready for QA" TO "Reopened"
```

```text
issuetype = Bug AND text ~ "Humo" AND assignee = currentUser()
```

Tushuntirish:

| Qism                          | Ma'nosi                                                                |
| ----------------------------- | ---------------------------------------------------------------------- |
| `resolution is EMPTY`         | Hali hal qilinmagan (ochiq)                                            |
| `priority in (Highest, High)` | Ro'yxatdagi qiymatlardan biri                                          |
| `created >= -7d`              | Oxirgi 7 kunda yaratilgan (nisbiy sana)                                |
| `status WAS "Reopened"`       | Qachondir shu statusda bo'lgan — qayta ochilgan bug'larni sanash uchun |
| `CHANGED FROM ... TO ...`     | Status aynan shunday o'zgargan                                         |
| `text ~ "Humo"`               | Matn maydonlarida qidirish                                             |
| `currentUser()`               | Hozir kirgan foydalanuvchi                                             |

Saqlangan filtrlarni dashboard'ga qo'yib, jamoa uchun "Ochiq Critical bug'lar", "Retest kutayotganlar" kabi panellar yasaladi.

**Muqobillar:** Linear (tez, minimalistik, startaplarda ommabop), YouTrack (JetBrains), GitHub Issues (kod bilan bir joyda). Tushunchalar bir xil: status, priority, label, havolalar va qidiruv tili.

---

## 7. Yomon va yaxshi report'lar: 3 juft {#misollar}

### 1-juft: web, promo-kod

```text
YOMON:
Promo ishlamayapti!!! Tezroq tuzating, mijozlar shikoyat qiladi
```

```text
YAXSHI:
Sarlavha: [Web] Checkout: BAHOR15 promo-kodi yangi mijozga 15% o'rniga 10% chegirma beradi

Muhit:     staging · Chrome 155 · macOS · DemoBozor web 2.0.0 · til: o'zbek (lotin)
Akkaunt:   test akkaunt +998900000011 (yangi mijoz — birinchi buyurtma, Premium emas)
Old shart: savatchada 250 000 so'mlik "Elektr choynak"
Qadamlar:
  1. Savatcha -> "Rasmiylashtirish"
  2. Promo-kod maydoniga BAHOR15 ni kiriting, "Qo'llash"ni bosing
Kutilgan:  chegirma -37 500 so'm (15%), jami 232 500 so'm.
           Talab DB-205: chegirmalar qo'shilmaydi, kattasi qo'llanadi (15% > 10%)
Haqiqiy:   chegirma -25 000 so'm (10%), jami 245 000 so'm; xabar "Promo-kod qo'llandi"
Takrorlanish: 5/5. Eski mijoz akkauntida to'g'ri ishlaydi (15%)
Dalillar:  screenshot.png; POST /api/v1/orders/preview javobida "discountPct": 10
Severity:  Major · Priority (taklif): P1 (pul, ko'p yangi mijozlar)
```

O'zgarish: hissiyot o'rniga faktlar, aniq akkaunt va data, talabga havola, API dalili (bug backend'da ekanini ko'rsatadi) va "eski mijozda ishlaydi" degan izolyatsiya natijasi.

### 2-juft: iOS, crash

```text
YOMON:
Ilova crash bo'ldi rasm qo'shganda
```

```text
YAXSHI:
Sarlavha: [iOS] Sharh: 10 MB dan katta rasm biriktirilganda ilova yopiladi (crash)

Muhit:     staging · iPhone 13 · iOS 26.x · DemoBozor 2.0.0 (412) · Wi-Fi
Old shart: DELIVERED buyurtma bor (test akkaunt +998900000021)
Qadamlar:
  1. Buyurtmalar -> buyurtmani oching -> "Sharh qoldirish"
  2. 5 yulduz tanlang, 20 belgili matn yozing
  3. "Rasm qo'shish" -> galereyadan 12 MB li rasmni tanlang
Kutilgan:  rasm siqiladi yoki "Rasm hajmi 10 MB dan oshmasin" xabari
Haqiqiy:   ~2 soniyadan keyin ilova yopiladi
Takrorlanish: 5/5 (12 MB va 15 MB); 4 MB li rasm bilan muammo yo'q
Dalillar:  screen-recording.mp4; crash log (Xcode Organizer); Crashlytics havolasi
Severity:  Critical (crash, ma'lumot yo'qoladi) · Priority (taklif): P1
```

O'zgarish: aniq qadamlar va fayl hajmi, chegara topilgan (4 MB ishlaydi, 12 MB yo'q), crash log va video.

### 3-juft: API

```text
YOMON:
API xato qaytaryapti savatchada
```

```text
YAXSHI:
Sarlavha: [API] PATCH /api/v1/cart/items/{id}: quantity=100 bo'lsa 500 qaytadi (kutilgan 4xx)

Muhit:     staging API v1 · 2026-11-12 14:32 (Asia/Tashkent)
So'rov:
  curl -X PATCH "https://staging.demobozor.example/api/v1/cart/items/58" \
       -H "Authorization: Bearer <test-token>" \
       -H "Content-Type: application/json" \
       -d '{"quantity": 100}'
Kutilgan:  4xx (API kontraktidagi validatsiya xatosi), body'da "quantity 1–99 oralig'ida".
           Talab: savatchada bitta mahsulot soni 1–99
Haqiqiy:   500 Internal Server Error, body: {"error":"Internal error"}
Takrorlanish: 5/5; quantity=99 -> 200, quantity=0 -> 400 (to'g'ri)
Dalillar:  request-id: 3b81f0c2-...; server log: "value out of range for column quantity"
Severity:  Major · Priority (taklif): P2
```

O'zgarish: so'rov nusxa ko'chirib ishlatiladigan `curl` ko'rinishida (token yashirilgan), chegara atrofidagi tekshiruvlar (99, 0), request ID va server log'i. Dasturchiga qolgan ish — tuzatish.

---

## 8. Ko'p uchraydigan xatolar {#xatolar}

| Xato                                     | Nima uchun yomon                      | To'g'risi                              |
| ---------------------------------------- | ------------------------------------- | -------------------------------------- |
| Bitta report'da bir nechta bug           | Biri tuzalsa, tiketni yopib bo'lmaydi | Har bug — alohida tiket, havola bilan  |
| Noaniq sarlavha ("Xato", "Ishlamayapti") | Dublikat qidirib bo'lmaydi            | Formula: qayerda + nima + qachon       |
| Muhit yo'q                               | Dasturchi boshqa build'da qidiradi    | Build raqami va qurilma doim           |
| Kutilgan natija yo'q                     | Bug ekanligi tushunarsiz              | Talabga havola                         |
| Hissiyot ("dahshat", "yana buzdingiz")   | Hamkorlikni buzadi                    | Faqat faktlar                          |
| Sababni taxmin qilib sarlavhaga yozish   | Noto'g'ri yo'lga boshlaydi            | Simptomni yozing, taxminni izohda      |
| Kontekstsiz screenshot                   | Nimaga qarash kerakligi noma'lum      | Belgilang, qirqing                     |
| Shaxsiy ma'lumot ochiq                   | Maxfiylik buziladi                    | Mask qiling, test akkaunt ishlating    |
| Dublikat tekshirilmagan                  | Jamoa vaqti isrof                     | Avval qidiring                         |
| Uzun video, vaqt belgisiz                | Hech kim 5 daqiqa ko'rmaydi           | 30–60 soniya yoki "0:42 da" deb yozing |

---

## 9. Dasturchilar bilan ishlash {#hamkorlik}

QA va dasturchi — bir jamoa. Maqsad "kim aybdor"ni topish emas, foydalanuvchiga sifatli mahsulot berish.

**"Menda ishlayapti" (works on my machine)** — eng mashhur ibora. Javob — farqni topish:

| Solishtiring       | Misol                                       |
| ------------------ | ------------------------------------------- |
| Build va muhit     | Dasturchi lokal'da, siz staging'da          |
| Ma'lumot           | Sizdagi akkaunt yangi mijoz, unikida — eski |
| Til va vaqt zonasi | Kirill interfeysi, Asia/Tashkent            |
| Kesh va holat      | Ilova yangilangan, eski kesh qolgan         |
| Feature flag'lar   | Staging'da yangi flag yoqilgan              |
| Qurilma va OT      | Eski iOS, kichik ekran                      |

Keyin dalil bering: video, HAR yoki Proxyman sessiyasi, request ID. Kerak bo'lsa 10 daqiqa yonma-yon o'tirib birga qayta hosil qiling — bu ko'pincha 10 ta izohdan tezroq.

**Triage uchrashuvi** (masalan, haftada ikki marta): QA, PO va Tech Lead yangi bug'larni ko'rib chiqadi — bug'mi, severity va priority, kim tuzatadi, qaysi relizga.

**Bug bash** — reliz oldidan butun jamoa (dasturchilar, dizayner, PO) bir soat ilovani "buzishga" urinadi. Yangi ko'zlar kutilmagan bug'larni topadi.

**Blocker topilsa** — faqat tiket yozish yetmaydi: jamoa chatiga darhol xabar bering. Tiket — qayd uchun, xabar — tezlik uchun.

---

## 10. Beqaror (intermittent) bug'larni tergov qilish {#intermittent}

"Ba'zan" chiqadigan bug'lar — eng qiyini. Ularni "Cannot Reproduce" deb tez yopish xavfli: production'da ular minglab foydalanuvchida takrorlanadi.

1. **Har bir holatni qayd eting:** aniq vaqt (Asia/Tashkent), request ID, akkaunt, qurilma, tarmoq, ilova holati (fondan qaytdimi?).
2. **Naqsh qidiring:**
   - vaqt — yarim tun, cron job, kun oxiridagi hisob-kitob;
   - ma'lumot — faqat ma'lum mahsulot yoki promo bilan;
   - parallellik — ikkita tab, ikkita qurilma, tugmani ikki marta bosish;
   - tarmoq — sekin internet, uzilish;
   - holat — ilova uzoq fonda turgandan keyin.
3. **Chastotani oshiring:** amalni tsiklda 20 marta takrorlang; Proxyman'ning Network Conditions bilan tarmoqni sekinlashtiring ([QA 15](/ios-lessons/qa-proxyman)); bir vaqtda parallel so'rovlar yuboring.
4. **Doimiy video yozib turing** — bug chiqqan lahzani qo'ldan boy bermaslik uchun.
5. **Report'da rostini yozing:** "Takrorlanish: 3/20; naqsh: faqat 4G'da va to'lov 10 soniyadan oshganda" + to'plangan barcha dalillar.

---

## 11. Front-end'mi yoki back-end'mi? {#front-yoki-back}

To'g'ri komponent va to'g'ri dasturchiga yuborish uchun bug'ni lokalizatsiya qiling. Web'da DevTools → Network ([QA 9](/ios-lessons/qa-web-http-devtools)), mobilda Proxyman ([QA 15](/ios-lessons/qa-proxyman)):

| #   | Savol                                                 | Javob "yo'q" bo'lsa                     |
| --- | ----------------------------------------------------- | --------------------------------------- |
| 1   | Tugma bosilganda so'rov umuman yuborildimi?           | Front-end (handler, validatsiya)        |
| 2   | So'rovdagi ma'lumot to'g'rimi (payload, parametrlar)? | Front-end (noto'g'ri ma'lumot yubordi)  |
| 3   | Javob status kodi va body'si kontraktga mosmi?        | Back-end                                |
| 4   | Javob to'g'ri, ekranda ham to'g'ri ko'rinyaptimi?     | Front-end (render, formatlash, mapping) |
| 5   | Javob tez keldimi?                                    | Back-end, tarmoq yoki performance       |

Promo misolida: agar `/api/v1/orders/preview` javobida `"discountPct": 10` bo'lsa — bug **backend**'da. Agar javobda 15 bo'lsa-yu, ekranda 10% ko'rinsa — **frontend**'da. Bu bitta tekshiruv jamoaning yarim kunini tejaydi.

---

## 12. Amaliy mashqlar {#mashqlar}

### Mashq 1: hikoyadan bug report

Hamkasbingiz aytdi: "Android'da kirill tilida savatchaga kirsam, promo qo'ygandan keyin jami 'NaN сўм' bo'lib qolyapti. Lotinda bunday emas. Build 2.0.0 (415), staging." Siz qayta hosil qildingiz: `BAHOR15` kodi bilan, 250 000 so'mlik savatchada, Pixel 7 qurilmasida. To'liq bug report yozing.

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

```text
Sarlavha: [Android] Savatcha (kirill): promo-kod qo'llangandan keyin jami summa "NaN сўм" ko'rinadi

Muhit:     staging · Pixel 7 · Android (oxirgi versiya) · DemoBozor 2.0.0 (415) · til: o'zbek (kirill)
Akkaunt:   test akkaunt +998900000031 (eski mijoz, Premium emas)
Old shart: savatchada 250 000 so'mlik mahsulot; interfeys tili — o'zbek (kirill)
Qadamlar:
  1. Savatchani oching
  2. Promo-kod maydoniga BAHOR15 ni kiriting, "Қўллаш" tugmasini bosing
Kutilgan:  chegirma -37 500, jami "232 500 сўм" (lotindagi xatti-harakat bilan bir xil)
Haqiqiy:   chegirma qatori to'g'ri, lekin jami "NaN сўм"
Takrorlanish: 5/5. Lotin va rus tilida jami to'g'ri — 232 500.
Dalillar:  screenshot (lotin vs kirill), ekran yozuvi; API javobidagi "total": 232500 (to'g'ri)
Severity:  Major (narx ko'rinmaydi, to'lov davom etadi) · Priority (taklif): P1
Taxmin (izohda): summa formatlash kirill lokalida buzilayotgan bo'lishi mumkin
```

API javobi to'g'ri bo'lgani uchun bug front-end'da — bu report'da ko'rsatilgan. Taxmin sarlavhaga emas, izohga yozildi.

</details>

### Mashq 2: severity va priority

Har bir bug uchun severity va priority qo'ying, qisqa asoslang.

a) Production: Uzcard bilan to'lov ishlaydi, Humo bilan 500 qaytadi.
b) Bosh sahifa bannerida "50% chegirma" yozilgan, aslida 15%.
c) "Biz haqimizda" sahifasida rasm 2 px siljigan.
d) Kirill interfeysida "Сават" tugmasining matni kesilgan, lekin tugma ishlaydi.
e) Admin panelidagi kamdan-kam ishlatiladigan PDF-eksport tugmasi crash qiladi; web'dan eksport ishlaydi.
f) iOS'ning eng yangi versiyasida ilova ochilishi bilan yopiladi.
g) Aynan 300 000 so'mlik buyurtmaga 20 000 so'm yetkazish narxi qo'yiladi.
h) Qidiruvda `Oʻzbek` (ʻ) yozilsa natija bor, `O'zbek` (') yozilsa — yo'q.

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

| #   | Severity        | Priority | Asos                                                                               |
| --- | --------------- | -------- | ---------------------------------------------------------------------------------- |
| a   | Critical        | P0       | Muhim to'lov usuli ishlamaydi, pul oqimi to'xtaydi, production                     |
| b   | Trivial / Minor | P0–P1    | Texnik jihatdan matn; lekin mijozlarni chalg'itadi — huquqiy va obro' riski        |
| c   | Trivial         | P3       | Kosmetik, kam ko'riladigan sahifa                                                  |
| d   | Minor           | P2       | Kosmetik, funksiya ishlaydi; lekin kirill — reliz scope'ida, kechiktirmaslik kerak |
| e   | Major           | P2       | Crash, lekin kam ishlatiladi va aylanma yo'l bor                                   |
| f   | Blocker         | P0       | Hech kim ilovadan foydalana olmaydi                                                |
| g   | Major           | P1       | Pul bilan bog'liq, ko'p buyurtmaga ta'sir qiladi; chegara bug'i                    |
| h   | Major           | P1–P2    | Foydalanuvchilarning katta qismi oddiy apostrof bilan yozadi — mahsulot topilmaydi |

Asosiy xulosa: (b) va (e) severity va priority bir-biriga bog'liq emasligini ko'rsatadi. Bu jadvaldagi baholar — yo'nalish; real qarorni triage kontekst bilan qabul qiladi.

</details>

### Mashq 3: yomon report'ni tanqid qiling

```text
Sarlavha: To'lov
Tavsif: kecha to'lov qilmoqchi edim, ishlamadi, keyin yana urindim yana ishlamadi.
Screenshot qo'shdim. Menimcha backend yiqilgan. Juda muhim!!!
```

Kamida 6 ta muammoni sanang va yaxshi sarlavha yozing.

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

Muammolar:

1. Sarlavha ma'nosiz — qayerda, nima, qachon yo'q.
2. Muhit yo'q: platforma, build, muhit (staging/prod), to'lov usuli.
3. Aniq vaqt yo'q ("kecha") — log qidirib bo'lmaydi.
4. Qadamlar yo'q.
5. Kutilgan va haqiqiy natija yo'q: "ishlamadi" — xato xabarimi, aylanib qoldimi, pul yechildimi?
6. Takrorlanish darajasi noaniq ("yana urindim" — necha marta, natija bir xilmi?).
7. Sababni taxmin qilish ("backend yiqilgan") — dalilsiz.
8. Hissiyot va undovlar; severity/priority asoslanmagan.
9. Screenshot'da nimaga qarash kerakligi aytilmagan.

Yaxshi sarlavha (tekshirilgandan keyin): **"[iOS] Checkout: Humo karta bilan 'To'lash' bosilganda 30 soniyadan keyin 'To'lov amalga oshmadi' chiqadi (staging, build 412)"**.

</details>

### Mashq 4: hayot siklidagi status

Har bir hodisadan keyin bug qaysi statusga o'tadi?

a) Dasturchi: "Bu talabga mos — chegirmalar qo'shilmaydi." PO tasdiqladi.
b) Triage'da ma'lum bo'ldi: xuddi shu bug DB-2100 da bor.
c) Tuzatish build 416 da staging'ga chiqdi.
d) Retest: bug hamon bor.
e) PO: "Bu v2.1 da tuzatiladi."
f) Retest o'tdi, tuzatish atrofidagi regression ham yashil.

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

| #   | Status                            | Izoh                                                                |
| --- | --------------------------------- | ------------------------------------------------------------------- |
| a   | Rejected (Works as designed)      | Agar UX chalkash bo'lsa — PO uchun alohida improvement              |
| b   | Duplicate                         | DB-2100 ga havola; yangi dalillar bo'lsa, asosiy tiketga qo'shiladi |
| c   | Ready for QA                      | Retest navbatida                                                    |
| d   | Reopened                          | Simptom aynan o'sha bo'lgani uchun yangi tiket emas                 |
| e   | Deferred                          | Fix version: 2.1                                                    |
| f   | Verified → reliz'dan keyin Closed | Confirmation test + regression                                      |

</details>

### Mashq 5: JQL yozing

DB loyihasi uchun so'rovlar yozing: 1) menga biriktirilgan ochiq bug'lar; 2) "Ready for QA" dagi bug'lar, avval eng yuqori ustuvorlik; 3) fix version 2.0 dagi, kamida bir marta qayta ochilgan bug'lar; 4) oxirgi 7 kunda Checkout komponentida yaratilgan Highest/High bug'lar.

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

```text
project = DB AND issuetype = Bug AND assignee = currentUser() AND resolution is EMPTY
```

```text
project = DB AND issuetype = Bug AND status = "Ready for QA" ORDER BY priority DESC
```

```text
project = DB AND issuetype = Bug AND fixVersion = "2.0" AND status WAS "Reopened"
```

```text
project = DB AND issuetype = Bug AND component = Checkout AND created >= -7d AND priority in (Highest, High)
```

Eslatma: status nomlari (masalan, "Ready for QA", "Reopened") jamoangizning workflow'idagi aniq nomga mos bo'lishi kerak.

</details>

### Mashq 6: bug'mi yoki yo'q?

Har birini tasniflang: bug, talabdagi defekt, feature request, enhancement, works as designed yoki false positive.

a) Yangi mijoz `TEJA5` (5%) promo kiritdi — 10% chegirma oldi.
b) Talabda "SMS kod 120 soniya amal qiladi", dizayn maketida taymer 90 soniyani ko'rsatadi.
c) Foydalanuvchilar "Buyurtmani takrorlash" tugmasini so'rashyapti.
d) Test case'da kutilgan yetkazish narxi 15 000 so'm deb yozilgan, ilova 20 000 ko'rsatadi (talab: 20 000).
e) 500 000 so'mlik muddatli to'lov arizasi "Minimal summa 500 000" xabari bilan rad etildi.

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

| #   | Tasnif            | Izoh                                                                                                           |
| --- | ----------------- | -------------------------------------------------------------------------------------------------------------- |
| a   | Works as designed | "Kattasi qo'llanadi": 10% > 5%. UX savol: foydalanuvchiga promo nega ishlamaganini tushuntirish kerakmi?       |
| b   | Talabdagi defekt  | Talab va maket qarama-qarshi — PO'ga savol, talab tuzatilishi kerak                                            |
| c   | Feature request   | Backlog'ga story                                                                                               |
| d   | False positive    | Test case eskirgan — testware'ni tuzatish                                                                      |
| e   | **Bug**           | 500 000 — valid partition'ning min chegarasi (shu jumladan), qabul qilinishi kerak. BVA'ning klassik topilmasi |

</details>

---

## Xulosa {#xulosa}

- Har anomaliya bug emas: feature request, works as designed, false positive va dublikatlarni ajrating. Kutilgan natija doim manbaga tayansin.
- Yaxshi sarlavha formulasi: **qayerda + nima + qachon**. Report'da muhit, aniq qadamlar, kutilgan/haqiqiy natija, takrorlanish va dalillar bo'ladi.
- **Severity** — ta'sir (QA baholaydi), **priority** — tuzatish navbati (biznes hal qiladi). Ular mustaqil.
- Bug hayot sikli: New → Triaged → Assigned → In Progress → Fixed → Ready for QA → Verified → Closed, yon yo'llari bilan. Retest'dan keyin regression ham.
- JQL bilan kerakli bug'larni bir qatorda topasiz va jamoa dashboard'larini yasaysiz.
- Dasturchi bilan faktlar tilida gaplashing; beqaror bug'larda naqsh qidiring va chastotani oshiring.
- **Keyingi dars:** [QA 9: Web qanday ishlaydi — Client-Server, HTTP, DNS, Cookie, Cache va Chrome DevTools](/ios-lessons/qa-web-http-devtools)

## Manbalar {#manbalar}

1. [ISTQB — Certified Tester Foundation Level Syllabus v4.0.1 (PDF)](https://www.istqb.org/wp-content/uploads/2024/11/ISTQB_CTFL_Syllabus_v4.0.1.pdf)
2. [Atlassian — What are statuses, priorities, and resolutions?](https://support.atlassian.com/jira-cloud-administration/docs/what-are-issue-statuses-priorities-and-resolutions/)
3. [Atlassian — JQL operators](https://support.atlassian.com/jira-software-cloud/docs/jql-operators/)
4. [Atlassian — JQL fields](https://support.atlassian.com/jira-software-cloud/docs/jql-fields/)
5. [Chrome for Developers — Network features reference (HAR eksport)](https://developer.chrome.com/docs/devtools/network/reference)
6. [Linear](https://linear.app/)
7. [JetBrains YouTrack](https://www.jetbrains.com/youtrack/)
8. [GitHub Issues](https://github.com/features/issues)
