Урок по треку Основы тестирования и тест-дизайн 6 мин

Классы эквивалентности и граничные значения за 8 минут

Разбиение на классы, двух- и трёхточечный анализ границ, задачи «протестируй поле».

«Протестируй поле ввода возраста» это, пожалуй, самая частая практическая задача на собеседовании тестировщика. Её решают двумя техниками, которые почти всегда идут вместе: разбиение на классы эквивалентности и анализ граничных значений.

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

Класс эквивалентности это множество значений, которые система по требованиям должна обрабатывать одинаково. Если одно значение класса находит дефект, то его найдут и остальные, а если не находит, то остальные тоже не найдут. Поэтому из класса достаточно взять одно значение.

Пример: поле «Возраст», целые от 18 до 60.

КлассВалидный?Представитель
меньше 18нет5
от 18 до 60да35
больше 60нет75

Невалидных классов два, а не один: «слишком мало» и «слишком много» часто обрабатываются разными ветками кода и дают разные сообщения.

Кроме диапазона, классы дают формат ввода:

  • пустое значение;
  • строка из пробелов;
  • не число (abc);
  • дробное число (18,5), разные разделители (запятая и точка);
  • отрицательное число;
  • ведущие нули, пробелы по краям;
  • очень длинная строка.

Пустое значение забывают чаще всего, хотя у обязательного поля для него своя ветка и своё сообщение.

Граничные значения

Ошибки любят границы: > вместо >=, «до» вместо «до включительно», ошибка на единицу. Поэтому на каждой границе берут несколько значений.

Двухточечный анализ: сама граница и ближайшее значение из соседнего класса.

Возраст 18..60:  17, 18, 60, 61

Трёхточечный анализ: граница и оба соседа.

Возраст 18..60:  17, 18, 19, 59, 60, 61

Трёхточечный ловит больше: например, если в коде написано age == 18 вместо age >= 18, двухточечный набор (17 и 18) это пропустит, а 19 покажет.

Шаг значения

Сосед определяется шагом:

  • целые: 17 и 18;
  • копейки: 4999,99 и 5000,00;
  • температура с шагом 0,1: −30,1 и −30,0;
  • длина строки: 7 и 8 символов для пароля «от 8 до 20»;
  • даты: день до и день после.

Чьей стороне принадлежит граница

Читай требования внимательно. «До 1 кг включительно 300 ₽, свыше 1 кг 500 ₽»: граница 1,000 кг принадлежит дешёвому тарифу, её сосед при шаге в грамм 1,001 кг. Если требование звучит как «скидка детям до 18 лет» и непонятно, входит ли 18, не угадывай. Это дефект требований, вопрос к их автору.

Неявные границы

Требования говорят «любое положительное целое», но реализация всё равно ограничена:

  • тип в коде (32-битное целое: максимум 2147483647);
  • длина колонки в базе (varchar(255));
  • лимит размера тела запроса на сервере или прокси;
  • максимальный размер загружаемого файла.

Их ищут в документации API, схеме БД, у разработчиков.

Относительные границы

Иногда граница зависит от другого поля: «дата выезда позже даты заезда на 1-30 ночей». Проверяй разницу 0, 1, 30 и 31 ночь при разных датах заезда: конец месяца, 29 февраля, Новый год.

Как собрать тесты

  1. Выпиши входные параметры и требования к ним.
  2. Разбей каждый на валидные и невалидные классы.
  3. Найди границы между классами.
  4. Выбери значения: представители и границы.
  5. Составь тесты: валидные значения разных полей объединяй, невалидные проверяй по одному.

Последнее правило важно. Если в одном тесте два невалидных поля, первая ошибка валидации замаскирует вторую. Пример: у двух полей по одному валидному и по два невалидных класса. Минимум тестов: 1 позитивный + 4 негативных = 5.

Не забудь сервер

Если фронт не даёт ввести 100 000,01 ₽, это удобство, а не защита. Отправь то же значение запросом в API через DevTools, Postman или cURL: сервер обязан отказать.

Частые ошибки

  • Проверять только 18 и 60, без 17 и 61.
  • Объединять «меньше» и «больше» в один невалидный класс.
  • Брать соседей с шагом 1 там, где шаг 0,01.
  • Забывать пустое значение и пробелы.
  • Проверять границы только в интерфейсе.

Что спросят на собесе

  • Протестируй поле «Возраст» от 18 до 60.
  • Что такое класс эквивалентности? Почему из класса берут одно значение?
  • Чем двухточечный анализ границ отличается от трёхточечного?
  • Сколько тестов нужно для формы из двух полей?
  • Какие границы есть у поля, если требования их не указывают?

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.

Вопросы модуля (30)