Ответ
White-box (или структурное) тестирование, требующее знания внутреннего устройства системы, пишут разработчики и инженеры по автоматизации тестирования (SDET/QA Automation).
Распределение ответственности:
| Роль | Типичные white-box тесты | Почему именно они? |
|---|---|---|
| Разработчик | Модульные (Unit), интеграционные (Integration) тесты. | Имеют глубочайшее понимание кода, логики и архитектуры. Пишут тесты параллельно с разработкой (TDD). |
| QA Automation | Компонентные, API-тесты, тесты на покрытие сложных бизнес-логик. | Обладают экспертизой в тест-дизайне и создании устойчивых тестовых фреймворков. |
Пример модульного теста (Python/pytest):
def calculate_discount(price, is_member):
if is_member:
return price * 0.9 # 10% скидка
return price
def test_calculate_discount_member():
# White-box тест: мы знаем внутреннюю ветку `if is_member:`
result = calculate_discount(100, True)
assert result == 90, f"Для участника ожидалась скидка. Получено: {result}"
def test_calculate_discount_non_member():
result = calculate_discount(100, False)
assert result == 100, f"Для не-участника скидки нет. Получено: {result}"
Ключевое требование: Написание white-box тестов невозможно без доступа к исходному коду и понимания используемых алгоритмов и структур данных.
Ответ 18+ 🔞
Давай разберём эту тему, как есть, без прикрас. Вот смотри, белый ящик, он же структурное тестирование — это когда ты лезешь внутрь системы, как в холодильник ночью, и знаешь, где у неё печеньки, а где вонючий сыр лежит. Кто этим занимается? Ну, понятное дело, не случайные прохожие.
Кому это впарили:
| Кто это делает | Что обычно пишут | А почему, блядь, именно они? |
|---|---|---|
| Разработчик | Юнит-тесты, интеграционные тесты. | Да потому что он этот код и рожал, ёпта! Он знает каждую переменную, каждую ветку if, как свои пять пальцев. Часто пишет тесты прямо перед или после кода, по методичке TDD, чтобы не опозориться. |
| Автоматизатор (SDET/QA Automation) | Тесты на компоненты, API, покрытие какой-нибудь заковыристой бизнес-логики. | Потому что этот товарищ — профи в том, чтобы придумать, как всё сломать, и запилить для этого стабильный фреймворк. У него взгляд со стороны, но с доступом к потрохам. |
Вот, смотри, пример юнит-теста (Python/pytest), чтоб было понятно, о чём речь:
def calculate_discount(price, is_member):
if is_member:
return price * 0.9 # 10% скидка
return price
def test_calculate_discount_member():
# Это и есть white-box: мы же видим из кода, что внутри есть ветка `if is_member:`
result = calculate_discount(100, True)
assert result == 90, f"Для участника ожидалась скидка. Получено: {result}"
def test_calculate_discount_non_member():
result = calculate_discount(100, False)
assert result == 100, f"Для не-участника скидки нет. Получено: {result}"
И главное, на чём весь сыр-бор горит: Чтобы такое тестирование писать, надо иметь доступ к исходникам. Без этого — ты просто слепой крот, который тыкается палкой в тёмной комнате. Нужно понимать, какие алгоритмы там пляшут и как данные друг за друга цепляются. Иначе получится ерунда, в рот меня чих-пых!