Что такое тестирование чёрного ящика?
Тестирование чёрного ящика (black-box testing) — также называемое поведенческим тестированием, тестированием на основе спецификации или функциональным тестированием — проектирует тесты исключительно на основе того, что программное обеспечение должно делать согласно требованиям и спецификациям. Тестировщик не знает внутренний код, архитектуру и детали реализации.
Представьте это как использование торгового автомата. Вы вставляете деньги, нажимаете кнопку и ожидаете определённый товар. Вы не знаете и не заботитесь о внутреннем механизме — вы только проверяете, что правильный результат появляется для данного ввода.
Black-box тестирование отвечает на вопрос: «Ведёт ли себя система так, как специфицировано?»
Кто выполняет тестирование чёрного ящика?
Тестирование чёрного ящика могут выполнять:
- QA-инженеры — наиболее частые практики, тестирующие по требованиям
- Бизнес-аналитики — проверяющие соответствие функций ожиданиям бизнеса
- Конечные пользователи — при приёмочном тестировании (UAT)
- Разработчики — при написании интеграционных или системных тестов
Навыки программирования не требуются, что делает его доступным для более широкого круга членов команды.
Основные техники чёрного ящика
Техники чёрного ящика предоставляют систематические методы выбора тестовых данных. Эти техники подробно рассматриваются в Модуле 3 (Техники проектирования тестов), но понимание обзора необходимо на этом этапе.
Эквивалентное разбиение (Equivalence Partitioning)
Эквивалентное разбиение делит область входных данных на классы (разделы), где все значения внутри класса должны вызывать одинаковое поведение. Затем тестируется один представительный элемент из каждого класса.
Пример: Поле ввода возраста принимает значения 18-65.
| Раздел | Диапазон | Представитель | Ожидаемый результат |
|---|---|---|---|
| Невалидный (ниже) | < 18 | 10 | Ошибка |
| Валидный | 18-65 | 30 | Принято |
| Невалидный (выше) | > 65 | 80 | Ошибка |
Вместо тестирования всех значений от 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)
Тестирование переходов состояний моделирует систему как конечный автомат с определёнными состояниями, переходами и событиями. Тесты проектируются для проверки каждого состояния и перехода.
Пример: Аккаунт пользователя может находиться в состояниях: Активный, Заблокированный, Приостановленный, Удалённый.
Тесты проверяют каждый переход: можно ли реактивировать заблокированный аккаунт после сброса пароля? Удаляется ли аккаунт через 30 дней блокировки?
Когда использовать Black-Box Testing
Black-box тестирование наиболее эффективно для:
- Функционального тестирования — проверка работы функций по спецификации
- Приёмочного тестирования — бизнес-пользователи валидируют требования
- Системного тестирования — тестирование полностью интегрированного приложения
- Регрессионного тестирования — проверка существующей функциональности после изменений
- Тестирования юзабилити — оценка пользовательского опыта
Black-Box vs. White-Box: Сравнение
| Аспект | Чёрный ящик | Белый ящик |
|---|---|---|
| Основа тестов | Требования, спецификации | Исходный код, архитектура |
| Необходимые знания | Предметная область, требования | Программирование, доступ к коду |
| Что находит | Пропущенные требования, ошибки поведения | Логические ошибки, мёртвый код |
| Что пропускает | Внутренние логические ошибки | Отсутствующие функции, юзабилити |
| Кто выполняет | QA, BA, пользователи | Разработчики, SDET |
| Уровень тестирования | Системный, приёмочный, E2E | Модульный, интеграционный |
| Когда проектируется | Рано (с требований) | Требуется готовый код |
| Поддержка | Низкая (тесты переживают рефакторинг) | Высокая (тесты ломаются при изменениях) |
Ни один подход не превосходит другой. Они дополняют друг друга. Зрелая стратегия тестирования использует оба.
Преимущества и ограничения
Преимущества:
- Тесты можно проектировать сразу после написания требований
- Не нужно знать код — более широкое участие команды
- Тесты независимы от реализации — переживают рефакторинг кода
- Обнаруживает пробелы в требованиях и ошибки спецификации
- Моделирует перспективу пользователя
Ограничения:
- Не может гарантировать покрытие кода — непротестированные пути остаются скрытыми
- Возможны избыточные тесты (тестирование одного внутреннего пути неосознанно)
- Сложно проектировать тесты для сложной внутренней логики без знания кода
- Может пропустить граничные случаи, очевидные при чтении кода
- Требует ясных, полных спецификаций (что редкость на практике)
Упражнение: Спроектируйте тест-кейсы чёрного ящика по спецификации
Вы тестируете калькулятор кредитоспособности со следующими требованиями:
Требования:
- Заявитель должен быть в возрасте от 21 до 65 лет включительно
- Минимальный годовой доход: $25,000
- Кредитный рейтинг должен быть 600 или выше
- Запрашиваемая сумма кредита от $1,000 до $500,000
- Если кредитный рейтинг 750+ И доход $75,000+, процентная ставка 3.5% (премиальная)
- Если кредитный рейтинг 600-749 ИЛИ доход $25,000-$74,999, процентная ставка 7.0% (стандартная)
- Если любой критерий не выполнен, заявка отклоняется
Часть 1: Эквивалентное разбиение. Определите разделы эквивалентности для каждого поля ввода.
Часть 2: Анализ граничных значений. Определите граничные значения для каждого поля.
Часть 3: Таблица решений. Создайте таблицу решений для определения процентной ставки (требования 5 и 6).
Часть 4: Спроектируйте 8-10 полных тест-кейсов с хорошим покрытием.
Подсказка
Для Части 1 каждое поле имеет как минимум 3 раздела: ниже валидного диапазона, валидный диапазон и выше валидного диапазона. Некоторые имеют подразделы внутри валидного диапазона (например, кредитный рейтинг имеет стандартный и премиальный уровни).Для Части 3 сосредоточьтесь на двух условиях, определяющих ставку: порог кредитного рейтинга (750) и порог дохода ($75,000). Получится 4 комбинации.
Решение
Часть 1: Разделы эквивалентности
Возраст:
| Раздел | Диапазон | Представитель | Ожидаемый |
|---|---|---|---|
| Невалидный (молодой) | < 21 | 18 | Отклонён |
| Валидный | 21-65 | 40 | Допущен |
| Невалидный (старший) | > 65 | 70 | Отклонён |
Доход:
| Раздел | Диапазон | Представитель | Ожидаемый |
|---|---|---|---|
| Невалидный (низкий) | < $25,000 | $15,000 | Отклонён |
| Валидный (стандарт) | $25,000-$74,999 | $50,000 | Стандартная ставка |
| Валидный (премиум) | $75,000+ | $100,000 | Возможен премиум |
Кредитный рейтинг:
| Раздел | Диапазон | Представитель | Ожидаемый |
|---|---|---|---|
| Невалидный (низкий) | < 600 | 500 | Отклонён |
| Валидный (стандарт) | 600-749 | 650 | Стандартная ставка |
| Валидный (премиум) | 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: Полные тест-кейсы
| # | Возраст | Доход | Рейтинг | Кредит | Ожидаемый результат |
|---|---|---|---|---|---|
| 1 | 40 | $100,000 | 800 | $200,000 | Одобрен, 3.5% |
| 2 | 35 | $50,000 | 650 | $100,000 | Одобрен, 7.0% |
| 3 | 18 | $80,000 | 780 | $50,000 | Отклонён (возраст < 21) |
| 4 | 30 | $15,000 | 700 | $50,000 | Отклонён (доход < $25K) |
| 5 | 30 | $60,000 | 500 | $50,000 | Отклонён (рейтинг < 600) |
| 6 | 30 | $60,000 | 700 | $600,000 | Отклонён (кредит > $500K) |
| 7 | 21 | $25,000 | 600 | $1,000 | Одобрен, 7.0% (все минимумы) |
| 8 | 65 | $500,000 | 850 | $500,000 | Одобрен, 3.5% (все максимумы) |
| 9 | 45 | $100,000 | 700 | $150,000 | Одобрен, 7.0% (высокий доход, стандартный рейтинг) |
| 10 | 45 | $50,000 | 780 | $150,000 | Одобрен, 7.0% (стандартный доход, высокий рейтинг) |
Комбинирование техник чёрного ящика
На практике опытные тестировщики комбинируют несколько техник:
- Начните с эквивалентного разбиения для определения основных категорий входных данных
- Примените анализ граничных значений к краям каждого раздела
- Используйте таблицы решений при взаимодействии нескольких условий
- Используйте тестирование переходов состояний для поведения с состояниями
Эта комбинация обеспечивает эффективное покрытие без исчерпывающего тестирования. Техники из этого урока подробно изучаются в Модуле 3.
Ключевые выводы
- Black-box тестирование проектирует тесты по требованиям и спецификациям без знания кода
- Эквивалентное разбиение сокращает количество тест-кейсов, группируя похожие входные данные
- Анализ граничных значений нацелен на края, где скрывается большинство багов
- Таблицы решений систематически покрывают комбинации условий
- Тестирование переходов состояний проверяет поведение между состояниями системы
- Black-box и white-box дополняют друг друга — зрелые команды используют оба подхода
- Тесты чёрного ящика устойчивы к изменениям кода, так как основаны на поведении, а не реализации