Что такое White-box testing?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
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 тестированием оно обеспечивает полное покрытие функциональности и требований, что критично для создания надёжного и безопасного программного обеспечения.