การครอบคลุมโค้ดคืออะไร?
การครอบคลุมโค้ดคือค่าที่แน่นอนที่แสดงเปอร์เซ็นต์ของซอร์สโค้ดที่เสร็จสมบูรณ์ระหว่างการทดสอบ โอเค ทุกอย่างดูเหมือนชัดเจนที่นี่ เปอร์เซ็นต์การครอบคลุมโค้ดสามารถอยู่ในช่วงตั้งแต่ 0 ถึง 100 และอาจมีคำถามเกิดขึ้น: คุณควรพยายามเพื่อให้ได้เปอร์เซ็นต์ CC สูงสุดหรือไม่ คำตอบของฉันคือ: ใช่และไม่ใช่ ทำไมเป็นอย่างนั้น? สมมติว่าคุณสร้างโปรเจ็กต์ที่จะใช้โดยโปรเจ็กต์อื่นบางโปรเจ็กต์ มันเต็มไปด้วยฟังก์ชันการทำงาน และเหนือสิ่งอื่นใดที่น่าสยดสยองก็คือ มีทั้งตัวเริ่มต้นและตัวตั้งค่า และมีเพียงไม่กี่ตัวเท่านั้น เมื่อครอบคลุมฟังก์ชันการทำงาน ไม่ใช่ทั้งหมด กล่าวคือ getters ได้รับการคุ้มครอง แต่คุณทราบแน่นอนว่าผู้ที่ไม่ได้รับการคุ้มครองจะไม่ถูกเรียกในโปรเจ็กต์ของคุณ แต่ getters ไม่ได้ถูกเขียนว่า "เพื่อตัวเอง" เสมอไป ดังนั้นจึงจำเป็นสำหรับ " ลูกค้า". จะทำอย่างไร? ครอบคลุม getter แต่ละตัวแยกกันหรือไม่? นี่จะไม่เป็นการทดสอบที่มีประสิทธิภาพ แต่หากเราไม่ครอบคลุม เราจะไม่ได้รับเปอร์เซ็นต์ CC สูงสุด นี่คือที่ดาบสองคมเกิดขึ้นทำไมเราจึงต้องมี Code Coverage?
ฉันคิดว่าคำตอบสำหรับคำถามนี้จะง่ายมาก: โค้ดใดๆ ก็ตามที่จำเป็นต้องทดสอบ เพื่อว่าเมื่อมีการปรับโครงสร้างใหม่หรือเพิ่ม/เปลี่ยนแปลงฟังก์ชันการทำงาน จะไม่เกิดข้อบกพร่องที่ "มองไม่เห็น" และเราสามารถติดตามได้ เราจะไม่ทำงานผ่านเฟรมเวิร์กที่มีเบรกพอยต์และดีบักเกอร์ และตรวจพบข้อผิดพลาดที่เลวร้ายนี้ ชีวิตสั้นเกินไป. ตัวอย่าง ดังนั้นสิ่งที่น่าสนใจที่สุด ภารกิจคือ: แนะนำโครงการโอเพ่นซอร์ส ของเรา ซึ่งเราเขียนในบทความก่อนหน้านี้เทคโนโลยีที่จะรวบรวมข้อมูลเกี่ยวกับ CC ประมวลผลที่ไหนสักแห่งและจะสามารถวางข้อมูลนี้บน GitHub ในรูปแบบของ ป้ายชื่อเช่น ซอร์สโค้ดทั้งหมดจะถูกโพสต์บนGitHub ของ ฉัน-
เริ่มต้นด้วยการเลือกปลั๊กอินเพื่อรวบรวมข้อมูลการครอบคลุมโค้ดไว้ในกองเดียว ส่วนตัวฉันเลือกJaCoCoซึ่งรวบรวมข้อมูลเกี่ยวกับการครอบคลุมโค้ด แต่ยังมีทางเลือกอื่น
Сайт JaCoCo предлагает нам скачать плагин, но качать мы нечего не будем, ведь мы используем Build System Maven. Заходим в Maven Repository и ищем JaCoCo Plugin. Берем последнюю версию, и вставляем в наш pom.xml зависимость.
Но через dependencies я делать не рекомендую, ведь есть более хороший, более функциональный альтернативный вариант, и даже не один.
-
Заходим CodeCov Setup выбираем язык Java и выбираем Using JaCoCo плагин, и ставим по инструкции.
-
По той же ссылке выбираем 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:
-
-
Плагин стоит. Все вроде бы замечательно. Но если вы внимательно читали инструкцию по установке JaCoCo plugin, там было указание, добавить в .travis.yml строчку, отвечающую за отправку отчёта plugin на сайт Codecov.
Итак, исходя из Using JaCoCo, нам нужно вписать в наш файл:
after_success: - bash <(curl -s https://codecov.io/bash)
Вписали. Отлично.
-
Все вроде готово, и остались финальные штрихи. Во-первых давайте скомпorруем наш code, и запустим все тесты, причем сделаем это через Lifecycle Maven:
Так How у нас в плагине JaCoCo стоит фаза выполнения test, то должен был появится отчет после выполнения цикла тестов Maven в папке target:
-
Подходим к завершению. Мы видим что все работает прекрасно, осталось лишь убедится что это "все прекрасно" также будет работать на внешних источниках. Настала пора собрать все в кучу. Собираем проект и делаем push на GitHub, перед этим открыв Travis CI и Codecov для мониторинга происходящего.
После push мы видим что сборка успешная:
И результат JaCoCo plugin о покрытии codeа:
-
Помните нашу задачу? Да, да, мы забыл про бейджик. Я хотел вынести тему "Украшение" open-source project'ов в отдельную статью, но маленькую часть все же оставлю здесь.
Итак, пошаговая инструкция что бы не заблудится:
-
Переходим на сайт Codecov;
-
Выбираем проект, который вам нужно;
-
Выбираем Setting:
-
Выбираем Badge и видим ссылки на ваш бейджик в несколько различных формах представления:
Первые это стандартные бейджики, их можно вставить, например, в ваш README.md:
Их особенность в том что при кликании на них вас будет перенаправлять на page с отчетом о CC;
Вторые это графы, таблицы и тому подобные штуки:
-
- Мой тестовый проект, который вы можете скачать, посмотреть, оценить. Все по этой статье находится в branch: JaCoCo;
- เครื่องมือครอบคลุมโค้ด Java ;
- ทางเลือก JaCoCo ;
- ห้องสมุดจาโคโค่ ;
- การพึ่งพาปลั๊กอิน JaCoCo Maven ;
- บทช่วยสอนการตั้งค่าCodecov ;
- จริงๆแล้วการตั้งค่าJaCoCo นั้นเอง ;
- การจัดตั้งCobertura ;
GO TO FULL VERSION