Кто пишет white-box тесты?

Ответ

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}"

И главное, на чём весь сыр-бор горит: Чтобы такое тестирование писать, надо иметь доступ к исходникам. Без этого — ты просто слепой крот, который тыкается палкой в тёмной комнате. Нужно понимать, какие алгоритмы там пляшут и как данные друг за друга цепляются. Иначе получится ерунда, в рот меня чих-пых!