Эквивалентное разбиение: основы и применение

Тестирование интерфейсов — это не просто кликать по кнопкам и смотреть, что сломается. Это системный подход, при котором вы находите ошибки быстро и эффективно, не тратя время на лишние действия.

Мы уже знаем, что такое дефект, и как он проходит путь от обнаружения до исправления. Теперь пришло время научиться находить эти дефекты умнее, а не просто перебирать всё подряд.

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

Что такое эквивалентное разбиение?

Представим, что вы тестируете поле «Возраст» в форме регистрации. Система ожидает значение от 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 рублей.

Ваши задачи:

  1. Определите нормальный класс эквивалентности
  2. Определите недопустимые классы
  3. Выберите по одному тестовому значению из каждого класса

Проверьте себя:

КлассПример значения
Нормальный5 000
Недопустимый (слишком мало)0
Недопустимый (слишком много)150 000

Если система:

  • принимает 5 000 — хорошо,
  • отклоняет 0 и 150 000 — правильно,
  • а если принимает 0 — это дефект, и он попадает в жизненный цикл, как мы уже знаем.

Почему это важно?

Эквивалентное разбиение помогает:

  • Сократить количество тестов в разы
  • Не пропустить критичные сценарии
  • Системно подходить к проверке полей ввода, фильтров, форм

Это фундаментальная техника, которую используют и в ручном, и в автоматизированном тестировании.

Она особенно полезна при работе с требованиями — например, в User Story, где указано: «Пользователь может ввести сумму от 1 до 100 000 рублей».

Что дальше?

Мы научились делить данные на классы и проверять по одному значению из каждого.

Но что, если ошибка возникает не внутри класса, а на границе?

Например, система принимает 119 и 121, но ломается на 120?

Такое бывает чаще, чем кажется.

В следующей теме мы разберём, как находить такие скрытые баги с помощью техники граничных значений.

Готовы к более точному "сканированию" интерфейсов?