В этой статье представлены три дополнительных статистических метода покрытия кода, основанных на Jacoco, и представлены четыре соответствующих инструмента с открытым исходным кодом.
Ниже приведена схематическая диаграмма рабочего процесса статистики покрытия Jacoco. Процесс расчета дополнительного покрытия можно понимать как разницу, полученную путем выполнения расчета вычитания из результата покрытия.
Поскольку это вычитание, необходимы и вычитаемое, и уменьшаемое. Время выполнения вычитания может составлять несколько узлов на рисунке выше, то есть
1) При объединении агента выполняйте объединение только инкрементной части или анализируйте сгенерированный файл покрытия jacoco.exec после завершения полной статистики покрытия.
2) Выполнять дополнительные вычисления в процессе создания читаемого статистического отчета о покрытии.
3) Кроме того, дополнительное покрытие может быть создано путем анализа файлов формата xml/html после создания отчета.
Конечно, все приведенные выше 1-3 решения требуют результатов анализа изменений кода в качестве входных данных.
В дополнение к вышеупомянутым решениям вы также можете сканировать результаты одиночного выполнения с помощью Sonar Scanner и получать дополнительные результаты покрытия с помощью качественных платформ, таких как SonarQube (решение 4). В принципе этот вариант эквивалентен варианту 3. Поэтому его также можно классифицировать как 3).
Далее мы кратко представим вышеупомянутые решения одно за другим.
При подготовке агента Jacoco вызывающая сторона может игнорировать определенные классы, используя параметр исключения. Например, этот метод может автоматически игнорировать код, автоматически сгенерированный Lombok, чтобы избежать расширения кода в статистических результатах. Аналогичным образом вы можете использовать параметр include для заглушки только определенных классов и методов.
Это техническая основа для добавочной статистики покрытия. Принцип заключается в том, что когда jacoco выполняет накопление, он объединяет добавочный список, сгенерированный git-diff, в качестве входного параметра, позволяя jacoco собирать только указанный код, которому нужна статистика покрытия. то есть укладка выполняется только для инкрементального кода. Последующий отчет о статистике покрытия, естественно, будет дополнительным отчетом.
Проекты с открытым исходным кодом, такие как super-jacoco от Didi Open Source, используют это решение и расширяют функции собственного jacoco, образуя платформу статистики покрытия. При модульном тестировании загрузка всего кода, сборка, модульное тестирование и создание инкрементного/полного отчета могут быть выполнены с помощью одного HTTP-запроса. Пользователи могут запрашивать вышеуказанный интерфейс на основе ранее указанного UUID задачи через интерфейс запроса.
Конечно, в этом решении из-за измененного диапазона укладки результаты полного и постепенного покрытия не могут быть получены одновременно, и их необходимо выполнить два раза.
Решение для инкрементного накопления агентов в основном ориентировано на сценарий инкрементной статистики покрытия. В ситуациях, когда необходимо создать как полное, так и инкрементальное покрытие, необходимо другое решение. Код-diff проекта с открытым исходным кодом использует другое решение, то есть при вызове командной строки jacoco для анализа jaocco.exec для создания отчета о покрытии xml/html может быть сгенерирован дополнительный инкрементальный список кода git-diff, тем самым генерируя инкрементное покрытие. Отчет о статистике ставок. Если манифест git-diff не предоставлен, можно создать отчет о полном покрытии. Таким образом, если операции синтаксического анализа и создания отчета выполняются дважды для одного и того же файла покрытия jacoco.exec, можно получить два результата: полный и инкрементный.
План постепенного покрытия, сформированный путем преобразования 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 | Выполните вариант использования один раз и один раз сгенерируйте отчет. |
Вы потерпели неудачу в учебе?