Зачем AI-ассистенту пирамида тестирования, или Как разобрать слона на куски

Зачем AI-ассистенту пирамида тестирования, или Как разобрать слона на куски

Вы можете не знать про пирамиду тестирования. Но если вы строите AI-ассистента для QA — пирамида обязательно узнает про вас.

Пирамида тестирования — это не просто теория из учебников. Это архитектурное ограничение, которое становится критически важным, когда языковая модель с контекстным окном берётся за проектирование тестов.

1. Быстрое напоминание: что за пирамида

Пирамида тестирования — модель распределения тестов по уровням. Внизу — много быстрых и дешёвых, вверху — мало медленных и дорогих.

Главное правило: если проверку можно сделать на нижнем уровне — делайте её там. Не проверяйте расчёт комиссии через UI, если можно отправить POST /api/payments и сверить ответ. Это быстрее, надёжнее, дешевле.

Но это не просто практика — это следствие архитектуры продукта и иерархии требований.

2. От архитектуры к тестам: уровни требований

Уровни тестирования напрямую вытекают из структуры разработки:

  • Бизнес-требованияEpic / FeatureСквозные процессы
  • Пользовательские требованияUser StoryСценарии взаимодействия
  • Функциональные требованияЗадачи в JiraМодули и компоненты

Каждому уровню архитектуры соответствует свой уровень тестирования:

  • Компонентный: работает ли метод? (класс, интерфейс)
  • Системный: правильно ли система обслуживает пользователя? (API, UI)
  • E2E: работает ли бизнес-процесс от начала до конца? (все системы)

3. Как это выглядит на практике: один Feature — три уровня тестов

Возьмём Feature: «Промокоды при оформлении заказа».

Он включает:

  • Feature: поддержка промокодов
  • User Stories: применение, история заказов, админка
  • Tasks: API на бэкенде, форма на фронтенде, валидация, расчёт

Уровень 1: Компонентные тесты (Task)

Тестируем изолированно — только один компонент, всё остальное мокается.

Back-end:

  • POST /orders/apply-promo с кодом SALE10 → скидка 10%
  • Просроченный код → 400 Bad Request
  • Скидка 100% → итоговая сумма 0, а не отрицательная
  • Запрос без промокода → 200, ничего не ломается

Front-end:

  • Поле «Промокод» и кнопка «Применить» видны
  • Кириллица или спецсимволы → ошибка до отправки
  • После ввода — отображается скидка и новая сумма
  • Ошибка → сообщение под полем

Цель: проверить компонент в изоляции. Для этого нужен только его контекст — всё остальное можно мокировать.

Уровень 2: Системные тесты (User Story)

Проверяем сценарий целиком в одной системе.

  • Добавить товар → ввести промокод → оформить → заказ со скидкой
  • Сумма на экране совпадает с API-ответом
  • Промокод и скидка сохранены в БД
  • Негативные сценарии, разные роли и альтернативные пути

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

Уровень 3: E2E-тесты (Feature)

Проверяем взаимодействие между User Stories:

  • Оформили заказ с промокодом → в истории видна скидка
  • Оформили заказ → в админке отображается промокод
  • Деактивировали промокод → он больше не работает
  • Кросс-системные сценарии и цепочки действий

На каждом уровне — свой объект, свой контекст, свои проверки. Это не баг, а фича.

4. А теперь — причём тут AI

Когда тест-дизайнером становится LLM, пирамида перестаёт быть «хорошей практикой» — она становится архитектурной необходимостью.

Контекстное окно: почему размер имеет значение

У любой LLM есть контекстное окно. Даже у Claude (до 1 млн токенов) оно ограничено.

Если попытаться загрузить весь Feature — 12 User Stories, 40 задач, контракты, макеты, данные — произойдёт одно из двух:

  • Не влезет — физический лимит
  • Влезет, но качество упадёт — модель начнёт упрощать, пропускать граничные случаи, «забывать» совместимость

Это как попросить человека запомнить 12 рецептов и проверить по каждому свежесть, время и аллергены. На седьмом он перепутает соль с сахаром.

5. Контекстное окно: слон, который не влезает

Вместо одного слона — много кусочков торта. Каждый — в своём контексте, с фокусом и данными. Модель работает с одной задачей — и делает это качественно.

Пирамида — это естественная декомпозиция. Разбивать «по смыслу» (например, «всё про валидацию») — значит создать мешанину. Пирамида же даёт чёткую ответственность: каждый уровень — свои проверки, от Feature до Task.

Давайте посчитаем

Подход «всё в одном»:

  • 12 US × 5 стр. = 60
  • 40 Tasks × 2 стр. = 80
  • API-контракты: 30
  • Figma: 20
  • Global Context: 15
  • Итого: ~205 стр. ≈ 150 000 токенов

