From 6162fc824f3924376abfbb8c03b75a23d6bc7af8 Mon Sep 17 00:00:00 2001 From: busya Date: Tue, 16 Jun 2026 11:46:11 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20semantics-testing=20compliance=20audit?= =?UTF-8?q?=20=E2=80=94=20433=20test=20files=20analyzed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- docs/semantics-testing-audit.md | 159 ++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 docs/semantics-testing-audit.md diff --git a/docs/semantics-testing-audit.md b/docs/semantics-testing-audit.md new file mode 100644 index 00000000..c25ecf49 --- /dev/null +++ b/docs/semantics-testing-audit.md @@ -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 файла без них