Урок 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 |
| Жизненный цикл корзины и заказа | Диаграмма состояний |
Алгоритм тест-дизайна:
- Читаем требование: что обязательно, какие диапазоны, ограничения, исключения.
- Выделяем классы, границы, условия, комбинации и состояния.
- Только после этого превращаем идеи в чек-лист или тест-кейсы.
Ключевые тезисы для теста
- Класс эквивалентности — группа данных с одинаковым поведением системы; достаточно одного представителя.
- Классы бывают валидными (должны проходить) и невалидными (должны давать ошибку).
- Граничные значения — где ошибки прячутся чаще всего: граница снизу, граница сверху, значение за пределом.
- Decision table нужна, когда результат зависит от нескольких условий одновременно.
- Pairwise — компромисс: каждая пара значений встречается хотя бы раз, но не все комбинации.
- Диаграмма состояний — карта жизненного цикла объекта: состояния и переходы между ними.
- Тест-дизайн начинается с требований, а не с кнопок.
- Техники используются вместе: одна редко закрывает всю фичу.
Полезные ссылки
- Эфиры Сергея на YouTube: https://www.youtube.com/@qabigtech/streams
- Чат марафона: https://t.me/+-utD4gcZaG82MTky
- Telegram-канал Сергея: https://t.me/qabigtech
- Учебный магазин «Пиццаед»: /base/shop
- Требования к «Пиццаеду»: /base/shop/requirements
- Pairwise tool: поиск «pairwise testing tool online»