JavaRush /Java Blog /Random-IT /Copertura del codice
Nikita Koliadin
Livello 40
Днепр

Copertura del codice

Pubblicato nel gruppo Random-IT
Saluti, amici, colleghi e... pinguini! Copertura del codice - 1Oggi parleremo di Code Coverage , capiremo cos'è, a cosa serve e come aggiornare il tuo progetto open source fornendo le statistiche di Code Coverage. Questo articolo è una laconica continuazione del precedente sull'Integrazione Continua . Qui impareremo un altro potente vantaggio della CI in combinazione con... e presto scoprirai con cosa! Sottolineerò solo che qui non ci saranno istruzioni su come scrivere correttamente i test per i tuoi programmi e su come ottenere la massima copertura utile possibile; tutto questo peccato rimarrà solo sulle tue spalle. Quindi andiamo!

Cos'è la copertura del codice?

La Code Coverage è un determinato valore che ci mostra la percentuale di codice sorgente completato durante il test. Ok, qui sembra tutto chiaro. La percentuale di Code Coverage può variare da 0 a 100 e potrebbe sorgere la domanda: dovresti cercare di raggiungere la percentuale CC massima? La mia risposta è: sì e no. Perché? Diciamo che crei un progetto che verrà utilizzato da altri progetti, è pieno di funzionalità e tra tutto l'orrore ci sono getter e setter, e ce ne sono parecchi. Quando si copre la funzionalità, non tutti, ad esempio, i getter sono stati coperti, ma sai per certo che quelli che non sono stati coperti non vengono chiamati nel tuo progetto, ma i getter non sono sempre scritti "per se stessi", quindi sono necessari per " cliente". Cosa fare? Coprire ciascun getter separatamente? Questo non sarà un test efficace. Ma se non li copriamo, non raggiungeremo la percentuale massima di CC. È qui che emerge un’arma a doppio taglio.

Perché abbiamo bisogno della Code Coverage?

Penso che la risposta a questa domanda sarà molto semplice: qualsiasi codice necessita di essere testato in modo che durante il refactoring o l'aggiunta/modifica di funzionalità non si verifichino bug "invisibili" e possiamo monitorarli. Non esamineremo framework con punti di interruzione e debugger per individuare questo vile bug. La vita è troppo breve. Esempio Quindi, la cosa più interessante. Il compito è questo: introdurre nel nostro progetto open source , di cui abbiamo scritto nell'articolo precedente , una tecnologia che raccoglierà informazioni su CC, le elaborerà da qualche parte e sarà possibile inserire queste informazioni su GitHub sotto forma di un distintivo, per esempio. Tutto il codice sorgente verrà pubblicato sul mio GitHub .
  1. Iniziamo scegliendo un plugin per raccogliere le informazioni sulla copertura del codice in una pila. Personalmente ho scelto JaCoCo , che raccoglie informazioni sulla copertura del codice. Ma ci sono anche delle alternative .

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

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

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

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

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

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

    Copertura del codice - 3

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

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

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

    Copertura del codice - 5

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

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

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

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

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

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

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

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

      Copertura del codice - 8

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

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

      Copertura del codice - 9
Полезные ссылки Potrebbero esserci errori ed omissioni nel testo. Grazie a tutti per l'attenzione!
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION