GH GambleHub

Yadro sinovi strategiyasi

1) Qonunning

Piramida-kubok balansi. Baza - tezkor modul va kontrakt testlari; yuqorida - komponent va integratsiya; yuqorida - minimal, ammo qimmatli e2e qatlami.
Shift-left. Nuqsonni qanchalik tez tutsak (linter, statik tahlil, property-based), shunchalik arzon bo’ladi.
Deterministic by design. Vaqtni, tarmoqni, randomni va tashqi qaramlikni boshqaramiz.
Sifat iqtisodiyoti. Har qanday test - bu «sug’urta»: maqsad - jami xarajatlarni kamaytirish (nuqsonlar + testlarni kuzatib borish).
Tavakkalchilikka yo’naltirilganlik. Qoplama biznes-invariantlar va protokollarga (kontraktlar, idempotentlik, konsistentlik) jamlanadi.

2) Test sinovlari darajalari va javobgarlik zonalari

2. 1 Unit (modulli)

Sof mantiqni I/Osiz tekshirish.
Biz faqat chegaralarni (port/adapter) yuvamiz, ma’lumotlar uchun fabrikalardan foydalanamiz.
Tezkor (50-100 ms/test ≤), parallel.

2. 2 Contract (isteʼmolchi yetkazib beruvchi)

Xizmatlar o’rtasida API-shartnomalar (HTTP/gRPC/event) tuziladi.
Biz consumer-driven yondashuvidan foydalanamiz: shartnomalar VCSda saqlanadi, etkazib beruvchining CIda tekshiriladi.
Integratsiyalashgan e2e ning zaifligini kamaytiradi.

2. 3 Component (modul ustida, haqiqiy saqlash bilan)

Ushbu xizmatning bir qismini konteynerda haqiqiy DB/kesh bilan ishga tushirilmoqda (Testcontainers).
Sxemalar migratsiyasi, indekslar, tranzaksiyalar, blokirovkalarni tasdiqlaymiz.

2. 4 Integration/System (xizmatlar orasidagi uzluksiz yo’llar)

Izolyatsiya qilingan muhitda xizmatlar to’plamini ko’taramiz.
Biz tranzaksion, retraj, idempotent, xatolarga ishlov berish kabi invariantlarni tekshiramiz.

2. 5 E2E (eng kam «qimmatli» qatlam)

Haqiqiy protokollar va atrof-muhit «prodda bo’lgani kabi», lekin cheklangan ssenariy to’plami: to’lov → tasdiqlash → o’tkazish; ro’yxatdan o’tish → tekshirish → kirish.
Biz relizlar va regressiyalarni chiqarish uchun yuqori tavakkalchilikni qo’llaymiz.

3) Xamirpigodli arxitektura

Portlar/adapterlar (Hexagonal). Biznes yadro HTTP/SQL haqida bilmaydi; o’zaro bog’liqlik interfeyslar orqali joriy etiladi.
Vaqt/random in’eksiyasi. «Clock», «Random» - qaramlik; testlarda qayd etamiz.
Konfiguratsiya qilinadigan I/O qisqartmasi. Navbatlar, DB, KMS - test amalga oshirilgan interfeyslar orqali.
Funksional invariantlar. Biz post-shartlar va predikatlarni aniq shakllantiramiz - ularni sinab ko’rish va kuzatish osonroq.

4) Testlar uchun ma’lumotlar

Statik JSON-fikstura o’rniga fabrikalar/bilderlar: kamroq mo’rt.
Test oldidan idempotent sidlar va reset-xuk DB (migrations → truncate → seed).
Keys kataloglari: «normalar», «chetlar», «xatolar», «xaos».
Haqiqiy PD o’rniga sintetika: generatorlar, niqoblash, maxfiylik profillari.

5) Raqobat va idempotentlik

Poyga testlari (race): raqobat yozuvlari/zaxiralar/blokirovkalar.
Idempotent kalitlarni tekshirish (masalan,’(operation, external_id)’): takroriy chaqiruvlar holatni oʻzgartirmaydi.
Retray va taymautlar: vaqtinchalik xatolarda toʻgʻrilikni kafolatlaymiz.

Psevdokod (idempotentlik):

dedupe_key = hash(op + external_id)
if exists(executions, dedupe_key): return previous_result else:
reserve(dedupe_key)
result = do_operation()
store(executions, dedupe_key, result)
return result

6) Vaqt, taymautlar, vaqt mintaqalari

Barcha saqlanadigan vaqtlar - UTC; testlarda’FixedClock’dan foydalaning.
DST-keyslarni (dubl/soat o’tkazib yuborish), «mahalliy kun» oynalarini sinovdan o’tkazamiz.
Taymautlarni monotonik soatlar bilan tekshiramiz; NTP tebranishini simulyatsiya qiling.

7) Barqarorlik va tartibsizlik

Fault-injection: tarmoq xatolari, 5xx, kechikishlar, qisman degradatsiya (kesh mavjud emas).
Pre-prod muhitidagi Chaos-testlar: uzilishlar, navbatlarning ortiqcha yuklanishi, BGP/Anycast uzilishlari (emulyatsiya).
Fallback siyosati va UX degradatsiyasi: testlar to’g’ri «graceful degradation» ni tasdiqlashi kerak.

8) Unumdorlik

