Code Coverage mobil ishlab chiqishda: bu nima, koʻre Satkichlar va qanday ölchash

Muallif: IT Sectr Nashr etilgan: 2026-04-09 O'qish vaqti: 9 daq

Code Coverage (kod qamrovi) — testlash vaqtida dasturning manba kodining necha foizi bajarilishini koʻre Satadigan koʻre Satkichdir. Testlar sifatini aniqlashga, tekshirilmagan hududlarni topishga va yangi testlar yozish ustuvorligini belgilashga yordam beradi. Atlassian, 2025 maʻlumotlariga koʻre, optimal qamrov darajasi 70–80% ni tashkil qiladi — bu chegaradan yuqori test xarajatlari foydadan oshib keta boshlaydi.

Asosiy maʻlumotlar

  • Code Coverage — testlar tomonidan bajarilgan kod foizini ölchaydigan koʻre Satkich
  • Qamrov koʻre Satkichlari qator (line), shaxobcha (branch), funksiya, shart va yoʻre llarni oʻrz ichiga oladi
  • Vositalar: Android uchun JaCoCo, iOS uchun XCCov, kod tahlili uchun SonarQube
  • Maqsadli qamrov 70–80% — sifat va test xarajatlari oʻrrtasidagi muvozanat
  • CI/CD integratsiyasi qamrov chegaradan pastga tushganda yigʻmalarni bloklash imkonini beradi

Code Coverage nima

Code Coverage (kod qamrovi) — testlar davomida dastur manba kodining qaysi qismi bajarilganligini aniqlaydigan miqdoriy koʻre Satkichdir. Foizlarda ifodalanadi va bajarilgan qatorlar/shaxobchalar sonining umumiy songa nisbati sifatida hisoblanadi. Yuqori qamrov xatolarning yoʻqligini kafolatlamaydi, lekin oʻrtkazib yuborilgan xatolar xavfini kamaytiradi.

Nega qamrovni ölchash kerak

Kod qamrovi jamoaga yordam beradi: kodning sinovdan oʻrtmagan qismlarini topish, test yozish ustuvorligi haqida qaror qabul qilish, CI/CDda test sifati dinamikasini kuzatish. Mobil ishlab chiqishda qamrov, ayniqsa, biznes mantigʻi, maʻlumot modellari va depozitariylar uchun muhimdir — xatolik ehtimoli eng yuqori boʻlgan qatlamlar.

Code Coverage haqidagi afsonalar

Keng tarqalgan afsona: “100% qamrov = ideal sifat”. Amalda 100% qamrovga juda kam erishiladi va koʻpincha yuzaki testlar evaziga. Samarali qamrov — foiz uchun poyga emas, balki muhim yoʻre llar va chegara shartlarining strategik qamrovidir. Qamrov testlarning sifati haqida hech narsa demaydi: test oʻtishi mumkin, ammo natijaning toʻgʻriligini tekshirmasligi mumkin.

Kod qamrovi koʻre Satkichlari

Code Coverage-ning bir nechta koʻre Satkichlari mavjud, ularning har biri testlashning turli jihatlarini ölchaydi. Line coverage (qator qamrovi) — bajarilgan kod qatorlari foizini koʻre Satadigan eng sodda koʻre Satkich. Branch coverage (shaxobcha qamrovi) if-else va switch shaxobchalarining qaysi biri test qilinganligini ölchaydi.

Chiziqli qamrov (Line Coverage)

Line coverage har bir manba kod qatorini bajarilgan yoki bajarilmagan deb hisoblaydi. Agar qatorda shartli operator yoki sikl boʻlsa, qator bajarilgan deb hisoblanadi, agar boshqaruv unga etib kelgan boʻlsa, hatto barcha shaxobchalar ishlanmagan boʻlsa ham. Bu eng kam qattiq koʻre Satkich, ammo vizual baholash uchun eng tushunarli.

Shaxobchalar qamrovi (Branch Coverage)

Branch coverage koddagi barcha mumkin boʻlgan shaxobchalarning test qilinganligini baholaydi. Har bir if-else uchun ikkala shaxobcha hisobga olinadi: true va false. Switch uchun — har bir case. Branch coverage line coverage-dan qattiqroq koʻre Satkich hisoblanadi va koʻpincha tekshirilmagan stsenariylarni aniqlaydi.

Koʻre SatkichNimani ölchaydiErishish qiyinligi
LineBajarilgan kod qatorlari foiziPast
BranchBajarilgan shaxobchalar foizi (if/else, switch)Oʻrrta
FunctionChaqirilgan funksiya va metodlar foiziPast
ConditionMantiqiy ostli ifodalar foizi (&&, ||)Yuqori

Yoʻre llar qamrovi (Path Coverage)

