Что такое тестирование методом серого ящика и приведи пример

«Что такое тестирование методом серого ящика и приведи пример» — вопрос из категории Техники тест-дизайна, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование методом серого ящика (Gray-box testing) — это техника, при которой тестировщик обладает частичными знаниями о внутренней структуре или реализации системы (например, знает схему базы данных, API-контракты или алгоритмы), но тестирование проводится через внешние интерфейсы (UI, API).

Пример: Тестирование валидации пароля

Известная внутренняя логика (код функции):

def validate_password(password: str) -> bool:
    """Пароль должен содержать минимум 8 символов, хотя бы одну цифру и одну заглавную букву."""
    if len(password) < 8:
        return False
    if not any(char.isdigit() for char in password):
        return False
    if not any(char.isupper() for char in password):
        return False
    return True

Тест-кейсы, спроектированные с учетом этой логики, но выполняемые через веб-форму:

Вводимый пароль Ожидаемый результат (UI) Почему (основано на знании кода)
1 Pass1234 Успешная валидация Соответствует всем трем условиям.
2 pass1234 Ошибка: "Добавьте заглавную букву" Не содержит заглавной буквы (any(char.isupper()) вернет False).
3 Pass Ошибка: "Минимум 8 символов" Длина меньше 8 символов.
4 Password Ошибка: "Добавьте цифру" Не содержит цифр (any(char.isdigit()) вернет False).

Преимущества подхода:

  • Более эффективное покрытие: Знание внутренней логики позволяет создавать тесты, целенаправленно проверяющие граничные условия и ветвления алгоритма.
  • Более точные проверки: Можно ожидать конкретные сообщения об ошибках, а не просто факт ошибки.
  • Изоляция дефектов: Легче понять, в каком именно условии (if) возникла проблема.