Gray Box Testing – The New Normal?
Все мы знакомы с тестированием черного и белого ящиков и потратили годы на работу с ними. У обоих этих подходов есть свои достоинства и недостатки, и тестировщики научились мириться с ними.
Поскольку в техническом мире все так быстро меняется, тестирование серого ящика теперь занимает центральное место, благодаря совмещению достоинств обоих подходов и отсутствию большинства их недостатков. В этом статье рассказано все, что вам нужно знать об этом типе тестирования.

Так что же такое тестирование серого ящика?
Это идеальный коктейль, состоящий из сочетания преимуществ тестирования «белого ящика» и «черного ящика». Тестировщик не только тестирует функциональные потоки, как если бы он проводил тестирование «черного ящика», но также частично понимает SUT (тестируемая система).

Несмотря на то, что в нем сохраняются основы тестирования «черного ящика», тестировщик также приобретает частичные практические знания о базовом коде и архитектуре. Следовательно, это называется «серым ящиком», поскольку используется подход между тестированием черного и белого ящиков. Он представляет систему как полупрозрачный (серый) ящик, через который они могут частично заглядывать в ее внутреннюю работу.
Тестирование «серого ящика» - хороший способ поиска уязвимостей в программах. Это может помочь в обнаружении ошибок или эксплойтов из-за неправильной структуры кода или неправильного использования приложений.
Тестировщик серого ящика использует ориентированный на код подход тестирования белого ящика и объединяет его с различными подходами тестирования черного ящика, такими как функциональное тестирование и регрессионное тестирование. Тестировщик оценивает как внутреннюю работу программного обеспечения, так и его пользовательский интерфейс.

Пример, демонстрирующий тестирование серого ящика
У тестировщика есть гиперссылка для тестирования. В таблице ниже приведены три типа тестирования и предпринятые шаги:

Нам известны только некоторые особенности реализации тестируемой системы.
Тестирование методом серого ящика – метод тестирования программного обеспечения, который предполагает, комбинацию White Box и Black Box подходов. То есть, внутреннее устройство программы нам известно лишь частично. Предполагается, например, доступ к внутренней структуре и алгоритмам работы ПО для написания максимально эффективных тест-кейсов, но само тестирование проводится с помощью техники черного ящика, то есть, с позиции пользователя.
Эту технику тестирования также называют методом полупрозрачного ящика: что-то мы видим, а что-то – нет.
Пример:
Тестировщик изучает код программы с тем, чтобы лучше понимать принципы ее работы и изучить возможные пути ее выполнения. Такое знание поможет написать тест-кейс, который наверняка будет проверять определенную функциональность.
Техника серого ящика применима на разных уровнях тестирования – от модульного до системного, но главным образом применяется на интеграционном уровне для проверки взаимодействия разных модулей программы.
Как проводится тестирование серого ящика
Здесь тестовые примеры разработаны с учетом архитектуры приложения и понимания его поведения в различных ситуациях. Ниже приводится краткое описание шагов, которые необходимо выполнить:
- Соберите входные данные из подходов к тестированию «белого ящика» и «черного ящика».
- Определите выходы входов на шаге 1.
- Определите все пути пользователя, которые преобразуют эти входные данные в выходные.
- Определите подфункции для прохождения тестирования на один уровень глубже.
- Определите входы для подфункций.
- Определите ожидаемый результат для входов на шаге 5.
- Выполните тестовые примеры для подфункций.
- Проверить правильность результата выполнения шага 7.
- Повторите шаги 4-8 для каждой подфункции.
Типы тестов серого ящика:
- Регрессионные проверки;
- Матричные проверки;
- Шаблонное тестирование;
- Проверка ПО с помощью ортогонального массива.
Существует 4 основных метода тестирования, которые классифицируются как тестирование серого ящика:
- Матричное тестирование - тестирование переменных в системе. Переменные переносят данные по всему приложению. Бизнес-риск идентифицируется для каждой переменной, а затем исследуется по каждому риску. Это помогает идентифицировать неиспользуемые или недостаточно используемые переменные.
- Регрессионное тестирование - стандартное тестирование, чтобы увидеть, не нарушает ли какое-либо новое исправление работу существующего приложения.
- Тестирование шаблонов - обнаружение шаблонов, вызывающих ошибки. Основное внимание здесь уделяется выявлению факторов, которые привели к дефекту, способу его обнаружения и необходимости исправления. Эта информация помогает в разработке серых тестов, которые гарантируют, что шаблоны, выявленные в более старых версиях, могут быть обнаружены на ранних этапах в новых версиях.
- Проверка ортогональных массивов - Статистический метод выполнения тестов. Он используется, когда вводы слишком малы, но тесты сложные. Это помогает увеличить покрытие кода.
✅ Плюсы тестирования серого ящика
- Тестирование проводится как с точки зрения пользователя, так и с точки зрения разработчика, поскольку оно сочетает в себе тестирование черного и белого ящиков.
- Поскольку он является производным от методов «черного ящика» и «белого ящика», он добавляет больше преимуществ в обоих методах тестирования.
- Тестирование проводится в большей степени с точки зрения пользователя, чем с точки зрения разработчиков.
- Качество программного обеспечения улучшается.
- Этот метод больше ориентирован на восприятие пользователем.
- Разработчики получают выгоду, поскольку у них есть достаточно времени для исправления ошибок.
- Мгновенные исправления могут быть сделаны, так как доступен частичный код.
- Поток данных управляется и поддерживается правильно.
- Сделан честный обзор программного обеспечения, и между разработчиками и тестировщиками не возникает конфликтов
- Этот метод тестирования эффективен при интеграционном тестировании.
- С помощью этого метода можно эффективно тестировать сложные приложения и сценарии.
❌ Недостатки тестирования серого ящика
- Полное знание кода не достигается, поэтому трудно достичь полного покрытия кода.
- Поскольку доступен только ограниченный доступ к коду / логике, полные исправления иногда не могут быть сделаны, а значит, иногда программное обеспечение может оставаться таким, как есть.
- Другие типы тестирования белого ящика, такие как тестирование алгоритма, не могут быть выполнены, так как полная логика недоступна.
- Трудно выполнить этот тип тестирования в распределенных архитектурных программных системах.
Сравнение трех подходов

КРАТКИЕ ИТОГИ
Итак, тестирование методом серого ящика наиболее востребовано в ситуации, когда QA-инженеры могут получить полноценный доступ к проектной документации и у них есть достаточно времени на подготовку тест-кейсов со сценариями тестирования.
Максимальная польза от применения подобного вида тестирования наблюдается во время проверки веб-приложений, веб-сервисов, графического интерфейса пользователя, и при выполнении разнообразных функциональных тестов ПО, ориентированных на системную и клиентскую безопасность.