В чем разница между Black Box, White Box и Gray Box тестированием?

Ответ

Классификация по уровню доступа тестировщика к внутреннему устройству тестируемой системы (SUT).

Метод Знание внутренностей Объект тестирования Примеры
Black Box (черный ящик) Нет доступа к коду или архитектуре. Внешнее поведение, функциональность, интерфейсы (UI, API). • Функциональное тестирование
• Приемочное тестирование (UAT)
• Тестирование API по спецификации.
White Box (прозрачный ящик) Полный доступ к коду, архитектуре, БД. Внутренняя структура, пути выполнения, покрытие кода. • Модульное тестирование (Unit)
• Интеграционное тестирование
• Анализ покрытия кода (code coverage).
```python

White-box тест: знаем реализацию функции

def test_factorial():

Мы знаем, что функция использует рекурсию

assert factorial(5) == 120

| **Gray Box (серый ящик)** | Частичное знание (например, схема БД, диаграммы компонентов). | Комбинация внешнего поведения с учетом известной внутренней структуры. | • Тестирование интеграции с БД (знаем схему таблиц).<br>• Penetration-тестирование с известной архитектурой.<br>• Тестирование цепочек вызовов между модулями. |

**Выбор метода** зависит от цели: Black Box — что система делает, White Box — как она это делает, Gray Box — компромисс между ними.

Ответ 18+ 🔞

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

Есть три главных подхода, как к бабе: либо снаружи оцениваешь, либо весь внутрь лезешь, либо так, половинчато, на разведку.

Чёрный ящик (Black Box) Тут ты — как слепой кот, блядь. Ни хуя не знаешь, что там внутри творится. Код? Архитектура? Да хуй с ним! Ты просто долбишь по кнопкам снаружи и смотришь, что вываливается. Объект твоего похотливого внимания — чисто внешнее поведение: интерфейс, функциональность, ответы API. Примеры? Да вот, пользовательский сценарий: нажал «купить» — получил «спасибо за покупку». Или приёмка заказчиком (UAT) — он же в код не лезет, ему лишь бы работало. API по документации погонять — тоже самое. Внутренности? Не, не слышал.

Белый ящик (White Box) А вот это уже полный разбор на запчасти, ёпта! Ты — как хирург-патологоанатом. У тебя полный доступ: код, база данных, все эти твои ебучые микросервисы. И ты тестируешь уже не «что», а «как». Смотришь, все ли ветки кода отработали, правильно ли один модуль в другой данные передал, не сломалось ли что в самой сраной кишке системы. Это юнит-тесты, интеграционные тесты, замер покрытия кода (code coverage). Типа, знаешь, что функция factorial рекурсивная, и пишешь тест, который это проверяет.

# Белый ящик: мы же в курсе, что внутри рекурсия, блядь!
def test_factorial():
    assert factorial(5) == 120

Серый ящик (Gray Box) Ну а это, понимаешь, золотая середина, как соседка, у которой ты знаешь планировку квартиры, но не все тайны её души. У тебя есть частичные знания: не весь код, но, допустим, схема базы данных или диаграмма взаимодействия компонентов. И ты используешь это знание, чтобы более хитро и целенаправленно ебашить систему снаружи. Тестируешь интеграцию с БД, зная структуру таблиц. Или проводишь пентест, уже представляя себе слабые места в архитектуре. Или гоняешь цепочки вызовов между сервисами.

Какой метод выбрать, спросишь ты? Да всё просто, как три копейки:

  • Black Box — когда тебе похуй, как оно работает, главное — что работает.
  • White Box — когда тебе надо докопаться до самой сути, до каждой строчки, блядь.
  • Gray Box — когда ты хитрая жопа и используешь все доступные знания для более эффективного разгрома.

Вот и вся классификация, ебать мои старые костыли. Выбирай по ситуации и вперёд, тестировать, пока не задымится!