JavaRush /مدونة جافا /Random-AR /مدونة التغطية
Nikita Koliadin
مستوى
Днепр

مدونة التغطية

نشرت في المجموعة
تحياتي أيها الأصدقاء والزملاء و... طيور البطريق! تغطية الكود - 1سنتحدث اليوم عن تغطية التعليمات البرمجية ، وسنكتشف ماهيتها وسبب الحاجة إليها وكيفية ترقية مشروعك مفتوح المصدر من خلال توفير إحصائيات تغطية التعليمات البرمجية. هذه المقالة هي استمرار مقتضب للمقال السابق حول التكامل المستمر . سنتعرف هنا على ميزة قوية أخرى لـ CI مع... وسرعان ما ستكتشف ماذا! سأؤكد فقط أنه لن تكون هناك تعليمات هنا حول كيفية كتابة الاختبارات بشكل صحيح لبرامجك، وكيفية تحقيق أقصى قدر ممكن من التغطية المفيدة، وستبقى هذه الخطيئة بأكملها على كتفيك فقط. إذا هيا بنا!

ما هي تغطية الكود؟

تغطية الكود هي قيمة معينة توضح لنا النسبة المئوية لكود المصدر المكتمل أثناء الاختبار. حسنًا، كل شيء يبدو واضحًا هنا. يمكن أن تتراوح نسبة تغطية الكود من 0 إلى 100، وقد يطرح السؤال: هل يجب أن تسعى للحصول على الحد الأقصى لنسبة CC؟ جوابي هو: نعم ولا. لماذا هذا؟ لنفترض أنك قمت بإنشاء مشروع سيتم استخدامه من قبل بعض المشاريع الأخرى، فهو مليء بالوظائف، ومن بين كل الرعب هناك الحروف والمستوطنون، وهناك عدد غير قليل منهم. عند تغطية الوظائف، لم تتم تغطية جميع الحروف، على سبيل المثال، ولكنك تعلم على وجه اليقين أن تلك التي لم تتم تغطيتها لا يتم استدعاؤها في مشروعك، ولكن الحروف لا تتم كتابتها دائمًا "لأنفسهم"، لذا فهي ضرورية لـ " عميل". ما يجب القيام به؟ تغطية كل حاصل على حدة؟ وهذا لن يكون اختبارا فعالا. ولكن إذا لم نقم بتغطيتها، فلن نحقق الحد الأقصى لنسبة 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