Function coverage — test bajarilishi davomida dasturdagi funksiyalar yoki metodlarning nechta qismi kamida bir marta chaqirilganini ko‘rsatadigan code coverage o‘lchovi. U odatda chaqirilgan funksiyalar / jami instrumented funksiyalar nisbatida ifodalanadi. Funksiya chaqirilgani uning ichidagi barcha yo‘l yoki natijalar tekshirilganini anglatmaydi.
Hisoblash birligi
Coverage tool tilga qarab function declaration, method, constructor, lambda yoki closure’ni alohida birlik deb hisoblaydi. Compiler yaratgan synthetic methodlar denominatorga kirishi ham mumkin. Shu sabab turli tool bergan foizlar bir xil source uchun farq qilishi ehtimol.
| Birlik | Odatdagi talqin |
|---|---|
| Named function | Birinchi instruction bajarilganda covered |
| Method | Instance yoki static chaqiruvda covered |
| Constructor | Obyekt yaratilganda covered |
| Lambda/closure | Tanasiga control kirganda covered |
| Getter/setter | Property o‘qish yoki yozishda covered |
Function faqat reference sifatida olinsa, ammo chaqirilmasa covered hisoblanmasligi kerak. Instrumentation semantikasi vosita hujjatida aniqlanadi.
Line coverage bilan bog‘lanishi
Funksiyaning birinchi qatori bajarilsa function coverage oshadi, lekin ichidagi if, error handling va loop ishlamasligi mumkin. Aksincha, generated wrapper uncovered bo‘lib function foizini tushirsa ham asosiy biznes kodining line coverage’i yuqori bo‘lishi mumkin.
Function coverage katta modulda umuman chaqirilmaydigan API yoki dead code’ni tez topadi. Keyin branch va condition report o‘sha funksiya ichidagi qamrov chuqurligini ko‘rsatadi.
Callback va event handler
Callback ro‘yxatdan o‘tkazilishi uning bajarilganini bildirmaydi. UI click handler, signal handler yoki queue consumer testda haqiqiy event bilan chaqirilishi kerak. Faqat registration kodi covered, callback esa uncovered bo‘lishi mumkin.
Async funksiya obyektini yaratish yoki coroutine qaytarish tanani to‘liq bajarmasligi mumkin. Uni await qilish, event loopni yuritish va kerakli state transitionni assertion qilish zarur.
Overload va polymorphism
Overloaded funksiyalar compilerda alohida signature yoki bitta dispatch body sifatida namoyon bo‘lishi mumkin. Interface method chaqirilganda faqat tanlangan concrete implementation covered bo‘ladi. Boshqa implementationlar alohida test talab qiladi.
Dynamic dispatchda coverage qaysi class methodi ishlaganini ko‘rsatadi. Faqat umumiy interface test barcha plugin yoki strategy variantini qamramaydi.
Generated va trivial funksiyalar
Data class getterlari, serializer generatori yoki framework proxy’lari ko‘p funksiya yaratishi mumkin. Ularni denominatorga kiritish biznes signalini suyultiradi. Scope build output emas, jamoa boshqaradigan source mapping asosida sozlanadi.
Trivial funksiya ham security yoki mapping contracti uchun muhim bo‘lishi mumkin. Exclusion avtomatik “kichik” degan mezon bilan emas, code generation va risk asosida qilinadi.
Threshold va diff
Global function threshold yangi qo‘shilgan, hech qachon chaqirilmaydigan funksiyani katta repository ichida yashirishi mumkin. Changed-function coverage pull requestdagi yangi yoki o‘zgargan funksiyalarni tekshiradi. Public API va kritik handlerlar uchun alohida gate bo‘lishi mumkin.
Foizni oshirish uchun funksiyani faqat chaqirib, natijani tekshirmaslik ma’nosiz. Test observable behavior va side effectni assertion qiladi. Mutation testing funksiya ichidagi o‘zgarish test tomonidan seziladimi, degan savolga javob beradi.
Dead code tahlili
Uzoq vaqt davomida hech bir test va production profilingda chaqirilmagan funksiya dead code bo‘lishi mumkin. Coverage yolg‘iz bu xulosani bermaydi: platformaga xos, emergency yoki plugin orqali chaqiriladigan kod test run’da ishlamasligi mumkin. Static call graph va runtime telemetry bilan birga tekshiriladi.
Bog‘liq tushunchalar
Code coverage, Line coverage, Branch coverage, Instrumentation, Dead code, Callback, Mutation testing