Line coverage — test bajarilishi davomida executable source qatorlarining nechta qismi kamida bir marta ishlaganini ko‘rsatadigan code coverage o‘lchovi. Odatda bajarilgan qatorlar / jami executable qatorlar × 100% ko‘rinishida hisoblanadi. Comment, bo‘sh qator va faqat deklarativ metadata ko‘pincha denominatorga kirmaydi.
Qatorning bajarilishi
Coverage engine source qatorni instruction yoki trace event bilan bog‘laydi. Shu qatordagi biror instruction bajarilsa qator covered deb belgilanishi mumkin. Bitta qatorda ikki alohida amal bo‘lsa ulardan faqat biri ishlagan holatda ham butun qator yashil ko‘rinishi ehtimol.
if user.is_active: grant_access(); audit_login()
Bu shaklda qaysi statement bajarilgani line reportda noaniq bo‘lishi mumkin. Kodni alohida qatorlarga ajratish o‘qilish va o‘lchashni yaxshilaydi, ammo branch semantikasini baribir branch coverage tekshiradi.
Hisoblash misoli
Funksiyada sakkiz executable qator bo‘lib, test oltitasini bajarsa line coverage 75% bo‘ladi. else ichidagi ikki qator ishlamagan bo‘lsa report ularni uncovered sifatida ko‘rsatadi. Foiz qaysi ikki qator ekani haqidagi ma’noni bermaydi; heatmap va source report zarur.
| Report elementi | Mazmuni |
|---|---|
| Covered line | Kamida bir marta bajarilgan |
| Uncovered line | Hech bir testda bajarilmagan |
| Partial line | Qatorning ayrim branchlari bajarilgan |
| Non-executable | Hisobga kiritilmaydi |
Partial belgi tool branch mappingni qo‘llasa paydo bo‘ladi.
Line va branch farqi
return a if condition else b qatori ikki yo‘lga ega. Faqat condition=True test qilinsa qator covered, ammo false branch tekshirilmagan. 100% line coverage shuning uchun 100% branch coverage’dan kuchsizroq bo‘lishi mumkin.
Short-circuit a and b ifodasida a=False bo‘lsa b baholanmaydi. Qator bajarilgan ko‘rinsa ham ikkinchi condition ta’siri sinalmagan. Condition coverage individual operand qiymatlarini ko‘radi.
Source mapping
Compiler bir source qatorni ko‘p bytecode instructionga, bir instructionni esa boshqa qatorga bog‘lashi mumkin. Multi-line expression, decorator, lambda va generated code reportda kutilmagan belgi beradi. Tilga xos coverage tool mapping qoidasini hujjatlashtiradi.
Transpiled til uchun source map original fayl va generated JavaScript orasidagi aloqani beradi. Eskirgan map coverage’ni noto‘g‘ri qatorga qo‘yadi. Aynan test qilingan buildga tegishli map ishlatiladi.
Exclusion
Platformaga bog‘liq branch, defensive unreachable yoki generated getter exclusion qilinishi mumkin. Exclusion directive haddan tashqari ishlatilsa ko‘rsatkich sun’iy yaxshilanadi. Nega qator test qilib bo‘lmasligi review’da ko‘rinadi.
Error handlingni “kam yuz beradi” deb chiqarish to‘g‘ri emas; aynan shu qatorlar production incidentda kritik bo‘lishi mumkin. Fault injection ularni bajarishga yordam beradi.
CI qo‘llanishi
Global line threshold legacy code uchun bazaviy nazorat beradi. Diff line coverage pull requestda qo‘shilgan yoki o‘zgargan executable qatorlarni tekshiradi. Bu eski katta modul yangi test bo‘shlig‘ini yashirishini kamaytiradi.
Faqat foiz uchun test yozilmaydi. Test qatorni bajarish bilan birga observable behavior’ni assertion qiladi. Mutation testing covered qatorning natijasi haqiqatan testga ta’sir qiladimi, degan kuchliroq savolni beradi.
Reportni talqin qilish
Uncovered constructor yoki trivial mapping past risk bo‘lishi, covered permission check esa kuchsiz assertion bilan xato qolishi mumkin. Risk, murakkablik va defect tarixiga qarab test ustuvorligi belgilanadi. Line coverage navigatsiya xaritasi, yakuniy sifat bahosi emas.
Bog‘liq tushunchalar
Code coverage, Branch coverage, Statement coverage, Condition coverage, Source map, Coverage threshold, Mutation testing