Azimjon Abdurasulov

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

🧪 QA Engineer — Zero to Hero

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
  2. Yaxshi bug report anatomiyasi
  3. Qayta hosil qilish qadamlarini yozish san'ati
  4. Severity va Priority
  5. Bug Life Cycle
  6. Jira'da bug bilan ishlash
  7. Yomon va yaxshi report'lar: 3 juft
  8. Ko'p uchraydigan xatolar
  9. Dasturchilar bilan ishlash
  10. Beqaror (intermittent) bug'larni tergov qilish
  11. Front-end'mi yoki back-end'mi?
  12. Amaliy mashqlar
  13. Xulosa
  14. 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.

TuriMa'nosiDemoBozor misoliOdatda nima qilinadi
Bug (defekt)Xatti-harakat talabga yoki aniq kutilmaga zidBAHOR15 qo'llanganda chegirma 10% bo'ladi (talab: 15%)Bug report
Talabdagi defektTalabning o'zi xato yoki qarama-qarshiBir joyda "yosh 18–65", boshqa joyda "21 yoshdan"Talabga bug yoki savol, PO'ga
Feature requestTalabda yo'q, yangi imkoniyat"Promo-kodni QR orqali skanerlash"Backlog'ga story
EnhancementMavjud funksiyani yaxshilash"Qidiruvda filtrlarni saqlab qolish"Improvement tiketi
Works as designedTalabga mos, garchi kutilmagan bo'lsa ham10% va 15% qo'shilmaydi — kattasi qo'llanadiRejected (WAD); UX savol bo'lsa — PO'ga
False positiveTest noto'g'ri, mahsulot to'g'riEskirgan test case, noto'g'ri test dataTestware'ni tuzatish
DuplicateShu bug allaqachon yozilganIkki tester bir xil Humo xatosini yozdiAsosiysiga 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 elementiJira'daIzoh
Noyob identifikatorKey (DB-2231)Avtomatik
Qisqa mazmunli sarlavhaSummaryEng muhim qator — pastda formula
Sana, tashkilot, muallifCreated, ReporterAvtomatik
Test obyekti va muhitEnvironment, Affects versionBuild, OT, qurilma, brauzer, backend muhiti
KontekstBog'langan test case, storyQaysi test, qaysi texnika, qaysi data
Nosozlik tavsifiDescription: qadamlar, log'lar, dalillarQayta hosil qilish uchun yetarli
Kutilgan va haqiqiy natijaDescriptionAniq raqam va matnlar bilan
SeverityKo'pincha alohida (custom) maydonTa'sir darajasi
PriorityPriorityTuzatish navbati
StatusStatusWorkflow bo'yicha
HavolalarLinked work itemsTest case, story, duplicate

Sarlavha formulasi

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

YomonYaxshi
"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

PlatformaYoziladi
WebBrauzer va versiyasi, OT, ekran o'lchami, til, akkaunt turi
MobilQurilma modeli, OT versiyasi, ilova versiyasi va build raqami, tarmoq (Wi-Fi/4G), til
BackendMuhit (staging/production), API versiyasi, feature flag'lar
Har doimTest 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).
  • Server log'lari — request ID bilan (QA 13).
  • Bazadagi holat — SQL so'rov natijasi (QA 12).

