Три статистических метода постепенного охвата, основанные на Jacoco
Три статистических метода постепенного охвата, основанные на Jacoco

В этой статье представлены три дополнительных статистических метода покрытия кода, основанных на Jacoco, и представлены четыре соответствующих инструмента с открытым исходным кодом.

Ниже приведена схематическая диаграмма рабочего процесса статистики покрытия Jacoco. Процесс расчета дополнительного покрытия можно понимать как разницу, полученную путем выполнения расчета вычитания из результата покрытия.

Поскольку это вычитание, необходимы и вычитаемое, и уменьшаемое. Время выполнения вычитания может составлять несколько узлов на рисунке выше, то есть

1) При объединении агента выполняйте объединение только инкрементной части или анализируйте сгенерированный файл покрытия jacoco.exec после завершения полной статистики покрытия.

2) Выполнять дополнительные вычисления в процессе создания читаемого статистического отчета о покрытии.

3) Кроме того, дополнительное покрытие может быть создано путем анализа файлов формата xml/html после создания отчета.

Конечно, все приведенные выше 1-3 решения требуют результатов анализа изменений кода в качестве входных данных.

В дополнение к вышеупомянутым решениям вы также можете сканировать результаты одиночного выполнения с помощью Sonar Scanner и получать дополнительные результаты покрытия с помощью качественных платформ, таких как SonarQube (решение 4). В принципе этот вариант эквивалентен варианту 3. Поэтому его также можно классифицировать как 3).

Далее мы кратко представим вышеупомянутые решения одно за другим.

  • план1 -Когда агент оснащен

При подготовке агента Jacoco вызывающая сторона может игнорировать определенные классы, используя параметр исключения. Например, этот метод может автоматически игнорировать код, автоматически сгенерированный Lombok, чтобы избежать расширения кода в статистических результатах. Аналогичным образом вы можете использовать параметр include для заглушки только определенных классов и методов.

Это техническая основа для добавочной статистики покрытия. Принцип заключается в том, что когда jacoco выполняет накопление, он объединяет добавочный список, сгенерированный git-diff, в качестве входного параметра, позволяя jacoco собирать только указанный код, которому нужна статистика покрытия. то есть укладка выполняется только для инкрементального кода. Последующий отчет о статистике покрытия, естественно, будет дополнительным отчетом.

Проекты с открытым исходным кодом, такие как super-jacoco от Didi Open Source, используют это решение и расширяют функции собственного jacoco, образуя платформу статистики покрытия. При модульном тестировании загрузка всего кода, сборка, модульное тестирование и создание инкрементного/полного отчета могут быть выполнены с помощью одного HTTP-запроса. Пользователи могут запрашивать вышеуказанный интерфейс на основе ранее указанного UUID задачи через интерфейс запроса.

Конечно, в этом решении из-за измененного диапазона укладки результаты полного и постепенного покрытия не могут быть получены одновременно, и их необходимо выполнить два раза.

  • план2-JacocoОтчетгенерироватьчас

Решение для инкрементного накопления агентов в основном ориентировано на сценарий инкрементной статистики покрытия. В ситуациях, когда необходимо создать как полное, так и инкрементальное покрытие, необходимо другое решение. Код-diff проекта с открытым исходным кодом использует другое решение, то есть при вызове командной строки jacoco для анализа jaocco.exec для создания отчета о покрытии xml/html может быть сгенерирован дополнительный инкрементальный список кода git-diff, тем самым генерируя инкрементное покрытие. Отчет о статистике ставок. Если манифест git-diff не предоставлен, можно создать отчет о полном покрытии. Таким образом, если операции синтаксического анализа и создания отчета выполняются дважды для одного и того же файла покрытия jacoco.exec, можно получить два результата: полный и инкрементный.

  • план3 - Парсинг отчета Jaococo

План постепенного покрытия, сформированный путем преобразования jacoco в процессе накопления и отчетности, требует вторичной разработки jacoco. Технический порог относительно высок, и если Jacoco впоследствии выпустит новую версию, вторичная разработанная версия также потребует дополнительного обновления и обслуживания. Кроме того, если jacoco был введен в целевой проект для сбора статистики покрытия модульными тестами, это также будет включать в себя проблему того, как убедить пользователей сотрудничать в изменении существующей конфигурации jacoco для адаптации к вторично разработанному инструменту jacoco, и там станет порогом для продвижения и реализации.

В результате было разработано третье решение, которое заключается в расчете и создании добавочного отчета о покрытии путем анализа уже созданного отчета о покрытии в формате xml/html и объединения его с результатами git-diff. Статистическая служба дополнительного охвата группы авторов также использует это решение. Поскольку это решение в основном предполагает анализ конечных результатов, оно не требует внесения изменений в существующее использование jacoco командой пользователей, что в большей степени способствует продвижению и внедрению этого решения.

Инструмент дополнительной статистики покрытия с открытым исходным кодом diff-cover использует это решение. Первоначально этот инструмент в основном использовался для анализа статистических отчетов о покрытии C++. По просьбе автора он поддерживал анализ отчетов jacoco и может использоваться для дополнительной статистики покрытия проектов Java.

Знаменитый SonarQube также использует это решение.

  • Подводя итог

В этой статье представлены три дополнительных статистических метода покрытия кода, основанных на Jacoco, и четыре соответствующих инструмента с открытым исходным кодом.

план

Инструменты с открытым исходным кодом

Полный + дополнительный отчет о покрытии

1

Когда агент оснащен

Super-Jacoco

Выполнить вариант использования дважды

2

Когда агент сообщает

Code-Diff

Выполните вариант использования один раз и дважды сгенерируйте отчет.

3

Анализ отчета

Diff-CoverSonarQube

Выполните вариант использования один раз и один раз сгенерируйте отчет.

Вы потерпели неудачу в учебе?

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose