Gymterview
junior

Что такое Code Coverage?

Code Coverage (покрытие кода) – метрика, показывающая, какой процент кода выполняется при запуске тестов. Стандартный инструмент в Java-экосистеме – JaCoCo.

Типы покрытия

Тип Что измеряет Пример
Line coverage % строк, выполненных тестами 80 из 100 строк = 80%
Branch coverage % ветвлений (if/else, switch) Протестирована ли каждая ветка if?
Method coverage % методов, вызванных тестами Все ли публичные методы вызваны?
Instruction coverage % байткод-инструкций Наиболее точная метрика

JaCoCo – настройка в Maven

Конфигурация JaCoCo в pom.xml
<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.12</version>
    <executions>
        <execution>
            <goals><goal>prepare-agent</goal></goals>
        </execution>
        <execution>
            <id>report</id>
            <phase>test</phase>
            <goals><goal>report</goal></goals>
        </execution>
        <execution>
            <id>check</id>
            <goals><goal>check</goal></goals>
            <configuration>
                <rules>
                    <rule>
                        <limits>
                            <limit>
                                <counter>LINE</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>0.80</minimum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>

Разумные пороги покрытия

Метрика Минимум Комментарий
Line coverage 80% Разумный минимум для большинства проектов
Branch coverage 70% Важнее line coverage – показывает edge cases
100% Не цель Геттеры, DTO, конфигурация не нуждаются в тестах

Mutation Testing – следующий уровень

Code coverage показывает, что код выполняется, но не показывает, что тесты действительно ловят ошибки. Mutation testing (PIT) вносит мутации в код (меняет > на <, удаляет строки) и проверяет, падают ли тесты. Если тест не замечает мутацию – он бесполезен.

Ключевые принципы

  • 80% line coverage – разумный минимум для большинства проектов
  • 100% – не цель: геттеры, конфигурация, DTO не нуждаются в тестах
  • Branch coverage важнее line coverage – показывает, протестированы ли edge cases
  • JaCoCo интегрируется с SonarQube для визуализации и трендов

Частые ошибки

  • Гонка за 100% – тестирование toString() и конструкторов ради метрики бессмысленно
  • Coverage без assertions – тест вызывает метод, но не проверяет результат; coverage растёт, качество – нет
  • Exclusion вместо исправления – исключение пакетов из отчёта вместо написания тестов

Как используется в 2026

  • JaCoCo + SonarQube – стандартная связка в CI/CD pipeline
  • Quality Gate: “coverage не должен падать” (delta check) важнее абсолютной цифры
  • Mutation testing (PIT) – более продвинутая альтернатива: проверяет, ловят ли тесты реальные мутации в коде

На собеседовании: интервьюер хочет услышать не только “JaCoCo измеряет покрытие”, но и понимание, что высокий coverage не гарантирует качество тестов (coverage без assertions). Частая ошибка – назвать 100% как цель или не знать про branch coverage.