Инструменты покрытия кода Java

Инструменты разработки Java

Инструменты покрытия кода Java бывают двух типов: во-первых, инструменты, которые добавляют операторы в исходный код Java и требуют его перекомпиляции. Во-вторых, инструменты, которые инструментируют байт-код , либо до, либо во время выполнения. Цель состоит в том, чтобы выяснить, какие части кода тестируются, регистрируя строки кода, выполняемые при запуске теста.

JaCoCo

JaCoCo
Разработчик(и)Марк Хоффманн, Брок Яничак, Евгений Мандриков, Мирко Фриденхаген
Стабильный релиз
0.8.12 / 31 марта 2024 г. ; 9 месяцев назад ( 2024-03-31 )
ТипПокрытие кода
ЛицензияАПЛ
Веб-сайтwww.jacoco.org/jacoco

JaCoCo — это набор инструментов с открытым исходным кодом для измерения и составления отчетов о покрытии кода Java . JaCoCo распространяется на условиях Eclipse Public License . Он был разработан в качестве замены EMMA [1] под эгидой подключаемого модуля EclEmma для Eclipse.

Функции

JaCoCo предлагает инструкции, покрытие линий и отделений.

В отличие от Atlassian Clover и OpenClover, которые требуют инструментирования исходного кода, JaCoCo может инструментировать байт-код Java, используя два разных подхода:

  • как JCov на лету при запуске кода с помощью Java-агента [2]
  • как Cobertura и JCov перед казнью (офлайн)

И может быть настроен для хранения собранных данных в файле или отправки их по TCP. Файлы из нескольких запусков или частей кода можно легко объединить. [3] В отличие от Cobertura и EMMA он полностью поддерживает Java 7, Java 8, [4] Java 9, Java 10, Java 11, Java 12, Java 13, Java 14, Java 15, Java 16, Java 17, Java 18, Java 19 и Java 20.

Инструменты, использующие или включающие JaCoCo


JCov

JCov
Разработчик(и)Леонид Арбузов, Александр Петров, Владимир Генералов, Сергей Чухонцев, Олег Ульянкин, Григорий Стойк, Павел Ождихин, Константин Бобровский, Роберт Филд, Александр Кузьмин, Леонид Месник, Сергей Бородин, Андрей Титов, Дмитрий Фазуненко, Алексей Федорченко, Леонид Кусков
Стабильный релиз
3.0 / 1 сентября 2014 г. ; 10 лет назад ( 2014-09-01 )
ТипПокрытие кода
ЛицензияGPL v2 (с исключением Classpath)
Веб-сайтwiki.openjdk.java.net/display/CodeTools/jcov

JCov — это инструмент, который был разработан и использовался с Sun JDK (а позже и Oracle JDK) с самого начала Java: с версии 1.1. JCov способен измерять и сообщать покрытие кода Java . JCov распространяется на условиях GNU General Public License (версия 2, с исключением Classpath). JCov стал открытым исходным кодом как часть проекта инструментов кода OpenJDK в 2014 году.

Функции

JCov способен сообщать о следующих типах покрытия кода:

  • Блок покрытия
  • Покрытие линии
  • Покрытие филиала
  • Метод покрытия

JCov реализует два различных способа сохранения собранных данных:

  • В файл в файловой системе
  • На сервер (он же «сетевой граббер»)

JCov работает, инструментируя байт-код Java, используя два разных подхода:

  • Статическое инструментирование, которое выполняется заранее, изменяя протестированный код.
  • Динамическое инструментирование, которое выполняется «на лету» с помощью Java-агента

У JCov есть еще несколько отличительных особенностей, которые включают в себя, но не ограничиваются:

  • Покрытие поля
  • Абстрактное покрытие API
  • Прямое/косвенное покрытие
  • Информация о покрытии по каждому тесту (также известная как «шкалы тестирования»)
  • Публичный API и SPI, которые позволяют реализовать пользовательскую фильтрацию и/или извлечение данных о покрытии

Инструменты с использованием JCov

  • Oracle JDK (SE и ME)
  • JCK (комплект совместимости Java)
  • Различные Java SE и Java ME TCK
  • Java FX SDK
  • Конструктор сцен Java FX

OpenClover

OpenClover
Разработчик(и)Марек Парфянович, Гжегож Левандовски
Стабильный релиз
4.5.2 / 31 января 2024 г. ; 11 месяцев назад ( 2024-01-31 )
ТипПокрытие кода
ЛицензияЛицензия Apache 2.0
Веб-сайтopenclover.org

OpenClover — это бесплатный и открытый преемник Atlassian Clover, созданный как ответвление от кодовой базы Clover, опубликованной Atlassian в 2017 году. Он содержит все функции оригинального Clover (серверной версии). Проект OpenClover возглавляют разработчики, которые поддерживали Clover в 2012–2017 годах. [15]

OpenClover использует технику инструментирования исходного кода и обрабатывает языки Java, Groovy и AspectJ . Некоторые из его функций включают: точный контроль над измерением охвата покрытия, оптимизацию тестирования и сложные отчеты.

OpenClover интегрируется с Ant , Maven , Gradle , Grails , Eclipse , IntelliJ IDEA , Bamboo , Jenkins , Hudson , Griffon , SonarQube и AspectJ.

Агент покрытия кода IntelliJ IDEA

Агент покрытия кода IntelliJ IDEA
Разработчик(и)JetBrains
ТипПокрытие кода
ЛицензияАпач 2.0
Веб-сайтgithub.com/JetBrains/intellij-coverage

IntelliJ IDEA Code Coverage Agent — это инструмент покрытия кода, интегрированный в IntelliJ IDEA IDE и сервер TeamCity CI. Он поддерживает покрытие ветвей и отслеживание покрытия по тестам.

Testwell CTC++ для Java

Тестовый колодец CTC++
Разработчик(и)Технология Verifysoft
Стабильный релиз
8.0. / 30 июня 2016 г. ; 8 лет назад ( 2016-06-30 )
ТипПокрытие кода
ЛицензияЗапатентованный
Веб-сайтverifysoft.com/en_ctcpp.html

Testwell CTC++ — это инструмент покрытия кода для C , C++ , Java и C# . Разработка этого инструмента началась в 1989 году в Testwell в Финляндии. С 2013 года поддержка и разработка продолжаются Verifysoft Technology, компанией из Оффенбурга , Германия . Testwell CTC++ анализирует все уровни покрытия кода вплоть до Modified condition/decision coverage и Multicondition Coverage. [16] Инструмент работает со всеми компиляторами . [17]

Известные исторические инструменты

Клевер

Клевер
Разработчик(и)Атлассиан
Стабильный релиз
4.1.2 / 11 октября 2016 г. ; 8 лет назад ( 2016-10-11 )
ТипПокрытие кода
ЛицензияАпач 2.0
Веб-сайтatlassian.com

Clover — это утилита анализа покрытия кода Java , купленная и доработанная Atlassian . В апреле 2017 года Atlassian объявила об окончании поддержки Clover и одновременно открыла его исходный код под лицензией Apache 2.0.

Clover использует технику инструментирования исходного кода (в отличие от Cobertura и JaCoCo, которые используют инструментирование байт-кода), что имеет свои преимущества (например, возможность сбора метрик кода) и недостатки (необходима повторная компиляция исходников). [18] Некоторые из его функций включают историческую отчетность, огромный контроль над процессом сбора покрытия, набор инструментов командной строки и API для устаревшей интеграции и многое другое.

Clover также позволяет сократить время тестирования, запуская только те тесты, которые покрывают код приложения, измененный с момента предыдущей сборки. Это называется оптимизацией тестов [19] и может привести к значительному сокращению времени ожидания завершения автоматизированных тестов.

Clover поставляется с рядом интеграций, разработанных как Atlassian (Ant, Maven, Grails, Eclipse, IDEA, Bamboo), так и сообществом разработчиков ПО с открытым исходным кодом (Gradle, Griffon, Jenkins, Hudson, Sonar).

В апреле 2017 года компания Atlassian объявила, что больше не будет выпускать новые версии Clover после версии 4.1.2, а ее код стал доступен как программное обеспечение с открытым исходным кодом, размещенное на Bitbucket . [20] [21]

Кобертура

Кобертура
Разработчик(и)Стивен Христу
Стабильный релиз
2.1.1 / 26 февраля 2015 г. ; 9 лет назад ( 2015-02-26 )
Репозиторийgithub.com/cobertura/cobertura
ТипПокрытие кода
ЛицензияЛицензия GPL 2.0
Веб-сайтcobertura.github.io/cobertura/

Cobertura — это инструмент с открытым исходным кодом для измерения покрытия кода. Он делает это, инструментируя байт-код. Он был предшественником JaCoCo.

ЭММА

ЭММА
Разработчик(и)Влад Рубцов
Стабильный релиз
2.1 / 13 мая 2005 г. ; 19 лет назад ( 2005-05-13 )
Репозиторийsourceforge.net/projects/emma/
ТипПокрытие кода
ЛицензияОбщая публичная лицензия 1.0
Веб-сайтemma.sourceforge.net

EMMA — это набор инструментов с открытым исходным кодом для измерения и составления отчетов о покрытии кода Java . EMMA распространяется на условиях Common Public License v1.0.

В настоящее время EMMA не находится в стадии активной разработки; последний стабильный релиз состоялся в середине 2005 года. В качестве замены был разработан JaCoCo. [22] EMMA работает, оборачивая каждую строку кода и каждое условие флагом, который устанавливается при выполнении этой строки. [23]

Функции

  • классы инструментов для покрытия как в автономном режиме (до их загрузки), так и «на лету» (с использованием загрузчика классов инструментального приложения).
  • Поддерживаемые типы покрытия: класс, метод, строка, базовый блок. EMMA может определить, когда отдельная строка исходного кода покрыта лишь частично.
  • Статистика покрытия агрегируется на уровнях метода, класса, пакета и «всех классов».
  • Типы выходных отчетов: простой текст, HTML, XML. Все типы отчетов поддерживают детализацию до контролируемой пользователем глубины детализации. HTML-отчет поддерживает привязку исходного кода.
  • В выходных отчетах могут быть выделены элементы с уровнями покрытия ниже пороговых значений, указанных пользователем.
  • Данные о покрытии, полученные с помощью различных приборов или тестовых запусков, можно объединить.
  • можно сбрасывать или сбрасывать данные покрытия удаленно и без выхода из JVM.
  • не требует доступа к исходному коду и плавно деградирует по мере уменьшения объема отладочной информации, доступной во входных классах.
  • может инструментировать отдельные .classфайлы или целые .jars(на месте, если необходимо). Эффективная фильтрация подмножества покрытия также возможна.
  • Интеграция сборок Makefile и ANT поддерживается на равной основе.
  • Накладные расходы времени выполнения добавленного инструментария невелики (5–20%), а сам инструментарий байт-кода очень быстр (в основном ограничен скоростью ввода-вывода файлов). Накладные расходы памяти составляют несколько сотен байт на класс Java.
  • EMMA — это 100% чистая Java, не имеющая внешних библиотечных зависимостей и работающая в любой Java 2 JVM (даже 1.2.x).

Умиротворенность

Умиротворенность
Разработчик(и)Майкл Коук
Стабильный релиз
1.0 / 8 декабря 2013 г. ; 11 лет назад ( 2013-12-08 )
ТипПокрытие кода
ЛицензияЛицензия на программное обеспечение Apache версии 2.0
Веб-сайтwiki.jenkins-ci.org/display/JENKINS/Serenity+Plugin

Serenity — это инструмент с открытым исходным кодом , создающий более автоматизированные приемочные тесты программного обеспечения за меньшее время. Он измеряет и сообщает покрытие кода Java . Он также создает понятные отчеты, описывающие, что делает приложение и как оно работает, включая то, какие тесты были запущены и какие требования были выполнены. Он работает с инструментами Selenium WebDriver, Appium и BDD.

Измеряются основные метрики кода, такие как циклометрическая сложность , стабильность, абстрактность и расстояние от основного. Данные отчета сохраняются в объектной базе данных и предоставляются через Jenkins/Hudson. Интерфейс визуально повторяет интерфейс Eclipse IDE.

Serenity динамически улучшает байт-код, делая ненужным шаг посткомпиляции. Поддерживаются проекты Ant и Maven. Конфигурация выполняется в xml, пример Ant будет таким:

<!-- Свойства системы Serenity. --> <sysproperty key= "included.packages" value= "your.package.name.here" /> <sysproperty key= "included.adapters" value= "coverage,complexity,dependency" /> <!-- Командная строка Serenity JVM. --> <jvmarg line= "-javaagent:serenity/serenity.jar" />        

А пример конфигурации Maven будет таким:

<properties> <included.packages> -Dincluded.packages=ваше.имя.пакета.здесь </included.packages> <included.adapters> -Dincluded.adapters=охват,сложность,зависимость </included.adapters> </properties> <argLine> -javaagent:serenity/serenity.jar  -Xms512m  -Xmx1024m  ${included.packages}  ${included.adapters} </argLine>

Полный пример конфигурации можно найти на вики-странице Jenkins по адресу https://wiki.jenkins-ci.org/display/JENKINS/Serenity+Plugin.

Поддерживаются подчиненные проекты Jenkins, а также многомодульные проекты Maven.

Ссылки

  1. ^ Миссия JaCoCo
  2. ^ Патроклос Папапетру (19 декабря 2012 г.). "Сравнение инструментов покрытия кода (JaCoCo, Cobertura, Emma) в сонаре". Имеет значение только программное обеспечение . Получено 3 марта 2013 г.
  3. ^ "Measure Coverage by Integration Tests with Sonar – Updated". Архивировано из оригинала 2013-02-23 . Получено 2013-03-01 .
  4. ^ ab "Code Coverage". IntelliJ IDEA 12.0 Web Help . JetBrains. Архивировано из оригинала 26 апреля 2013 г. Получено 3 марта 2013 г.
  5. ^ EclEmma, ​​плагин покрытия кода Eclipse
  6. ^ Плагин Jenkins JaCoCo
  7. ^ "Поддержка NetBeans JaCoCo". Архивировано из оригинала 2012-05-31 . Получено 2013-02-22 .
  8. ^ Плагин Gradle JaCoCo
  9. ^ Gulati & Sharma 2017, стр. 99–103, Глава §6 Интеграция инструментов — Инструменты сборки — Gradle.
  10. ^ Плагин Maven JaCoCo
  11. ^ Gulati & Sharma 2017, стр. 115, Глава §6 Интеграция инструментов - Инструменты сборки - Расширение Maven.
  12. ^ Интеграция JaCoCo в Visual Studio Team Services
  13. ^ Интеграция JaCoCo в TeamCity
  14. ^ Jacoco используется инструментом STAMP DSpot в качестве селектора тестов (рассматриваемого как пригодность) для выбора тестов, которые увеличивают покрытие и имеют уникальный путь выполнения.
  15. ^ OpenClover - О нас
  16. ^ Testwell CTC++ поддерживает все уровни покрытия.
  17. ^ Testwell CTC++ поддерживает все компиляторы
  18. ^ «Почему Clover использует инструментирование исходного кода?»
  19. ^ Тестовая оптимизация
  20. ^ "Atlassian Clover теперь имеет открытый исходный код". atlassian.com . 11 апреля 2017 г.
  21. ^ "atlassian/clover". bitbucket.org .
  22. ^ Файлы покрытия кода EMMA на SourceForge.net
  23. ^ Эксперт Spring MVC и Web Flow; Сет Лэдд, Даррен Дэвисон, Стивен Девийвер, Колин Йейтс, стр. 289

Цитаты

  • Gulati, Shekhar; Sharma, Rahul (2017). Тестирование модулей Java с помощью JUnit 5. Berkeley, CA: Apress . doi :10.1007/978-1-4842-3015-2. ISBN 978-1-4842-3014-5.
  • Сравнение OpenClover, Clover, Cobertura, JaCoCo, JCov, CodeCover и PIT
  • JaCoCo против Clover2
  • Выберите свой инструмент покрытия кода в Sonar 2.2 Архивировано 23.02.2013 на Wayback Machine , немного устарело, так как JaCoCo тем временем поддерживает покрытие ветвей
  • Тестирование приложений Java с помощью Visual Studio Team Services
Retrieved from "https://en.wikipedia.org/w/index.php?title=Java_code_coverage_tools&oldid=1238810348#Clover"