JavaRush /Java Blog /Random-TL /Saklaw ng Code
Nikita Koliadin
Antas
Днепр

Saklaw ng Code

Nai-publish sa grupo
Pagbati, mga kaibigan, kasamahan at... mga penguin! Saklaw ng Code - 1Ngayon ay pag-uusapan natin ang tungkol sa Code Coverage , malalaman natin kung ano ito, bakit ito kailangan at kung paano i-upgrade ang iyong open-source na proyekto sa pamamagitan ng pagbibigay ng mga istatistika ng Code Coverage. Ang artikulong ito ay isang laconic na pagpapatuloy ng nauna tungkol sa Continuous Integration . Dito natin malalaman ang isa pang makapangyarihang bentahe ng CI kasama ang... at sa lalong madaling panahon malalaman mo kung ano! Bibigyang-diin ko lamang na walang mga tagubilin dito kung paano isulat nang tama ang mga pagsubok para sa iyong mga programa, at kung paano makamit ang pinakamataas na posibleng kapaki-pakinabang na saklaw; ang buong kasalanang ito ay mananatili lamang sa iyong mga balikat. Kaya, tayo na!

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 .
  1. 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 я делать не рекомендую, ведь есть более хороший, более функциональный альтернативный вариант, и даже не один.

    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:

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

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

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

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

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

    Saklaw ng Code - 3

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

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

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

    Saklaw ng Code - 5

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

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

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

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

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

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

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

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

      Saklaw ng Code - 8

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

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

      Saklaw ng Code - 9
Полезные ссылки Maaaring may mga pagkakamali at pagkukulang sa teksto. Salamat sa lahat para sa iyong pansin!
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION