Skip to content
PПромтбук
RUEN
03Эвалюация

Регрессионный тест-сет

Каждый баг — новый тест. Дискаверь регрессии до прода.

Построй регрессионный тест-сет.

Принцип

Каждый найденный баг → один новый test case. Через год у тебя сильная защита от регрессий.

Что туда попадает

✓ Кейсы где модель ошиблась в продакшене ✓ Edge cases которые забыли покрыть ✓ Adversarial prompts которые сломали что-то ✓ Customer-reported bugs

Не туда: ✗ Каждый возможный input (unfocused) ✗ Кейсы которые проходят 99% случаев (нет ценности)

Структура теста

- id: bug-2025-04-15-currency
  category: regression
  date_added: 2025-04-15
  context: "User asked about price; model returned wrong currency"
  bug_ticket: SUPPORT-1234

  input:
    user_message: "How much is the Pro plan?"
    user_locale: "ru-RU"

  expected:
    - currency_in_response: "RUB"
    - mentions_amount: true
    - language: "Russian"

  should_not:
    - mentions: ["dollar", "USD", "$"]

  notes: |
    Bug: модель отвечала в USD игнорируя user_locale.
    Fix: добавили locale в системный промт.

Шаги добавления нового теста

1. Зафиксируй баг

Сохрани:

  • Точный input что вызвал
  • Что модель ответила (плохой output)
  • Что должна была ответить
  • Когда обнаружено

2. Минимизируй

Уменьши до минимально необходимого input'а который воспроизводит.

3. Добавь assertions

Какие проверки бы поймали этот баг?

  • contains / does_not_contain
  • matches_pattern
  • max_length / min_length
  • Custom check (если сложно)

4. Verify failed before fix

Прогон теста до фикса — должен fail. Это доказывает что тест что-то ловит.

5. Apply fix + verify passed

После фикса — должен pass.

6. Add to permanent set

Категоризация

Группируй по типам:

  • regression/locale — баги с локалями
  • regression/format — формат вывода
  • regression/safety — небезопасный output
  • regression/factuality — фактическая ошибка
  • regression/tool_use — неверное использование инструмента

Запуск

  • На каждое изменение промта / модели → весь regression set
  • Не обычно убирать тесты — они становятся защитой
  • Если тест становится не релевантен — удалить с обоснованием в комменте

Lifecycle теста

new → проверен → permanent

permanent → flaky → fix or remove
permanent → outdated → archive с комментом

Метрики

  • Размер set'а растёт со временем
  • Pass rate должен быть ~100% (отклонения = регрессия)
  • Time to run — оптимизируй (parallel, кеш)
  • Coverage по категориям — нет ли gap'ов

Когда тест ложно срабатывает

Тест fail на новом промте, но новый промт правильный?

  1. Перепроверь expected
  2. Может быть это новая фича которая legitimately меняет поведение?
  3. Обнови expected с комментом + переcommit baseline

Не делай это часто — иначе тесты становятся бесполезными.

Анти-паттерны

  • ❌ Тест который проверяет точную строку вывода (хрупкий)
  • ❌ Удаление теста потому что "стал fail" без анализа
  • ❌ Один тест который проверяет 10 вещей (если падает — не ясно почему)
  • ❌ Не помечать тесты по типу бага — не видишь паттернов

В конце

  • Список 10+ regression тестов (если у тебя уже есть production)
  • Категоризация
  • Runner config
  • Doc как добавлять новые
К подразделу «Эвалюация»
Похожие промты