Files
ss-tools/docs/semantics-testing-audit.md
busya 6162fc824f 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)
2026-06-16 11:46:11 +03:00

160 lines
8.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Аудит соответствия тестов `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 файла без них