6.0 KiB
Анализ: почему покрытие 70%, а не 86%?
🔍 Разница между локальным и SonarQube coverage
Локально (coverlet): 86.59%
SonarQube: 70%
Разница: ~16%
🤔 Возможные причины
1. "Coverage on New Code" vs "Overall Coverage"
SonarQube разделяет:
- Overall Coverage - покрытие всего проекта
- Coverage on New Code - покрытие только изменений в текущей ветке
Вы смотрите на Coverage on New Code (70%), который:
- Считается только для файлов, измененных после определенной даты
- Не учитывает старый хорошо покрытый код
- Включает ВСЕ новые изменения (в том числе миграции, если они были изменены)
2. SonarQube может по-другому считать исключения
Даже с правильными настройками, SonarQube может:
- Не полностью применить exclusions к "New Code"
- Считать строки по-другому (комментарии, пустые строки)
- Учитывать partial classes иначе
✅ Решения
Вариант 1: Проверить "Overall Coverage" в SonarQube
Откройте SonarQube dashboard и найдите:
- Overall Coverage (должно быть ~86%)
- Coverage on New Code (сейчас 70%)
Если Overall Coverage ~86%, то все в порядке! Просто нужно:
- Дождаться merge в master
- Или добавить больше тестов для нового кода
Вариант 2: Сбросить "New Code Period"
В SonarQube можно изменить период "New Code":
- Зайти в Project Settings → New Code
- Изменить на "Previous version" или "Number of days"
- Переанализировать проект
Вариант 3: Добавить больше тестов для конкретных файлов
Давайте найдем, какие ИМЕННО файлы SonarQube считает недопокрытыми.
🎯 Действия прямо сейчас
Шаг 1: Проверьте SonarQube dashboard
Найдите страницу "Coverage" в SonarQube и ответьте на вопросы:
- Какое "Overall Coverage"? (не "New Code Coverage")
- Какие файлы показаны как недопокрытые?
- Какой период установлен для "New Code"?
Шаг 2: Если нужно добавить тесты
Я могу создать дополнительные тесты для:
Сервисы без тестов:
- ❌
TelegramBotService- нет тестов (инфраструктурный код)
Сервисы с неполным покрытием (возможно):
- ⚠️
ModelService- может быть не все пути покрыты - ⚠️
ChatService- могут быть непокрытые edge cases - ⚠️
AIService- могут быть непокрытые exception paths
Команды с возможно неполным покрытием:
- ⚠️
SettingsCommand- могут быть edge cases - ⚠️
ClearCommand- могут быть exception paths
💡 Рекомендации
Если Overall Coverage ~86%:
Ваш код отлично покрыт! Проблема только в "New Code Coverage".
Решение:
- Просто commit и push
- После merge в master "New Code Coverage" станет "Overall Coverage"
- Или добавьте comment в SonarQube, объясняющий ситуацию
Если Overall Coverage тоже ~70%:
Тогда проблема в том, что SonarQube не применяет исключения корректно.
Решение:
- Проверить логи SonarQube scanner в CI/CD
- Убедиться, что
.opencover.xmlфайл создается правильно - Возможно добавить
.globalconfigдля Roslyn analyzers
📊 Ожидаемая метрика после исправления
✅ Overall Coverage: 86.59%
⚠️ Coverage on New Code: 70-86% (зависит от периода)
✅ Quality Gate: SHOULD PASS (если смотрим на Overall)
🚀 Что делать СЕЙЧАС
1. Проверьте SonarQube
Откройте SonarQube и найдите:
- Overall Coverage (главная метрика)
- Список непокрытых файлов
- New Code Period настройки
2. Если Overall Coverage ~86%:
✅ Все отлично! Push код как есть.
3. Если Overall Coverage ~70%:
Скажите мне, какие КОНКРЕТНЫЕ файлы SonarQube показывает как недопокрытые, и я создам для них тесты.
📝 Дополнительная информация
Как увидеть Overall Coverage в SonarQube:
- Откройте ваш проект в SonarQube
- На главной странице проекта найдите блок "Coverage"
- Там должны быть ДВЕ цифры:
- Coverage (Overall) - главная метрика
- Coverage on New Code - только новые изменения
Как изменить New Code Period:
- Project Settings → New Code
- Выберите один из вариантов:
- Previous version (рекомендуется)
- Number of days (например, последние 30 дней)
- Specific analysis (конкретная дата)
Сообщите мне, какую цифру Overall Coverage вы видите в SonarQube, и я помогу дальше!