add little tests
Some checks failed
SonarQube / Build and analyze (push) Has been cancelled

This commit is contained in:
Leonid Pershin
2025-10-21 04:46:44 +03:00
parent 6d62c82947
commit 40289417bd
2 changed files with 238 additions and 0 deletions

View File

@@ -0,0 +1,154 @@
# Анализ: почему покрытие 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%, то все в порядке! Просто нужно:
1. Дождаться merge в master
2. Или добавить больше тестов для нового кода
### Вариант 2: Сбросить "New Code Period"
В SonarQube можно изменить период "New Code":
1. Зайти в Project Settings → New Code
2. Изменить на "Previous version" или "Number of days"
3. Переанализировать проект
### Вариант 3: Добавить больше тестов для конкретных файлов
Давайте найдем, какие ИМЕННО файлы SonarQube считает недопокрытыми.
---
## 🎯 Действия прямо сейчас
### Шаг 1: Проверьте SonarQube dashboard
Найдите страницу "Coverage" в SonarQube и ответьте на вопросы:
1. **Какое "Overall Coverage"?** (не "New Code Coverage")
2. **Какие файлы показаны как недопокрытые?**
3. **Какой период установлен для "New Code"?**
### Шаг 2: Если нужно добавить тесты
Я могу создать дополнительные тесты для:
#### Сервисы без тестов:
-`TelegramBotService` - нет тестов (инфраструктурный код)
#### Сервисы с неполным покрытием (возможно):
- ⚠️ `ModelService` - может быть не все пути покрыты
- ⚠️ `ChatService` - могут быть непокрытые edge cases
- ⚠️ `AIService` - могут быть непокрытые exception paths
#### Команды с возможно неполным покрытием:
- ⚠️ `SettingsCommand` - могут быть edge cases
- ⚠️ `ClearCommand` - могут быть exception paths
---
## 💡 Рекомендации
### Если Overall Coverage ~86%:
**Ваш код отлично покрыт!** Проблема только в "New Code Coverage".
**Решение**:
1. Просто commit и push
2. После merge в master "New Code Coverage" станет "Overall Coverage"
3. Или добавьте comment в SonarQube, объясняющий ситуацию
### Если Overall Coverage тоже ~70%:
Тогда проблема в том, что SonarQube не применяет исключения корректно.
**Решение**:
1. Проверить логи SonarQube scanner в CI/CD
2. Убедиться, что `.opencover.xml` файл создается правильно
3. Возможно добавить `.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:
1. Откройте ваш проект в SonarQube
2. На главной странице проекта найдите блок "Coverage"
3. Там должны быть ДВЕ цифры:
- **Coverage** (Overall) - главная метрика
- **Coverage on New Code** - только новые изменения
### Как изменить New Code Period:
1. Project Settings → New Code
2. Выберите один из вариантов:
- **Previous version** (рекомендуется)
- **Number of days** (например, последние 30 дней)
- **Specific analysis** (конкретная дата)
---
**Сообщите мне, какую цифру Overall Coverage вы видите в SonarQube, и я помогу дальше!**