Ответ
Классификация по уровню доступа тестировщика к внутреннему устройству тестируемой системы (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 — когда ты хитрая жопа и используешь все доступные знания для более эффективного разгрома.
Вот и вся классификация, ебать мои старые костыли. Выбирай по ситуации и вперёд, тестировать, пока не задымится!