Bosh sahifa Wiki Code coverage

Code coverage

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