Path coverage — funksiyadagi barcha mumkin boʻlgan shaxobcha kombinatsiyalarini tekshirishni talab qiladigan eng qattiq koʻre Satkichdir. Amalda path coverage kamdan-kam qoʻllaniladi, chunki kombinatsiyalar soni eksponensial ravishda oʻsadi: 10 shaxobchali funksiyaning 1024 mumkin boʻlgan yoʻre li bor.

Qamrovni ölchash vositalari

Mobil ishlab chiqishda platformaga qarab Code Coverage-ni ölchash uchun turli vositalar qoʻllaniladi. Android uchun standart JaCoCo (Java Code Coverage) hisoblanadi, u Gradle bilan integratsiyalanadi va ham birlik testlarini, ham instrumental testlarni qoʻllab-quvvatlaydi. iOS uchun Xcode-ga oʻrnatilgan XCCov ishlatiladi.

Android uchun JaCoCo

JaCoCo HTML, XML va CSV formatlarida hisobotlar yaratadi. HTML hisobot qatorlarni vizual ravishda ajratib koʻre Satadi: yashil — bajarilgan, qizil — oʻrtkazib yuborilgan, sariq — qisman bajarilgan. XML hisoboti SonarQube va boshqa kod tahlil tizimlari bilan mos keladi. JaCoCo sinflarni filtrlashni qoʻllab-quvvatlaydi: generated-kod, databinding, BuildConfig chiqarib tashlanishi mumkin.

groovy
// build.gradle — JaCoCo sozlamasi
android {
    buildTypes {
        debug {
            testCoverageEnabled = true
        }
    }
}

// JaCoCo hisobotini yaratish
task jacocoTestReport(type: JacocoReport) {
    dependsOn 'testDebugUnitTest'
    reports {
        xml.enabled = true
        html.enabled = true
    }
}

iOS uchun XCCov

XCCov — kod qamrovini ölchash uchun Xcode-ning oʻrnatilgan vositasi. Test sxemasidagi Gather coverage data orqali faollashtiriladi. XCCov Swift va Objective-C uchun qamrovni qoʻllab-quvvatlaydi, .xccovreport formatida hisobotlar yaratadi va CI bilan xcodebuild -enableCodeCoverage YES orqali integratsiyalanadi. Maʻlumotlar konsolda koʻre Satiladi va JSON-ga eksport qilinishi mumkin.

SonarQube va Codecov

Markazlashtirilgan qamrov monitoringi uchun platformalardan foydalaniladi: SonarQube (kod sifati tahlili + qamrov), Codecov va Coveralls. Ushbu xizmatlar JaCoCo va XCCov-dan maʻlumotlarni toʻplaydi, trendlarni, Quality Gate-ni va GitHub/GitLab bilan PR sharhlari orqali integratsiyani koʻre Satadi.

Kod qamrovini qanday yaxshilash mumkin

Code Coverage-ni oshirish tizimli yondashuvni talab qiladi: foizni “urish” emas, balki xatarlarni yopish. Birinchi qadam JaCoCo yoki XCCov hisobotini tahlil qilish — qizil (qamrab olinmagan) sinflarni aniqlash. Ustuvorlik: biznes mantigʻi → depozitariylar → ViewModel → UI komponentlari.

TDD strategiyasi

Test-Driven Development (TDD) avtomatik ravishda yuqori qamrovni taʻminlaydi, chunki testlar amalga oshirishdan oldin yoziladi. Jarayon: qizil (muvaffaqiyatsiz test yozish) → yashil (minimal kod yozish) → refaktorlash. TDD dasturchilarni intizomga soladi, chegara holatlari va koʻpincha testsiz qoladigan istisno vaziyatlarni qamrab olishga majbur qiladi.

Parametrlashtirilgan testlar

Bitta parametrlashtirilgan test oʻnlab oddiy testlarni almashtiradi. JUnit va XCTest parametrlashni qoʻllab-quvvatlaydi: JUnit 5 da @ParameterizedTest, XCTest da XCTestCase bilan testPerformanceExample. Parametrlash kod takrorlanmasdan koʻplab kirish maʻlumotlarini tekshirish imkonini beradi, bu esa shaxobcha va shart qamrovini sezilarli darajada kengaytiradi.

kotlin
// Kotlin bilan JUnit 5 da parametrlashtirilgan test
@ParameterizedTest
@ValueSource(strings = ["user@test.com", "admin@test.com", "test@example.com"])
fun `validate email returns true for valid addresses`(email: String) {
    val result = EmailValidator.isValid(email)
    Assertions.assertTrue(result)
}

Code Coverage bilan ishlashdagi xatolar

Eng keng tarqalgan xato — test sifatini tahlil qilmasdan foiz uchun poyga. Jamoa testlar uchun test yozishni boshlaydi: getter va setterlarni tekshiradi, turli darajalarda qamrovni takrorlaydi, ahamiyatsiz metodlarni test qiladi. Bu yuqori foiz beradi, ammo haqiqiy sifatni oshirmaydi.

Soxta xavfsizlik hissi

Yuqori Code Coverage dastur yaxshi test qilingan degan yolgʻon taassurot yaratishi mumkin. Test kod qatorini bajarishi mumkin, ammo natijaning toʻgʻriligini tekshirmasligi mumkin. Masalan: test chegirma hisoblash metodini chaqiradi, ammo miqdorni tekshirmaydi — qator bajarilgan, qamrov oʻsadi, ammo xato topilmagan.

Chegara holatlarini eʻtiborsiz qoldirish

Odatiy xato — faqat “omadli yoʻre l” (happy path) ni test qilish va chegara holatlarini eʻtiborsiz qoldirish: boʻsh roʻyxatlar, null qiymatlar, maksimal sonlar, notoʻgʻri formatlar. Xatolarning aksariyati aynan chegaralarda va istisnolarda yuz beradi. Branch coverage oʻrtkazib yuborilgan shaxobchalarni aniqlashga yordam beradi, ammo chegara qiymatlarini tekshirishni kafolatlamaydi.

Mutation Testing — test sifatini tekshirish

Mutation Testing — manba kodiga mutatsiyalar (sunʻiy xatolar) kiritiladigan va testlarning muvaffaqiyatsiz boʻlishi tekshiriladigan test sifatini baholash usulidir. Pitest — Java va Kotlin uchun mashhur mutation testing vositasi. Agar testlar mutatsiyada muvaffaqiyatsiz boʻlmasa — bu ular ushbu shartni tekshirmayotganligini anglatadi.

Pitestning ishlash prinsipi

Pitest mutantlar yaratadi — manba kodining oʻzgartirilgan nusxalari, bunda, masalan, > >= bilan, true false bilan almashtirilgan yoki metod chaqiruvi oʻchirilgan. Keyin har bir mutant uchun testlar ishga tushiriladi. Agar testlar oʻtsa — mutant tirik qoldi, yaʻni testlar ushbu stsenariyni qamrab olmaydi. Agar testlar muvaffaqiyatsiz boʻlsa — mutant oʻldirilgan, test toʻgʻri.

groovy
// build.gradle — Pitest sozlamasi
plugins {
    id 'info.solidsoft.pitest' version '1.15.0'
}

pitest {
    targetClasses = ['com.example.app.*']
    targetTests = ['com.example.app.*Test']
    threads = 4
    outputFormats = ['HTML', 'XML']
    mutationThreshold = 80
    coverageThreshold = 85
}

Mutatsiya turlari

Pitest koʻplab mutatsiya turlarini qoʻllab-quvvatlaydi: shartli operatorlarni oʻzgartirish (== → !=, < → <=), metod chaqiruvlarini olib tashlash, qaytariladigan qiymatlarni almashtirish (true → false), arifmetik amallarni oʻzgartirish (+ → -), inkrementatsiya mutatsiyasi (i++ → i--). Qanchalik koʻp mutatsiya turlari testlar tomonidan oʻldirilsa, test toʻplami shunchalik ishonchli.

Mutation Score maqsadi

Maqsadli mutation score — 80% va undan yuqori. Bu sunʻiy xatolarning 80% testlar tomonidan aniqlanganligini anglatadi. Kod qamrovi (Code Coverage) 90% testlarning xatolarni topishini kafolatlamaydi — mutation testing obʻektivroq baho beradi. Pitest CI-ga Quality Gate sifatida integratsiyalanishi mumkin, mutation score chegaradan pastga tushganda yigʻmani bloklaydi.

Code Coverage-ni CI/CD-ga integratsiyalash

CI/CD da Code Coverage-ni avtomatik nazorat qilish uchun Quality Gates — chegara qiymatlar qoʻllaniladi, buzilganda yigʻma beqaror deb belgilanadi yoki rad etiladi. SonarQube koʻre Satkichlar kombinatsiyasi asosida Quality Gate-ni sozlash imkonini beradi: qamrov (≥80%), xatolar soni, zaifliklar va takrorlangan kod.

GitHub Actions-da Quality Gate-ni sozlash

GitHub Actions-da Code Coverage action qadamlari orqali integratsiyalanadi: qamrov bilan testlarni ishga tushirish → hisobotni Codecov-ga yuklash → chegarani tekshirish. Codecov avtomatik ravishda PR-ni qamrov diffi bilan sharhlaydi, qaysi qatorlar oʻzgarganini va bu umumiy foizga qanday taʻsir qilganini koʻre Satadi. Agar qamrov tushib ketgan boʻsa — qoʻshimcha testlar yozilgunga qadar PR bloklanadi.

yaml
# GitHub Actions — qamrovni Codecov-ga yuklash
- name: Run Tests with Coverage
  run: ./gradlew testDebugUnitTest jacocoTestReport

- name: Upload to Codecov
  uses: codecov/codecov-action@v4
  with:
    files: ./app/build/reports/jacoco/jacocoTestReport.xml
    flags: unittests
    fail_ci_if_error: true

- name: Check Coverage Threshold
  run: |
    coverage=$(grep -oP 'branchCoverage="\K[0-9.]+' report.xml)
    if (( $(echo "$coverage < 80" | bc -l) )); then
      echo "Coverage $coverage% is below 80% threshold"
      exit 1
    fi

Hisobot va vizuallashtirish

JaCoCo va XCCov-ning HTML hisobotlari qamrovning vizual ajratilishini oʻrz ichiga oladi: yashil — bajarilgan qatorlar, qizil — bajarilmagan. SonarQube qoʻshimcha ravishda fayl, sinf, metod va qator darajasida qamrovni, shuningdek sprintlar boʻyicha qamrov oʻzgarishlari tarixini koʻre Satadi. Bu refaktorlash va test qoʻshish haqida qaror qabul qilishga yordam beradi.

Tez-tez beriladigan savollar

Code Coverage-ning necha foizi yaxshi hisoblanadi?

Mobil loyihalar uchun biznes mantigʻi uchun 70–80%, UI komponentlari uchun 50–60% qamrov yaxshi hisoblanadi. 80% dan yuqori test xarajatlari foydadan oshib keta boshlaydi. Foiz maqsad emas, balki koʻre Satkich ekanligini va turli modullar turli maqsadli darajalarga ega boʻlishi mumkinligini yodda tutish muhim.

Line va Branch Coverage oʻrrtasidagi farq nima?

Line Coverage nechta kod qatori bajarilganligini koʻre Satadi. Branch Coverage — nechta shaxobcha (if-else, switch) test qilinganligini. If qatori bajarilishi mumkin, ammo true shaxobchasi test qilingan, false esa — yoʻq. Branch Coverage qattiqroq va koʻproq oʻrtkazib yuborilgan stsenariylarni aniqlaydi.

Code Coverage-ni CI/CD-ga qanday integratsiyalash mumkin?

CI/CD da qamrov Quality Gate orqali integratsiyalanadi: qamrov chegaradan past boʻlsa, yigʻma bloklanadi. Android uchun JaCoCo + SonarQube, iOS uchun xcodebuild -enableCodeCoverage bilan .xccovreport-ni pars qilish ishlatiladi. GitHub Actions Codecov uchun tayyor action-larga ega.

Jetpack Compose uchun qamrovni ölchash mumkinmi?

Ha, JaCoCo Jetpack Compose-ni JVM qamrovining standart mexanizmi orqali qoʻllab-quvvatlaydi. Biroq, Compose kodi JaCoCo toʻliq qamrab ololmaydigan koʻplab yaratilgan lambda ifodalarini oʻrz ichiga oladi. Yaratilgan compose kodini filtrlar orqali hisobotdan chiqarib tashlash tavsiya etiladi.

Soxta qamrovdan qanday qochish mumkin?

Soxta qamrov test kodni bajarganida, ammo natijani tekshirmaganda yuzaga keladi. Yechim: har bir muhim stsenariy uchun assert tekshiruvlari yozish, test sifatini tekshirish uchun mutation testing (Pitest) dan foydalanish, nafaqat foizni, balki qaysi shaxobchalar qamrab olinganligini ham tahlil qilish.

Xulosa

  • Code Coverage — testlar tomonidan bajarilgan kod foizini koʻre Satadigan, ammo xatolarning yoʻqligini kafolatlamaydigan koʻre Satkich
  • Line va Branch coverage — asosiy koʻre Satkichlar; Branch qattiqroq va tekshirilmagan shaxobchalarni aniqlaydi
  • JaCoCo — Android uchun standart vosita, XCCov — iOS uchun, ikkalasi Gradle va Xcode bilan integratsiyalanadi
  • Maqsadli qamrov biznes mantigʻi uchun 70–80% — sifat va xarajat oʻrrtasidagi optimal muvozanat
  • TDD va parametrlash — testlarni takrorlamasdan qamrovni oshirishning samarali usullari
  • SonarQube va Codecov — CI/CD da markazlashtirilgan monitoring va Quality Gate uchun platformalar
  • Asosiy qoida: foiz uchun quvmaslik, balki muhim xatarlar va chegara holatlarini qamrab olish

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing