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

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

JCov

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

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

Функции

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

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

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

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

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

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

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

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

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

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

JaCoCo

JaCoCo
Разработчики)Марк Хоффманн, Брок Яничак, Евгений Мандриков, Мирко Фриденхаген
Стабильный выпуск
0.8.6 / 15 сентября 2020 г.; 2 месяца назад (2020-09-15)
ТипПокрытие кода
ЛицензияEPL
Интернет сайтwww.jacoco.org/ jacoco

JaCoCo является Открытый исходный код набор инструментов для измерения и отчетности Ява покрытие кода. JaCoCo распространяется на условиях Общественная лицензия Eclipse. Он был разработан как замена EMMA,[1] под эгидой плагина EclEmma для Eclipse.

Функции

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

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

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

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

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

OpenClover

OpenClover
Разработчики)Марек Парфьянович, Гжегож Левандовски
Стабильный выпуск
4.4.1 / 11 октября 2019 г.; 13 месяцев назад (2019-10-11)
ТипПокрытие кода
ЛицензияЛицензия Apache 2.0
Интернет сайтоткрытый клевер.org

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

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

OpenClover интегрируется с Муравей, Maven, Gradle, Грааль, Затмение, IntelliJ IDEA, Бамбук, Дженкинс, Hudson, Грифон, SonarQube и AspectJ.

Cobertura

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

Кобертура - это Открытый исходный код инструмент для измерения покрытия кода. Это достигается путем инструментирования байтового кода.

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

Умиротворенность
Разработчики)Майкл Кук
Стабильный выпуск
1.0 / 8 декабря 2013 г.; 6 лет назад (2013-12-08)
ТипПокрытие кода
ЛицензияЛицензия на программное обеспечение Apache версия 2.0
Интернет сайтвики.jenkins-ci.org/отображать/ ДЖЕНКИНС/ Serenity + Плагин

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

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

<!-- Serenity system properties. --> ключ ="включенные. пакеты" значение ="your.package.name.here" /> ключ ="включены. адаптеры" значение =«охват, сложность, зависимость» /><!-- Serenity JVM command line. --> линия ="-javaagent: serenity / serenity.jar" />

И пример конфигурации Maven:

<properties><included.packages>-Dincluded.packages = your.package.name.here</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.

Testwell CTC ++ для Java

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

Testwell CTC ++ это покрытие кода инструмент для C, C ++, Ява и C #. Разработка этого инструмента началась в 1989 году в компании Testwell в Финляндии. С 2013 года поддержку и развитие продолжает Verifysoft Technology, компания из г. Offenburg, Германия. Testwell CTC ++ анализирует все уровни покрытия кода до Измененное условие / покрытие решения и Многусловное покрытие.[13] Инструмент работает со всеми компиляторы.[14]

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

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

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

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

Клевер

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

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

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

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

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

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

ЭММА

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

ЭММА является Открытый исходный код набор инструментов для измерения и отчетности Ява покрытие кода. EMMA распространяется на условиях Общая общественная лицензия v1.0.

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

Функции

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

Рекомендации

  1. ^ Миссия JaCoCo
  2. ^ Патроклос Папапетру (19 декабря 2012 г.). «Сравнение инструментов покрытия кода (JaCoCo, Cobertura, Emma) в сонаре». Только программное обеспечение имеет значение. Получено 3 марта 2013.
  3. ^ Измерение покрытия с помощью интеграционных тестов с сонаром - обновлено
  4. ^ а б «Покрытие кода». Веб-справка IntelliJ IDEA 12.0. JetBrains. Архивировано из оригинал 26 апреля 2013 г.. Получено 3 марта 2013.
  5. ^ EclEmma, ​​плагин покрытия кода Eclipse
  6. ^ Плагин Jenkins JaCoCo
  7. ^ Поддержка NetBeans JaCoCo
  8. ^ Плагин Gradle JaCoCo
  9. ^ Интеграция JaCoCo в Visual Studio Team Services
  10. ^ Интеграция JaCoCo в TeamCity
  11. ^ Jacoco используется инструментом STAMP DSpot в качестве селектора тестов (рассматривается как пригодность) для выбора тестов, которые увеличивают охват и имеют уникальный путь выполнения.
  12. ^ OpenClover - О нас
  13. ^ Testwell CTC ++ поддерживает все уровни покрытия
  14. ^ Testwell CTC ++ поддерживает все компиляторы
  15. ^ "Почему Clover использует инструментарий исходного кода?"
  16. ^ Оптимизация тестов
  17. ^ «Atlassian Clover теперь имеет открытый исходный код». atlassian.com. 11 апреля 2017.
  18. ^ "атласский / клевер". bitbucket.org.
  19. ^ Файлы покрытия кода EMMA на SourceForge.net
  20. ^ Эксперт Spring MVC и Web Flow; Сет Лэдд, Даррен Дэвисон, Стивен Девиджвер, Колин Йейтс, стр. 289

внешняя ссылка