Тест-дизайн
Классы эквивалентности и граничные значения: техники тест-дизайна с примерами
Классы эквивалентности и граничные значения – две самые известные техники тест-дизайна, которые сокращают перебор до нескольких проверок. Входные данные делят на классы, внутри которых система ведёт себя одинаково, и из каждого класса, позитивного и негативного, берут хотя бы одно значение. Затем проверяют края классов, где ошибки встречаются чаще: саму границу и ближайшее значение за ней, а в варианте с тремя точками ещё и соседнее значение внутри класса.
- 2 техники
- чаще других спрашивают на собеседовании и в тестовых заданиях
- 2 или 3 точки
- оба подхода к границам признаны ISTQB
- Бесплатно
- урок с заданиями в моём базовом курсе
Что такое тест-дизайн
Тест-дизайн – это этап тестирования, на котором проектируют и создают тест-кейсы по заранее определённым критериям качества и целям тестирования. Проще говоря, это придумывание тестов. Целей у него две: найти самые серьёзные для продукта ошибки и обойтись при этом как можно меньшим числом тестов.
Тест-дизайну предшествует тест-анализ. В программе ISTQB анализ отвечает на вопрос, что тестировать, и по требованиям определяет условия тестирования. Проектирование отвечает на вопрос, как тестировать, и превращает эти условия в тест-кейсы. Разницу иногда спрашивают на собеседовании отдельным вопросом.
Техники нужны потому, что исчерпывающее тестирование невозможно. Перебрать все значения даже одного поля не успеть, и техника подсказывает, какие несколько значений проверить вместо сотни. Подробнее о техниках можно прочитать в книге Lee Copeland "A Practitioner's Guide to Software Test Design".
Классы эквивалентности
Класс эквивалентности – это набор входных данных, которые система обрабатывает одинаково или которые приводят к одному результату. Если поле "Возраст" принимает значения от 0 до 120 и с любым из них пускает в систему, то 0, 3, 50 и 120 ведут себя одинаково и составляют один класс.
Классы бывают позитивными и негативными. В позитивных лежат значения, которые система должна принять, в негативных – значения, которые она должна отвергнуть. Для того же поля это числа меньше нуля, числа больше 120, буквы и спецсимволы. В программе ISTQB такие классы называются действительными и недействительными.
Правил у техники два: определить классы и проверить хотя бы одно значение из каждого, позитивного и негативного. Если система верно обработала одно значение, остальные значения класса она обработает так же, и вместо десятка проверок на класс остаётся одна.
Делить можно не только значения полей. Например, в мобильной лаборатории устройства с одинаковым разрешением экрана, платформой и версией системы попадают в один класс, и часть проверок достаточно пройти на одном устройстве из класса.
Граничные значения: две точки или три
Анализ граничных значений продолжает эквивалентное разбиение и проверяет края классов. Ошибки чаще всего случаются именно там: по программе ISTQB граница в коде может оказаться сдвинутой вверх или вниз, пропущенной или лишней.
Пусть в банковском приложении лимит на один перевод составляет 150 000 рублей. Если в коде условие записано как сумма < 150000 вместо сумма <= 150000, перевод ровно на 150 000 отклонят, хотя по требованиям он разрешён. Проверка на самой границе ловит этот сдвиг, а сумма 100 000 из середины класса его не заметит.
Сколько значений брать у границы, есть два подхода. Оба описаны в программе ISTQB Foundation Level 2018 года и признаются верными, поэтому в споре на собеседовании можно сослаться на программу. В программе 2023 года они называются анализом по двум и по трём точкам (2-value и 3-value BVA).
Две точки
Сама граница и ближайшее значение за ней, в соседнем классе. Для поля, в которое можно ввести от 2 до 6 символов, это 1 и 2 на нижней границе, 6 и 7 на верхней.
Три точки
Граница и оба соседа, перед ней и после неё. Для того же поля это 1, 2, 3 и 5, 6, 7. Меня учили этому подходу, и в работе я пользуюсь им.
Дробные числа
Шаг до соседнего значения равен точности поля. Если поле принимает от 1,00 до 3,00 с двумя знаками после запятой, на нижней границе проверяют 0,99, 1,00 и 1,01, на верхней 2,99, 3,00 и 3,01.
Даты
Границы зависят от типа данных. В месяце 30 или 31 день, в феврале 28, а в високосный год 29, месяцев 12, поэтому 45 в поле дня и 13 в поле месяца – негативные значения.
Пример: возраст соискателя
Пример из моего урока. Компания решает по возрасту, брать ли соискателя на работу. От 0 до 13 лет она не нанимает, с 14 до 17 берёт на неполный день, с 18 до 55 – на полный, а с 56 до 99 снова отказывает. Возраст вводится числом в поле.
Позитивных классов здесь четыре: 0–13, 14–17, 18–55 и 56–99. Негативные – отрицательные числа, числа от 100 и выше, буквы и спецсимволы. Границы позитивных классов: 0, 13, 14, 17, 18, 55, 56 и 99. Граничные значения заодно покрывают и классы, ведь значение 54 с границы 55 лежит внутри класса 18–55.
Эквивалентное разбиение
По одному значению из каждого класса, например 7, 15, 30 и 70, а также -5, 150, буква и спецсимвол. Всего восемь проверок.
Граница 18 по трём точкам
17, 18 и 19. Возраст 17 должен дать неполный день, 18 и 19 – полный.
Граница 55 по трём точкам
54, 55 и 56. Возраст 54 и 55 даёт полный день, 56 – отказ.
Граница 0
-1, 0 и 1. Ноль проверяют всегда, как и пустое поле: так видно, что валидация вообще срабатывает.
Если поле принимает дроби
При одном знаке после запятой соседями границы 55 будут 54,9 и 55,1.
Частые ошибки в заданиях на эти техники
Я проверял задания по этим техникам у студентов своих курсов и в обновлённом уроке собрал ошибки, которые встречаются чаще всего.
Границы только у позитивных классов
У негативных классов границы тоже есть, и значения на них берут так же. Ноль и пустое значение проверяют всегда, даже если это отдельный класс.
Один класс дробят на мелкие
Если поле принимает от 5 до 100, это один позитивный класс. Делить его на 5–20, 20–40 и так далее незачем: код описывает диапазон целиком, и мелкие классы ничего не добавляют.
Отдельная проверка середины
В уроке 2020 года я советовал брать значение из середины класса, а в уточнении 2023 года от этого совета отказался. Представителя класса и так дают граничные значения, а середина диапазона в коде ничем не выделена.
Проверяют только разрешённый тип
Если поле принимает буквы, в него всё равно вводят цифры, спецсимволы, теги и фрагменты кода вроде SQL-инъекции или XSS. Система должна сохранить их как обычную строку и не исполнить.
Две ошибки в одном значении
Для поля, которое принимает от 2 до 6 цифр, одна буква нарушает сразу и длину, и тип, и непонятно, какая проверка сработала. Буквы вводят строкой разрешённой длины, например из пяти символов. Программа ISTQB тоже советует не смешивать в одном тесте несколько негативных классов, иначе один дефект может спрятать другой.
Классы до бесконечности
Классический подход тянет негативные классы до минус и плюс бесконечности, но ввести в поле любое число нельзя. Начинают с того, что можно ввести: пустое значение, позитивный класс вроде 1–30, затем 31 и больше. Верхний предел, например 255 символов, уточняют по требованиям или договариваются о нём с командой.
Строка из букв в тест-кейсе
В документации пишут "64 буквы" числом, а саму строку из 64 букв не приводят: пересчитывать её никто не будет. Позитивные и негативные классы записывают раздельно, чтобы проверяющему сразу было видно, как вы поняли технику.
Видеоуроки, шпаргалка и тренажёры
Обе техники я разбираю в девятом уроке курса "Тестировщик с нуля" на YouTube. В 2023 году я записал к нему уточнение с разбором частых ошибок, а в 2024-м – ответы на вопросы собеседования по тест-дизайну, где кроме этих техник есть таблица принятия решений, попарное тестирование и диаграмма переходов состояний. В бесплатном базовом курсе по тестированию тема идёт уроком "Классы эквивалентности и граничные значения", и после теории в нём есть задания.
Шпаргалка показывает классы и границы на числовой оси и сравнивает подходы с двумя и тремя точками. В тренажёрах нужно выбрать граничные значения по условию задачи и найти ошибку на границе в валидации формы, а калькулятор границ считает значения для любого диапазона.
- Урок курсаЭтот урок с заданиями – бесплатно
- Мой видеоурокклассы эквивалентности и граничные значения
- Мой видеоурокклассы эквивалентности и анализ граничных значений 2.0
- Мой видеоуроктехники тест-дизайна, ответы на собеседовании
- Шпаргалкаклассы эквивалентности и граничные значения
- Тренажёрграничные значения по трём точкам
- Тренажёрбаги в валидации формы
- Тренажёркалькулятор граничных значений
Курсы по теме
Вопросы и ответы
Что такое класс эквивалентности простыми словами?
Это набор значений, которые система обрабатывает одинаково. Если поле принимает возраст от 18 до 55 и любое такое значение даёт один результат, достаточно проверить одно из них, например 30, чтобы судить обо всём классе. Негативные классы составляют значения, которые система должна отвергнуть: числа вне диапазона, буквы, спецсимволы.
Чем классы эквивалентности отличаются от граничных значений?
Эквивалентное разбиение делит данные на классы и берёт по одному значению из каждого. Анализ граничных значений проверяет края этих классов, где ошибки встречаются чаще всего. Техники используют вместе: сначала находят классы, потом их границы.
Сколько граничных значений брать: два или три?
Оба подхода верны и описаны в программе ISTQB. При двух точках берут границу и ближайшее значение за ней, при трёх – границу и оба соседних значения. Для диапазона от 18 до 55 это 17, 18, 55, 56 или 17, 18, 19, 54, 55, 56. В тестовом задании стоит прямо написать, каким подходом вы пользуетесь.
Нужно ли проверять значение из середины класса?
Отдельно нет. Одного представителя класса достаточно, и его дают значения рядом с границей. В раннем уроке я советовал проверять середину, но позже отказался от этого совета: в коде середина диапазона ничем не выделена.
Можно ли применять граничные значения к тексту?
К длине текста можно: число символов – это число, и у поля на 2–64 символа границы 2 и 64. Программа ISTQB 2018 года применяет технику к упорядоченным числовым данным, включая даты и время, и я придерживаюсь этого подхода. Границы для самих букв иногда тоже строят, но реже.
Какие ещё техники тест-дизайна спрашивают на собеседовании?
Таблицу принятия решений, попарное тестирование, диаграмму переходов состояний, причинно-следственный анализ и предугадывание ошибок. Не стоит ограничиваться в ответе классами эквивалентности и граничными значениями: чем больше техник вы назовёте и покажете на примере, тем лучше.
Посмотреть программы курсов
Программа каждого курса открыта целиком: видны все модули, уроки и число шагов.


