Bosh sahifa Wiki Coverage

Coverage

Coverage — testlar dastur kodining qaysi qismi bajarilganini o‘lchaydigan ko‘rsatkichlar to‘plami. Ko‘pincha code coverage deb ataladi. Coverage testlar mavjudligini ko‘rsatadi, ammo testlarning sifati yoki to‘g‘ri assertion yozilganini avtomatik isbotlamaydi.

Masalan, kod qatori test vaqtida bajarilgan bo‘lishi mumkin, lekin natija umuman tekshirilmagan bo‘lsa ham line coverage oshadi.

Line coverage

Test bajarilishida source kod qatorlarining qanchasi ishlaganini ko‘rsatadi.

Formula soddalashtirib:

bajarilgan qatorlar / instrument qilingan qatorlar

Comment, bo‘sh qator va ayrim declarationlar hisobga olinmasligi mumkin.

Toollar bir xil source uchun boshqa natija berishi ehtimoli bor.

Statement coverage

Dastur statementlarining qanchasi bajarilganini o‘lchaydi.

Bir qatorda bir nechta statement bo‘lsa line coverage va statement coverage farq qilishi mumkin.

Minified yoki generated kodda mapping source mapga bog‘liq.

Branch coverage

Shartning barcha yo‘nalishlari bajarilganini tekshiradi.

Masalan:

if active:
    allow
else:
    deny

Line’lar bajarilgan bo‘lsa ham else yo‘li tekshirilmagan bo‘lishi mumkin.

Branch coverage buni ko‘rsatadi.

Condition coverage

Murakkab boolean expression ichidagi har alohida shart true va false bo‘lganini o‘lchaydi.

Masalan:

if is_admin or is_owner

Umumiy branch true va false bo‘lsa ham is_ownerning alohida ta’siri test qilinmagan bo‘lishi mumkin.

Function coverage

Function yoki methodlarning qanchasi kamida bir marta chaqirilganini ko‘rsatadi.

Function ichidagi barcha branchlar test qilinganini anglatmaydi.

Faqat chaqirish uning natijasi to‘g‘ri tekshirilganini ham bildirmaydi.

Path coverage

Programmadagi mumkin bo‘lgan control-flow yo‘llarni qamrashga intiladi.

Loop va ko‘p shartlar sabab yo‘llar soni juda tez ko‘payadi.

To‘liq path coverage ko‘p real dasturda amaliy emas.

Muhim va xavfli yo‘llar tanlab test qilinadi.

Instrumentation

Coverage tool kodga counter yoki hook qo‘shadi.

Test vaqtida qaysi qator va branch bajarilgani yoziladi.

Instrumentation performance’ni sekinlashtirishi mumkin.

Release binary coverage build bilan aynan bir xil bo‘lmasligi ehtimoli bor.

Source map

Transpiled TypeScript, Kotlin, minified JavaScript yoki generated code original source’ga map qilinadi.

Source map noto‘g‘ri bo‘lsa coverage noto‘g‘ri qatorga yoziladi.

Generated fayllarni reportdan chiqarish mumkin.

Coverage report

Report odatda:

ni ko‘rsatadi.

HTML report developerga qizil-yashil belgilangan source ko‘rsatishi mumkin.

Threshold

CI minimal coverage talabini belgilashi mumkin:

line >= 80%
branch >= 70%

Threshold regressiyani oldini oladi.

Ammo jamoa faqat raqamni ko‘tarish uchun ma’nosiz test yozmasligi kerak.

Muhim modul uchun yuqoriroq talab bo‘lishi mumkin.

Global va diff coverage

Global coverage butun repository’ni o‘lchaydi.

Legacy projectda uni tez oshirish qiyin.

Diff coverage faqat yangi yoki o‘zgargan qatorlarning qamrovini tekshiradi.

Bu yangi code sifati pasaymasligini ta’minlashga yordam beradi.

100 foiz coverage

100% line coverage barcha buglar topilganini anglatmaydi.

Quyidagilar hali mavjud bo‘lishi mumkin:

Coverage — signal, yakuniy maqsad emas.

False confidence

Test methodni chaqiradi, lekin assert true bilan tugaydi.

Coverage yuqori, foyda past.

Mutation testing koddagi shartni ataylab o‘zgartirib, test bu xatoni topadimi, tekshiradi.

Bu coverage sifatini kuchliroq baholaydi.

Qoplanmagan kod

Har uncovered qator bir xil muhim emas.

Misollar:

  • error handling;
  • rare branch;
  • defensive code;
  • platform-specific code;
  • generated code;
  • unreachable code.

Error branch ko‘pincha kam ishlaydi, ammo juda muhim.

Exclusion

Generated file, migration yoki platform shim coverage’dan chiqarilishi mumkin.

Exclusion aniq sabab bilan configurationda yoziladi.

Test qilish qiyin kodni shunchaki exclude qilish coverage’ni sun’iy yaxshilaydi.

Integration coverage

Unit test coverage faqat bir test turiga tegishli bo‘lishi mumkin.

Integration va E2E test natijalari bilan merge qilinsa kengroq ko‘rinish olinadi.

Turli process va containerlardan coverage file yig‘ish qo‘shimcha konfiguratsiya talab qiladi.

Backend service

Request service ichidagi ko‘p qatorni bajaradi.

Ammo external database yoki queue boshqa processda bo‘lsa ularning coverage’i alohida yig‘iladi.

Subprocess shutdowndan oldin coverage data diskka yozilishi kerak.

Frontend coverage

Browser test JavaScript bundle’ni instrument qilishi mumkin.

Lazy chunk ochilmasa uning qatorlari qoplanmaydi.

Source map original TypeScript yoki component fayliga report beradi.

Browser extension va third-party scriptlar chiqarib tashlanadi.

Trend

Coverage bir martalik raqam emas, vaqt bo‘yicha trend sifatida ko‘riladi.

Yangi feature bilan branch coverage pasaysa review talab qilinadi.

Foiz o‘zgarmasa ham muhim module qoplanmagan bo‘lishi mumkin.

Directory va risk bo‘yicha report foydali.

Test dizayni

Coverage report test yozish uchun xarita beradi, ammo qaysi behaviorni tekshirish kerakligini requirements va risk belgilaydi.

Avval business rule, boundary va failure mode aniqlanadi.

Keyin coverage qolgan ko‘r nuqtalarni topishga yordam beradi.

Mutation score

Mutation testing operatorni almashtirish, shartni teskarilash yoki return qiymatini o‘zgartirish kabi sun’iy xatolar kiritadi. Test shu mutantni yiqitsa u “o‘ldirilgan” hisoblanadi. Yuqori line coverage, ammo past mutation score assertionlar kuchsizligini ko‘rsatishi mumkin.

Risk bo‘yicha coverage

Authentication, payment va migration kabi kritik module uchun branch coverage maqsadi yuqoriroq bo‘lishi mumkin. Generated UI wrapper yoki trivial mapping uchun bir xil talab qo‘yish resursni noto‘g‘ri taqsimlaydi.

Bog‘liq tushunchalar

Code coverage, Line coverage, Branch coverage, Condition coverage, Function coverage, Instrumentation, Coverage threshold, Mutation testing, Test quality, CI