Kritik algoritmlar uchun mikro-benchmarklar (CPU/alloc bilan).
Yuklash profillari: baseline (p50/p95), stress (cho’qqi), uzatilgan (soak) xotira oqishi uchun.
Regress-geytlar: agar p95 latentlik bazeline> X% dan yomonroq boʻlsa, build muvaffaqiyatsiz tugaydi.

9) Xavfsizlik va muvofiqlik

SAST/Lint: zaiflik/antipatternlarni qidirish.
DAST/IAST: stenddagi bazaviy ssenariylar (XSS/SQLi/SSRF-namunalar).
Secrets-scan: kod va artefaktlarda kalitlar/parollar mavjud emas.
Privacy-testlar: loglarda/trassalarda PD yo’qligi, «kelishuvlarni boshqarish» ga rioya qilish, tushirish uchun anonimlashtirish profillari.

10) Sifat metrikasi va SLO

Test pass rate va flaky index (beqaror testlar soni/hafta).

Coverage-maqsadli:
  • 90-100% kritik yadro modullari uchun,
  • 70-80% periferiya uchun (invariantlarga e’tibor qaratgan holda).
  • Release risk score: jami: tanqidiy fayllardagi o’zgarishlar × benchmarklarning pasayishi × yangi flaky.
  • Noto’g "ri budjet: tajribalar va relizlar chastotasi bilan prod-SLO (aptaym/xatolar) bog’lamasi.

11) CI/CD va geytlar

Bosqichlar matritsasi:

1. Lint/Format/TypeCheck

2. Unit + Property-based

3. Contract provider/consumer

4. Component (Testcontainers)

5. Integration + Perf smoke

6. Security (SAST/Secrets)

7. Build/Package + SBOM

8. Deploy to pre-prod + e2e + chaos smoke

Geytlar: shartnomalarning pasayishi, yashirlikning o’sishi, yangi tanqidiy zaifliklar.

Kesh va sharding: pipelinni parallelizm va inkremental progonlar hisobiga tezlashtiramiz (oʻzgartirilgan modullar boʻyicha).

12) Flaky-testlar: aniqlash va davolash

Avtopovtor + kvorum (2/3 progon).
Flake-pattern detektori: vaqtga/randomga/noaniq kutishlarga bog’liqlik.
SLA bilan karantin: test relizlarni to’sib qo’ymaydi, lekin N kunda tuzatilishi/qayta yozilishi shart.
Kritik yo’lning «yadrosi» dagi flakaga nisbatan nol bag’rikenglik.

13) Property-based, mutatsion va fazz-test

Property-based: xossalarni (kommutativlik, idempotentlik, monotonlik), chegara ma’lumotlari generatorlarini shakllantiramiz.
Mutation testing: testlarning «kuchini» o’lchaymiz (ular kiritilgan mutatsiyalarni o’ldiradimi).
Fuzzing: protokollar/parserlar/formatlar (JSON, Protobuf, CSV), ayniqsa xavfsizlik chegaralarida.

Xossaga misol (psevdokod):

prop "serialize/deserialize roundtrip":
forAll(randomModel()):
decode(encode(model)) == model

14) Kuzatuvchanlik va testlar bilan aloqa

Test trasterlari (loglarda trace-id): pre-prodga takrorlash qulay.
Metrik snapshotlar spektakl-progonda artefakt sifatida saqlanadi.
Loglarni nazorat qilish: sezgir maydonlarning yo’qligi, SLO doirasidagi loglarning o’lchami.

15) Hujjatlar va tartib-taomillar

Test Handbook: qayerda testlarni boshlash, fabrikalarni qanday yozish, shartnomalarni qanday yangilash kerak.
Runbooks: hodisani takrorlash, tezkor diagnostika, relizni qaytarish.
Invariantlar katalogi: tizim kafolatlari va tegishli test/alertlarga havolalar ro’yxati.

16) Arxitektorning chek-varaqasi

1. Yadro invariantlari va tanqidiy yo’llar tasvirlanganmi?
2. Test darajalari matritsasi va ularning SLO (vaqt, barqarorlik) bormi?
3. Kontraktlar yetkazib beruvchi va iste’molchida CIda versiyalashtiriladimi va tasdiqlanadimi?
4. Vaqt/rand/tarmoq testlarda (FixedClock, Fault-injector) boshqariladimi?
5. Testcontainers/izolyatsiya qilingan DB moslashtirildi, migratsiyalar tekshirilyaptimi?
6. Regressiya uchun spektakl-bazlayn va geyt bormi?
7. SAST/Secrets-scan va privacy-log tekshiruvi yoqilganmi?
8. Flaky hisobi olib borilyaptimi va tuzatish uchun SLA bormi?
9. Testlarning prod-SLO va noto’g’ri byudjet bilan aloqasi shaffof tarzda rasmiylashtirilganmi?
10. Runbook’va invariantlar katalogi hujjatlashtirilganmi?

Xulosa

Yadrosni sinovdan o’tkazish strategiyasi asboblar ro’yxati emas, balki arxitektura qobiliyati: testga yaroqli dizayn, qat’iy darajadagi ierarxiya, boshqariladigan ma’lumotlar, muvaffaqiyatsizlikka chidamlilik va CI/CD o’rnatilgan metriklar. Ta’riflangan amaliyotlar asosida jamoa tezkor va ishonchli fikr-mulohazalarga ega bo’ladi va relizlar oldindan aytib bo’ladigan va xavfsiz bo’ladi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.