Техника · Equivalence Class Partitioning

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

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

Сценарий — Поле «Email» при регистрации

Правила валидации:

Не пустое
Содержит ровно один символ @
До @: минимум 1 символ
После @: домен с точкой, минимум 2 символа после точки
Длина: не более 254 символов
Классы эквивалентности (5 невалидных + 1 валидный)
P1 · Валидный
Корректный email
user@example.com
P2 · Невалидный
Нет символа @
userexample.com
P3 · Невалидный
Нет домена после @
user@
P4 · Невалидный
Пустое значение
"" (пустая строка)
P5 · Невалидный
Два знака @
user@@example.com
P6 · Невалидный
Слишком длинный
a×255@example.com
Упражнение — назначь каждый тест-кейс в класс

Нажми нужную кнопку (P1–P6) напротив каждого значения. Затем нажми «Проверить».

hello@mail.ru
(пустое поле)
testexample.org
a@@domain.com
nodomainhere@
x@y.io
Вопрос 01
Почему достаточно одного тест-кейса на класс эквивалентности?
Потому что тестирование занимает много времени
Потому что система ведёт себя одинаково для всех значений класса — баг воспроизведётся на любом представителе
Потому что невалидные значения не нужно тестировать совсем
Вопрос 02
Нужно ли выбирать разные тест-кейсы для P1: hello@mail.ru и x@y.io?
Да — чем больше примеров валидного класса, тем лучше
Нет — оба из P1, достаточно одного. Лучше потратить второй тест на другой класс
Вопрос 03
Тестировщик нашёл 6 классов. Сколько минимум тест-кейсов нужно для покрытия всех классов?
1 — один комплексный тест
6 — по одному на каждый класс
36 — все комбинации классов
Что запомнить
  • Один класс = одно поведение системы. Если поведение одинаково — один тест-кейс покрывает весь класс.
  • Невалидные классы так же важны, как валидный: каждый может давать разное сообщение об ошибке — это тоже нужно проверить.
  • ECP и BVA работают вместе: ECP определяет классы, BVA уточняет конкретные значения на границах классов.
  • Хороший тест-кейс принадлежит ровно одному классу. Если тест проверяет и «нет @», и «пустое поле» — это два разных теста, замешанных в один.