Инструменты покрытия кода Java бывают двух типов: во-первых, инструменты, которые добавляют операторы в исходный код Java и требуют его перекомпиляции. Во-вторых, инструменты, которые обрабатывают байт-код до или во время выполнения. Цель состоит в том, чтобы выяснить, какие части кода тестируются, путем регистрации строк кода, выполняемых при запуске теста.
JCov [ править ]
Разработчики) | Леонид Арбузов, Александр Петров, Владимир Генералов, Сергей Чухонцев, Олег Ульянкин, Грегори Штюк, Павел Ождихин, Константин Бобровский, Роберт Филд, Александр Кузьмин, Леонид Месник, Сергей Бородин, Андрей Титов, Дмитрий Фазуненко, Алексей Федорченко, Леонид Кусков |
---|---|
Стабильный выпуск | 3.0 / 1 сентября 2014 г . |
Тип | Покрытие кода |
Лицензия | GPL v2 (с исключением пути к классам) |
Веб-сайт | вики |
JCov - это инструмент, который разрабатывался и использовался с Sun JDK (а позже Oracle JDK) с самого начала Java: с версии 1.1. JCov может измерять и сообщать о покрытии кода Java . JCov распространяется на условиях GNU Public License (версия 2, с исключением Classpath). 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 [ править ]
Разработчики) | Марк Хоффманн, Брок Яничак, Евгений Мандриков, Мирко Фриденхаген |
---|---|
Стабильный выпуск | 0.8.6 / 15 сентября 2020 г . |
Тип | Покрытие кода |
Лицензия | EPL |
Веб-сайт | www |
JaCoCo - это набор инструментов с открытым исходным кодом для измерения покрытия кода Java и создания отчетов . JaCoCo распространяется на условиях общественной лицензии Eclipse . Он был разработан как замена 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.
Инструменты, использующие или включающие JaCoCo [ править ]
- Плагин SonarQube JaCoCo - одно из значений по умолчанию для анализа покрытия в платформе управления качеством кода SonarQube
- EclEmma Eclipse (программное обеспечение) Подключаемый модуль Code Coverage, ранее был основан на EMMA [5]
- Плагин Jenkins JaCoCo [6]
- Поддержка Netbeans JaCoCo [7]
- IntelliJ IDEA, начиная с версии 11 [4]
- Плагин Gradle JaCoCo [8]
- Visual Studio Team Services [9]
- TeamCity [10]
- ПЕЧАТЬ ( https://www.stamp-project.eu/ ) [11]
OpenClover [ править ]
Разработчики) | Марек Парфьянович, Гжегож Левандовски |
---|---|
Стабильный выпуск | 4.4.1 / 11 октября 2019 г . |
Тип | Покрытие кода |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | openclover .org |
OpenClover - это бесплатный преемник Atlassian Clover с открытым исходным кодом, созданный как форк кодовой базы Clover, опубликованной Atlassian в 2017 году. Он содержит все функции оригинального Clover (серверная версия). Проект OpenClover возглавляют разработчики, которые поддерживали Clover в 2012–2017 годах. [12]
OpenClover использует технику инструментовки исходного кода и поддерживает языки Java, Groovy и AspectJ . Некоторые из его функций включают в себя: точный контроль объема измерения покрытия, оптимизацию тестирования и сложные отчеты.
OpenClover интегрируется с Ant , Maven , Gradle , Grails , Eclipse , IntelliJ IDEA , Bamboo , Jenkins , Hudson , Griffon , SonarQube и AspectJ.
Кобертура [ править ]
Разработчики) | Стивен Христу |
---|---|
Стабильный выпуск | 2.1.1 / 26 февраля 2015 г . |
Репозиторий | github .com / cobertura / cobertura |
Тип | Покрытие кода |
Лицензия | GPL 2.0 |
Веб-сайт | cobertura .github .io / cobertura / |
Cobertura - это инструмент с открытым исходным кодом для измерения покрытия кода. Это делается путем инструментирования байтового кода.
Безмятежность [ править ]
Разработчики) | Майкл Кук |
---|---|
Стабильный выпуск | 1.0 / 8 декабря 2013 г . |
Тип | Покрытие кода |
Лицензия | Лицензия на программное обеспечение Apache версии 2.0 |
Веб-сайт | wiki .jenkins-ci .org / display / JENKINS / Serenity + Плагин |
Serenity - это набор инструментов с открытым исходным кодом для измерения покрытия кода Java и создания отчетов . Помимо покрытия, измеряются основные метрики кода: - циклометрическая сложность, стабильность, абстрактность и удаленность от основного. Данные отчета сохраняются в базе данных объектов и доступны через Jenkins / Hudson. Интерфейс визуально копирует интерфейс Eclipse IDE.
Serenity динамически улучшает байтовый код, делая ненужным этап посткомпиляции. Поддерживаются проекты Ant и Maven. Конфигурация выполняется в xml, пример Ant будет:
<! - Свойства системы безмятежности. -> <sysproperty key = "included.packages" value = "your.package.name.here" /> <sysproperty key = "included.adapters" value = "охват, сложность, зависимость" /> <! - Безмятежность Командная строка JVM. -> <jvmarg 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>
Полный пример конфигурации см. В wiki Jenkins по адресу https://wiki.jenkins-ci.org/display/JENKINS/Serenity+Plugin .
Поддерживаются ведомые устройства Jenkins, а также многомодульные проекты Maven.
Testwell CTC ++ для Java [ править ]
Разработчики) | Verifysoft Technology |
---|---|
Стабильный выпуск | 8.0. / 30 июня 2016 г . |
Тип | Покрытие кода |
Лицензия | Проприетарный |
Веб-сайт | verifysoft .com / en _ctcpp .html |
Testwell CTC ++ - это инструмент покрытия кода для C , C ++ , Java и C # . Разработка этого инструмента началась в 1989 году в компании Testwell в Финляндии. С 2013 года поддержку и развитие продолжила компания Verifysoft Technology из Оффенбурга , Германия . Testwell CTC ++ анализирует все уровни покрытия кода, вплоть до покрытия модифицированных условий / решений и покрытия множественных условий . [13] Инструмент работает со всеми компиляторами . [14]
Агент покрытия кода IntelliJ IDEA [ править ]
Разработчики) | JetBrains |
---|---|
Тип | Покрытие кода |
Лицензия | Apache 2.0 |
Веб-сайт | github .com / JetBrains / intellij-покрытие |
Агент покрытия кода IntelliJ IDEA - это инструмент покрытия кода , интегрированный в IntelliJ IDEA IDE и сервер TeamCity CI. Он поддерживает покрытие филиалов и отслеживание покрытия для каждого теста.
Известные исторические инструменты [ править ]
Клевер [ править ]
Разработчики) | Атласский |
---|---|
Стабильный выпуск | 4.1.2 / 11 октября 2016 г . |
Тип | Покрытие кода |
Лицензия | Apache 2.0 |
Веб-сайт | atlassian .com |
Clover - это утилита для анализа покрытия кода Java, приобретенная и разработанная Atlassian . В апреле 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 г . |
Репозиторий | sourceforge .net / проекты / эмма / |
Тип | Покрытие кода |
Лицензия | Общая общественная лицензия 1.0 |
Веб-сайт | Эмма .sourceforge .net |
EMMA - это набор инструментов с открытым исходным кодом для измерения покрытия кода Java и создания отчетов . EMMA распространяется на условиях Common Public License 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).
Ссылки [ править ]
- ^ Миссия JaCoCo
- ^ Patroklos Папапетр (19 декабря 2012). «Сравнение инструментов покрытия кода (JaCoCo, Cobertura, Emma) в сонаре» . Только программное обеспечение имеет значение . Проверено 3 марта 2013 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ Измерение покрытия с помощью интеграционных тестов с сонаром - Обновлено
- ^ a b «Покрытие кода» . Веб-справка IntelliJ IDEA 12.0 . JetBrains. Архивировано из оригинального 26 апреля 2013 года . Проверено 3 марта 2013 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ EclEmma, плагин покрытия кода Eclipse
- ^ Плагин Jenkins JaCoCo
- ^ Поддержка NetBeans JaCoCo
- ^ Плагин Gradle JaCoCo
- ^ Интеграция JaCoCo в Visual Studio Team Services
- ^ Интеграция JaCoCo в TeamCity
- ^ Jacoco используется инструментом STAMP DSpot в качестве селектора тестов (рассматривается как пригодность) для выбора тестов, которые увеличивают охват и имеют уникальный путь выполнения.
- ^ OpenClover - О нас
- ^ Testwell CTC ++ поддерживает все уровни покрытия
- ^ Testwell CTC ++ поддерживает все компиляторы
- ^ "Почему Clover использует инструменты исходного кода?"
- ^ Оптимизация тестов
- ^ «Atlassian Clover теперь имеет открытый исходный код» . atlassian.com . 11 апреля 2017.
- ^ "атласский / клевер" . bitbucket.org .
- ^ Файлы покрытия кода EMMA на SourceForge.net
- ^ Эксперт Spring MVC и Web Flow; Сет Лэдд, Даррен Дэвисон, Стивен Девиджвер, Колин Йейтс, стр. 289
Внешние ссылки [ править ]
- Сравнение OpenClover, Clover, Cobertura, JaCoCo, JCov, CodeCover и PIT
- JaCoCo против Clover2
- Выберите инструмент покрытия кода в Sonar 2.2 , он немного устарел, поскольку JaCoCo тем временем поддерживает покрытие веток.
- Тестирование приложений Java с помощью Visual Studio Team Services