Coverage threshold — code coverage ko‘rsatkichi belgilangan minimal darajadan past bo‘lsa test yoki CI bosqichini muvaffaqiyatsiz deb belgilaydigan sifat darvozasi. Threshold line, branch, function yoki condition coverage uchun global, modul, fayl yoki o‘zgargan kod kesimida qo‘yilishi mumkin. Uning vazifasi qamrovning sezdirmasdan pasayishini cheklashdir.
Threshold shakllari
Global threshold butun codebase foizini tekshiradi. Per-file yoki per-package threshold past qamrovli yangi modulning katta repository o‘rtachasi ichida yashirinishini kamaytiradi. Diff coverage faqat pull requestda qo‘shilgan va o‘zgartirilgan executable qatorlarga qaraydi.
| Shakl | Kuchli tomoni | Cheklovi |
|---|---|---|
| Global | Soddalik va umumiy trend | Legacy massasi yangi bo‘shliqni yashiradi |
| Per-module | Owner va riskka mos | Sozlash ko‘proq |
| Per-file | Aniq lokal gate | Kichik generated faylda shovqin |
| Diff coverage | Yangi kodni nazorat qiladi | Eski xavfli kodni tuzatmaydi |
Foizga qo‘shimcha “uncovered line soni oshmasin” kabi ratchet siyosati ishlatilishi mumkin.
Tanlash mezoni
Threshold tasodifiy 100% qilib qo‘yilmaydi. Joriy baseline, kod turi, testlash narxi va xavf hisobga olinadi. Financial calculation yoki authorization moduli umumiy UI glue kodidan yuqoriroq branch talabiga ega bo‘lishi mumkin.
Juda past darvoza signal bermaydi. Juda yuqori darvoza esa ma’nosiz getter testlari, exclusion va coverage gamingni rag‘batlantirishi mumkin. Maqsad raqamning o‘zi emas, muhim xatti-harakatlarning tekshirilishini saqlashdir.
CI ishlashi
Coverage report standard formatda yaratiladi va threshold checker shu artefaktni o‘qiydi. Test shardlar parallel bo‘lsa avval barcha raw natija birlashtiriladi; har shardga alohida 80% talab qo‘yish noto‘g‘ri, chunki shard source’ning faqat qismini bajaradi.
Build path va source map bir xil bo‘lmasa merge qatorlarni takrorlaydi. Thresholddan oldin report validligi, testlarning o‘zi o‘tganligi va expected source soni tekshiriladi. Bo‘sh reportni 100% deb talqin qilish xavfli.
Yangi kod va ratchet
Legacy loyiha 45% coverage bilan birdan 80%ga chiqolmasligi mumkin. Ratchet joriy darajani pastlatmaslik va yangi kod uchun masalan 80% diff coverage talab qilish orqali bosqichma-bosqich yaxshilaydi. Baseline o‘zgarsa review va sabab kerak.
Refactoring qator soni va mappingni o‘zgartirib foizni kutilmagan ko‘tarishi yoki tushirishi mumkin. Trend absolute covered/uncovered son va branch bilan birga qaraladi.
Exclusion boshqaruvi
Generated code, platformaga xos unreachable block yoki defensive assertion exclude qilinishi mumkin. Har exclusion source’da ko‘rinadi va review qilinadi. “Thresholddan o‘tish” uchun biznes error handlingni chiqarish gate ma’nosini buzadi.
Configuration file exclusion patternlari versiyalanadi. Pattern juda keng bo‘lsa butun package reportdan yo‘qolishi mumkin. CI kutilgan fayllar sonini tekshirishi bu xatoni topadi.
Cheklovlar
80% coverage 80% talab tekshirildi degani emas. Qator assertion’siz bajarilishi mumkin, noto‘g‘ri expected esa xatoni tasdiqlaydi. Threshold mutation score, test failure tarixi, review va risk tahlili bilan to‘ldiriladi.
Coverage pasayishi har doim sifat pasayishi emas: redundant covered kod o‘chirilsa denominator o‘zgaradi. Gate failure review boshlash uchun signal, avtomatik semantik hukm emas.
Governance
Thresholdni o‘zgartirish oddiy feature commit ichida yashirilmaydi. Owner tasdig‘i, sabab va muddatli istisno yoziladi. Temporary waiver expiry bilan tugaydi; aks holda darvoza doimiy chetlab o‘tiladi.
Dashboard global va diff coverage, threshold breach hamda exclusion trendini ko‘rsatadi. Jamoa faqat foizni emas, qaysi kritik modul uncovered ekanini ko‘radi.
Bog‘liq tushunchalar
Code coverage, Line coverage, Branch coverage, Diff coverage, Continuous integration, Quality gate, Mutation testing