⚠️ 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:

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)
SavolBug tizimga va foydalanuvchiga qanchalik zarar yetkazadi?Uni qachon tuzatamiz?
ISTQB ta'rifiStakeholder manfaatlari yoki talablarga ta'sir darajasiTuzatish ustuvorligi
Kim baholaydiOdatda QA (texnik ta'sir)PO / triage (biznes qarori)
Nimaga qaraydiFunksiya ishlaydimi, ma'lumot yo'qoladimi, aylanma yo'l bormiSeverity + necha foydalanuvchi + biznes muddat + obro' + aylanma yo'l

Severity darajalari

DarajaMa'nosiDemoBozor misoli
BlockerAsosiy ish umuman bajarilmaydi, testlash ham to'xtaydiIlova ochilishi bilan yopiladi (crash)
CriticalMuhim funksiya ishlamaydi yoki ma'lumot/pul yo'qoladiHumo bilan to'lov 500 qaytaradi; savatcha o'z-o'zidan tozalanadi
MajorFunksiya noto'g'ri ishlaydi, lekin aylanma yo'l borPromo 15% o'rniga 10%; qidiruv kirill so'rovni topmaydi
MinorKichik noqulaylik, asosiy oqimga ta'sir yo'qBuyurtmalar tarixida sana dd/mm/yyyy (kutilgan dd.mm.yyyy)
TrivialKosmetik"Biz haqimizda" sahifasida footer 1 px siljigan

Priority darajalari

DarajaMa'nosi
P0Darhol — hotfix, ish to'xtatiladi
P1Shu sprint yoki relizda albatta
P2Keyingi relizda
P3Vaqt 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

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

StatusMa'nosiKim o'tkazadi
NewYangi yozilganQA
Triaged / OpenKo'rib chiqildi: haqiqiy bug, severity va priority belgilandiTriage (PO, Tech Lead, QA)
AssignedDasturchiga biriktirildiTech Lead
In ProgressTuzatilmoqdaDasturchi
Fixed / ResolvedKod tuzatildi (PR merge qilindi)Dasturchi
Ready for QATuzatish test muhitiga deploy qilindi, tekshirishni kutmoqdaDasturchi / CI
VerifiedConfirmation test o'tdiQA
ClosedReliz qilindi yoki yakuniy yopildiQA / PO
ReopenedRetest muvaffaqiyatsiz yoki muammo qaytdiQA
RejectedBug emas (works as designed, noto'g'ri test)Triage
DuplicateMavjud bug'ning takroriTriage
Cannot ReproduceHech kim qayta hosil qila olmadiDasturchi / QA
Deferred / Won't FixTuzatish keyinga qoldirildi yoki umuman tuzatilmaydiPO

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.
  • 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:

project = DB AND issuetype = Bug AND status = "Ready for QA" ORDER BY priority DESC
project = DB AND issuetype = Bug AND resolution is EMPTY AND priority in (Highest, High)
issuetype = Bug AND component = Checkout AND created >= -7d
issuetype = Bug AND fixVersion = "2.0" AND status WAS "Reopened"
issuetype = Bug AND status CHANGED FROM "Ready for QA" TO "Reopened"
issuetype = Bug AND text ~ "Humo" AND assignee = currentUser()

Tushuntirish:

QismMa'nosi
resolution is EMPTYHali hal qilinmagan (ochiq)
priority in (Highest, High)Ro'yxatdagi qiymatlardan biri
created >= -7dOxirgi 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

YOMON:
Promo ishlamayapti!!! Tezroq tuzating, mijozlar shikoyat qiladi
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

YOMON:
Ilova crash bo'ldi rasm qo'shganda
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

YOMON:
API xato qaytaryapti savatchada
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}

XatoNima uchun yomonTo'g'risi
Bitta report'da bir nechta bugBiri tuzalsa, tiketni yopib bo'lmaydiHar bug — alohida tiket, havola bilan
Noaniq sarlavha ("Xato", "Ishlamayapti")Dublikat qidirib bo'lmaydiFormula: qayerda + nima + qachon
Muhit yo'qDasturchi boshqa build'da qidiradiBuild raqami va qurilma doim
Kutilgan natija yo'qBug ekanligi tushunarsizTalabga havola
Hissiyot ("dahshat", "yana buzdingiz")Hamkorlikni buzadiFaqat faktlar
Sababni taxmin qilib sarlavhaga yozishNoto'g'ri yo'lga boshlaydiSimptomni yozing, taxminni izohda
Kontekstsiz screenshotNimaga qarash kerakligi noma'lumBelgilang, qirqing
Shaxsiy ma'lumot ochiqMaxfiylik buziladiMask qiling, test akkaunt ishlating
Dublikat tekshirilmaganJamoa vaqti isrofAvval qidiring
Uzun video, vaqt belgisizHech kim 5 daqiqa ko'rmaydi30–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:

