# Аудит соответствия тестов `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). | Диапазон | Количество | Файлы | |----------|:---------:|-------| | 600–700 | 16 | Умеренное превышение | | 700–1000 | 14 | Значительное превышение | | 1000–1900 | 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 файла без них