Тестирование интерфейсов — это не просто кликать по кнопкам и смотреть, что сломается. Это системный подход, при котором вы находите ошибки быстро и эффективно, не тратя время на лишние действия.
Мы уже знаем, что такое дефект, и как он проходит путь от обнаружения до исправления. Теперь пришло время научиться находить эти дефекты умнее, а не просто перебирать всё подряд.
Особенно это важно, когда у вас ограниченное время — например, в условиях спринта, где каждый час на счету.
Что такое эквивалентное разбиение?
Представим, что вы тестируете поле «Возраст» в форме регистрации. Система ожидает значение от 1 до 120 лет.
Тестировать все 120 чисел? Это долго и неэффективно.
Здесь на помощь приходит техника эквивалентное разбиение — способ группировки входных данных, при котором все значения в одной группе ведут себя одинаково с точки зрения системы.
Такая группа называется классом эквивалентности.
Если система корректно обрабатывает одно значение из класса, вероятно, она так же обработает и все остальные значения этого класса.
💡 Главная идея: достаточно проверить одно значение из каждого класса, чтобы покрыть поведение всей группы.
Как работает эквивалентное разбиение на практике?
Рассмотрим пример: поле «Возраст» с допустимым диапазоном от 1 до 120 лет.
Мы можем выделить три класса эквивалентности:
| Класс | Диапазон | Тип |
|---|---|---|
| Допустимые значения | 1–120 | Нормальный класс |
| Значения меньше 1 | ≤ 0 | Недопустимый класс |
| Значения больше 120 | ≥ 121 | Недопустимый класс |
Теперь достаточно протестировать по одному значению из каждого класса:
- 50 — проверка нормального класса
- 0 — проверка недопустимого значения (слишком мало)
- 150 — проверка недопустимого значения (слишком много)
Если система корректно принимает 50 и отклоняет 0 и 150 — поведение соответствует ожиданиям.
✅ Правильно:
- Ввод:
50→ система принимает- Ввод:
0→ появляется сообщение «Возраст должен быть от 1 до 120»- Ввод:
150→ появляется то же сообщение об ошибке
❌ Ошибка:
- Ввод:
0→ система принимает значение- Ввод:
150→ приложение зависает
Такой дефект мы уже знаем, как оформить — в виде баг-репорта, как мы учились в теме «Что такое дефект и его жизненный цикл».
Нормальные и граничные классы
Важно понимать разницу между нормальными и граничными классами.
- Нормальный класс — это диапазон значений, которые система должна принимать и корректно обрабатывать.
- Недопустимые классы — значения за пределами диапазона, которые система должна отклонять.
Однако: на границах диапазона (например, 1 и 120) ошибки возникают особенно часто.
Сейчас мы фокусируемся на эквивалентных классах, но важно помнить: проверка границ — это отдельная техника, которую мы изучим сразу после этой темы.
Практическое упражнение
Допустим, вы тестируете поле «Сумма заказа» в интернет-магазине. Система принимает значения от 1 до 100 000 рублей.
Ваши задачи:
- Определите нормальный класс эквивалентности
- Определите недопустимые классы
- Выберите по одному тестовому значению из каждого класса
Проверьте себя:
| Класс | Пример значения |
|---|---|
| Нормальный | 5 000 |
| Недопустимый (слишком мало) | 0 |
| Недопустимый (слишком много) | 150 000 |
Если система:
- принимает
5 000— хорошо, - отклоняет
0и150 000— правильно, - а если принимает
0— это дефект, и он попадает в жизненный цикл, как мы уже знаем.
Почему это важно?
Эквивалентное разбиение помогает:
- Сократить количество тестов в разы
- Не пропустить критичные сценарии
- Системно подходить к проверке полей ввода, фильтров, форм
Это фундаментальная техника, которую используют и в ручном, и в автоматизированном тестировании.
Она особенно полезна при работе с требованиями — например, в User Story, где указано: «Пользователь может ввести сумму от 1 до 100 000 рублей».
Что дальше?
Мы научились делить данные на классы и проверять по одному значению из каждого.
Но что, если ошибка возникает не внутри класса, а на границе?
Например, система принимает 119 и 121, но ломается на 120?
Такое бывает чаще, чем кажется.
В следующей теме мы разберём, как находить такие скрытые баги с помощью техники граничных значений.
Готовы к более точному "сканированию" интерфейсов?