Files
specs/openspec/changes/stock-screener/qa-analysis.md
T
ksv741 ed6cf299f2
Specs security / security (push) Successful in 7s
Specs verify / verify (push) Successful in 9s
spec: add stock screener
2026-10-11 10:44:30 +03:00

9.7 KiB

QA Analysis

Verification Scope

In Scope

Новая capability stock-screener: полный online-поиск доступных к покупке акций, шесть фильтров и необязательный текст, выпускная дедупликация, стабильные страницы и различение подтверждённой пустоты от ошибки. Проверка перехода по точному инструменту и совместимости старых адресов акций.

Out of Scope

Финансовые показатели, исполнение заявки, личная возможность покупки, изменение облигаций, проверка цены или актуальности биржевой сессии.

Coverage Matrix

Requirement / Scenario в specs/stock-screener/spec.md Проверка на уровне системы
«Скринер ищет среди доступных к покупке акций» / «Поиск без названия или тикера» Отправить пустые условия; убедиться, что результат получен без текста и содержит выпуски из полного доступного каталога, включая кандидатов вне первых 30 совпадений старого поиска; показать время списка.
Тот же requirement / «Акция недоступна для покупки» Сопоставить инструменты со всеми комбинациями двух флагов: в результат попадают только подтверждённые true + true.
«Условия скринера применяются совместно» / «Несколько условий без текста», «Текст совместно с характеристиками» Выбрать по очереди и в сочетании все шесть условий, дополнить названием/тикером; проверить пересечение по полному каталогу до страниц.
Тот же requirement / «Неизвестный сектор», «Граница максимального лота» Отсутствующее выбранное свойство исключает результат; лот, равный границе, включён, больший и неизвестный исключены.
«Результат представляет отдельные выпуски» / три сценария Один ISIN в нескольких режимах даёт одну карточку; только подходящий режим даёт ссылку на него; разные ISIN и инструменты без ISIN не склеиваются.
«Страницы относятся к одному результату поиска» / «Переход к следующей странице» Выдача более 30 выпусков: страницы имеют общий asOf, нет повторов/пропусков, порядок по тикеру и UID; каждая содержит не более 30.
Тот же requirement / «Повторный поиск», «Поля изменены, но поиск не запущен» Черновые поля не подменяют выдачу; повторное «Найти» запускает новый поиск, первую страницу и новое время списка.
«Отсутствие совпадений отличается от недоступности поиска» / оба сценария Успешный поиск без совпадений показывает пустое состояние; недоступный каталог — ошибку с возможностью повторить, без утверждения об отсутствии акций.

Cross-system Verification

Сопоставить обе HTTP-операции с утверждённым target contract: обязательность полей, схема ошибок и статусы, авторизация, страницы одного searchId. Проверить отказ или неполноту источника, смену подключения между страницами, недоступный/чужой searchId, устаревший ответ прежнего поиска после нового; ни один случай не должен возвращать пустую подтверждённую страницу или пересчитывать старый результат. Проверить, что Shares запрашивается для полного каталога до отбора, а переход «Далее» не запускает новый поиск. Дублирования/перестановки на границе страниц не допускаются.

Risk-based Priorities

  1. Критично: ложная полнота при фильтрации только первых 30, неправильно подтверждённая доступность покупки, выдача чужого или старого результата подключения.
  2. Высокий риск: дубли/пропуски выпуска между страницами, смешение атрибутов разных UID, неполный ответ как успешная пустота.
  3. Средний риск: несоответствие текста и фильтров, различие времени снимка на страницах, сломанные ссылки на отдельную акцию и старый текстовый маршрут.

Test Data and Environment Needs

Управляемый полный каталог со следующими группами: более 30 подходящих выпусков; одинаковый ISIN в разных режимах, разные ISIN одного эмитента и отсутствующий ISIN; значения каждого фильтра, пропуски полей, пограничный размер лота; комбинации двух флагов покупки и торговли. Два пользователя и два последовательных подключения одного пользователя позволяют проверить область доступа. Предусмотреть системный сценарий отказа или неполного ответа T-Invest и недоступного результата между страницами; токены и личные финансовые данные для этого не нужны.

Manual / Exploratory Scope

Проверить поиск пустой формой и заполненной формой на широком и узком экране; состояние до поиска, загрузку, подтверждённую пустоту, ошибку и повтор. С клавиатуры пройти поля, запуск и навигацию страниц; убедиться, что активные условия и время результата различимы, ссылка ведёт к выбранной акции, а подпись «доступна к покупке» не выдаёт каталожный признак за обещание сделки.

Automation Candidates

Black-box проверки HTTP-контракта и сценариев поиска/листинга/доступа; сквозной сценарий формы, фильтров, повторного запуска и страницы акции. Repository automation: deferred until QA repo exists. Этот artifact не определяет внутренние тесты frontend/backend.

Observability Verification

На системной границе проверить отличимость успешного пустого поиска от отказа источника, фиксацию asOf и количества исходных/подходящих выпусков при успехе, регистрации недоступного результата и отказа чужому пользователю. Секрет подключения и полный текст запроса не должны попадать в наблюдаемые события.

Regression Impact

Старый текстовый GET /api/v1/stocks?query=..., прямые страницы по тикеру/UID и поиск облигаций остаются действующими. Смена подключения по-прежнему отделяет личные данные; новая выдача акций не меняет портфель.

Gaps / Blockers

Для управляемой системной проверки нужен способ получить предсказуемый каталог и вызвать отказ источника и потерю результата: тестируемость среды адресуется Engineering Design, без требования к внутренней реализации. Динамическая полнота опций фильтров не определена контрактом; если от неё зависит достижимость акций пользователем, вернуть вопрос в System Analysis до approval Design.