JavaRush /จาวาบล็อก /Random-TH /ความครอบคลุมของรหัส
Nikita Koliadin
ระดับ
Днепр

ความครอบคลุมของรหัส

เผยแพร่ในกลุ่ม
สวัสดีเพื่อนๆ เพื่อนร่วมงาน และ... เพนกวิน! ความครอบคลุมของโค้ด - 1วันนี้เราจะพูดถึงCode Coverageเราจะหาคำตอบว่ามันคืออะไร เหตุใดจึงจำเป็น และวิธีอัปเกรดโปรเจ็กต์โอเพ่นซอร์สของคุณโดยจัดทำสถิติ Code Coverage บทความนี้เป็นบทความต่อเนื่องที่กระชับจากบทความก่อนหน้าเกี่ยวกับContinuous Integration ที่นี่เราจะเรียนรู้ข้อดีอันทรงพลังอีกประการหนึ่งของ CI ร่วมกับ... และในไม่ช้าคุณจะพบกับอะไร! ฉันจะเน้นเพียงว่าจะไม่มีคำแนะนำเกี่ยวกับวิธีการเขียนการทดสอบสำหรับโปรแกรมของคุณอย่างถูกต้องและวิธีการบรรลุความคุ้มครองที่เป็นประโยชน์สูงสุดเท่าที่จะเป็นไปได้ บาปทั้งหมดนี้จะยังคงอยู่บนไหล่ของคุณเท่านั้น งั้นไปกัน!

การครอบคลุมโค้ดคืออะไร?

การครอบคลุมโค้ดคือค่าที่แน่นอนที่แสดงเปอร์เซ็นต์ของซอร์สโค้ดที่เสร็จสมบูรณ์ระหว่างการทดสอบ โอเค ทุกอย่างดูเหมือนชัดเจนที่นี่ เปอร์เซ็นต์การครอบคลุมโค้ดสามารถอยู่ในช่วงตั้งแต่ 0 ถึง 100 และอาจมีคำถามเกิดขึ้น: คุณควรพยายามเพื่อให้ได้เปอร์เซ็นต์ CC สูงสุดหรือไม่ คำตอบของฉันคือ: ใช่และไม่ใช่ ทำไมเป็นอย่างนั้น? สมมติว่าคุณสร้างโปรเจ็กต์ที่จะใช้โดยโปรเจ็กต์อื่นบางโปรเจ็กต์ มันเต็มไปด้วยฟังก์ชันการทำงาน และเหนือสิ่งอื่นใดที่น่าสยดสยองก็คือ มีทั้งตัวเริ่มต้นและตัวตั้งค่า และมีเพียงไม่กี่ตัวเท่านั้น เมื่อครอบคลุมฟังก์ชันการทำงาน ไม่ใช่ทั้งหมด กล่าวคือ getters ได้รับการคุ้มครอง แต่คุณทราบแน่นอนว่าผู้ที่ไม่ได้รับการคุ้มครองจะไม่ถูกเรียกในโปรเจ็กต์ของคุณ แต่ getters ไม่ได้ถูกเขียนว่า "เพื่อตัวเอง" เสมอไป ดังนั้นจึงจำเป็นสำหรับ " ลูกค้า". จะทำอย่างไร? ครอบคลุม getter แต่ละตัวแยกกันหรือไม่? นี่จะไม่เป็นการทดสอบที่มีประสิทธิภาพ แต่หากเราไม่ครอบคลุม เราจะไม่ได้รับเปอร์เซ็นต์ CC สูงสุด นี่คือที่ดาบสองคมเกิดขึ้น

ทำไมเราจึงต้องมี Code Coverage?

ฉันคิดว่าคำตอบสำหรับคำถามนี้จะง่ายมาก: โค้ดใดๆ ก็ตามที่จำเป็นต้องทดสอบ เพื่อว่าเมื่อมีการปรับโครงสร้างใหม่หรือเพิ่ม/เปลี่ยนแปลงฟังก์ชันการทำงาน จะไม่เกิดข้อบกพร่องที่ "มองไม่เห็น" และเราสามารถติดตามได้ เราจะไม่ทำงานผ่านเฟรมเวิร์กที่มีเบรกพอยต์และดีบักเกอร์ และตรวจพบข้อผิดพลาดที่เลวร้ายนี้ ชีวิตสั้นเกินไป. ตัวอย่าง ดังนั้นสิ่งที่น่าสนใจที่สุด ภารกิจคือ: แนะนำโครงการโอเพ่นซอร์ส ของเรา ซึ่งเราเขียนในบทความก่อนหน้านี้เทคโนโลยีที่จะรวบรวมข้อมูลเกี่ยวกับ 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