Матрица трассировки: Переменные для ВР3¶
Источник: актуальная QA-документация проекта «Переменные для ВР3», редакция от 20.08.2026.
Матрица связывает бизнес-требования, сценарии, функциональные и нефункциональные требования ВР-10 с матрицей тестирования.
Основание: материалы каталога Техническое Задание/ и локальные экспорты Макеты Фигма/. При конфликте источников ожидаемый результат определяется ТЗ; расхождение фиксируется в разделе «Риски и неоднозначности».
Бизнес-требования¶
| Требование | Описание | Тест-кейсы |
|---|---|---|
| BR-REQ-001 | Четыре действия переменной на этапе | VAR-ASSIGN-003; VAR-ACTION-001–005 |
| BR-REQ-002 | Формат Строка и ограничение длины |
VAR-STR-001–003 |
| BR-REQ-003 | Формат Число, уникальность операций и непротиворечивость |
VAR-NUM-001–003 |
| BR-REQ-004 | Варианты Списка и количество ответов |
VAR-LIST-001–003 |
| BR-REQ-005 | Предустановленные и пользовательские пары Флага |
VAR-FLAG-001–002 |
| BR-REQ-006 | Формат и URL-валидация Ссылки |
VAR-LINK-001 |
| BR-REQ-007 | Выбор значения типа Дата |
VAR-DATE-001 |
| BR-REQ-008 | Выбор даты и времени с точностью до минут | VAR-DATETIME-001–002 |
| BR-REQ-009 | Форматы и количество файлов | VAR-FILE-001–003; VAR-PERF-006 |
| BR-REQ-010 | Категория, справочник и количество ответов | VAR-DIR-001–002; VAR-SCALE-001 |
| BR-REQ-011 | Категория, объект учёта, системные объекты и количество ответов | VAR-OBJECT-001–003; VAR-SCALE-002 |
| BR-REQ-012 | Значение по умолчанию соответствует типу и ограничениям | VAR-CRUD-008; все кейсы VAR-STR-*–VAR-OBJECT-* |
| BR-REQ-013 | Необязательное описание переменной до 500 символов | VAR-CRUD-005 |
| BR-REQ-014 | Изменения доступны только в черновике | VAR-CRUD-013; VAR-SEC-001 |
| BR-REQ-015 | Оверлей создания и редактирования | VAR-UI-002–003; VAR-CRUD-001–008 |
| BR-REQ-016 | Управление привязками через оверлей переменной | VAR-ASSIGN-001–005; VAR-ASSIGN-009–010 |
| BR-REQ-017 | Редактирование и удаление привязки через оверлей | VAR-ASSIGN-006–010 |
| BR-REQ-018 | Настройка переменных этапа через полотно | VAR-CANVAS-001–009 |
| BR-REQ-019 | Глобальный и локальный порядок | VAR-ORDER-001–004 |
| BR-REQ-020 | Подтверждение и каскадное удаление переменной | VAR-CRUD-009–011 |
Сценарии использования¶
| Сценарий | Описание | Тест-кейсы |
|---|---|---|
| UC-001 | Создание переменной Список |
VAR-CRUD-001; VAR-LIST-001–003 |
| UC-002 | Создание переменной Справочник |
VAR-CRUD-001; VAR-DIR-001–002 |
| UC-003 | Создание переменной Объект учёта |
VAR-CRUD-001; VAR-OBJECT-001–003 |
| UC-004 | Создание переменной Дата и время |
VAR-CRUD-001; VAR-DATETIME-001–002 |
| UC-005 | Добавление переменной в этап из списка переменных | VAR-ASSIGN-001–005; VAR-ASSIGN-009 |
| UC-006 | Редактирование и удаление привязки из списка переменных | VAR-ASSIGN-006–010 |
| UC-007 | Добавление переменной в этап через полотно | VAR-CANVAS-001–004; VAR-CANVAS-007 |
| UC-008 | Редактирование и удаление переменной этапа через полотно | VAR-CANVAS-005–009 |
| UC-009 | Удаление переменной из БП | VAR-CRUD-009–011 |
Функциональные требования¶
| Требование | Описание | Тест-кейсы |
|---|---|---|
| FR-VAR-001 | Создание переменной | VAR-UI-002–003; VAR-CRUD-001–005 |
| FR-VAR-002 | Редактирование с предзаполнением | VAR-CRUD-006–007 |
| FR-VAR-003 | Подтверждённое удаление и уведомление | VAR-CRUD-009–010 |
| FR-VAR-004 | Предупреждение при использовании и каскад | VAR-CRUD-011 |
| FR-VAR-005 | Уникальность имени в рамках БП | VAR-CRUD-003–004 |
| FR-VAR-006 | Глобальный порядок | VAR-ORDER-001; VAR-ORDER-003–004 |
| FR-VAR-007 | Валидация значения по умолчанию | VAR-CRUD-008; типовые кейсы с проверкой default value |
| FR-TYPE-001 | Настройки Строки |
VAR-STR-001–003 |
| FR-TYPE-002 | Настройки Числа |
VAR-NUM-001–003 |
| FR-TYPE-003 | Настройки Списка |
VAR-LIST-001–003 |
| FR-TYPE-004 | Настройки Флага |
VAR-FLAG-001–002 |
| FR-TYPE-005 | Настройки Справочника |
VAR-DIR-001–002 |
| FR-TYPE-006 | Настройки Объекта учёта |
VAR-OBJECT-001–003 |
| FR-TYPE-007 | Настройки Файла |
VAR-FILE-001–003 |
| FR-TYPE-008 | Настройки Дата и время |
VAR-DATETIME-001–002 |
| FR-TYPE-009 | Настройки Дата |
VAR-DATE-001 |
| FR-TYPE-010 | Настройки Ссылка |
VAR-LINK-001 |
| FR-ASSIGN-001 | Открытие оверлея настройки этапов | VAR-ASSIGN-001 |
| FR-ASSIGN-002 | Таблица привязок и ее колонки | VAR-ASSIGN-001 |
| FR-ASSIGN-003 | Добавление этапа и фильтрация селекта | VAR-ASSIGN-002–004 |
| FR-ASSIGN-004 | Уникальность пары переменная–этап | VAR-ASSIGN-005 |
| FR-ASSIGN-005 | Редактирование привязки | VAR-ASSIGN-006 |
| FR-ASSIGN-006 | Удаление привязки с подтверждением | VAR-ASSIGN-007–008 |
| FR-ASSIGN-007 | Пакетное сохранение, уведомление и счетчик | VAR-ASSIGN-009–010 |
| FR-CANVAS-001 | Карточка переменных в сайдпанели этапа | VAR-CANVAS-001 |
| FR-CANVAS-002 | Открытие на вкладке Поля и переменные |
VAR-CANVAS-002 |
| FR-CANVAS-003 | Добавление переменной в этап | VAR-CANVAS-003–004 |
| FR-CANVAS-004 | Редактирование переменной этапа | VAR-CANVAS-005 |
| FR-CANVAS-005 | Удаление переменной из этапа | VAR-CANVAS-006 |
| FR-CANVAS-006 | Сохранение и обновление счетчика | VAR-CANVAS-007–009 |
| FR-CANVAS-007 | Локальный порядок | VAR-ORDER-002–004 |
| FR-SEC-001 | Блокировка действий не в черновике | VAR-CRUD-013; VAR-SEC-001 |
Нефункциональные требования¶
| Требование | Описание | Тест-кейсы / подтверждение |
|---|---|---|
| NFR-PERF-001 | Открытие интерфейсов не более 2 секунд при 1000 переменных и 50 этапах | VAR-PERF-001; VAR-PERF-004 |
| NFR-PERF-002 | Сохранение не более 3 секунд | VAR-PERF-002 |
| NFR-PERF-003 | Страница с 500 переменными загружается не более 5 секунд | VAR-PERF-003 |
| NFR-SCALE-001 | Масштабирование категорий и справочников | VAR-SCALE-001; VAR-ARCH-002 |
| NFR-SCALE-002 | Масштабирование категорий и объектов учёта | VAR-SCALE-002; VAR-ARCH-002 |
| NFR-SCALE-003 | До 100 этапов в селектах | VAR-PERF-005 |
| NFR-SCALE-004 | Несколько файлов, суммарно не более 100 МБ | VAR-FILE-002–003; VAR-PERF-006 |
| NFR-SEC-001 | Проверка прав на операции изменения | VAR-SEC-001 |
| NFR-SEC-002 | Изоляция данных разных БП | VAR-CRUD-004; VAR-SEC-002 |
| NFR-SEC-003 | Форматы и антивирусная проверка файлов | VAR-FILE-003 |
| NFR-RELIAB-001 | Полная валидация перед сохранением | VAR-DATA-002; VAR-API-033; негативные типовые кейсы |
| NFR-RELIAB-002 | Согласованное каскадное удаление | VAR-CRUD-011; VAR-DATA-001 |
| NFR-RELIAB-003 | Понятные ошибки при отсутствующих данных | VAR-CRUD-012; VAR-UX-002 |
| NFR-USAB-001 | Понятные заголовки, подписи и кнопки | VAR-UI-001–002; VAR-UX-001 |
| NFR-USAB-002 | Обратная связь об успехе и ошибках | VAR-CRUD-010–012; VAR-ASSIGN-009; VAR-UX-002 |
| NFR-USAB-003 | Единые паттерны overlay/sidepage/bottombar/alert | VAR-UX-001 |
| NFR-MOD-001 | Добавление типа через конфигурацию settings |
VAR-ARCH-001 |
| NFR-MOD-002 | Независимость модуля и явные API-интерфейсы | VAR-ARCH-002 |
Правила концептуальной модели¶
| Правило | Тест-кейсы |
|---|---|
| Уникальность имени переменной | VAR-CRUD-003–004 |
| Уникальность привязки | VAR-ASSIGN-005; VAR-SEC-002 |
| Валидация числовых ограничений | VAR-NUM-001–003 |
| Обязательность и длина описания действия | VAR-ASSIGN-004; VAR-CANVAS-004 |
| Длина описания переменной | VAR-CRUD-005 |
| Доступность изменений | VAR-CRUD-013; VAR-SEC-001 |
| Каскадное удаление | VAR-CRUD-011; VAR-DATA-001 |
| Фильтрация справочников и объектов учёта | VAR-DIR-001; VAR-OBJECT-001–002 |
| Формат даты и времени | VAR-DATETIME-001–002 |
| Валидация значения по умолчанию | VAR-CRUD-008; типовые кейсы |
| Валидация файлов | VAR-FILE-001–003 |
| Минимальное количество ответов/файлов — 1 | VAR-LIST-002–003; VAR-DIR-002; VAR-OBJECT-003; VAR-FILE-002 |
Покрытие макетов¶
| UI-блок | Локальные экспорты | Тест-кейсы |
|---|---|---|
Общий список, фильтры Все / Поля / Переменные, счетчик, поиск и меню строки |
Макеты Фигма/Добавление, редактирование и удаление переменной в БП/Поля и переменные*.png |
VAR-UI-001; VAR-CRUD-006; VAR-ASSIGN-001 |
| Создание и динамические формы типов | Макеты Фигма/Тип переменных MVP/Добавить переменную*.png, именованные экраны типов |
VAR-UI-002–003; все VAR-STR-*–VAR-OBJECT-* |
| Настройка этапов для переменной | .../Поля и переменные-2.png–.../Поля и переменные-11.png |
VAR-ASSIGN-001–010 |
| Настройка переменных этапа и drag-and-drop | .../Поля и переменные-15.png–.../Поля и переменные-22.png, Этап*.png, Добавить шаг*.png |
VAR-CANVAS-001–009; VAR-ORDER-002–004 |
| Экран исполнения | Макеты Фигма/Тип переменных MVP/Экран исполнения*.png |
VAR-ACTION-001–005; VAR-ORDER-004 |
Покрытие по блокам тест-кейсов¶
| Блок | Диапазон | Назначение |
|---|---|---|
| UI и CRUD | VAR-UI-001–003, VAR-CRUD-001–013 | Список, создание, редактирование, удаление и доступность |
| Типы переменных | VAR-STR-001–VAR-OBJECT-003 | Настройки десяти типов, границы и default value |
| Привязки из списка переменных | VAR-ASSIGN-001–010 | Добавление, изменение, удаление и пакетное сохранение |
| Полотно и этап | VAR-CANVAS-001–009 | Альтернативная точка входа и синхронизация |
| Порядок и исполнение | VAR-ORDER-001–004, VAR-ACTION-001–005 | Глобальный/локальный порядок и семантика действий |
| Данные и безопасность | VAR-DATA-001–002, VAR-SEC-001–002 | Каскады, атомарность, права и изоляция |
| Производительность и масштаб | VAR-PERF-001–006, VAR-SCALE-001–002 | Временные пороги и объемы |
| UX и архитектура | VAR-UX-001–002, VAR-ARCH-001–002 | Паттерны интерфейса и модифицируемость |
Покрытие фактического API-контракта¶
Контракт повторно проверен по OpenAPI стенда 20.08.2026 и по backend develop/origin/feature/fields-actions. Результаты новых ручек приведены в otchet-audit-novyh-api-ruchok-peremennye-2026-08-20.md.
| Требование / правило | API-тесты | Покрываемый риск |
|---|---|---|
| BR-REQ-001; FR-ASSIGN-001–007 | VAR-API-014, VAR-API-021, VAR-API-023–027 | Контракт, CRUD, четыре action, обязательное описание, уникальность, порядок и исполнение |
| BR-REQ-002–011; FR-TYPE-001–010 | VAR-API-007–009, VAR-API-016–018 | Типизированные settings, default value, исполнение и негативная валидация |
| FR-CRUD-001–007 | VAR-API-004–012, VAR-API-019 | CRUD, уникальность, границы, группы и каскад |
| FR-SEC-001; NFR-SEC-001 | VAR-API-001, VAR-API-010 | Аутентификация, права и защита системного признака |
| NFR-SEC-002 | VAR-API-004–006, VAR-API-023–027, VAR-API-029–032 | Scope URL и изоляция БП, stage, action, value и системных конфигов |
| NFR-RELIAB-001 | VAR-API-005, VAR-API-008–009, VAR-API-018 | Валидация до записи и атомарность |
| NFR-RELIAB-002 | VAR-API-012, VAR-API-019, VAR-API-023, VAR-API-025–027, VAR-API-031–032 | Согласованное удаление и порядок links/actions/entity fields |
| NFR-RELIAB-003; NFR-USAB-002 | VAR-API-009, VAR-API-018, VAR-API-020, VAR-API-033 | Управляемые 4xx/5xx без HTML и stack trace; невалидный template не блокирует создание ЭБП |
| Группы и системные переменные | VAR-API-002, VAR-API-010–013, VAR-API-028, VAR-API-030–031 | Фильтры, lifecycle категорий, links, системные конфиги и выдача в ЭБП |
| Пользовательские переменные и поля ЭБП | VAR-API-015–019, VAR-API-033 | Синхронизация экземпляров, parent link, default, update и защита создания ЭБП от невалидного template |
| Порядок и параметры запуска | VAR-API-022, VAR-API-025, VAR-API-029 | Раздельный глобальный/локальный порядок и init parameters |
Реализация автоматического покрытия API¶
Актуальный полный ретест с нуля и live UI-проверка: otchet-polnyj-retest-s-nulya-peremennye-2026-08-20.md.
| Трассируемый блок | Файлы автотестов | Состояние на стенде 20.08.2026 |
|---|---|---|
| Группы и системные переменные | api_tests/test_groups_and_system_variables.py |
Фильтры, пагинация, CRUD, duplicate group и счётчик пройдены; POST-защита is_system — BPAPI-005, PATCH защищён. |
| Форматы и общая валидация | api_tests/test_variable_formats.py |
Хранение 8 автономных форматов и 499/500 пройдено; 20 negative и 501 — BPAPI-004/006. |
| Экшны переменных | api_tests/test_actions_contract.py |
Полный inventory переданных ручек; action/reorder/value routes отсутствуют в OpenAPI — BPAPI-017. |
| Пользовательские поля ЭБП | api_tests/test_ebp_fields.py |
New materialization, entity/page read models и cascade пройдены; existing/default/update/invalid-template isolation — BPAPI-012/009/010/011. |
| Справочники | api_tests/test_reference_contracts.py |
Read-only дерево category → entries и OpenAPI discoverability пройдены; positive variable — GAP-008. |
| Security/scope/atomicity | api_tests/test_security_and_isolation.py |
BPAPI-001/002/003/013/016; recovery-run не создаёт второй БП. |
| Reorder / init / publication / system config | api_tests/test_variable_reorder.py, api_tests/test_init_parameters.py, api_tests/test_category_publication.py, api_tests/test_system_variable_configs.py |
Init positive пройден; остальные заблокированы BPAPI-017/020. |
| Изоляция тестовых данных и cleanup | api_tests/conftest.py, api_tests/support/state.py, tools/cleanup-api-test-data.py |
Полная очистка вместе с БП пройдена 20.08.2026; BPAPI-015 закрыт ретестом. |
Риски и неоднозначности¶
| ID | Наблюдение | Решение для приемки |
|---|---|---|
| GAP-001 | Макет показывает описание переменной 0/250, ТЗ требует максимум 500 |
Проверять границу 500 по ТЗ; визуальный счетчик должен быть приведен к 500 после продуктового подтверждения |
| GAP-002 | Макеты используют разные названия экранов и команд по сравнению с FR | Проверять смысловой поток и нормативные тексты FR; окончательный copy согласовать до UI-регрессии |
| GAP-003 | Макеты объединяют поля и переменные, а границы ВР-10 описывают только переменные этапов | Не расширять функциональный scope ВР-10 на поля; проверять, что фильтр Переменные не смешивает сущности |
| GAP-004 | NFR одновременно задают профиль в 1000 переменных и гарантированный объем интерфейса до 500 | Выполнить оба замера: 500 для загрузки страницы и 1000/50 для открытия оверлеев; отклонение оформить отдельным решением |
| GAP-005 | Неограниченное количество справочников/объектов нельзя доказать конечным тестом |
Использовать согласованный большой набор, анализ пагинации/поиска и архитектурное подтверждение |
| GAP-006 | ТЗ не задает API endpoints, HTTP-коды и точные payload; на стенде опубликован OpenAPI, но он расходится с OPTIONS, frontend GraphQL documents и частью текущего исходного кода | API-приемку выполнять по опубликованному versioned contract; расхождения фиксировать VAR-API-020 и блокировать релиз до синхронизации |
| GAP-007 | В макетах присутствуют Текст, Группа, Добавить в библиотеку и Рекомендации ВР, которых нет в требованиях ВР-10 |
Считать элементами смежного/существующего функционала и не включать в приемку ВР-10 без отдельного требования |
| GAP-008 | Публичный API стенда не позволяет создать метаданные Справочник и Объект учёта как изолированные фикстуры |
Не использовать постоянные ID. Positive E2E этих двух типов включить после появления fixture API/изолированного seed; negative contract уже автоматизирован. |
| GAP-009 | Исторически DELETE БП возвращал 500; 20.08.2026 новый БП удалён и манифест исчез |
BPAPI-015 закрыт ретестом; сохранить cleanup regression без xfail. |
| GAP-010 | Публичные GraphQL/OpenAPI контракты не дают управлять статусом черновик/опубликован и доступна только роль admin | Не заявлять покрытие FR-SEC-001 по статусу и ролям; добавить поддерживаемые fixtures публикации и editor/viewer account. |
| GAP-011 | Переданный inventory шире OpenAPI/develop: actions находятся только в feature-ветке, execution routes в ней отключены | До merge/deployment выполнять contract test BPAPI-017; E2E не считать покрытым. |
| GAP-012 | В feature-ветке draft guards отключены ранним return, а list/create/reorder actions не используют bp_id URL |
Исправить до merge и добавить cross-BP/status regression для каждой mutation и collection. |
| GAP-013 | FieldType feature-ветки не содержит нормативный accounting_object, но содержит внутренний system; action description ограничено 150, но пустая строка не запрещена |
Синхронизировать enum/validation с FR-TYPE и FR-ASSIGN до API-приёмки. |
| GAP-014 | Live UI: при активном фильтре Переменные кнопка добавления открывает форму Добавление поля без переключателя сущности и атрибутов переменной |
BPUI-001; VAR-UI-002 не пройден. Исправить маршрут/режим формы и повторить весь UI E2E переменной. |