← Назад к вопросам

Что такое серый ящик?

1.0 Junior🔥 201 комментариев
#Теория тестирования#Техники тест-дизайна

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое серый ящик (Grey Box Testing)

Серый ящик (grey box testing) — это гибридный подход к тестированию, который сочетает элементы чёрного ящика (black box) и белого ящика (white box). Тестировщик имеет ЧАСТИЧНОЕ знание о внутренней структуре и логике приложения.

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

Знание о системе:

  • Тестировщик знает архитектуру приложения и основные компоненты
  • Имеет доступ к исходному коду и документации
  • Понимает структуру базы данных
  • Знает используемые технологии и фреймворки

Но НЕ обладает полным знанием:

  • Не знает деталей каждого алгоритма
  • Не видит всю внутреннюю логику функций
  • Не может легко отследить каждый путь выполнения кода

Фокус:

  • Тестирование на уровне интеграции между модулями
  • Проверка взаимодействия компонентов
  • Валидация данных на границах модулей
  • Поиск ошибок в интеграции

Сравнение трёх подходов

Чёрный ящик (Black Box):

  • Нет знания внутреннего устройства
  • Тестирование только по спецификации
  • Фокус на входных и выходных данных
  • Эффективен для ручного и UI тестирования
  • Найденные баги — часто реальные проблемы пользователя

Белый ящик (White Box):

  • Полное знание кода и логики
  • Тестирование всех путей выполнения
  • Проверка покрытия кода (coverage)
  • Нахождение скрытых ошибок
  • Трудозатратный, требует умение программировать

Серый ящик (Grey Box):

  • Среднее знание системы
  • Баланс между чёрным и белым ящиком
  • Эффективное соотношение затрат и результатов
  • Тестирование интеграции и boundary условий
  • Более практичный подход для большинства проектов

Уровни серого ящика

Уровень 1 — Минимальное знание (ближе к чёрному ящику):

  • Знание только общей архитектуры
  • Понимание основных модулей
  • Примеры: тестер UI приложения, знающий про backend API

Уровень 2 — Среднее знание:

  • Знание архитектуры и основной логики
  • Доступ к логам и мониторингу
  • Примеры: QA инженер, который может читать код и запросы БД

Уровень 3 — Глубокое знание (ближе к белому ящику):

  • Почти полное знание кода
  • Умение писать простые запросы SQL
  • Примеры: test automation engineer, который может дебажить код

Когда использовать серый ящик

Идеально подходит для:

  • Интеграционного тестирования (несколько модулей вместе)
  • Тестирования API (вы видите контракт, но не всю логику обработки)
  • Тестирования микросервисной архитектуры
  • Системного тестирования
  • Регрессионного тестирования

Примеры в практике:

  1. Тестирование API:

    • Знаете структуру запросов и ответов (контракт)
    • Знаете, что API говорит с БД
    • Но не знаете все детали обработки внутри функции
  2. Тестирование интеграции с платёжной системой:

    • Знаете, что система отправляет запрос на Stripe API
    • Знаете, какие данные передаются
    • Но не знаете точную реализацию обработки вебхуков
  3. Тестирование базы данных:

    • Знаете схему БД
    • Можете писать SQL запросы для проверки данных
    • Но не знаете оптимизацию индексов

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

  • Баланс эффективности: Меньше затрат, чем белый ящик, но лучше результаты, чем чёрный
  • Реалистичные баги: Находятся ошибки, значимые для пользователя
  • Раннее обнаружение проблем интеграции: Можно найти ошибки на стыке модулей
  • Лучшее планирование тестов: Зная архитектуру, легче определить критические пути
  • Снижение количества ложных багов: Понимание системы помогает не создавать false positives
  • Практичность: Можно использовать в большинстве проектов

Недостатки серого ящика

  • Требует дополнительное образование: Нужно изучить архитектуру и часть кода
  • Неполное покрытие логики: Как белый ящик, но хуже
  • Субъективность: Разные тестировщики могут иметь разное понимание системы
  • Зависимость от документации: Если документация плохая, трудно понять систему
  • Может быть смещённость: Зная про некоторые компоненты, может игнорировать другие

Техники серого ящика

Boundary Value Analysis:

  • Знаю валидацию в коде → проверяю граничные значения
  • Пример: Если код проверяет age > 18 and age < 65, проверяю 17, 18, 64, 65

Equivalence Partitioning:

  • Группирую входные данные по классам
  • Проверяю по одному из каждого класса

Decision Table Testing:

  • Знаю логику условий → создаю таблицу возможных комбинаций
  • Проверяю все комбинации

Сравнение БД:

  • Проверяю, что данные из UI корректно сохранены в БД
  • Проверяю логику трансформации данных

Инструменты для серого ящика

  • IDE (Visual Studio Code) — для чтения кода
  • Database tools (pgAdmin, DBeaver) — для проверки данных
  • Network tools (Postman, DevTools) — для анализа запросов
  • Logs viewer (ELK, Splunk) — для отладки
  • Git — для просмотра истории изменений
  • API documentation (Swagger) — для понимания контрактов

Практический пример

Тестирование функции регистрации пользователя в сером ящике:

  1. Знаю, что есть валидация email
  2. Знаю, что пароль должен быть минимум 8 символов
  3. Знаю, что используется база PostgreSQL
  4. Не знаю, какой алгоритм хеширования используется
  5. Не знаю, как именно проверяется уникальность email

Мой тест:

  • Проверю граничные случаи (7 символов, 8 символов)
  • Проверю невалидные email форматы
  • Проверю, что пользователь создан в БД
  • Проверю, что пароль захеширован (не в plaintext)

Заключение

Серый ящик — это наиболее практичный и эффективный подход для большинства проектов. Он позволяет находить реальные баги, имея при этом разумные затраты на тестирование. Это основной подход для интеграционного и системного тестирования в современной разработке.

Что такое серый ящик? | PrepBro