JavaRush /Java blogi /Random-UZ /Kod qamrovi
Nikita Koliadin
Daraja
Днепр

Kod qamrovi

Guruhda nashr etilgan
Assalomu alaykum, do'stlar, hamkasblar va... pingvinlar! Bugun biz Kod qamroviKod qamrovi - 1 haqida gaplashamiz , bu nima ekanligini, nima uchun kerakligini va Kod qamrovi statistikasini taqdim etish orqali ochiq manba loyihangizni qanday yangilashni aniqlaymiz. Ushbu maqola Uzluksiz integratsiya haqidagi oldingi maqolaning qisqacha davomi . Bu erda biz CI ning yana bir kuchli afzalliklarini ... bilan birgalikda bilib olamiz va tez orada nima bilan tanishasiz! Men shuni ta'kidlaymanki, bu erda dasturlaringiz uchun testlarni qanday to'g'ri yozish va maksimal foydali qamrovga qanday erishish bo'yicha ko'rsatmalar yo'q; bu gunoh faqat sizning elkangizda qoladi. Xo'sh, ketaylik!

Kod qamrovi nima?

Kod qamrovi - bu sinov paytida to'ldirilgan manba kodining foizini ko'rsatadigan ma'lum bir qiymat. OK, bu erda hamma narsa aniq ko'rinadi. Kod qamrovi foizi 0 dan 100 gacha bo'lishi mumkin va savol tug'ilishi mumkin: maksimal CC foiziga intilish kerakmi? Mening javobim: ha va yo'q. Nega bunday? Aytaylik, siz ba'zi boshqa loyihalar tomonidan qo'llaniladigan loyiha yaratasiz, u funksionallik bilan to'la va barcha dahshatlar orasida oluvchilar va sozlashchilar bor va ularning bir nechtasi bor. Funktsionallikni yoritganda, aytaylik, hamma qabul qiluvchilar qamrab olinmagan, lekin siz aniq bilasizki, qamrab olinmaganlar sizning loyihangizda chaqirilmaydi, lekin qabul qiluvchilar har doim ham "o'zlari uchun" yozilmaydi, shuning uchun ular "o'zlari uchun" kerak. mijoz". Nima qilsa bo'ladi? Har bir oluvchini alohida qamrab olasizmi? Bu samarali sinov bo'lmaydi. Ammo agar biz ularni qamrab olmasak, maksimal CC foiziga erisha olmaymiz. Bu erda ikki qirrali qilich paydo bo'ladi.

Nima uchun bizga kod himoyasi kerak?

Menimcha, bu savolga javob juda oddiy bo'ladi: har qanday kod sinovdan o'tishi kerak, shunda refaktoring yoki funksionallikni qo'shish/o'zgartirishda "ko'rinmas" xatolar paydo bo'lmaydi va biz ularni kuzatib borishimiz mumkin. Biz to'xtash nuqtalari va tuzatuvchilarga ega bo'lgan ramkalar orqali ishlamaymiz va bu yomon xatoni ushlamaymiz. Hayot juda qisqa. Misol Shunday qilib, eng qiziqarli narsa. Vazifa quyidagicha: biz oldingi maqolada yozgan ochiq manbali loyihamizga CC haqida ma'lumot to'playdigan texnologiyani kiriting , uni biron bir joyda qayta ishlang va bu ma'lumotlarni GitHub-ga joylashtirish shaklida joylashtirish mumkin bo'ladi. masalan, nishon. Barcha manba kodi mening GitHubimda joylashtiriladi .
  1. Kod qamrovi to'g'risidagi ma'lumotlarni bitta qoziqqa to'plash uchun plaginni tanlashdan boshlaylik . Men shaxsan JaCoCo ni tanladim , u kod qamrovi haqida ma'lumot to'playdi. Lekin muqobil variantlar ham bor .

    Сайт JaCoCo предлагает нам скачать плагин, но качать мы нечего не будем, ведь мы используем Build System Maven. Заходим в Maven Repository и ищем JaCoCo Plugin. Берем последнюю версию, и вставляем в наш pom.xml зависимость.

    Но через dependencies я делать не рекомендую, ведь есть более хороший, более функциональный альтернативный вариант, и даже не один.

    1. Заходим CodeCov Setup выбираем язык Java и выбираем Using JaCoCo плагин, и ставим по инструкции.

    2. По той же ссылке выбираем Using Maven. Этот вариант будет даже лучше. Cobertura будет извлекать информацию из CI тестов, но увы и тут есть подвох. Все что выше JDK 7 (А на данный момент уже 10 есть) не подойдет. Поэтому мы остановимся на 1 варианте.

    В результате в нашем pom.xml должно было появиться что то вроде того:

    <!-- JaCoCo plugin -->
    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.1</version>
        <executions>
            <execution>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
            </execution>
            <execution>
                <id>report</id>
                <phase>test</phase>
                <goals>
                    <goal>report</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

    И в Maven Projects в списке плагинов появится JaCoCo Plugin:

    Kod qamrovi - 2
  2. Плагин стоит. Все вроде бы замечательно. Но если вы внимательно читали инструкцию по установке JaCoCo plugin, там было указание, добавить в .travis.yml строчку, отвечающую за отправку отчёта plugin на сайт Codecov.

    Итак, исходя из Using JaCoCo, нам нужно вписать в наш файл:

    after_success:
      - bash <(curl -s https://codecov.io/bash)

    Вписали. Отлично.

  3. Все вроде готово, и остались финальные штрихи. Во-первых давайте скомпorруем наш code, и запустим все тесты, причем сделаем это через Lifecycle Maven:

    Kod qamrovi - 3

    Так How у нас в плагине JaCoCo стоит фаза выполнения test, то должен был появится отчет после выполнения цикла тестов Maven в папке target:

    Kod qamrovi - 4
  4. Подходим к завершению. Мы видим что все работает прекрасно, осталось лишь убедится что это "все прекрасно" также будет работать на внешних источниках. Настала пора собрать все в кучу. Собираем проект и делаем push на GitHub, перед этим открыв Travis CI и Codecov для мониторинга происходящего.

    После push мы видим что сборка успешная:

    Kod qamrovi - 5

    И результат JaCoCo plugin о покрытии codeа:

    Kod qamrovi - 6
  5. Помните нашу задачу? Да, да, мы забыл про бейджик. Я хотел вынести тему "Украшение" open-source project'ов в отдельную статью, но маленькую часть все же оставлю здесь.

    Итак, пошаговая инструкция что бы не заблудится:

    1. Переходим на сайт Codecov;

    2. Выбираем проект, который вам нужно;

    3. Выбираем Setting:

      Kod qamrovi - 7
    4. Выбираем Badge и видим ссылки на ваш бейджик в несколько различных формах представления:

      Первые это стандартные бейджики, их можно вставить, например, в ваш README.md:

      Kod qamrovi - 8

      Их особенность в том что при кликании на них вас будет перенаправлять на page с отчетом о CC;

      Вторые это графы, таблицы и тому подобные штуки:

      Kod qamrovi - 9
Полезные ссылки Matnda xato va kamchiliklar bo'lishi mumkin. E'tiboringiz uchun barchangizga rahmat!
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION