Bosh sahifa Wiki Line coverage

Line coverage

Line coveragetest 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