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:
159
docs/semantics-testing-audit.md
Normal file
159
docs/semantics-testing-audit.md
Normal 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).
|
||||||
|
|
||||||
|
| Диапазон | Количество | Файлы |
|
||||||
|
|----------|:---------:|-------|
|
||||||
|
| 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 файла без них
|
||||||
Reference in New Issue
Block a user