Кажется, влезает. Но внимание модели «размазывается» — качество падает.

Подход «по пирамиде»:

  • Описание Task: 2 стр.
  • API-контракт: 3 стр.
  • Тестовые данные: 1 стр.
  • Relevant Global Context: 2 стр.
  • Итого: ~8 стр. ≈ 6 000 токенов

Модель работает с 6 000 вместо 150 000. Внимание не рассеивается. Качество — максимальное.

6. Почему LLM работает хуже на верхних уровнях пирамиды

Проблема не только в размере. Даже если всё влезает, качество падает по трём причинам.

6.1. Context rot: качество гниёт задолго до переполнения

Исследование Chroma (2025) показало: context rot — деградация качества — начинается уже при 15% заполнения окна.

LLM — не база данных. Внимание распределяется по всему контексту. Чем больше текста — тем тоньше «размазывается» внимание.

Модель «забывает» проверить граничные значения не потому что глупая — а потому что не хватает внимания.

6.2. Экономика токенов: пирамида экономит деньги

Каждый токен — это деньги или лимит.

  • 40 компонентных тестов: 40 × 15K = 600K токенов
  • 12 системных: 12 × 90K = 1 080K
  • 5 E2E: 5 × 320K = 1 600K

5 E2E-тестов стоят в 2.7 раза дороже, чем 40 компонентных. При этом компонентные покрывают больше проверок.

Итераций отладки тоже больше: E2E — 3–5, компонентные — 1–2. Каждая итерация — повторная загрузка контекста.

Пирамида — это не только архитектура, но и стоимость владения.

6.3. Поддержка: чинить тесты тоже должен AI

Тесты ломаются. Вопрос — сколько контекста нужно для починки.

Изменилась логика расчёта скидки:

  • Без пирамиды: падают E2E-тесты. Нужно загрузить 20 шагов, 3 системы, понять, где ошибка — фронт, бэк, данные?
  • С пирамидой: падают 2–3 API-теста. Контекст — один сервис. Причина очевидна. Фикс — точечный.

Чем ниже уровень — тем меньше причин для поломки и меньше контекста для фикса.

Итог: чем выше уровень — тем больше проблем складывается

На верхних уровнях:

  • Контекст большой — context rot
  • Стоимость высокая — токены и итерации
  • Поломка размазана — сложный фикс

Вывод: чем больше тестов на нижних уровнях — тем меньше вы зависите от слабых сторон LLM.

7. Как это устроено в QA Assist

Декомпозиция требований — точка входа

Агент requirements-decomposer разбивает требования по уровням и типизирует их:

  • User Story: F-DEVAI-283-01
  • Backend Task: F-DEVAI-283-BE-01
  • Frontend Task: F-DEVAI-283-FE-01

Суффиксы -BE-, -FE- — ключ к дальнейшей обработке.

Генерация тестов — три уровня, три типа файлов

Агент scenarios-generator создаёт отдельные JSON-файлы для каждого уровня:

  • US-*.mdSC-E2E.json (реальные сервисы)
  • TASK-*-FE.mdSC-UI.json (бэкенд мокается)
  • TASK-*-BE.mdSC-API.json (внешние сервисы мокаются)

Поле testScope определяет, как запускать тест. Автоматизаторы работают только со своими сценариями — не путаются, контекст минимален.

Контекст — каждому уровню своё

API-тест:

  • Описание задачи
  • OpenAPI-контракт
  • Тестовые данные
  • Список эндпоинтов
  • Figma не загружается

UI-тест:

  • Описание задачи
  • Figma-данные
  • Селекторы
  • Тестовые данные
  • API-контракт — только для моков

E2E-тест:

  • Описание User Story
  • Оба контекста — на уровне сценариев
  • Без моков — все сервисы реальные

8. Заключение

Пирамида тестирования — не академическая теория. Это инженерный фундамент для AI-ассистентов.

Без неё LLM превращается в генератор правдоподобного мусора. Пирамида решает три фундаментальные проблемы:

1. Контекст. Большую задачу нельзя скормить целиком — внимание модели размазывается. Context rot деградирует качество задолго до лимита. Пирамида — естественная декомпозиция по архитектуре.

2. Стоимость. E2E-тесты в разы дороже: по токенам, итерациям, времени. Пирамида покрывает больше проверок с меньшими затратами.

3. Поддержка. Чем ниже уровень — тем проще фикс. Компонентный тест чинится за секунды с минимальным контекстом. E2E — требует расследования.

Даже с RAG и ростом окон — пирамида остаётся актуальной. Меньше контекста — выше качество. Это свойство архитектуры трансформеров, а не временное ограничение.

Если вы строите AI-ассистента для QA — начните с правильной декомпозиции. Пирамида не устарела. Она стала актуальнее, чем когда-либо.

Читать оригинал