SolishtiringMisol
Build va muhitDasturchi lokal'da, siz staging'da
Ma'lumotSizdagi akkaunt yangi mijoz, unikida — eski
Til va vaqt zonasiKirill interfeysi, Asia/Tashkent
Kesh va holatIlova yangilangan, eski kesh qolgan
Feature flag'larStaging'da yangi flag yoqilgan
Qurilma va OTEski 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:
  3. vaqt — yarim tun, cron job, kun oxiridagi hisob-kitob;
  4. ma'lumot — faqat ma'lum mahsulot yoki promo bilan;
  5. parallellik — ikkita tab, ikkita qurilma, tugmani ikki marta bosish;
  6. tarmoq — sekin internet, uzilish;
  7. holat — ilova uzoq fonda turgandan keyin.
  8. Chastotani oshiring: amalni tsiklda 20 marta takrorlang; Proxyman'ning Network Conditions bilan tarmoqni sekinlashtiring (QA 15); bir vaqtda parallel so'rovlar yuboring.
  9. Doimiy video yozib turing — bug chiqqan lahzani qo'ldan boy bermaslik uchun.
  10. 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), mobilda Proxyman (QA 15):

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

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>

#SeverityPriorityAsos
aCriticalP0Muhim to'lov usuli ishlamaydi, pul oqimi to'xtaydi, production
bTrivial / MinorP0–P1Texnik jihatdan matn; lekin mijozlarni chalg'itadi — huquqiy va obro' riski
cTrivialP3Kosmetik, kam ko'riladigan sahifa
dMinorP2Kosmetik, funksiya ishlaydi; lekin kirill — reliz scope'ida, kechiktirmaslik kerak
eMajorP2Crash, lekin kam ishlatiladi va aylanma yo'l bor
fBlockerP0Hech kim ilovadan foydalana olmaydi
gMajorP1Pul bilan bog'liq, ko'p buyurtmaga ta'sir qiladi; chegara bug'i
hMajorP1–P2Foydalanuvchilarning 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

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>

#StatusIzoh
aRejected (Works as designed)Agar UX chalkash bo'lsa — PO uchun alohida improvement
bDuplicateDB-2100 ga havola; yangi dalillar bo'lsa, asosiy tiketga qo'shiladi
cReady for QARetest navbatida
dReopenedSimptom aynan o'sha bo'lgani uchun yangi tiket emas
eDeferredFix version: 2.1
fVerified → reliz'dan keyin ClosedConfirmation 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>

project = DB AND issuetype = Bug AND assignee = currentUser() AND resolution is EMPTY
project = DB AND issuetype = Bug AND status = "Ready for QA" ORDER BY priority DESC
project = DB AND issuetype = Bug AND fixVersion = "2.0" AND status WAS "Reopened"
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>

#TasnifIzoh
aWorks as designed"Kattasi qo'llanadi": 10% > 5%. UX savol: foydalanuvchiga promo nega ishlamaganini tushuntirish kerakmi?
bTalabdagi defektTalab va maket qarama-qarshi — PO'ga savol, talab tuzatilishi kerak
cFeature requestBacklog'ga story
dFalse positiveTest case eskirgan — testware'ni tuzatish
eBug500 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

Manbalar {#manbalar}

  1. ISTQB — Certified Tester Foundation Level Syllabus v4.0.1 (PDF)
  2. Atlassian — What are statuses, priorities, and resolutions?
  3. Atlassian — JQL operators
  4. Atlassian — JQL fields
  5. Chrome for Developers — Network features reference (HAR eksport)
  6. Linear
  7. JetBrains YouTrack
  8. GitHub Issues

Markdown manba

iOS Lessons