В чем разница черного, серого и белого ящиков в тестировании
Что проверяют
Понимаете ли вы, что это деление по тому, сколько тестировщик знает о системе, а не отдельные виды тестирования. Следом обычно спрашивают, какие техники тест-дизайна вы применяете для чёрного ящика, и просят пример серого из вашей практики.
Как отвечать
- чёрный ящик: тестируете по требованиям и наблюдаемому поведению, внутреннее устройство не учитываете. Техники: классы эквивалентности, граничные значения, таблицы решений, переходы состояний, попарное тестирование. Сюда относится большинство функциональных и приёмочных проверок;
- белый ящик: тесты строятся от кода, а полноту меряют покрытием операторов, ветвей, условий, путей. Чаще всего это юнит-тесты разработчиков, но QA работает в той же логике, когда читает отчёт покрытия JaCoCo или Istanbul и находит непроверенную ветку;
- серый ящик: вы знаете часть устройства и используете это при проверке снаружи. После оформления заказа в UI смотрите запись в базе, проверяете сообщение в очереди Kafka, читаете логи сервиса, а зная, что ответ кэшируется, отдельно проверяете сценарий с устаревшим кэшем.
Сильная сторона ответа в том, чтобы показать, как подходы дополняют друг друга. Чёрный ящик ловит расхождение с требованиями, но не видит мёртвый код. Белый показывает непокрытые ветки, но не заметит, что обещанная функция вообще не реализована. Серый в работе QA встречается чаще всего: тестирование API по контракту с доступом к базе и логам это именно он.
Где спотыкаются
Приравнивают чёрный ящик к ручному тестированию, а белый к автотестам. Автотест через UI по сценарию из требований остаётся чёрным ящиком, как бы сложно он ни был написан.
Считают, что стопроцентное покрытие кода означает отсутствие багов. Покрытие говорит только о том, что строка выполнилась, а не что результат проверили, и ничего не знает о пропущенных требованиях.
Не могут назвать ни одной техники тест-дизайна и отвечают общими словами «проверяю позитивные и негативные сценарии». Интервьюер в этот момент ждёт граничные значения на конкретном поле: 0, 1, максимум, максимум плюс один.