Code coverage — testlar bajarilganda dastur kodining qaysi qismlari ishga tushganini o‘lchaydigan ko‘rsatkichlar oilasi. U line, statement, branch, condition va function darajasida hisoblanishi mumkin. Yuqori coverage test sifati yoki xatosizlikni isbotlamaydi; u tekshirilmagan kod hududlarini ko‘rsatadigan strukturaviy signal hisoblanadi.
O‘lchov turlari
Line coverage bajarilgan source qatorlari ulushini, function coverage chaqirilgan funksiyalarni o‘lchaydi. Branch coverage if, case yoki shartli o‘tishning har yo‘li bajarilganini tekshiradi. Condition coverage murakkab mantiqdagi individual boolean operandlarni alohida ko‘radi.
| Ko‘rsatkich | Savol |
|---|---|
| Line coverage | Qaysi executable qatorlar ishladi |
| Function coverage | Qaysi funksiyalar chaqirildi |
| Branch coverage | Har qaror yo‘li bajarildimi |
| Condition coverage | Har boolean qism true va false bo‘ldimi |
Bir line’da bir nechta statement yoki branch bo‘lishi mumkin. Shu sabab 100% line coverage branchlarning barchasi tekshirilganini anglatmaydi.
Instrumentation
Coverage tool compile vaqtida yoki runtime’da kodga counter qo‘shadi. Har instrumented nuqta bajarilganda counter yangilanadi. Binary instrumentation source o‘zgartirmasdan instruction yoki branchni kuzatishi mumkin. Interpreter esa trace hook orqali qatorlarni yozadi.
Instrumentation ishlash tezligi va timing’ga ta’sir qiladi. Concurrency yoki real-time test instrumented rejimda boshqacha xatti-harakat ko‘rsatishi mumkin. Coverage run odatiy test natijasi bilan solishtiriladi, lekin performance benchmark undan alohida bajariladi.
Hisoblash chegarasi
Generated code, vendor dependency, migration va test helper coverage denominatoriga kiritilsa raqam ma’nosi buziladi. Scope production source va jamoa boshqaradigan kodga mos belgilanadi. Exclusion annotation faqat real bajarib bo‘lmaydigan yoki mexanik kod uchun review bilan qo‘llanadi.
Multi-process va parallel testlarda har worker coverage fayli yaratadi, keyin ular bir xil source mapping asosida birlashtiriladi. Container pathlari farq qilsa bir fayl ikki manba sifatida ko‘rinishi mumkin. Build ID va path normalization muhim.
Source map va optimizatsiya
Transpiled TypeScript, minified JavaScript yoki generated bytecode coverage’ini original source’ga qaytarish uchun source map kerak. Noto‘g‘ri map qatorni xato belgilaydi. Compiler optimizatsiyasi statementlarni birlashtirib yoki olib tashlab, source-level natijaga ta’sir qilishi mumkin.
Template va macro’larda bitta source qatori ko‘p generated branch hosil qilishi mumkin. Toolning coverage semantikasi til va compilerga bog‘liq; turli vosita foizlarini to‘g‘ridan-to‘g‘ri solishtirish har doim to‘g‘ri emas.
Threshold
Coverage threshold buildni minimal foizdan past bo‘lsa yiqitadi. Global threshold yangi kichik fayldagi 0% coverage’ni katta legacy codebase raqami ichida yashirishi mumkin. Changed-lines yoki per-module threshold yangi kodga aniqroq ta’sir qiladi.
Foizni quvish ma’nosiz testlar yaratishi mumkin: qator bajariladi, ammo natija assertion qilinmaydi. Threshold quality gate’lardan biri bo‘lib, mutation testing, review va defect signal bilan birga ishlatiladi.
Talqin
Coverage “qaysi kod bajarildi” deydi, “to‘g‘ri tekshirildi” demaydi. Test functionni chaqirib, hech narsa assertion qilmasa ham qatorlar covered bo‘ladi. Noto‘g‘ri requirementni tasdiqlagan test ham coverage’ni oshiradi.
Uncovered xavfsizlik branchi, error handling yoki financial calculation kichik foiz bo‘lsa ham muhim. Risk asosidagi review raw foizdan ustun. Coverage heatmap test strategiyasidagi bo‘shliqni topishga yordam beradi.
Tarix va diff
Commitlar bo‘yicha trend keskin pasayishni ko‘rsatadi, ammo refactoring denominatorni o‘zgartirishi mumkin. Absolute covered/uncovered line soni va diff coverage bilan birga qaraladi. Report test suite va build artefaktiga bog‘lanib reproducible bo‘ladi.
Bog‘liq tushunchalar
Line coverage, Branch coverage, Condition coverage, Function coverage, Instrumentation, Coverage threshold, Mutation testing