Nikita Koliadin
40 рівень

Code Coverage

Стаття з групи Random UA
учасників
Вітаю, друзі, колеги та... пінгвіни! Code Coverage - 1Сьогодні ми поговоримо про Code Coverage , розберемося, що це, навіщо він потрібен і як прокачати свій open-source project надавши статистику Code Coverage. Ця стаття є лаконічним продовженням попередньої про Continuous Integration . Тут ми дізнаємося ще одна сильна перевага CI у поєднанні з... а скоро дізнаєтесь із чим самі! Підкреслю лише те, що тут не буде вказівок, як правильно писати тести для своїх програм, і як домагатися максимально можливого корисного покриття, цей весь гріх залишиться лише на ваших плечах. Отже, погнали!

Що таке Code Coverage?

Code Coverage (покриття коду) - це певна величина, що показує відсоток виконаного вихідного коду, під час тестування. Окей, тут начебто все ясно. Відсоток Code Coverage (покриття коду, далі просто CC) може коливатися від 0 до 100, і може виникнути питання, чи потрібно прагнути максимального відсотка CC? Моя відповідь така: і так і ні. Чому так? Допустимо ви створюєте проект, який буде використовуватися деякими іншими проектами, в ньому повно функціоналу, і серед всього жаху є гетери та сеттери, і їх не мало. При покритті функціоналу покрабося не всі, скажімо, гетери, але ви точно знаєте, що ті, які не покрабося, і не викликаються у вашому проекті, але гетери не завжди пишуться "для себе", тому вони потрібні для "клієнта". Що ж робити? Покрити кожен гетер окремо? Це буде неефективне тестування. Але якщо не покрити їх, ми не досягнемо максимального відсотка CC. Тут виникає палиця двох кінців.

Для чого нам потрібно Code Coverage?

Я думаю на це питання відповідь буде дуже проста: Будь-який код потребує тестування, щоб при рефакторингу або при додаванні/зміні функціоналу не виникли "невидимі" баги, і ми їх могли відстежити. Не будемо ж ми бігати фреймворками з breakpoint і дебаггером і ловити цього підлого Бага. Життя занадто коротке. Отже , найцікавіше. Завдання таке: Впровадити в наш open-source project , який ми написали на попередній статті , технологію, яка збиратиме інформацію про CC, оброблятиме десь її, і буде можливість помістити цю інформацію у себе на GitHub у формі бейджика, наприклад. Усі вихідні коди будуть викладені на моєму GitHub .
  1. Почнемо з вибору плагіна для збирання інформації про покриття коду в одну купу. Я особисто для себе вибрав JaCoCo , який саме збирає інформацію про покриття коду. Але є й альтернативи .

    Сайт 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:

    Code Coverage - 2
  2. Плагін стоїть. Все начебто чудово. Але якщо ви уважно читали інструкцію з встановлення JaCoCo плагіна, там була вказівка ​​додати в .travis.yml рядок, що відповідає за відправку звіту плагіна на сайт Codecov .

    Отже, виходячи з Using JaCoCo нам потрібно вписати в наш файл:

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

    Вписали. Чудово.

  3. Все начебто готове і залишабося фінальні штрихи. По-перше, давайте скомпілюємо наш код, і запустимо всі тести, причому зробимо це через Lifecycle Maven:

    Code Coverage - 3

    Так як у нас у плагіні JaCoCo стоїть фаза виконання test, то мав з'явитися звіт після виконання циклу тестів Maven у папці target:

    Code Coverage - 4
  4. Підходимо до завершення. Ми бачимо, що все працює чудово, залишилося лише переконається, що це "все прекрасно" також буде працювати на зовнішніх джерелах. Настав час зібрати все в купу. Збираємо проект і робимо push на GitHub, перед цим відкривши Travis CI та Codecov для моніторингу того, що відбувається.

    Після push ми бачимо що збирання є успішним:

    Code Coverage - 5

    І результат JaCoCo плагіна про покриття коду:

    Code Coverage - 6
  5. Пам'ятаєте наше завдання? Так, так, ми забув про бейджик. Я хотів винести тему "Прикраса" open-source project'ів в окрему статтю, але маленьку частину все ж таки залишу тут.

    Отже, покрокова інструкція що б не заблукає:

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

    2. Вибираємо проект, який вам потрібний;

    3. Вибираємо Setting:

      Code Coverage - 7
    4. Вибираємо Badge і бачимо посилання на ваш бейджик у різних формах подання:

      Перші це стандартні бейджики, їх можна вставити, наприклад, у README.md:

      Code Coverage - 8

      Їх особливість у тому, що при натисканні на них вас буде перенаправляти на сторінку зі звітом про CC;

      Другі це графи, таблиці тощо.

      Code Coverage - 9
Корисні посилання Можуть бути помилки, ВІДЧИП'ЯТКИ в тексті. Всім дякую за увагу!
Коментарі
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Для цієї сторінки немає коментарів.