JavaRush /Java-Blog /Random-DE /Codeabdeckung
Nikita Koliadin
Level 40
Днепр

Codeabdeckung

Veröffentlicht in der Gruppe Random-DE
Grüße, Freunde, Kollegen und... Pinguine! Codeabdeckung – 1Heute werden wir über Code Coverage sprechen , wir werden herausfinden, was es ist, warum es benötigt wird und wie Sie Ihr Open-Source-Projekt durch die Bereitstellung von Statistiken zur Code Coverage aktualisieren können. Dieser Artikel ist eine lakonische Fortsetzung des vorherigen Artikels über Continuous Integration . Hier erfahren wir einen weiteren starken Vorteil von CI in Kombination mit ... und bald erfahren Sie, womit! Ich möchte nur betonen, dass es hier keine Anweisungen gibt, wie Sie Tests für Ihre Programme richtig schreiben und wie Sie die größtmögliche nützliche Abdeckung erreichen; diese ganze Sünde wird nur auf Ihren Schultern bleiben. So lass uns gehen!

Was ist Codeabdeckung?

Code Coverage ist ein bestimmter Wert, der uns den Prozentsatz des während des Tests fertiggestellten Quellcodes anzeigt. Okay, hier scheint alles klar zu sein. Der Prozentsatz der Codeabdeckung kann zwischen 0 und 100 liegen, und es stellt sich möglicherweise die Frage: Sollten Sie den maximalen CC-Prozentsatz anstreben? Meine Antwort lautet: Ja und Nein. Warum so? Nehmen wir an, Sie erstellen ein Projekt, das von einigen anderen Projekten verwendet wird. Es ist voller Funktionen und zwischen all dem Schrecken gibt es Getter und Setter, und davon gibt es einige. Bei der Abdeckung der Funktionalität wurden beispielsweise nicht alle Getter abgedeckt, aber Sie wissen sicher, dass diejenigen, die nicht abgedeckt wurden, in Ihrem Projekt nicht aufgerufen werden, aber Getter werden nicht immer „für sich selbst“ geschrieben, daher werden sie für die „ Klient". Was zu tun? Jeden Getter einzeln abdecken? Dies wird kein effektiver Test sein. Aber wenn wir sie nicht abdecken, werden wir den maximalen CC-Prozentsatz nicht erreichen. Hier entsteht ein zweischneidiges Schwert.

Warum brauchen wir Code Coverage?

Ich denke, die Antwort auf diese Frage wird sehr einfach sein: Jeder Code muss getestet werden, damit beim Refactoring oder beim Hinzufügen/Ändern von Funktionen keine „unsichtbaren“ Fehler auftreten und wir sie verfolgen können. Wir werden nicht Frameworks mit Haltepunkten und Debuggern durchgehen und diesen abscheulichen Fehler entdecken. Das Leben ist zu kurz. Beispiel Also das Interessanteste. Die Aufgabe besteht darin, in unser Open-Source-Projekt , über das wir im vorherigen Artikel geschrieben haben, eine Technologie einzuführen, die Informationen über CC sammelt, sie irgendwo verarbeitet und es möglich sein wird, diese Informationen in Form eines auf GitHub zu platzieren Abzeichen zum Beispiel. Der gesamte Quellcode wird auf meinem GitHub veröffentlicht .
  1. Beginnen wir mit der Auswahl eines Plugins , um Informationen zur Codeabdeckung auf einem Stapel zu sammeln. Ich persönlich habe mich für JaCoCo entschieden , das Informationen zur Codeabdeckung sammelt. Es gibt aber auch Alternativen .

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

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

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

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

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

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

    Codeabdeckung – 3

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

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

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

    Codeabdeckung – 5

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

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

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

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

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

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

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

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

      Codeabdeckung – 8

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

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

      Codeabdeckung – 9
Полезные ссылки Der Text kann Fehler und Auslassungen enthalten. Vielen Dank für Ihre Aufmerksamkeit!
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION