Техники тест-дизайна
Updated Jul 2026
Классические техники тест-дизайна преподаются с 1970-х годов и по-прежнему остаются основой разработки тест-кейсов. Каждый интервьюер ожидает, что вы их знаете, и каждый опытный QA-инженер применяет их — часто интуитивно — при выборе тест-кейсов для написания. Эти техники отвечают на вопрос: «Я не могу протестировать все возможные входные данные. Какие из них выбрать?»
Анализ граничных значений (BVA)
Тестируйте на границах входных диапазонов, где концентрируются ошибки. Ошибки на единицу (off-by-one) — наиболее распространённый числовой баг в программном обеспечении, и BVA специально разработан для их выявления.
Принцип
Для любых входных данных с допустимым диапазоном тестируйте:
- Значение непосредственно перед нижней границей (невалидное)
- Саму нижнюю границу (валидное)
- Значение сразу после нижней границы (валидное)
- Значение непосредственно перед верхней границей (валидное)
- Саму верхнюю границу (валидное)
- Значение сразу после верхней границы (невалидное)
Пример: поле возраста (принимает 18-65)
| Тестовое значение | Ожидаемый результат | Обоснование |
|---|---|---|
| 17 | Отклонено | Непосредственно перед минимумом |
| 18 | Принято | Нижняя граница |
| 19 | Принято | Сразу после минимума |
| 64 | Принято | Непосредственно перед максимумом |
| 65 | Принято | Верхняя граница |
| 66 | Отклонено | Сразу после максимума |
Дополнительные границы для проверки
- Ноль: принимает ли поле 0? А отрицательные числа?
- Пустая строка и null: в большинстве систем это разные значения
- Максимальная длина: для текстовых полей — что происходит при максимальной длине, максимальная длина + 1?
- Пределы типов данных: переполнение целого числа (2 147 483 647 для 32-битного знакового int)
- Граничные даты: конец месяца (28/29/30/31), границы года, високосные годы
BVA на практике
GIVEN a registration form with age field (valid range: 18-65)
WHEN the user enters age = 17 and submits
THEN the form shows validation error "Age must be between 18 and 65"
GIVEN a registration form with age field (valid range: 18-65)
WHEN the user enters age = 18 and submits
THEN the form accepts the input and proceeds to the next step
Эквивалентное разбиение (EP)
Разделите входные данные на группы (классы эквивалентности), в которых все значения должны обрабатываться одинаково. Протестируйте одно репрезентативное значение из каждого класса.
Принцип
Если система обрабатывает все значения в диапазоне одинаково, тестирования одного значения достаточно для представления всего диапазона. Это значительно сокращает количество тестов при сохранении осмысленного покрытия.
Пример: то же поле возраста (18-65)
| Класс | Диапазон | Репрезентативное значение | Ожидаемый результат |
|---|---|---|---|
| Невалидное снизу | < 18 | 10 | Отклонено |
| Валидное | 18-65 | 30 | Принято |
| Невалидное сверху | > 65 | 70 | Отклонено |
EP для нечисловых входных данных
Эквивалентное разбиение работает для любого типа входных данных:
| Входные данные | Валидные классы | Невалидные классы |
|---|---|---|
| Поле email | Корректный формат email (user@domain.com) | Отсутствие @, отсутствие домена, пустая строка, только пробелы |
| Загрузка файла | Допустимые форматы (.jpg, .png, .pdf) | Недопустимые форматы (.exe, .bat), пустой файл, файл слишком большого размера |
| Выпадающий список стран | Страны из списка | (нельзя выбрать невалидное, но проверьте пустой выбор) |
| Поисковый запрос | Буквенно-цифровые строки | SQL-инъекции, XSS-полезные нагрузки, чрезмерно длинные строки |
Сочетание EP и BVA
EP сокращает количество тестов. BVA уточняет выбор на границах классов. Используйте их вместе:
- Сначала определите классы эквивалентности с помощью EP
- Затем на границе каждого класса примените BVA
Для поля возраста: EP даёт три класса. BVA уточняет границы между классами до конкретных значений (17, 18, 65, 66).
Таблицы решений
Когда бизнес-логика включает комбинации условий, таблица решений обеспечивает полное покрытие. Каждый столбец представляет уникальную комбинацию условий и ожидаемый результат.
Построение таблицы решений
- Перечислите все условия (входные данные/состояния)
- Перечислите все действия (выходные данные/поведение)
- Вычислите количество комбинаций: 2^n для n булевых условий
- Заполните ожидаемое действие для каждой комбинации
- Найдите правила, которые можно объединить (если условие не влияет на результат)
Пример: правила доставки
| Условие | Правило 1 | Правило 2 | Правило 3 | Правило 4 |
|---|---|---|---|---|
| Клиент премиальный? | Д | Д | Н | Н |
| Заказ > $100? | Д | Н | Д | Н |
| Действие: Бесплатная доставка | Да | Да | Да | Нет |
| Действие: Подарочная упаковка | Да | Нет | Нет | Нет |
Эта таблица показывает, что Правило 3 (непремиальный клиент с крупным заказом) получает бесплатную доставку — это намеренно? Таблицы решений выявляют вопросы бизнес-логики, которые иначе могли бы остаться незамеченными.
Более сложный пример: одобрение кредита
| Условие | П1 | П2 | П3 | П4 | П5 | П6 | П7 | П8 |
|---|---|---|---|---|---|---|---|---|
| Кредитный рейтинг > 700? | Д | Д | Д | Д | Н | Н | Н | Н |
| Доход > $50K? | Д | Д | Н | Н | Д | Д | Н | Н |
| Существующий клиент? | Д | Н | Д | Н | Д | Н | Д | Н |
| Одобрить кредит | Да | Да | Да | Нет | Да | Нет | Нет | Нет |
| Процентная ставка | Низкая | Средняя | Средняя | - | Средняя | - | - | - |
Из этой таблицы выведите один тест-кейс на каждое правило. Это обеспечит полное комбинаторное покрытие бизнес-логики.
Диаграммы переходов состояний
Моделируйте функции, имеющие различные состояния и переходы между ними. Тестирование переходов состояний гарантирует, что система корректно переходит между состояниями и блокирует недопустимые переходы.
Построение диаграммы
[Draft] --submit--> [Pending Review] --approve--> [Published]
--reject---> [Draft]
[Published] --archive--> [Archived]
[Archived] --restore---> [Draft]
Выведение тест-кейсов
Из приведённой выше диаграммы выведите тест-кейсы для:
Допустимые переходы (позитивные тесты):
- Draft -> Pending Review (submit)
- Pending Review -> Published (approve)
- Pending Review -> Draft (reject)
- Published -> Archived (archive)
- Archived -> Draft (restore)
Недопустимые переходы (негативные тесты):
- Draft -> Published напрямую (должно быть заблокировано)
- Archived -> Published напрямую (должен требоваться переход через Draft)
- Published -> Draft (должно требоваться архивирование)
- Pending Review -> Archived (должно быть заблокировано)
Циклы переходов:
- Draft -> Pending -> Draft -> Pending -> Published (цикл отклонения работает корректно)
Покрытие состояний:
- Каждое состояние достигается хотя бы один раз
- Каждый переход выполняется хотя бы один раз
Табличный формат переходов состояний
| Текущее состояние | Событие | Следующее состояние | Действие |
|---|---|---|---|
| Draft | Submit | Pending Review | Отправить уведомление рецензенту |
| Pending Review | Approve | Published | Сделать видимым для публики |
| Pending Review | Reject | Draft | Отправить причину отклонения автору |
| Published | Archive | Archived | Убрать из публичного доступа |
| Archived | Restore | Draft | Вернуть автору для редактирования |
Попарное тестирование (дополнительная техника)
Когда у вас много входных параметров, тестирование всех комбинаций нереалистично. Попарное тестирование (также называемое all-pairs) гарантирует, что каждая пара значений параметров тестируется хотя бы один раз.
Пример
Тестирование веб-формы с параметрами: браузер (Chrome, Firefox, Safari), ОС (Windows, Mac, Linux), язык (EN, ES, FR).
Полный перебор: 3 x 3 x 3 = 27 тест-кейсов. Попарное тестирование: приблизительно 9 тест-кейсов покрывают каждую пару.
Инструменты, такие как PICT (Microsoft), AllPairs или онлайн-генераторы попарных комбинаций, создают оптимальный набор тестов.
Выбор подходящей техники
| Ситуация | Лучшая техника |
|---|---|
| Числовой ввод с определённым диапазоном | BVA + EP |
| Несколько категорий входных данных | EP |
| Бизнес-правила с комбинациями условий | Таблицы решений |
| Функции с рабочим процессом или жизненным циклом | Переходы состояний |
| Много параметров, каждый с небольшим числом значений | Попарное тестирование |
| Неизученная область, нет чётких требований | Исследовательское тестирование |
На практике опытные QA-инженеры комбинируют эти техники. Для одной функции вы можете использовать EP для определения классов, BVA для выбора конкретных значений и таблицу решений для обработки комбинаций бизнес-правил.
Практическое упражнение
Вы тестируете систему скидок со следующими правилами:
- Сотрудники получают скидку 20%
- Заказы свыше $200 получают скидку 10%
- Скидки не суммируются (скидка для сотрудников имеет приоритет)
- Промокоды могут добавить ещё 5% (суммируется с любой из скидок)
- Постройте таблицу решений, охватывающую все комбинации условий
- Определите неоднозначные правила, которые выявляет таблица
- Напишите тест-кейсы для каждого правила в формате Given/When/Then
- Примените BVA к порогу $200 (тестируйте при $199.99, $200.00, $200.01)
Ключевые выводы
- BVA выявляет ошибки на единицу на границах диапазонов
- EP сокращает количество тестов путём группировки эквивалентных входных данных
- Таблицы решений обеспечивают полное покрытие комбинаций бизнес-логики
- Диаграммы переходов состояний проверяют допустимые пути и блокируют недопустимые
- Комбинируйте техники для полного покрытия с минимальным количеством тестов