Типы покрытия
Покрытие кода (Code Coverage)
Измеряет, какие строки, ветви и функции исходного кода выполняются автоматизированными тестами.
Метрики: Line coverage, branch coverage, function coverage, statement coverage.
Покрытие требований (Requirements Coverage)
Измеряет, какие бизнес-требования имеют соответствующие тест-кейсы.
Инструменты покрытия кода
| Инструмент | Языки | Интеграция |
|---|---|---|
| Istanbul/nyc | JavaScript/TypeScript | Jest, Mocha, Vitest |
| JaCoCo | Java | Maven, Gradle |
| coverage.py | Python | pytest |
| SonarQube | Мультиязычный | CI/CD дашборды |
Чтение отчётов о покрытии
Файл | % Stmts | % Branch | % Funcs | % Lines |
------------------------|---------|----------|---------|---------|
src/auth/login.js | 95.2 | 88.0 | 100.0 | 95.0 |
src/payment/checkout.js | 45.0 | 30.0 | 50.0 | 44.2 |
login.jsна 95% — хорошо покрытcheckout.jsна 45% — критически недопокрыт для модуля платежей
Установка целей
| Область кода | Цель | Обоснование |
|---|---|---|
| Платежи/финансы | 90%+ | Высокий бизнес-риск |
| Аутентификация/безопасность | 90%+ | Критично для безопасности |
| Основная бизнес-логика | 80%+ | Основная функциональность |
| Утилиты | 70%+ | Общий код |
Ловушка покрытия
Не гонитесь за 100% вслепую. Проблемы: бессмысленные тесты, тестирование тривиального кода, игнорирование других видов тестирования.
Правильный подход: Фокус на критических путях, бизнес-логике и зонах риска.
Покрытие в CI/CD
Настройте quality gates для обеспечения минимального покрытия. Отслеживайте тренды — покрытие не должно снижаться после merge PR.
Упражнение: Проанализируйте отчёт о покрытии
Дан отчёт для e-commerce с payment/process на 42%, payment/refund на 15%, cart/checkout на 38%. Определите риски и рекомендуйте действия.
Решение
Критические риски: payment/process и payment/refund недопокрыты — прямой финансовый риск. cart/checkout — путь к доходу.
Рекомендации:
- Немедленно: Поднять payment/process до 85%+ и refund до 80%+
- Этот спринт: Поднять cart/checkout до 80%+, фокус на branch coverage
- Следующий спринт: Поднять cart/coupon branch с 60% до 75%+
- Quality gate: Новый код в платежах и checkout требует 85%+
Ключевые выводы
- Покрытие кода измеряет выполнение; покрытие требований — маппинг требований
- Branch coverage ценнее line coverage — раскрывает непротестированную условную логику
- Фокусируйте цели на рисках: модули платежей и безопасности — 90%+
- Не гонитесь за 100% — фокус на осмысленных assertions
- Используйте quality gates в CI/CD для предотвращения регрессии покрытия
- Отчёты покрытия выявляют пробелы — это диагностические инструменты, а не цели сами по себе