← Назад к вопросам

Что такое White-box testing?

1.0 Junior🔥 261 комментариев
#Теория тестирования#Техники тест-дизайна

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

White-box Testing: тестирование с открытым кодом

White-box testing (также называется glass-box или structural testing) — это метод тестирования, при котором тестировщик имеет полный доступ к исходному коду, архитектуре и внутренней структуре приложения и использует эти знания для создания тестов. Это контрастирует с black-box тестированием, где внутренняя реализация неизвестна.

Основной принцип

White-box подход:

  • Тестировщик знает всю архитектуру системы
  • Может видеть логику условных операторов (if, else)
  • Знает путь выполнения кода
  • Может проверить работу каждой строки кода
  • Создаёт тесты на основе структуры кода

Пример:

def calculate_discount(age, total_price):
    if age < 5:
        return total_price * 0.5  # 50% скидка
    elif age < 18:
        return total_price * 0.75  # 25% скидка
    elif age >= 65:
        return total_price * 0.7   # 30% скидка
    else:
        return total_price  # нет скидки

Зная код, QA тестирует все веточки (branches): возраст < 5, 5-17, 18-64, >= 65.

Типы покрытия в White-box тестировании

1. Statement Coverage (Покрытие операторов)

  • Каждая строка кода выполняется хотя бы один раз
  • Минимальный требуемый уровень
  • Цель: 100% покрытие всех операторов
  • Пример: все line of code выполнены

2. Branch Coverage (Покрытие ветвей)

  • Каждая возможная ветвь if-else выполнена
  • Охватывает как true, так и false результаты условий
  • Более строгое, чем statement coverage
  • Пример: протестированы все пути в коде

3. Path Coverage (Покрытие путей)

  • Все возможные комбинации путей выполнения
  • Самый строгий уровень покрытия
  • Может быть невозможно на 100% для сложных систем
  • Пример: все комбинации условий

4. Condition Coverage

  • Каждое условие в коде тестируется на true и false
  • Более детальное, чем branch coverage

Практические методы White-box тестирования

1. Unit Testing

  • Тестирование отдельных функций
  • Самая распространённая форма white-box тестирования
  • Инструменты: pytest, unittest, JUnit

2. Code Coverage Analysis

  • Анализ, какой процент кода покрыт тестами
  • Инструменты: Coverage.py, Istanbul, JaCoCo
  • Цель обычно: 80-90% и выше

3. Path Testing

  • Определяют все независимые пути в коде
  • Создают тесты для каждого пути
  • Гарантирует, что все логические ветви работают

4. Loop Testing

  • Специальное внимание циклам
  • Тестируют: пропуск цикла, одна итерация, две итерации, много итераций

Практический пример

Функция с условиями:

def check_password_strength(password):
    if len(password) < 8:
        return "Weak"  # statement 1
    
    has_upper = any(c.isupper() for c in password)
    has_lower = any(c.islower() for c in password)
    has_digit = any(c.isdigit() for c in password)
    
    if has_upper and has_lower and has_digit:
        return "Strong"  # statement 2
    else:
        return "Medium"  # statement 3

White-box тесты для достижения 100% coverage:

# Test 1: Branch 1 - слишком короткий пароль
assert check_password_strength("abc") == "Weak"

# Test 2: Branch 2 - сильный пароль
assert check_password_strength("Abc12345") == "Strong"

# Test 3: Branch 3 - средний пароль (нет цифр)
assert check_password_strength("Abcdefgh") == "Medium"

# Test 4: Branch 3 - средний пароль (нет заглавных)
assert check_password_strength("abcd12345") == "Medium"

Преимущества White-box тестирования

1. Полное покрытие кода

  • Никакая строка кода не остаётся протестирована
  • Высокая уверенность в качестве
  • Выявляет мёртвый код

2. Раннее выявление проблем

  • Баги находятся на этапе разработки
  • Дешевле исправлять
  • Улучшает качество кода

3. Внутренняя безопасность

  • Проверяет логику обработки данных
  • Выявляет уязвимости
  • Проверяет обработку ошибок

4. Документирование

  • Тесты служат документацией кода
  • Показывают, как код должен работать

Недостатки White-box тестирования

1. Требует знания кода

  • Дорогое в подготовке
  • Нужны знания программирования
  • Зависит от разработчиков

2. Может пропустить дефекты в требованиях

  • Если требование неправильно, код может быть логичным
  • Не проверяет соответствие бизнес-логике

3. Временные затраты

  • Написание тестов требует времени
  • Поддержка при изменениях кода

4. Субъективность

  • Разработчик может написать тесты, которые проверяют то же, что и код
  • Нет независимого взгляда

White-box vs Black-box тестирование

White-box:

  • Знает код ✓
  • Проверяет внутреннюю логику ✓
  • Обычно разработчик
  • Высокое покрытие кода ✓
  • Может пропустить требования

Black-box:

  • Не знает код ✗
  • Проверяет поведение ✓
  • QA-инженер
  • Ловит дефекты требований ✓
  • Может не покрыть все пути кода

Инструменты для White-box тестирования

  • pytest — Python framework
  • unittest — встроенный Python framework
  • Coverage.py — анализ покрытия кода
  • SonarQube — анализ качества кода
  • JUnit — Java framework
  • Istanbul — JavaScript coverage

Best Practices

  • Целевой coverage: 80-90% минимум
  • Не гонитесь за 100%, фокусируйтесь на критических путях
  • Используйте white-box + black-box вместе
  • Автоматизируйте запуск тестов в CI/CD
  • Регулярно пересматривайте покрытие

Заключение

White-box тестирование — это мощный инструмент для обеспечения высокого качества кода на уровне разработки. В сочетании с black-box тестированием оно обеспечивает полное покрытие функциональности и требований, что критично для создания надёжного и безопасного программного обеспечения.

Что такое White-box testing? | PrepBro