docs: semantics-testing compliance audit — 433 test files analyzed

OVERALL: C+ (good structure, documentation gaps)

STRENGTHS:
- 99.3% files with #region anchors (430/433)
- 0 logic mirrors (tautology) — all hardcoded fixtures
- 90.1% with @RELATION BINDS_TO (390/433)

GAPS:
- Only 58.2% with @TEST_EDGE (252/433) — 181 files missing edge declarations
- Only 49% test functions have @BRIEF (908/1855)
- 38 files > 600 lines (8 > 1000 lines)
- 3 files missing module-level anchors

PRIORITY FIXES:
1. Add @TEST_EDGE to 181 files (coverage campaign agents skipped this)
2. Add @BRIEF to 947 test functions (agents generated anchors without BRIEF)
3. Split 8 files > 1000 lines (test_assistant_tools 1893, llm_analysis 1662, etc)
This commit is contained in:
2026-06-16 11:46:11 +03:00
parent 03e9fbba6a
commit 6162fc824f

View File

@@ -0,0 +1,159 @@
# Аудит соответствия тестов `semantics-testing`
**Дата**: 2026-06-16
**Файлов проверено**: 433 (.py в `backend/tests/`)
**Тестов**: 7778 unit + 175 integration + 2442 frontend
---
## Сводка
| Критерий | Порог | Факт | Статус |
|----------|:-----:|:----:|:------:|
| **Якоря `#region`** | 100% | **99.3%** (430/433) | 🟢 |
| **`@RELATION BINDS_TO`** | 100% | **90.1%** (390/433) | 🟡 |
| **`@TEST_EDGE` (≥3)** | 100% | **58.2%** (252/433) | 🔴 |
| **`@BRIEF` на тестах** | 100% | **49%** (908/1855) | 🔴 |
| **Размер файла <600 строк** | 100% | **91.2%** (38 >600) | 🟡 |
| **Logic mirrors** | 0 | **0** | 🟢 |
| **ADR regression defense** | 100% | Частично | 🟡 |
---
## 1. Якоря `#region`/`#endregion` — 🟢 99.3%
**430 из 433** файлов имеют корректный `#region` на уровне модуля.
**Нарушения (3 файла):**
| Файл | Причина |
|------|--------|
| `test_smoke_plugins.py` | Нет якоря — создан до стандартизации |
| `api/test_tasks.py` | Нет якоря — создан до стандартизации |
| `services/git/conftest.py` | conftest без якоря |
---
## 2. `@RELATION BINDS_TO` — 🟡 90.1%
**390 из 433** файлов связывают тестовый модуль с production-контрактом.
**43 файла без `BINDS_TO`** — в основном старые тесты (до внедрения `semantics-testing`), а также несколько edge/coverage-файлов, созданных агентами во время кампании покрытия:
| Файл | Комментарий |
|------|------------|
| `test_datasets.py` | Старый тест |
| `test_db_executor.py` | Старый тест |
| `test_core_timezone_edge.py` | Edge-файл без BINDS_TO |
| `test_schemas_edge.py` | Edge-файл без BINDS_TO |
| `test_connection_service.py` | Старый тест |
| `test_orchestrator_direct_db.py` | Старый тест |
| `services/dataset_review/test_semantic_resolver_edge.py` | Edge-файл |
| `services/dataset_review/test_superset_matrix.py` | Специфичный файл |
| `services/dataset_review/test_helpers_edge.py` | Edge-файл |
| `core/test_defensive_guards.py` | Старый тест |
**Рекомендация:** добавить `@RELATION BINDS_TO -> [TargetModule]` во все 43 файла.
---
## 3. `@TEST_EDGE` — 🔴 58.2%
Только **252 из 433** файлов декларируют edge-кейсы в заголовке модуля.
**Требование skills**: минимум 3 edge-кейса: `missing_field`, `invalid_type`, `external_fail`.
**181 файл без `@TEST_EDGE`** — это крупнейший пробел.
**Причины:**
- ~120 файлов созданы до внедрения `semantics-testing` skill
- ~40 coverage/edge-файлов созданы агентами во время кампании — агенты не добавляли `@TEST_EDGE` в заголовки
- ~20 integration-файлов (включая новый TLS Custom CA)
**Рекомендация:** целевая кампания по добавлению `@TEST_EDGE` в заголовки 181 файла. Приоритет: файлы >300 строк и coverage-файлы от агентов.
---
## 4. `@BRIEF` на тестовых функциях — 🔴 49%
Из **1855** тестовых функций с `#region [C:2] [TYPE Function]` только **908** имеют `@BRIEF`.
**947 функций без `@BRIEF`** — большинство созданы агентами, которые генерировали якоря без `@BRIEF` (формат: `#region test_name [C:2] [TYPE Function]` без следующей строки `# @BRIEF ...`).
**Рекомендация:** автоматизированное добавление `@BRIEF` (можно сгенерировать из docstring или имени теста).
---
## 5. Размер файлов — 🟡 91.2%
**38 файлов > 600 строк** (порог `semantics-testing` §II.5).
| Диапазон | Количество | Файлы |
|----------|:---------:|-------|
| 600700 | 16 | Умеренное превышение |
| 7001000 | 14 | Значительное превышение |
| 10001900 | 8 | Критическое превышение |
**Худшие нарушители (>1000 строк):**
| Строк | Файл | Рекомендация |
|------:|------|-------------|
| 1893 | `api/test_assistant_tools.py` | Разделить по tool-классам |
| 1662 | `plugins/test_llm_analysis_service_coverage.py` | Разделить на 3 файла |
| 1613 | `plugins/test_llm_analysis_service.py` | Разделить по классам сервиса |
| 1459 | `plugins/test_llm_analysis_plugin.py` | Выделить PathA/PathB в отдельные файлы |
| 1347 | `api/test_dataset_review_routes_extended.py` | Разделить по endpoint-группам |
| 1278 | `api/test_dataset_review_deps_unit.py` | Разделить по dependency-классам |
| 1042 | `test_datasets.py` | Разделить по операциям (CRUD, filters, preview) |
| 975 | `test_core/test_async_network.py` | Разделить по протоколам |
**Исключение (integration, до 800 строк):** 2 файла в пределах нормы.
**Рекомендация:** приоритетно разделить 8 файлов >1000 строк.
---
## 6. Logic Mirrors (анти-таутология) — 🟢 0
**Нарушений не обнаружено.** Тесты используют hardcoded fixtures и не вычисляют `expected` через вызовы production-кода.
Это сильная сторона кодбазы — агенты последовательно применяли паттерн `expected = {"id": "dash_1", ...}` вместо `expected = production_fn(x)`.
---
## 7. ADR Regression Defense — 🟡 Частично
Проверка наличия `@REJECTED` в production-коде и соответствующих `@TEST_EDGE` в тестах:
- **ADR-0009** (TLS/SSL): `test_superset_tls_custom_ca.py` проверяет rejected-путь (certifi не доверяет custom CA) ✅
- **ADR-0013** (coverage reporting): ортогональный аудит в `docs/orthogonal-test-report.md`
- Остальные ADR требуют точечной проверки — не автоматизировано
---
## 8. Тесты без `#region` на функциях
Многие тестовые функции (особенно в старых файлах) не имеют `#region`/`#endregion` вообще. Они используют plain `def test_*()` без семантической разметки. Точное количество не подсчитано, но по оценке ~40% тестовых функций не имеют персональных якорей.
---
## Итоговая оценка
| Измерение | Оценка | Комментарий |
|-----------|:------:|------------|
| Структурная целостность | **B+** | 99% файлов с якорями, но много oversized |
| Трассируемость | **C+** | 90% BINDS_TO, но только 58% TEST_EDGE |
| Документированность | **D** | 49% @BRIEF на тестах — агенты не добавляли |
| Анти-таутология | **A** | 0 logic mirrors — сильная сторона |
| Размер файлов | **C** | 38 файлов >600 строк, 8 >1000 строк |
**Общая оценка: C+** — базовая структура заложена, но документация тестов (`@TEST_EDGE`, `@BRIEF`) и размеры файлов требуют значительных улучшений.
---
## Приоритеты исправления
1. 🔴 **Добавить `@TEST_EDGE`** в 181 файл без него
2. 🔴 **Добавить `@BRIEF`** на 947 тестовых функций
3. 🟡 **Разделить 8 файлов >1000 строк**
4. 🟡 **Добавить `@RELATION BINDS_TO`** в 43 файла
5. 🟢 **Добавить якоря** в 3 файла без них