JavaRush /Blogue Java /Random-PT /Cobertura de código
Nikita Koliadin
Nível 40
Днепр

Cobertura de código

Publicado no grupo Random-PT
Saudações, amigos, colegas e... pinguins! Cobertura de código - 1Hoje falaremos sobre Cobertura de Código , descobriremos o que é, por que é necessário e como atualizar seu projeto de código aberto, fornecendo estatísticas de Cobertura de Código. Este artigo é uma continuação lacônica do anterior sobre Integração Contínua . Aqui aprenderemos outra vantagem poderosa do CI em combinação com... e em breve você descobrirá com quê! Enfatizarei apenas que não haverá instruções aqui sobre como escrever testes corretamente para seus programas e como obter a cobertura útil máxima possível; todo esse pecado permanecerá apenas sobre seus ombros. Então vamos!

O que é cobertura de código?

Cobertura de código é um determinado valor que nos mostra a porcentagem de código-fonte concluído durante o teste. Ok, tudo parece claro aqui. A porcentagem de cobertura de código pode variar de 0 a 100, e pode surgir a pergunta: você deve se esforçar para obter a porcentagem máxima de CC? Minha resposta é: sim e não. Por que é que? Digamos que você crie um projeto que será usado por alguns outros projetos, ele é cheio de funcionalidades e, entre todo o horror, existem getters e setters, e existem alguns deles. Ao cobrir a funcionalidade, nem todos, digamos, getters foram cobertos, mas você sabe com certeza que aqueles que não foram cobertos não são chamados em seu projeto, mas os getters nem sempre são escritos “para si mesmos”, então eles são necessários para o “ cliente". O que fazer? Cobrir cada getter separadamente? Este não será um teste eficaz. Mas se não os cobrirmos, não alcançaremos a percentagem máxima de CC. É aqui que surge uma faca de dois gumes.

Por que precisamos de cobertura de código?

Acho que a resposta a esta pergunta será muito simples: Qualquer código precisa de testes para que, ao refatorar ou adicionar/alterar funcionalidades, não surjam bugs “invisíveis” e possamos rastreá-los. Não iremos percorrer frameworks com pontos de interrupção e depuradores e pegar esse bug vil. A vida é muito curta. Exemplo Então, o mais interessante. A tarefa é esta: introduzir em nosso projeto de código aberto , que escrevemos no artigo anterior , uma tecnologia que irá coletar informações sobre CC, processá-las em algum lugar, e será possível colocar essas informações no GitHub na forma de um distintivo, por exemplo. Todo o código fonte será postado no meu GitHub .
  1. Vamos começar escolhendo um plugin para coletar informações de cobertura de código em uma pilha. Eu pessoalmente escolhi JaCoCo , que coleta informações sobre cobertura de código. Mas também existem alternativas .

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

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

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

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

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

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

    Cobertura de código - 3

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

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

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

    Cobertura de código - 5

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

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

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

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

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

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

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

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

      Cobertura de código - 8

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

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

      Cobertura de código - 9
Полезные ссылки Pode haver erros e omissões no texto. Obrigado a todos pela atenção!
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION