JavaRush /בלוג Java /Random-HE /כיסוי קוד
Nikita Koliadin
רָמָה
Днепр

כיסוי קוד

פורסם בקבוצה
שלום, חברים, עמיתים ו...פינגווינים! כיסוי קוד - 1היום נדבר על Code Coverage , נבין מה זה, למה זה נחוץ וכיצד לשדרג את פרויקט הקוד הפתוח שלך על ידי אספקת סטטיסטיקות Code Coverage. מאמר זה הוא המשך לקוני של המאמר הקודם על אינטגרציה רציפה . כאן נלמד עוד יתרון חזק של CI בשילוב עם... ובקרוב תגלו עם מה! רק אדגיש שלא יהיו כאן הנחיות כיצד לכתוב נכון מבחנים עבור התוכניות שלך, וכיצד להשיג את הכיסוי השימושי המקסימלי האפשרי; כל החטא הזה יישאר רק על כתפיך. אז בוא נלך!

מהו כיסוי קוד?

כיסוי קוד הוא ערך מסוים שמראה לנו את אחוז קוד המקור שהושלם במהלך הבדיקה. אוקיי, הכל נראה ברור כאן. אחוז כיסוי הקוד יכול לנוע בין 0 ל-100, ועלולה להתעורר השאלה: האם כדאי לשאוף לאחוז ה-CC המקסימלי? התשובה שלי היא: כן ולא. למה? נניח שאתה יוצר פרויקט שישמש כמה פרויקטים אחרים, הוא מלא בפונקציונליות, ובין כל הזוועה יש גטרים ו-seters, ויש לא מעט כאלה. כשמכסים את הפונקציונליות, לא כולם, נניח, הגטרים היו מכוסים, אבל אתה יודע בוודאות שאלו שלא היו מכוסים לא נקראים בפרויקט שלך, אבל Getters לא תמיד נכתבים "לעצמם", ולכן הם נחוצים עבור " לָקוּחַ". מה לעשות? לכסות כל גטר בנפרד? זו לא תהיה בדיקה יעילה. אבל אם לא נכסה אותם, לא נשיג את אחוז ה-CC המקסימלי. כאן מתעוררת חרב פיפיות.

למה אנחנו צריכים כיסוי קוד?

אני חושב שהתשובה לשאלה זו תהיה פשוטה מאוד: כל קוד צריך בדיקה כדי שכאשר מבצעים מחדש או הוספה/שינוי פונקציונליות, באגים "בלתי נראים" לא מתעוררים, ונוכל לעקוב אחריהם. לא נרוץ במסגרות עם נקודות שבירה וניפוי באגים ונתפוס את הבאג השפל הזה. חיים קצרים מדי. דוגמה אז, הדבר הכי מעניין. המשימה היא זו: הכניסו לפרויקט הקוד הפתוח שלנו , שכתבנו במאמר הקודם , טכנולוגיה שתאסוף מידע על CC, תעבד אותו איפשהו, וניתן יהיה למקם את המידע הזה ב-GitHub בצורה של תג, למשל. כל קוד המקור יתפרסם ב- GitHub שלי .
  1. נתחיל בבחירת תוסף לאיסוף מידע על כיסוי קוד בערימה אחת. אני אישית בחרתי ב-JaCoCo , שאוספת מידע על כיסוי קוד. אבל יש גם אלטרנטיבות .

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

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

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

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

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

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

    כיסוי קוד - 3

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

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

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

    כיסוי קוד - 5

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

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

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

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

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

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

      כיסוי קוד - 7
    4. Выбираем Badge и видим ссылки на ваш бейджик в несколько различных формах представления:

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

      כיסוי קוד - 8

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

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

      כיסוי קוד - 9
Полезные ссылки ייתכנו טעויות והשמטות בטקסט. תודה לכולכם על תשומת הלב!
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION