Что такое тестирование чёрного ящика?

Тестирование чёрного ящика (black-box testing) — также называемое поведенческим тестированием, тестированием на основе спецификации или функциональным тестированием — проектирует тесты исключительно на основе того, что программное обеспечение должно делать согласно требованиям и спецификациям. Тестировщик не знает внутренний код, архитектуру и детали реализации.

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

Black-box тестирование отвечает на вопрос: «Ведёт ли себя система так, как специфицировано?»

Кто выполняет тестирование чёрного ящика?

Тестирование чёрного ящика могут выполнять:

  • QA-инженеры — наиболее частые практики, тестирующие по требованиям
  • Бизнес-аналитики — проверяющие соответствие функций ожиданиям бизнеса
  • Конечные пользователи — при приёмочном тестировании (UAT)
  • Разработчики — при написании интеграционных или системных тестов

Навыки программирования не требуются, что делает его доступным для более широкого круга членов команды.

Основные техники чёрного ящика

Техники чёрного ящика предоставляют систематические методы выбора тестовых данных. Эти техники подробно рассматриваются в Модуле 3 (Техники проектирования тестов), но понимание обзора необходимо на этом этапе.

Эквивалентное разбиение (Equivalence Partitioning)

Эквивалентное разбиение делит область входных данных на классы (разделы), где все значения внутри класса должны вызывать одинаковое поведение. Затем тестируется один представительный элемент из каждого класса.

Пример: Поле ввода возраста принимает значения 18-65.

РазделДиапазонПредставительОжидаемый результат
Невалидный (ниже)< 1810Ошибка
Валидный18-6530Принято
Невалидный (выше)> 6580Ошибка

Вместо тестирования всех значений от 0 до 100 вы тестируете только три. Предположение: если система корректно обрабатывает 30, она так же обработает 25, 40 и 55.

Анализ граничных значений (Boundary Value Analysis)

Анализ граничных значений фокусируется на краях эквивалентных разделов, где баги наиболее вероятны. Ошибки на единицу (off-by-one) — одни из самых распространённых ошибок программирования.

На примере возраста (валидный диапазон 18-65):

ГраницаЗначения для тестаПочему
Нижняя граница17, 18, 19Проверяет точный переход от невалидного к валидному
Верхняя граница64, 65, 66Проверяет точный переход от валидного к невалидному

BVA обычно тестирует граничное значение, одно ниже и одно выше. Для двух границ это даёт 6 тестовых значений вместо 48 при тестировании всего диапазона.

Таблицы решений (Decision Tables)

Таблицы решений используются, когда поведение системы зависит от комбинаций условий. Они систематически перечисляют все возможные комбинации и ожидаемые результаты.

Пример: Скидка на страховку зависит от возраста и водительского стажа:

УсловиеПравило 1Правило 2Правило 3Правило 4
Возраст > 25ДаДаНетНет
Чистый стажДаНетДаНет
Скидка15%5%5%0%

Каждый столбец представляет уникальную комбинацию, которую необходимо протестировать. При 2 условиях с 2 значениями каждое получаем 2² = 4 правила.

Тестирование переходов состояний (State Transition Testing)

Тестирование переходов состояний моделирует систему как конечный автомат с определёнными состояниями, переходами и событиями. Тесты проектируются для проверки каждого состояния и перехода.

Пример: Аккаунт пользователя может находиться в состояниях: Активный, Заблокированный, Приостановленный, Удалённый.

stateDiagram-v2 [*] --> Активный: Аккаунт создан Активный --> Заблокированный: 3 неудачных входа Заблокированный --> Активный: Сброс пароля Активный --> Приостановленный: Действие админа Приостановленный --> Активный: Админ реактивирует Активный --> Удалённый: Пользователь запросил удаление Заблокированный --> Удалённый: Истекли 30 дней Приостановленный --> Удалённый: Админ подтвердил

Тесты проверяют каждый переход: можно ли реактивировать заблокированный аккаунт после сброса пароля? Удаляется ли аккаунт через 30 дней блокировки?

Когда использовать Black-Box Testing

Black-box тестирование наиболее эффективно для:

  • Функционального тестирования — проверка работы функций по спецификации
  • Приёмочного тестирования — бизнес-пользователи валидируют требования
  • Системного тестирования — тестирование полностью интегрированного приложения
  • Регрессионного тестирования — проверка существующей функциональности после изменений
  • Тестирования юзабилити — оценка пользовательского опыта

Black-Box vs. White-Box: Сравнение

АспектЧёрный ящикБелый ящик
Основа тестовТребования, спецификацииИсходный код, архитектура
Необходимые знанияПредметная область, требованияПрограммирование, доступ к коду
Что находитПропущенные требования, ошибки поведенияЛогические ошибки, мёртвый код
Что пропускаетВнутренние логические ошибкиОтсутствующие функции, юзабилити
Кто выполняетQA, BA, пользователиРазработчики, SDET
Уровень тестированияСистемный, приёмочный, E2EМодульный, интеграционный
Когда проектируетсяРано (с требований)Требуется готовый код
ПоддержкаНизкая (тесты переживают рефакторинг)Высокая (тесты ломаются при изменениях)

Ни один подход не превосходит другой. Они дополняют друг друга. Зрелая стратегия тестирования использует оба.

Преимущества и ограничения

Преимущества:

  • Тесты можно проектировать сразу после написания требований
  • Не нужно знать код — более широкое участие команды
  • Тесты независимы от реализации — переживают рефакторинг кода
  • Обнаруживает пробелы в требованиях и ошибки спецификации
  • Моделирует перспективу пользователя

