Ano ang Code Coverage?
Ang Code Coverage ay isang tiyak na halaga na nagpapakita sa amin ng porsyento ng source code na nakumpleto sa panahon ng pagsubok. Okay, mukhang malinaw ang lahat dito. Ang porsyento ng Code Coverage ay maaaring mula 0 hanggang 100, at ang tanong ay maaaring lumitaw: dapat mo bang sikapin ang maximum na porsyento ng CC? Ang sagot ko ay: oo at hindi. Bakit ganon? Sabihin nating lumikha ka ng isang proyekto na gagamitin ng ilang iba pang mga proyekto, ito ay puno ng pag-andar, at sa lahat ng kakila-kilabot ay mayroong mga getter at setter, at medyo marami sa kanila. Kapag sumasaklaw sa pag-andar, hindi lahat, sabihin nating, ang mga getter ay nasasakupan, ngunit alam mong sigurado na ang mga hindi nasasakupan ay hindi tinatawag sa iyong proyekto, ngunit ang mga getter ay hindi palaging nakasulat na "para sa kanilang sarili," kaya kailangan sila para sa " kliyente”. Anong gagawin? Takpan ang bawat getter nang hiwalay? Hindi ito magiging epektibong pagsubok. Ngunit kung hindi namin saklawin ang mga ito, hindi namin makakamit ang maximum na porsyento ng CC. Dito umusbong ang dalawang talim na espada.Bakit kailangan natin ng Code Coverage?
Sa tingin ko ang sagot sa tanong na ito ay magiging napakasimple: Ang anumang code ay nangangailangan ng pagsubok upang kapag nagre-refactor o nagdaragdag/nagbabago ng functionality, hindi lilitaw ang mga "invisible" na mga bug, at masusubaybayan natin ang mga ito. Hindi kami tatakbo sa mga framework na may mga breakpoint at debugger at mahuhuli ang masamang Bug na ito. Masyadong maikli ang buhay. Halimbawa Kaya, ang pinaka-kagiliw-giliw na bagay. Ang gawain ay ito: Ipakilala sa aming open-source na proyekto , na isinulat namin sa nakaraang artikulo , isang teknolohiya na mangongolekta ng impormasyon tungkol sa CC, ipoproseso ito sa isang lugar, at posibleng ilagay ang impormasyong ito sa GitHub sa anyo ng isang badge, halimbawa. Ang lahat ng source code ay ipo-post sa aking GitHub .-
Magsimula tayo sa pamamagitan ng pagpili ng isang plugin upang mangolekta ng impormasyon sa saklaw ng code sa isang tumpok. Personal kong pinili ang JaCoCo , na nangongolekta ng impormasyon tungkol sa saklaw ng code. Ngunit mayroon ding mga alternatibo .
Сайт JaCoCo предлагает нам скачать плагин, но качать мы нечего не будем, ведь мы используем Build System Maven. Заходим в Maven Repository и ищем JaCoCo Plugin. Берем последнюю версию, и вставляем в наш pom.xml зависимость.
Но через dependencies я делать не рекомендую, ведь есть более хороший, более функциональный альтернативный вариант, и даже не один.
-
Заходим CodeCov Setup выбираем язык Java и выбираем Using JaCoCo плагин, и ставим по инструкции.
-
По той же ссылке выбираем 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:
-
-
Плагин стоит. Все вроде бы замечательно. Но если вы внимательно читали инструкцию по установке JaCoCo plugin, там было указание, добавить в .travis.yml строчку, отвечающую за отправку отчёта plugin на сайт Codecov.
Итак, исходя из Using JaCoCo, нам нужно вписать в наш файл:
after_success: - bash <(curl -s https://codecov.io/bash)
Вписали. Отлично.
-
Все вроде готово, и остались финальные штрихи. Во-первых давайте скомпorруем наш code, и запустим все тесты, причем сделаем это через Lifecycle Maven:
Так How у нас в плагине JaCoCo стоит фаза выполнения test, то должен был появится отчет после выполнения цикла тестов Maven в папке target:
-
Подходим к завершению. Мы видим что все работает прекрасно, осталось лишь убедится что это "все прекрасно" также будет работать на внешних источниках. Настала пора собрать все в кучу. Собираем проект и делаем push на GitHub, перед этим открыв Travis CI и Codecov для мониторинга происходящего.
После push мы видим что сборка успешная:
И результат JaCoCo plugin о покрытии codeа:
-
Помните нашу задачу? Да, да, мы забыл про бейджик. Я хотел вынести тему "Украшение" open-source project'ов в отдельную статью, но маленькую часть все же оставлю здесь.
Итак, пошаговая инструкция что бы не заблудится:
-
Переходим на сайт Codecov;
-
Выбираем проект, который вам нужно;
-
Выбираем Setting:
-
Выбираем Badge и видим ссылки на ваш бейджик в несколько различных формах представления:
Первые это стандартные бейджики, их можно вставить, например, в ваш README.md:
Их особенность в том что при кликании на них вас будет перенаправлять на page с отчетом о CC;
Вторые это графы, таблицы и тому подобные штуки:
-
- Мой тестовый проект, который вы можете скачать, посмотреть, оценить. Все по этой статье находится в branch: JaCoCo;
- Mga Tool sa Saklaw ng Java Code ;
- Mga Alternatibo ng JaCoCo ;
- JaCoCo Library ;
- Dependency ng Plugin ng JaCoCo Maven ;
- Tutorial sa pag-setup ng Codecov ;
- Talagang nagse-set up ng JaCoCo mismo ;
- Pag-set up ng Cobertura ;
GO TO FULL VERSION