Что такое white box тестирование валидации?

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

Ответ

White box тестирование валидации — это проверка внутренней логики, структуры кода и всех путей выполнения функции или модуля валидации. Тестировщик имеет доступ к исходному коду.

Основные цели:

  • Проверить полноту покрытия всех условий (if/else, циклов).
  • Убедиться в корректности бизнес-логики.
  • Найти ошибки в алгоритмах.

Пример тестирования функции валидации email (Python):

# Исходный код функции (упрощённый пример)
def validate_email(email: str) -> bool:
    if not email or '@' not in email:
        return False
    local_part, domain_part = email.split('@', 1)
    if not local_part or not domain_part or '.' not in domain_part:
        return False
    return True

Набор тестов для достижения 100% покрытия веток (branch coverage):

import pytest

# 1. Позитивные сценарии (ветка return True)
def test_valid_emails():
    assert validate_email("test@example.com") == True
    assert validate_email("a.b@domain.co.uk") == True

# 2. Негативные сценарии (разные ветки return False)
# Ветка 1: пустая строка или отсутствие '@'
def test_invalid_no_at_or_empty():
    assert validate_email("") == False          # not email
    assert validate_email("plainaddress") == False # '@' not in email

# Ветка 2: отсутствие local_part или domain_part после split
def test_invalid_malformed_after_at():
    assert validate_email("@example.com") == False   # not local_part
    assert validate_email("test@") == False          # not domain_part

# Ветка 3: отсутствие точки в домене
def test_invalid_domain_no_dot():
    assert validate_email("test@domain") == False    # '.' not in domain_part

Инструменты:

  • Покрытие кода: pytest-cov (Python), JaCoCo (Java), istanbul (JS).
  • Статический анализ: SonarQube, который может выявлять недостижимый код или необработанные условия.