Ограничения:

  • Не может гарантировать покрытие кода — непротестированные пути остаются скрытыми
  • Возможны избыточные тесты (тестирование одного внутреннего пути неосознанно)
  • Сложно проектировать тесты для сложной внутренней логики без знания кода
  • Может пропустить граничные случаи, очевидные при чтении кода
  • Требует ясных, полных спецификаций (что редкость на практике)

Упражнение: Спроектируйте тест-кейсы чёрного ящика по спецификации

Вы тестируете калькулятор кредитоспособности со следующими требованиями:

Требования:

  1. Заявитель должен быть в возрасте от 21 до 65 лет включительно
  2. Минимальный годовой доход: $25,000
  3. Кредитный рейтинг должен быть 600 или выше
  4. Запрашиваемая сумма кредита от $1,000 до $500,000
  5. Если кредитный рейтинг 750+ И доход $75,000+, процентная ставка 3.5% (премиальная)
  6. Если кредитный рейтинг 600-749 ИЛИ доход $25,000-$74,999, процентная ставка 7.0% (стандартная)
  7. Если любой критерий не выполнен, заявка отклоняется

Часть 1: Эквивалентное разбиение. Определите разделы эквивалентности для каждого поля ввода.

Часть 2: Анализ граничных значений. Определите граничные значения для каждого поля.

Часть 3: Таблица решений. Создайте таблицу решений для определения процентной ставки (требования 5 и 6).

Часть 4: Спроектируйте 8-10 полных тест-кейсов с хорошим покрытием.

ПодсказкаДля Части 1 каждое поле имеет как минимум 3 раздела: ниже валидного диапазона, валидный диапазон и выше валидного диапазона. Некоторые имеют подразделы внутри валидного диапазона (например, кредитный рейтинг имеет стандартный и премиальный уровни).

Для Части 3 сосредоточьтесь на двух условиях, определяющих ставку: порог кредитного рейтинга (750) и порог дохода ($75,000). Получится 4 комбинации.

Решение

Часть 1: Разделы эквивалентности

Возраст:

РазделДиапазонПредставительОжидаемый
Невалидный (молодой)< 2118Отклонён
Валидный21-6540Допущен
Невалидный (старший)> 6570Отклонён

Доход:

РазделДиапазонПредставительОжидаемый
Невалидный (низкий)< $25,000$15,000Отклонён
Валидный (стандарт)$25,000-$74,999$50,000Стандартная ставка
Валидный (премиум)$75,000+$100,000Возможен премиум

Кредитный рейтинг:

РазделДиапазонПредставительОжидаемый
Невалидный (низкий)< 600500Отклонён
Валидный (стандарт)600-749650Стандартная ставка
Валидный (премиум)750+800Возможен премиум

Сумма кредита:

РазделДиапазонПредставительОжидаемый
Невалидный (малый)< $1,000$500Отклонён
Валидный$1,000-$500,000$100,000Принят
Невалидный (большой)> $500,000$600,000Отклонён

Часть 2: Граничные значения

ПолеГраницы для тестирования
Возраст20, 21, 22, 64, 65, 66
Доход$24,999, $25,000, $25,001, $74,999, $75,000, $75,001
Кредитный рейтинг599, 600, 601, 749, 750, 751
Сумма кредита$999, $1,000, $1,001, $499,999, $500,000, $500,001

Часть 3: Таблица решений

УсловиеПравило 1Правило 2Правило 3Правило 4
Рейтинг ≥ 750ДаДаНетНет
Доход ≥ $75,000ДаНетДаНет
Ставка3.5%7.0%7.0%7.0%

Только Правило 1 (оба условия выполнены) даёт премиальную ставку 3.5%.

Часть 4: Полные тест-кейсы

#ВозрастДоходРейтингКредитОжидаемый результат
140$100,000800$200,000Одобрен, 3.5%
235$50,000650$100,000Одобрен, 7.0%
318$80,000780$50,000Отклонён (возраст < 21)
430$15,000700$50,000Отклонён (доход < $25K)
530$60,000500$50,000Отклонён (рейтинг < 600)
630$60,000700$600,000Отклонён (кредит > $500K)
721$25,000600$1,000Одобрен, 7.0% (все минимумы)
865$500,000850$500,000Одобрен, 3.5% (все максимумы)
945$100,000700$150,000Одобрен, 7.0% (высокий доход, стандартный рейтинг)
1045$50,000780$150,000Одобрен, 7.0% (стандартный доход, высокий рейтинг)

Комбинирование техник чёрного ящика

На практике опытные тестировщики комбинируют несколько техник:

  1. Начните с эквивалентного разбиения для определения основных категорий входных данных
  2. Примените анализ граничных значений к краям каждого раздела
  3. Используйте таблицы решений при взаимодействии нескольких условий
  4. Используйте тестирование переходов состояний для поведения с состояниями

Эта комбинация обеспечивает эффективное покрытие без исчерпывающего тестирования. Техники из этого урока подробно изучаются в Модуле 3.

Ключевые выводы

  • Black-box тестирование проектирует тесты по требованиям и спецификациям без знания кода
  • Эквивалентное разбиение сокращает количество тест-кейсов, группируя похожие входные данные
  • Анализ граничных значений нацелен на края, где скрывается большинство багов
  • Таблицы решений систематически покрывают комбинации условий
  • Тестирование переходов состояний проверяет поведение между состояниями системы
  • Black-box и white-box дополняют друг друга — зрелые команды используют оба подхода
  • Тесты чёрного ящика устойчивы к изменениям кода, так как основаны на поведении, а не реализации