К списку уроков
Блок 3 · Теория тестирования

Урок 9. Тест-дизайн

Как придумывать правильные тесты

Темы урока

Классы эквивалентности, граничные значения, таблица принятия решений, pairwise, диаграмма состояний и переходов

Видео урока

Пройти тест по уроку

Конспект урока

Главное за урок

Хороший QA проверяет не больше, а умнее. Перестань пытаться проверить все комбинации вручную. Научись выбирать данные, границы, правила и состояния по риску — это и есть тест-дизайн.

Тест-дизайн делает выбор проверок объяснимым. Один тестировщик проверит промокод, другой — пустую корзину, третий — недоступный товар. Все трое тестируют один продукт, но закрывают разные риски. Тест-дизайн выстраивает систему вместо случайного набора.

Техники тест-дизайна нужны до чек-листов и тест-кейсов. Сначала понимаем, что проверять, — только потом записываем как.


Классы эквивалентности

Класс эквивалентности — группа данных с одинаковым ожидаемым поведением системы. Достаточно взять одного представителя класса, а не проверять десятки похожих значений.

Типы классов

Тип Что проверяем Ожидание
Валидный Данные, которые должны приниматься Успешный результат
Невалидный Данные, нарушающие правила Ошибка / отказ

Пример: промокод QA60

Класс Значения Ожидание
Валидный QA60 Скидка 10%
Валидный (нормализация) qa60, QA60 Скидка 10% после приведения
Невалидный — неверный код TEST, SALE, HELLO Ошибка «промокод не найден»
Невалидный — пустое поле `` (пусто) Скидка 0%, без ошибки
Невалидный — спецсимволы QA60!, <script> Ошибка валидации
Невалидный — слишком длинный 100 символов Ошибка валидации

TEST и SALEодин класс (неверный код), не нужно проверять оба.


Граничные значения

Граничные значения проверяют места, где логика чаще ломается. Баги любят жить на >=, >, <=, < и ошибках округления.

Принцип

Если количество товара должно быть минимум 1:

  • 0 — граница снизу (запрещено)
  • 1 — минимально допустимое значение
  • 2 — начало диапазона
  • очень большое — верхняя граница или проверка лимитов

Середина диапазона доказывает меньше, чем граница. Значение 5 показывает, что обычное добавление работает. Значение 1 показывает, правильно ли система держит минимум. Значение 0 — правильно ли запрещает невозможное состояние.

Пример: расчёт скидки в «Пиццаеде»

Ситуация Почему интересна
Пустая корзина Скидка 0%, заказ нельзя оформить
Корзина с одним товаром Минимальный заказ
Сумма с дробной скидкой Округление 10% может дать копейки
Сумма около порога доставки 1500 ₽ Скидка может опустить сумму ниже бесплатной доставки

Таблица принятия решений (Decision Table)

Нужна, когда результат зависит от нескольких условий одновременно.

Условие / Колонка 1 2 3 4
Промокод валидный Да Нет Да Нет
Корзина не пустая Да Да Нет Нет
Скидка применяется
Заказ можно оформить

Что даёт таблица:

  • Видны все возможные комбинации условий.
  • Легко найти пропущенные случаи и противоречия в требованиях.
  • Каждая колонка — отдельный тест-сценарий.

Pairwise тестирование

Pairwise — метод, при котором каждая пара значений встречается в наборе хотя бы один раз, но не все комбинации.

Если есть 4 параметра по 2–3 значения, полный перебор даёт десятки сценариев. Pairwise сокращает до 6–8, покрывая все пары.

Когда применять

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

Ограничения

  • Плохо закрывает бизнес-риски, если QA не понимает продукт.
  • Критичные сценарии всё равно добавляем вручную поверх сгенерированного набора.

Диаграмма состояний и переходов

Нужна, когда объект живёт в разных состояниях, и важны переходы между ними.

Состояния корзины в «Пиццаеде»

[Пустая] ──добавить товар──▶ [Есть товары]
   ▲                              │
   │                        применить QA60
   │                              ▼
удалить всё ◀──── [Корзина со скидкой]
                              │
                         оформить заказ
                              ▼
                         [Заказ создан]
                              │
                        корзина очищена
                              ▼
                          [Пустая]

Состояния промокода

Не введёнВведён неверныйВведён валидныйКорзина измениласьЗаказ созданКорзина очищена

Что проверяем в состояниях:

  • Оформить заказ из полной корзины — можно.
  • Оформить заказ из пустой — нельзя.
  • Применить QA60 повторно после изменения корзины — что происходит?
  • Удалить последний товар — вернулась ли корзина в пустое состояние?

Как техники складываются вместе

Одна техника редко закрывает всю фичу:

Зона Техника
Поле промокода Классы эквивалентности + нормализация ввода
Расчёт скидки Граничные значения суммы и округления
Сочетания условий корзины Decision table
Комбинации параметров Pairwise
Жизненный цикл корзины и заказа Диаграмма состояний

Алгоритм тест-дизайна:

  1. Читаем требование: что обязательно, какие диапазоны, ограничения, исключения.
  2. Выделяем классы, границы, условия, комбинации и состояния.
  3. Только после этого превращаем идеи в чек-лист или тест-кейсы.

Ключевые тезисы для теста

  • Класс эквивалентности — группа данных с одинаковым поведением системы; достаточно одного представителя.
  • Классы бывают валидными (должны проходить) и невалидными (должны давать ошибку).
  • Граничные значения — где ошибки прячутся чаще всего: граница снизу, граница сверху, значение за пределом.
  • Decision table нужна, когда результат зависит от нескольких условий одновременно.
  • Pairwise — компромисс: каждая пара значений встречается хотя бы раз, но не все комбинации.
  • Диаграмма состояний — карта жизненного цикла объекта: состояния и переходы между ними.
  • Тест-дизайн начинается с требований, а не с кнопок.
  • Техники используются вместе: одна редко закрывает всю фичу.

Полезные ссылки