Инструменты покрытия кода Java
Инструменты покрытия кода Java бывают двух типов: во-первых, инструменты, которые добавляют операторы в Java исходный код и требуют его перекомпиляции. Во-вторых, инструменты, которые инструментируют байт-код до или во время выполнения. Цель — выяснить, какие части кода тестируются, регистрируя строки кода, выполняемые при запуске теста.
ДжаКоКо
[ редактировать ]Разработчик(и) | Марк Хоффманн, Брок Яничак, Евгений Мандриков, Мирко Фриденхаген |
---|---|
Стабильная версия | 0.8.12
/ 31 марта 2024 г |
Тип | Покрытие кода |
Лицензия | АПЛ |
Веб-сайт | www |
JaCoCo — это набор инструментов с открытым исходным кодом для измерения и составления отчетов Java о покрытии кода . JaCoCo распространяется на условиях публичной лицензии Eclipse . Он был разработан как замена EMMA, [1] под эгидой плагина EclEmma для Eclipse.
Функции
[ редактировать ]JaCoCo предлагает инструкции, покрытие линий и филиалов.
В отличие от Atlassian Clover и OpenClover , которые требуют инструментирования исходного кода, JaCoCo может инструментировать байт-код Java, используя два разных подхода:
И может быть настроен для хранения собранных данных в файле или отправки их по 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
[ редактировать ]- Плагин SonarQube JaCoCo — один из модулей по умолчанию для анализа покрытия в платформе управления качеством кода SonarQube.
- EclEmma Eclipse (программное обеспечение) Плагин покрытия кода, ранее основанный на EMMA [5]
- Плагин Jenkins JaCoCo [6]
- Netbeans JaCoCo Поддержка [7]
- IntelliJ IDEA начиная с версии 11 [4]
- Gradle JaCoCo Плагин [8] [9]
- Maven JaCoCo Плагин [10] [11]
- Командные службы Visual Studio [12]
- TeamCity [13]
- ПЕЧАТЬ ( https://www.stamp-project.eu/ [ постоянная мертвая ссылка ] ) [14]
JCov
[ редактировать ]Разработчик(и) | Leonid Arbouzov, Alexander Petrov, Vladimir Generalov, Serguei Chukhontsev, Oleg Uliankin, Gregory Steuck, Pavel Ozhdikhin, Konstantin Bobrovsky, Robert Field, Alexander Kuzmin, Leonid Mesnik, Sergey Borodin, Andrey Titov, Dmitry Fazunenko, Alexey Fedorchenko, Leonid Kuskov |
---|---|
Стабильная версия | 3.0
/ 1 сентября 2014 г |
Тип | Покрытие кода |
Лицензия | GPL v2 (с исключением пути к классам) |
Веб-сайт | неделя |
JCov — это инструмент, который был разработан и использовался с Sun JDK (а позже и с Oracle JDK) с самого начала Java: с версии 1.1. JCov способен измерять и сообщать Java о покрытии кода . JCov распространяется на условиях Стандартной общественной лицензии GNU (версия 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
- Java FX SDK
- Построитель сцен Java FX
OpenClover
[ редактировать ]Разработчик(и) | Марек Парфянович, Гжегож Левандовски |
---|---|
Стабильная версия | 4.5.2
/ 31 января 2024 г |
Тип | Покрытие кода |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | клевер |
OpenClover — это бесплатный преемник Atlassian Clover с открытым исходным кодом, созданный как ответвление базы кода Clover, опубликованной Atlassian в 2017 году. Он содержит все функции оригинального Clover (серверной версии). Проект OpenClover возглавляют разработчики, которые поддерживали Clover в 2012–2017 годах. [15]
Java, Groovy и AspectJ OpenClover использует технику инструментирования исходного кода и поддерживает языки . Некоторые из его функций включают в себя: точный контроль над объемом измерения покрытия, оптимизацию тестирования и сложные отчеты.
OpenClover интегрируется с Ant , Maven , Gradle , Grails , Eclipse , IntelliJ IDEA , Bamboo , Jenkins , Hudson , Griffon , SonarQube и AspectJ.
Агент покрытия кода IntelliJ IDEA
[ редактировать ]Разработчик(и) | JetBrains |
---|---|
Тип | Покрытие кода |
Лицензия | Апач 2.0 |
Веб-сайт | github |
IntelliJ IDEA Code Coverage Agent — это инструмент покрытия кода , интегрированный в IntelliJ IDEA IDE и сервер TeamCity CI. Он поддерживает покрытие филиалов и отслеживание покрытия каждого теста.
Testwell CTC++ для Java
[ редактировать ]Разработчик(и) | Технология Verifysoft |
---|---|
Стабильная версия | 8.0.
/ 30 июня 2016 г |
Тип | Покрытие кода |
Лицензия | Собственный |
Веб-сайт | verifysoft |
Testwell CTC++ — это инструмент покрытия кода для C , C++ , Java и C# . Разработка этого инструмента началась в 1989 году в компании Testwell в Финляндии. С 2013 года поддержку и развитие продолжает компания Verifysoft Technology из Оффенбурга , Германия . Testwell CTC++ анализирует все уровни покрытия кода вплоть до покрытия модифицированных условий/решений и покрытия множественных условий. [16] Инструмент работает со всеми компиляторами . [17]
Известные исторические инструменты
[ редактировать ]Клевер
[ редактировать ]![]() | |
Разработчик(и) | Атласиан |
---|---|
Стабильная версия | 4.1.2
/ 11 октября 2016 г |
Тип | Покрытие кода |
Лицензия | Апач 2.0 |
Веб-сайт | атласиан |
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 г |
Репозиторий | github |
Тип | Покрытие кода |
Лицензия | Лицензионная лицензия 2.0 |
Веб-сайт | покрытие |
Cobertura — это инструмент с открытым исходным кодом для измерения покрытия кода. Это достигается путем инструментирования байт-кода. Это был предшественник JaCoCo.
ЭММА
[ редактировать ]Разработчик(и) | Влад Рубцов |
---|---|
Стабильная версия | 2.1
/ 13 мая 2005 г |
Репозиторий | исходная кузня |
Тип | Покрытие кода |
Лицензия | Общая общественная лицензия 1.0 |
Веб-сайт | Эмма |
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, не имеет зависимостей от внешних библиотек и работает в любой JVM Java 2 (даже 1.2.x).
Умиротворенность
[ редактировать ]Разработчик(и) | Майкл Коук |
---|---|
Стабильная версия | 1.0
/ 8 декабря 2013 г |
Тип | Покрытие кода |
Лицензия | Лицензия на программное обеспечение Apache версии 2.0 |
Веб-сайт | неделя |
Serenity — это инструмент с открытым исходным кодом , позволяющий проводить более автоматизированные приемочные тесты программного обеспечения за меньшее время. Он также измеряет и сообщает Java о покрытии кода . Он также генерирует простые для понимания отчеты, в которых описывается, что делает приложение и как оно работает, в том числе какие тесты были проведены и какие требования были выполнены . Он работает с инструментами Selenium WebDriver, Appium и BDD.
основные метрики кода, такие как циклометрическая сложность Измеряются , стабильность, абстрактность и расстояние от основного. Данные отчета сохраняются в объектной базе данных и доступны через Jenkins/Hudson. Интерфейс визуально копирует интерфейс Eclipse IDE.
Serenity динамически расширяет байт-код, делая ненужным этап после компиляции. Поддерживаются проекты Ant и Maven. Конфигурация выполняется в XML, пример Ant будет выглядеть так:
<!-- Serenity system properties. -->
<sysproperty key="included.packages" value="your.package.name.here" />
<sysproperty key="included.adapters" value="coverage,complexity,dependency" />
<!-- Serenity JVM command line. -->
<jvmarg line="-javaagent:serenity/serenity.jar" />
И пример конфигурации Maven будет:
<properties>
<included.packages>-Dincluded.packages=your.package.name.here</included.packages>
<included.adapters>-Dincluded.adapters=coverage,complexity,dependency</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.
Ссылки
[ редактировать ]- ^ Миссия JaCoCo
- ^ Патроклос Папапетру (19 декабря 2012 г.). «Сравнение инструментов покрытия кода (JaCoCo, Cobertura, Emma) в Sonar» . Только программное обеспечение имеет значение . Проверено 3 марта 2013 г.
- ^ «Измерение покрытия интеграционными тестами с помощью Sonar – обновлено» . Архивировано из оригинала 23 февраля 2013 г. Проверено 1 марта 2013 г.
- ^ Перейти обратно: а б «Покрытие кода» . Веб-справка по IntelliJ IDEA 12.0 . ДжетБрэйнс. Архивировано из оригинала 26 апреля 2013 года . Проверено 3 марта 2013 г.
- ^ EclEmma, плагин покрытия кода Eclipse.
- ^ Плагин Jenkins JaCoCo
- ^ «Поддержка NetBeans JaCoCo» . Архивировано из оригинала 31 мая 2012 г. Проверено 22 февраля 2013 г.
- ^ Плагин Gradle JaCoCo
- ^ Гулати и Шарма 2017 , стр. 99–103, глава §6. Инструменты интеграции — инструменты сборки — Gradle.
- ^ Плагин Maven JaCoCo
- ^ Гулати и Шарма 2017 , с. 115, Глава §6 Инструменты интеграции — Инструменты сборки — Расширение Maven.
- ^ Интеграция 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
Цитаты
[ редактировать ]- Гулати, Шекхар; Шарма, Рахул (2017). Модульное тестирование Java с помощью JUnit 5 . Беркли, Калифорния: Apress . дои : 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 февраля 2013 г. на Wayback Machine . Он немного устарел, поскольку JaCoCo тем временем поддерживает покрытие ветвей.
- Тестирование Java-приложений с помощью Visual Studio Team Services