Раздел 05 — Классы эквивалентности и граничные значения

Из бесконечного числа вариантов ввода выбрать десяток, который найдёт дефект

Прогресс курса Раздел 5 из 12

Что вы освоите в этом разделе

6 академических часов: 2 теории, 4 практики. На практике — поля «Задачника»: название, приоритет, срок, логин и пароль.
01

Зачем нужны техники

В разделе 01 мы посчитали: проверить все варианты одного текстового поля невозможно. Техники тест-дизайна отвечают на вопрос, какие немногие варианты выбрать, чтобы они нашли почти всё, что нашёл бы полный перебор. Две самые полезные для полей ввода — классы эквивалентности и граничные значения. Обычно их применяют вместе.

Пример на весь раздел — оформление молодёжной карты в банке: «Возраст клиента — от 14 до 35 лет включительно, целое число».

02

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

Класс эквивалентности — группа значений, которые программа должна обработать одинаково. Если возраст 20 принимается, то и 25, и 30 должны приниматься — это один класс, и проверять каждое значение незачем. Достаточно одного представителя.

КлассЗначенияОжидаемоПредставитель
Д1 — допустимый возраст14…35карта оформляется25
Н1 — слишком мал…13отказ «от 14 лет»10
Н2 — слишком велик36…отказ «до 35 лет»50
Н3 — не целое20.5, 20,5сообщение о формате20,5
Н4 — не число«двадцать», «2O» (буква O)сообщение о форматедвадцать
Н5 — пустопустая строка, пробелы«Укажите возраст»(пусто)
Н6 — отрицательное−1, −20отказ−5

Д — допустимые (valid), Н — недопустимые (invalid). Допустимых классов бывает несколько: если бы для 14–17 лет требовалось согласие родителей, это был бы отдельный класс со своим ожидаемым результатом.

Как находить классы:

03

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

Классы показывают, какие значения проверять, а границы — где вероятнее дефект. Программисты чаще всего ошибаются на краях: пишут < вместо <=, считают с нуля вместо единицы. Пример из раздела 01 со скидкой «от 5000 ₽» — именно такая ошибка.

Для каждой границы проверяют значение на ней и соседнее по другую сторону:

ГраницаЗначенияОжидаемо
Нижняя (14)13 / 14отказ / оформляется
Верхняя (35)35 / 36оформляется / отказ

Это проверка по двум точкам. При проверке по трём точкам добавляют значение с другой стороны: 13, 14, 15 и 34, 35, 36. Три точки ловят больше ошибок (например, условие «равно 14» вместо «больше или равно 14»), а стоят на две проверки дороже. В курсе по умолчанию — две точки, три — для важных полей: деньги, сроки, доступ.

Шаг зависит от типа. У целых чисел соседнее значение отличается на 1, у сумм в рублях с копейками — на 0,01, у дат — на один день, у строк — на один символ. Для возраста «35 лет» граница по дате рождения — день: клиенту, которому 36 исполняется завтра, сегодня ещё 35.
04

Классы и границы вместе

Итоговый набор для поля возраста — граничные значения допустимого класса и по представителю от каждого недопустимого:

№ЗначениеКлассЧто проверяемОжидаемо
113Н1под нижней границейотказ «от 14 лет»
214Д1нижняя границаоформляется
335Д1верхняя границаоформляется
436Н2над верхней границейотказ «до 35 лет»
520,5Н3не целоесообщение о формате
6двадцатьН4не числосообщение о формате
7(пусто)Н5обязательное поле«Укажите возраст»
8−5Н6отрицательноеотказ

Отдельной проверки «25» нет: класс Д1 уже представлен значениями 14 и 35. Восемь проверок вместо бесконечности — и в них попадёт почти любой дефект проверки возраста.

05

Несколько полей

В форме обычно несколько полей. Правило: в одной негативной проверке — одно недопустимое значение, остальные поля допустимы. Если ввести неверный возраст и неверный телефон сразу, программа может сообщить только о первой ошибке — и мы не узнаем, проверяется ли второе поле вообще.

№ВозрастТелефонОжидаемо
114+7 912 345-67-89оформляется
2358 912 345-67-89оформляется (если 8 допустима — вопрос к требованиям)
313+7 912 345-67-89отказ по возрасту
425+7 912 345отказ по телефону
513+7 912 345обе ошибки показаны

Допустимые значения разных полей, наоборот, совмещают: строки 1 и 2 проверяют границы возраста и два формата телефона за две проверки, а не за четыре. Строка 5 — одна сознательная проверка «все ошибки сразу»: показывает ли форма все сообщения или только первое.

06

Типичные классы по типу данных

Эти классы стоит перебрать для любого поля соответствующего типа, даже если требования о них молчат:

ТипКлассы и значения
Целое числограницы; 0; отрицательное; дробное (с точкой и с запятой); очень большое (99999999999); не число; ведущие нули (007); пробелы вокруг
Строкадлина на границах (0, 1, max, max+1); только пробелы; пробелы по краям; кириллица и латиница; заглавные и строчные; спецсимволы ' " < > % _ ; \; эмодзи; очень длинная (10 000 символов)
Датавчера, сегодня, завтра; 29 февраля в високосный и обычный год; 31-е число в 30-дневном месяце; конец года; формат (01.02.2026 и 2026-02-01); дата далеко в будущем или в прошлом
Обязательное полепусто; только пробелы; поле удалено из запроса (это проверяют через API, раздел 09)
Уникальное значениеуже существующее; то же в другом регистре; то же с пробелом в конце
Выбор из спискакаждый вариант; значение не из списка (подменяется через инструменты разработчика или API)

Строка «пробелы по краям» и «другой регистр» — частые источники дефектов уникальности: ivan и Ivan для человека одно и то же, для программы — нет, если её не научили.

07

Границы не только у полей

Граница есть везде, где в требованиях есть число или условие:

Пустой список и один элемент — отдельные классы почти для любой функции, которая что-то показывает или считает: на них часто ломаются счётчики, заголовки и скрипты страницы.

08

Как записывать

Результат техники — таблица из п. 04: значение, класс, что проверяем, ожидаемый результат. Её можно сдать как есть или превратить в тест-кейсы. Для полей ввода удобен один тест-кейс на поле с таблицей данных: шаги одинаковые, меняется только значение. В шаблоне тест-кейсов техника записывается в столбец «Техника» — «классы», «граничные».

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

Ключевые выводы раздела

Запомните главное

  • Класс эквивалентности — значения, которые обрабатываются одинаково; из класса достаточно одного представителя
  • Дефекты скапливаются на границах: проверяют значение на границе и соседнее за ней
  • Шаг соседнего значения зависит от типа: 1, 0,01, один день, один символ
  • В одной негативной проверке — одно недопустимое значение
  • У чисел, строк и дат есть типичные классы, которые проверяют всегда
  • Граница есть у любого числа в требованиях: время, сумма, количество, размер
Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Раздел 04: Чек-листы и тест-кейсы Все разделы Раздел 06: Таблицы решений, состояния, попарное