Тест-дизайн
Техники тест-дизайна чёрного ящика — классы эквивалентности, граничные значения, таблицы решений, структура тест-кейса и чек-листы.
13 вопросов
JuniorТеорияОчень частоЧто такое анализ граничных значений и почему границы тестируют особо?
Что такое анализ граничных значений и почему границы тестируют особо?
Анализ граничных значений тестирует края каждого диапазона входов, потому что дефекты скапливаются на границах (off-by-one, неверный оператор). Для диапазона проверяют минимум, максимум и значения чуть внутри и чуть снаружи каждого края, а не только середину раздела.
Типичные ошибки
- ✗Тестировать только саму границу, а не значения чуть внутри/снаружи
- ✗Пропускать границы, раз классы эквивалентности уже покрыты
- ✗Путать границу с серединой раздела
Уточняющие вопросы
- →Для диапазона 1–100 какие именно значения вы протестируете?
- →Почему ошибки off-by-one делают границы подверженными дефектам?
JuniorТеорияОчень частоЧто такое классы эквивалентности и зачем они нужны?
Что такое классы эквивалентности и зачем они нужны?
Классы эквивалентности делят входные данные на группы, которые система обрабатывает одинаково, после чего тестируется один представитель каждого класса. Предполагается, что любое значение в классе ведёт себя как остальные, поэтому число тест-кейсов сокращается при сохранении покрытия валидных и невалидных групп.
Типичные ошибки
- ✗Забывать определить не только валидные, но и невалидные классы
- ✗Путать с анализом граничных значений (краёв)
- ✗Считать, что техника гарантирует нахождение всех дефектов
Уточняющие вопросы
- →Как классы эквивалентности связаны с граничными значениями?
- →Назовите валидный и невалидный класс для поля возраста 18–65.
JuniorТеорияОчень частоИз каких полей состоит хороший тест-кейс?
Из каких полей состоит хороший тест-кейс?
Хороший тест-кейс содержит уникальный ID, понятный заголовок, предусловия, упорядоченные шаги и явный ожидаемый результат; часто также приоритет и тестовые данные. Он должен быть однозначным, воспроизводимым и независимым, чтобы любой мог выполнить его и получить тот же результат, не угадывая замысел.
Типичные ошибки
- ✗Опускать явный ожидаемый результат
- ✗Писать шаги, зависящие от остаточного состояния другого кейса
- ✗Использовать расплывчатые невоспроизводимые шаги
Уточняющие вопросы
- →Почему тест-кейс должен быть независим от других?
- →Что фиксирует поле предусловия?
JuniorТеорияЧастоВ чём разница между тест-сценарием и тест-кейсом?
В чём разница между тест-сценарием и тест-кейсом?
Тест-сценарий — это высокоуровневое однострочное утверждение о том, что тестировать: сквозной поток или фича. Тест-кейс — это детальная пошаговая реализация сценария: ID, предусловия, упорядоченные шаги, тестовые данные и явный ожидаемый результат. Один сценарий обычно разворачивается в несколько тест-кейсов; сценарий говорит что, а кейс — как именно.
Типичные ошибки
- ✗Менять местами, что из них высокоуровневое, а что детальное
- ✗Считать сценарий и кейс взаимозаменяемыми синонимами
- ✗Ждать, что один кейс разворачивается во много сценариев, а не наоборот
Уточняющие вопросы
- →Во сколько тест-кейсов может развернуться один сценарий и почему?
- →Какой артефакт несёт явный ожидаемый результат?
MiddleДизайнЧастоДан калькулятор, умеющий только складывать: принимает два целых от -99 до +99, имеет кликабельную кнопку «=» и поле вывода результата (напр. 4+5=9). Спроектируйте тест-кейсы. Объясните, как сначала уточните требования, почему начинаете с позитивных проверок, как покрываете границы и классы эквивалентности, ограничения длины полей ввода и вывода и какую одну проверку оставите, если в прод можно выкатить только одну.
Дан калькулятор, умеющий только складывать: принимает два целых от -99 до +99, имеет кликабельную кнопку «=» и поле вывода результата (напр. 4+5=9). Спроектируйте тест-кейсы. Объясните, как сначала уточните требования, почему начинаете с позитивных проверок, как покрываете границы и классы эквивалентности, ограничения длины полей ввода и вывода и какую одну проверку оставите, если в прод можно выкатить только одну.
Сначала уточните (платформа, допустимые символы), затем начните с позитива: валидное сложение вроде 4+5=9. Покройте границы (-99, +99 и чуть за -100, +100), классы эквивалентности (валидные целые, невалидные: дроби, буквы, символы) и лимиты полей — ввод вмещает 3 символа (знак + 2 цифры), вывод 4 (знак + 3 цифры). Поле вывода проверяйте отдельно. Если выкатить можно одну — оставьте позитивную: она доказывает, что основная функция работает.
Типичные ошибки
- ✗Начинать с крайнего негатива вместо позитивной проверки
- ✗Игнорировать поле вывода и кнопку «=»
- ✗Перебирать все значения вместо классов и границ
Уточняющие вопросы
- →Сколько символов вмещают поля ввода и вывода и почему?
- →Почему
X+0— слабая проверка для функции сложения?
MiddleДизайнЧастоДан экран корзины интернет-магазина: список товаров с количеством и ценой, поле промокода, итоговая сумма, кнопки «Удалить» и «Оформить заказ». Составьте подход к чек-листу проверок этого экрана — что и в каком порядке вы бы проверяли, и по какому принципу группировали бы пункты.
Дан экран корзины интернет-магазина: список товаров с количеством и ценой, поле промокода, итоговая сумма, кнопки «Удалить» и «Оформить заказ». Составьте подход к чек-листу проверок этого экрана — что и в каком порядке вы бы проверяли, и по какому принципу группировали бы пункты.
Группируйте проверки по областям: отрисовка вёрстки/контента, затем функциональные сценарии (смена количества пересчитывает итог, удаление обновляет список, валидный/невалидный промокод, оформление активно только при наличии товаров), затем краевые случаи (пустая корзина, нулевое/макс. количество, истёкший промокод), затем нефункциональные (адаптивность, ошибки). Каждый пункт — короткая проверяемая проверка, от позитивного happy-path к негативным и граничным.
Типичные ошибки
- ✗Покрывать только happy path, пропуская негативные/граничные проверки
- ✗Не группировать пункты по областям, получая неупорядоченную кучу
- ✗Писать слишком крупные непроверяемые пункты (одна проверка = одно утверждение)
Уточняющие вопросы
- →Какие граничные случаи применимы к полю количества?
- →Как развернуть один пункт чек-листа в полный тест-кейс?
MiddleТеорияЧастоЧто такое таблица решений и когда она эффективнее классов эквивалентности?
Что такое таблица решений и когда она эффективнее классов эквивалентности?
Таблица решений сопоставляет комбинации входных условий с ожидаемыми действиями: один столбец на правило. Она хороша, когда результат зависит от нескольких взаимодействующих условий — в отличие от классов эквивалентности, обрабатывающих входы независимо, — обеспечивая тест-кейс на каждую значимую комбинацию бизнес-правил.
Типичные ошибки
- ✗Применять таблицу решений для единственного независимого входа
- ✗Забывать схлопывать невозможные или don't-care комбинации
- ✗Путать правила (столбцы) с отдельными условиями (строки)
Уточняющие вопросы
- →Сколько правил максимум у таблицы с 3 булевыми условиями?
- →Когда схлопывают столбцы значением don't-care?
MiddleТеорияЧастоКак правильно проверить, что email-адрес валиден?
Как правильно проверить, что email-адрес валиден?
Проверки формата и regex необходимы, но никогда не достаточны — RFC для валидных адресов огромен, а синтаксически верный адрес может быть недоставляемым. Единственная окончательная проверка — отправить подтверждающее сообщение и потребовать от пользователя действия (перейти по ссылке или ввести код). Синтаксис доказывает форму, шаг подтверждения доказывает, что ящик существует и принадлежит пользователю.
Типичные ошибки
- ✗Считать, что один regex доказывает валидность и доставляемость
- ✗Смешивать валидный синтаксис с реальным принадлежащим ящиком
- ✗Пропускать шаг подтверждения как избыточный
Уточняющие вопросы
- →Почему синтаксически верный адрес всё ещё может быть недоставляемым?
- →Что доказывает шаг подтверждения, чего не может regex?
MiddleДизайнЧастоСпецификация скидок гласит: до 18 → 15%, от 19 до 35 → 15%, от 35 → 20%. Прежде чем писать тесты, что вы сделаете? Найдите пробелы и неоднозначности в этой спецификации, назовите конкретные возрасты, которые выпадают или покрыты дважды, и перечислите уточняющие вопросы. Объясните, почему правильное первое действие здесь — оспорить требование, а не начать проектировать тест-кейсы.
Спецификация скидок гласит: до 18 → 15%, от 19 до 35 → 15%, от 35 → 20%. Прежде чем писать тесты, что вы сделаете? Найдите пробелы и неоднозначности в этой спецификации, назовите конкретные возрасты, которые выпадают или покрыты дважды, и перечислите уточняющие вопросы. Объясните, почему правильное первое действие здесь — оспорить требование, а не начать проектировать тест-кейсы.
Сначала оспорьте спецификацию, не тестируйте её. Возраст 18 выпадает в пробел — «до 18» исключает 18 и «от 19» тоже, так что 18 не покрыт. Возраст 35 покрыт дважды, попадая и в правило 19–35, и в «от 35». Спросите: границы включающие или исключающие, есть ли максимальный возраст, считается возраст по дню или точному времени, дата локальная или UTC? Требование, которое нельзя разрешить, нетестируемо.
Типичные ошибки
- ✗Проектировать тесты до разрешения пробелов спеки
- ✗Упускать непокрытый возраст 18 и дважды покрытый 35
- ✗Считать границы включающими, не спросив
Уточняющие вопросы
- →Какой именно возраст выпадает в пробел и почему?
- →Какой уточняющий вопрос лучше всего разрешает пересечение на 35?
MiddleДизайнЧастоВеб-сервер отвечает 200 на GET, чья query-строка — ровно 8 цифр, и 503 на всё остальное. Спроектируйте тест-кейсы для этого API. Покройте позитивные и негативные входы, которые выведете через граничные значения и классы эквивалентности, что сделаете, если ответ отличается от двух заданных кодов, и каким тестом являются 1000 одновременных клиентов — нагрузочным или стресс — и почему. Затем скажите, как меняются кейсы, если вернётся код не из списка.
Веб-сервер отвечает 200 на GET, чья query-строка — ровно 8 цифр, и 503 на всё остальное. Спроектируйте тест-кейсы для этого API. Покройте позитивные и негативные входы, которые выведете через граничные значения и классы эквивалентности, что сделаете, если ответ отличается от двух заданных кодов, и каким тестом являются 1000 одновременных клиентов — нагрузочным или стресс — и почему. Затем скажите, как меняются кейсы, если вернётся код не из списка.
Позитив: ровно 8 цифр → 200. Границы: 7 и 9 цифр → 503; классы эквивалентности для 503: буквы, символы, пусто, смесь цифр и букв, ведущие нули, ввод с пробелами или отрицательный. Любой код кроме 200/503 (например 500) нарушает спецификацию — залогируйте, заведите дефект, уточните требование и добавьте кейсы под него, а не засчитывайте кейс. 1000 одновременных клиентов — нагрузочный тест, если отражает ожидаемый трафик; стрессом он становится, лишь когда намеренно превышает ёмкость ради поиска точки отказа.
Типичные ошибки
- ✗Пропускать граничные кейсы на 7 и 9 цифрах
- ✗Засчитывать незаданный статус-код как успех
- ✗Называть любой конкурентный тест стрессом без учёта ёмкости
Уточняющие вопросы
- →Как меняются кейсы, если сервер сверяет 8 цифр с базой данных?
- →Что протестируете, если сеть между сервером и базой данных оборвётся?
MiddleДизайнИногдаСформулируйте негативные сценарии для POST-запроса, создающего нового пользователя. Перечислите различные способы, которыми запрос может быть невалидным — на уровне поля, тела, авторизации и безопасности — и укажите ожидаемый ответ для каждого. Объясните, чем негативные API-кейсы отличаются от простого повтора happy path и почему тест на уровне API тщательнее, чем только через UI.
Сформулируйте негативные сценарии для POST-запроса, создающего нового пользователя. Перечислите различные способы, которыми запрос может быть невалидным — на уровне поля, тела, авторизации и безопасности — и укажите ожидаемый ответ для каждого. Объясните, чем негативные API-кейсы отличаются от простого повтора happy path и почему тест на уровне API тщательнее, чем только через UI.
Уровень поля: пропущенные обязательные поля, неверные типы, граничные или слишком большие значения, неверный формат email. Уровень тела: пустое тело, некорректный JSON, неверный Content-Type. Уровень данных: дубликат уже существующего пользователя. Уровень авторизации: отсутствующий или невалидный токен. Уровень безопасности: SQL- или XSS-инъекция. Каждый должен вернуть верный код 4xx, а не 500. Уровень API достаёт случаи, которые UI молча блокирует.
Типичные ошибки
- ✗Считать пересланный валидный запрос негативным случаем
- ✗Ожидать 500 вместо точного 4xx на невалидный ввод
- ✗Забывать негативные случаи авторизации и безопасности (инъекции)
Уточняющие вопросы
- →Почему дубликат пользователя — отдельный негативный случай от пропущенного поля?
- →Какие негативные случаи UI молча предотвращает, а API — нет?
MiddleДизайнИногдаПоле «Возраст» в форме регистрации принимает целые числа от 18 до 65 включительно; вне диапазона — ошибка валидации. Спроектируйте набор тест-кейсов методом граничных значений: какие конкретные значения вы проверите и какой ожидаемый результат у каждого?
Поле «Возраст» в форме регистрации принимает целые числа от 18 до 65 включительно; вне диапазона — ошибка валидации. Спроектируйте набор тест-кейсов методом граничных значений: какие конкретные значения вы проверите и какой ожидаемый результат у каждого?
Проверьте каждый край тремя точками: 17 (отклонено), 18 (принято), 19 (принято) на нижней границе; 64 (принято), 65 (принято), 66 (отклонено) на верхней. Добавьте типичное среднее значение, например 40 (принято), и нецелые/пустые входы (отклонено). Каждый кейс явно указывает вход и ожидаемый результат — принято или ошибка.
Типичные ошибки
- ✗Тестировать только сами границы 18 и 65, а не 17/19 и 64/66
- ✗Опускать невалидные входы (нецелые, пустые) из дизайна
- ✗Не указывать явный ожидаемый результат по каждому кейсу
Уточняющие вопросы
- →Зачем проверять 17 и 19 вокруг нижней границы, а не только 18?
- →Как этот дизайн сочетается с классами эквивалентности?
MiddleДизайнИногдаСпроектируйте критичные приёмочные тест-кейсы для строки поиска на главной странице магазина. Покройте сначала позитивные проверки (отображается, принимает ввод, находит по названию, по нескольким словам, по подстроке, на другом языке, по Enter и по иконке), затем негативные и проверки безопасности (пустая строка, один пробел, спецсимволы, очень длинная строка, попытка SQL-инъекции, изменение DOM). Объясните порядок и почему важны проверки безопасности.
Спроектируйте критичные приёмочные тест-кейсы для строки поиска на главной странице магазина. Покройте сначала позитивные проверки (отображается, принимает ввод, находит по названию, по нескольким словам, по подстроке, на другом языке, по Enter и по иконке), затем негативные и проверки безопасности (пустая строка, один пробел, спецсимволы, очень длинная строка, попытка SQL-инъекции, изменение DOM). Объясните порядок и почему важны проверки безопасности.
Сначала позитив: строка отображается и принимает ввод, поиск по точному названию возвращает совпадения, по нескольким словам, по подстроке, на другом языке и срабатывает по Enter и по иконке. Затем негатив: пустая строка, одиночный пробел, спецсимволы, слишком длинная строка. Затем безопасность: SQL-инъекцию и изменение DOM нужно безопасно отклонить. Позитив-до-негатива подтверждает работу ядра, прежде чем проверять, как оно ломается.
Типичные ошибки
- ✗Забывать негативные проверки и проверки безопасности
- ✗Начинать с негатива или безопасности до позитивного пути
- ✗Пропускать поиск по словам, подстроке или другому языку
Уточняющие вопросы
- →Почему SQL-инъекцию в поиске нужно тестировать?
- →Чем тест-кейсы поиска отличаются на мобильном против десктопного веба?