БЛОК 4. Тест-дизайн техники — 12. Equivalence Partitioning и Boundary Value
🧭 Введение: зачем нужны две техники сразу
Новички часто проверяют поле «по ощущениям»: одно валидное значение, одно невалидное, и на этом заканчивают. В результате часть дефектов пропускается: где-то не учтены типы входных данных, где-то сломаны границы.
Equivalence Partitioning и Boundary Value решают эту проблему в паре. Первая техника сокращает бесконечное число проверок до групп, вторая — добивает самые рискованные точки на границах.
💡 Совет:
Сначала разбейте данные на эквивалентные классы, потом по важным классам проверьте границы.
✅ Вывод:
EP + BVA дают баланс между «не тестировать всё подряд» и «не пропустить критичные баги».
⚠️ Проблема -> решение
Проблема: у поля может быть сотни значений, а времени на тесты мало. Если брать значения случайно, покрытие будет хаотичным и незащищаемым на ревью.
Решение:
- Equivalence Partitioning (EP) — делим входные данные на классы, где система должна вести себя одинаково.
- Boundary Value Analysis (BVA) — тестируем точки у границ диапазонов/лимитов.
🟢 Если совсем просто:
EP отвечает «какие группы данных есть», BVA отвечает «что происходит на порогах».
🎯 Как понять, что этап прошёл успешно:
По каждой проверяемой сущности у вас есть классы эквивалентности и отдельный набор граничных значений.
🛠️ Чем помогает и как работает
Связка этих техник помогает строить компактные, но сильные тесты. Вы проверяете меньше кейсов, но каждый кейс обоснован и закрывает конкретный риск.
Как это работает:
- Шаг 1: читаем требования и находим правила валидации.
- Шаг 2: выделяем классы эквивалентности (валидные и невалидные).
- Шаг 3: выбираем по одному представителю из каждого класса.
- Шаг 4: для диапазонов добавляем boundary-точки (min-1, min, min+1, max-1, max, max+1).
- Шаг 5: фиксируем expected result и priority.
- Шаг 6: превращаем это в тест-кейсы/чек-лист.
✅ Вывод:
EP экономит объём, BVA усиливает глубину проверки на самых уязвимых точках.
📚 Ключевые термины (простыми словами)
- Equivalence Partitioning (разбиение на классы эквивалентности) — группировка входных данных, которые система должна обрабатывать одинаково.
- Equivalence Class (класс эквивалентности) — группа значений с одинаковым ожидаемым поведением.
- Valid Class (валидный класс) — допустимые значения по требованиям.
- Invalid Class (невалидный класс) — недопустимые значения.
- Boundary Value Analysis (анализ граничных значений) — проверка значений на границах и рядом с ними.
- Representative (представитель класса) — одно типовое значение для проверки класса.
- Expected Result (ожидаемый результат) — что система должна вернуть для конкретного теста.
- Coverage (покрытие) — насколько полно проверками закрыты классы и границы.
1. Equivalence Partitioning: как сокращать объём тестов
EP помогает не тестировать каждое возможное значение. Если значения внутри класса эквивалентны по поведению, достаточно выбрать представителя.
🟢 Если совсем просто:
Один класс = одно поведение = один представитель для базовой проверки.
🎯 Как понять, что этап прошёл успешно:
Вы перечислили все валидные/невалидные классы и взяли по представителю.
Назначение:
Уменьшить число тестов без потери логического покрытия.
Простыми словами:
Мы объединяем похожие значения в группы и тестируем не каждое число, а каждую группу.
Для новичка:
Если два значения должны вести себя одинаково, обычно нет смысла тестировать оба в базовом наборе.
Аналогия:
Как проверка билетов: «детский», «взрослый», «льготный» — это разные категории, а не каждый возраст отдельно.
Пример:
Поле "Возраст 18..65"Классы:- <18 (invalid)- 18..65 (valid)- >65 (invalid) Представители:- 17, 30, 66🔎 Как это происходит на практике:
- QA выписывает бизнес-правило.
- Делит входные данные на группы поведения.
- Берёт по одному значению из каждой группы.
Характеристики:
- ✅ Сильно сокращает объём тестов.
- ✅ Делает покрытие объяснимым.
- ✅ Подходит для форм, API и бизнес-правил.
Когда использовать:
Всегда, когда есть множество возможных входов.
✅ Вывод:
EP — базовая техника для рационального тест-дизайна.
2. Boundary Value: где чаще всего скрываются баги
Даже если классы эквивалентности определены правильно, баги часто живут на границах: ошибка сравнения, неверный оператор, off-by-one.
🟢 Если совсем просто:
Граница — это место, где правило переключается, и там чаще всего ломается логика.
🎯 Как понять, что этап прошёл успешно:
Для каждого диапазона есть набор точек до/на/после границы.
Назначение:
Поймать дефекты в пороговой логике и валидации.
Простыми словами:
Проверяем не только «внутри диапазона», но и «вход/выход из диапазона».
Для новичка:
Если в требовании есть min/max, граничные проверки обязательны.
Пример:
Поле "Пароль 8..20 символов"BVA: 7, 8, 9, 19, 20, 21Мини-шаблон BVA:
Если есть диапазон min..max:- min - 1- min- min + 1- значение из середины- max - 1- max- max + 1🔎 Как это происходит на практике:
- QA берёт правило с диапазоном.
- Выбирает граничные точки.
- Для каждой точки фиксирует expected result.
Характеристики:
- ✅ Высокая вероятность найти критичный дефект.
- ✅ Небольшой набор, высокая отдача.
- ✅ Легко автоматизируется в будущем.
Когда использовать:
Для числовых лимитов, длин строк, дат, счётчиков, квот.
✅ Вывод:
BVA — must-have для проверки правил с порогами.
3. EP + BVA вместе: правильная комбинация
Эти техники не конкурируют. EP даёт каркас классов, BVA усиливает ключевые классы граничными точками.
🟢 Если совсем просто:
Сначала «группы», потом «пороги внутри групп».
🎯 Как понять, что этап прошёл успешно:
У вас нет ни «дыр» по классам, ни «дыр» на границах.
Назначение:
Получить компактный и при этом надёжный набор тестов.
Простыми словами:
EP отвечает за ширину покрытия, BVA — за глубину на критичных местах.
Для новичка:
Начинайте с EP, затем добавляйте BVA к диапазонам и лимитам.
Пример:
Поле "Сумма перевода 100..10000" EP:- <100 (invalid)- 100..10000 (valid)- >10000 (invalid) BVA:- 99, 100, 101, 9999, 10000, 10001✅ Вывод:
Комбинация EP+BVA даёт оптимальное покрытие при ограниченном времени.
3.1 Сквозной пример: от требования к таблице EP+BVA
Ниже полный мини-пример, который можно использовать как рабочий шаблон на реальной задаче.
🟢 Если совсем просто:
Берём требование, делим данные на классы (EP), затем проверяем границы диапазона (BVA).
🎯 Как понять, что этап прошёл успешно:
Есть связка: требование -> классы -> представители -> граничные точки.
Требование:
- Пароль должен быть от 8 до 20 символов.
- Допустимы латинские буквы и цифры.
- Пустое значение недопустимо.
EP (классы эквивалентности):
Валидные классы:
- 8–20 символов, только допустимые символы.
Невалидные классы:
- меньше 8 символов;
- больше 20 символов;
- пустое значение;
- недопустимые символы;
- только пробелы.
Представители классов:
abc12345(валидный класс);abc1234(меньше 8);abc123456789012345678(больше 20);""(пустое значение);пароль123(недопустимые символы);" "(только пробелы).
BVA (граничные значения):
- 7;
- 8;
- 9;
- 19;
- 20;
-
✅ Вывод:
Такой формат сразу превращает теорию в готовую механику тест-дизайна для junior QA.
4. Пошаговый алгоритм для junior QA
Чтобы не запутаться, используйте фиксированный алгоритм проектирования.
🟢 Если совсем просто:
Правило -> классы -> представители -> границы -> expected result.
🎯 Как понять, что этап прошёл успешно:
По каждому правилу есть таблица классов и граничных точек.
Алгоритм:
- Выписать правила валидации из AC.
- Разбить входы на валидные и невалидные классы.
- Выбрать представителя для каждого класса.
- Для диапазонов добавить BVA-точки.
- Зафиксировать expected result.
- Проставить приоритеты для релизного прогона.
✅ Вывод:
Этот алгоритм позволяет быстро собрать качественный тест-дизайн даже новичку.
📊 Сравнение: Equivalence Partitioning vs Boundary Value
| Критерий | Equivalence Partitioning | Boundary Value |
|---|---|---|
| Главная цель | Сократить объём через классы | Поймать ошибки на порогах |
| Что покрывает | Типы/группы входных данных | Границы диапазонов и лимитов |
| Тип значений | Представители классов | Точки до/на/после границы |
| Когда особенно полезно | Много разных входов | Есть min/max и счётчики |
| Риск при пропуске | Дыры по группам поведения | Баги off-by-one и пороговые дефекты |
✅ Must-Know для junior QA
- EP и BVA лучше использовать вместе.
- Для каждого класса нужен хотя бы один представитель.
- Для каждого диапазона нужен набор граничных точек.
- Expected result обязателен для каждой проверки.
- Проверяйте одинаковые правила и на UI, и на API.
- Не заменяйте BVA «значением из середины».
- Приоритет в релизе: сначала critical ограничения.
❌ Частые мифы
❌ Миф:
Если есть EP, BVA уже не нужен. ✅ Как правильно:
EP и BVA дополняют друг друга. 📎 Почему это важно:
Иначе пропускаются дефекты на границах.
Если есть EP, BVA уже не нужен. ✅ Как правильно:
EP и BVA дополняют друг друга. 📎 Почему это важно:
Иначе пропускаются дефекты на границах.
❌ Миф:
Достаточно проверить min и max. ✅ Как правильно:
Нужны соседние точки min±1 и max±1. 📎 Почему это важно:
Ошибки сравнения чаще проявляются рядом с границами.
Достаточно проверить min и max. ✅ Как правильно:
Нужны соседние точки min±1 и max±1. 📎 Почему это важно:
Ошибки сравнения чаще проявляются рядом с границами.
❌ Миф:
EP применим только к числам. ✅ Как правильно:
EP работает и для категорий, форматов, статусов, ролей. 📎 Почему это важно:
Большая часть бизнес-логики не сводится только к числам.
EP применим только к числам. ✅ Как правильно:
EP работает и для категорий, форматов, статусов, ролей. 📎 Почему это важно:
Большая часть бизнес-логики не сводится только к числам.
❌ Миф:
Чем больше тестов, тем лучше. ✅ Как правильно:
Важно обоснованное покрытие классов и границ. 📎 Почему это важно:
Случайные тесты увеличивают объём, но не качество.
Чем больше тестов, тем лучше. ✅ Как правильно:
Важно обоснованное покрытие классов и границ. 📎 Почему это важно:
Случайные тесты увеличивают объём, но не качество.
❓ Часто спрашивают на собеседованиях
❓ Вопрос:
Что такое Equivalence Partitioning? ✅ Ответ:
Это техника, где входные данные делят на классы эквивалентного поведения и тестируют представителей классов.
Что такое Equivalence Partitioning? ✅ Ответ:
Это техника, где входные данные делят на классы эквивалентного поведения и тестируют представителей классов.
❓ Вопрос:
Зачем нужна Boundary Value Analysis? ✅ Ответ:
Чтобы проверить поведение системы на порогах и рядом с ними, где чаще всего встречаются дефекты.
Зачем нужна Boundary Value Analysis? ✅ Ответ:
Чтобы проверить поведение системы на порогах и рядом с ними, где чаще всего встречаются дефекты.
❓ Вопрос:
Как связаны EP и BVA? ✅ Ответ:
EP определяет классы данных, а BVA углубляет проверку для классов с диапазонами/лимитами.
Как связаны EP и BVA? ✅ Ответ:
EP определяет классы данных, а BVA углубляет проверку для классов с диапазонами/лимитами.
❓ Вопрос:
Можно ли делать только BVA без EP? ✅ Ответ:
Можно для узкой задачи, но обычно это оставляет дыры в покрытии по типам входов.
Можно ли делать только BVA без EP? ✅ Ответ:
Можно для узкой задачи, но обычно это оставляет дыры в покрытии по типам входов.
❓ Вопрос:
Как понять, что набор по EP+BVA достаточный? ✅ Ответ:
Когда закрыты все классы эквивалентности и все ключевые границы с expected result.
Как понять, что набор по EP+BVA достаточный? ✅ Ответ:
Когда закрыты все классы эквивалентности и все ключевые границы с expected result.
🚫 Типичные ошибки
Ошибка 1: Нет невалидных классов
❌ Неправильно:
Тестировать только валидный класс.
✅ Правильно:
Явно выделять и проверять невалидные классы.
Почему:
Именно там часто ломается валидация.
Ошибка 2: Перепутаны EP и BVA
❌ Неправильно:
Называть «17/18/19» классами эквивалентности.
✅ Правильно:
Классы — это группы, а 17/18/19 — это граничные точки.
Почему:
Путаница ухудшает структуру покрытия.
Ошибка 3: Нет expected result
❌ Неправильно:
«Проверить 21 символ» без ожидаемого исхода.
✅ Правильно:
Фиксировать, что именно должно случиться на каждом значении.
Почему:
Без этого pass/fail трактуется субъективно.
Ошибка 4: Нет приоритизации
❌ Неправильно:
Выполнять проверки в произвольном порядке.
✅ Правильно:
Сначала критичные классы и критичные границы.
Почему:
Так снижается риск релизных инцидентов при ограниченном времени.
🧩 Best Practices
- Всегда документируйте классы эквивалентности перед выбором значений.
- Отдельно помечайте валидные и невалидные классы.
- Для каждого диапазона применяйте BVA-шаблон.
- Указывайте expected result рядом с тестовыми данными.
- Синхронизируйте EP+BVA покрытие между UI и API.
- После инцидентов обновляйте классы и границы в тест-дизайне.
🏁 Заключение
Equivalence Partitioning и Boundary Value — две базовые техники, которые дают быстрый рост качества тест-дизайна у junior QA.
Они помогают тестировать не «много», а «умно»: с понятной логикой, контролируемым объёмом и хорошей вероятностью поймать критичный дефект.
Они помогают тестировать не «много», а «умно»: с понятной логикой, контролируемым объёмом и хорошей вероятностью поймать критичный дефект.
Если применять их вместе системно, проверка становится сильнее уже в первых спринтах.