JavaRush /Blog Java /Random-FR /Couverture de code
Nikita Koliadin
Niveau 40
Днепр

Couverture de code

Publié dans le groupe Random-FR
Salutations, amis, collègues et... pingouins ! Couverture du code - 1Aujourd'hui, nous parlerons de la couverture du code , nous découvrirons ce que c'est, pourquoi elle est nécessaire et comment mettre à niveau votre projet open source en fournissant des statistiques sur la couverture du code. Cet article est une continuation laconique du précédent sur l'intégration continue . Ici, nous découvrirons un autre avantage puissant de CI en combinaison avec... et bientôt vous découvrirez avec quoi ! Je soulignerai seulement qu'il n'y aura pas ici d'instructions sur la manière d'écrire correctement des tests pour vos programmes et d'obtenir la couverture utile maximale possible ; tout ce péché ne restera que sur vos épaules. Alors allons-y!

Qu’est-ce que la couverture du code ?

La couverture du code est une certaine valeur qui nous montre le pourcentage de code source terminé pendant les tests. Bon, tout semble clair ici. Le pourcentage de couverture du code peut aller de 0 à 100, et la question peut se poser : faut-il viser le pourcentage maximum de CC ? Ma réponse est : oui et non. Pourquoi donc? Disons que vous créez un projet qui sera utilisé par d'autres projets, qu'il est plein de fonctionnalités et que parmi toute l'horreur, il y a des getters et des setters, et il y en a un bon nombre. Lors de la couverture des fonctionnalités, disons, tous les getters n'ont pas été couverts, mais vous savez avec certitude que ceux qui n'ont pas été couverts ne sont pas appelés dans votre projet, mais les getters ne sont pas toujours écrits « pour eux-mêmes », ils sont donc nécessaires pour le « client". Ce qu'il faut faire? Couvrir chaque getter séparément ? Ce ne sera pas un test efficace. Mais si nous ne les couvrons pas, nous n’atteindrons pas le pourcentage maximum de CC. C’est là qu’apparaît une arme à double tranchant.

Pourquoi avons-nous besoin d’une couverture de code ?

Je pense que la réponse à cette question sera très simple : tout code doit être testé afin que lors de la refactorisation ou de l'ajout/modification de fonctionnalités, des bogues « invisibles » ne surviennent pas et que nous puissions les suivre. Nous n’allons pas parcourir des frameworks avec des points d’arrêt et des débogueurs pour attraper ce vil bug. La vie est trop courte. Exemple Donc, la chose la plus intéressante. La tâche est la suivante : introduire dans notre projet open source , que nous avons écrit dans l'article précédent , une technologie qui collectera des informations sur CC, les traitera quelque part, et il sera possible de placer ces informations sur GitHub sous la forme d'un badge, par exemple. Tout le code source sera publié sur mon GitHub .
  1. Commençons par choisir un plugin pour collecter les informations de couverture de code en une seule pile. J'ai personnellement choisi JaCoCo , qui collecte des informations sur la couverture du code. Mais il existe aussi des alternatives .

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

    Couverture du 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:

    Couverture du code - 3

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

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

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

    Couverture du code - 5

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

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

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

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

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

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

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

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

      Couverture du code - 8

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

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

      Couverture du code - 9
Полезные ссылки Il peut y avoir des erreurs et des omissions dans le texte. Merci à tous pour votre attention !
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION