«Серый, белый и черный ящик» — не будни грузчика, а методы, которыми пользуются тестировщики, чтобы оценить качество нового ПО. В чем разница между этими способами и какую ошибку в тестировании часто допускают стартапы — читайте в этой статье.
Уровни тестирования и подходы
Тестирование — важный этап разработки нового продукта. В процессе проверки можно выявить ошибки в работе программы и вовремя их исправить. Таким образом, продукт не теряет пользователей из-за ошибок в коде или интерфейсе.
Как правило, тестирование происходит на трех уровнях, которые составляют классическую «Пирамиду тестирования»:
- Unit-тесты (проверка корректности работы отдельных модулей программного кода).
- Интеграционные тесты (проверка взаимодействия различных компонентов программы, frontend- и backend-разработки и т. д.).
- End-to-end тесты (когда задействована вся система: это может быть ручное тестирование, при котором пользователь или тестировщик механически нажимает на кнопки, или автоматизированные тесты с аналогичным сценарием).
Чтобы проверить продукт на всех трех уровнях, используют тестирование по принципу «черного и белого ящиков». Эти подходы отличаются степенью прозрачности кода для тестировщика. Например, «белый ящик» — это полностью открытый код, «черный ящик» — полностью закрытый. Разберемся
Тестирование по методу «белого ящика»
White box testing основывается на анализе внутренней структуры программы. Тестировщик знает, как работает программа и какие функции выполняет каждый ее блок. Основной фокус в этом методе — на коде. Он исследует структуру каталогов, маршрутизацию, циклы и при необходимости может самостоятельно изменить код. Такое тестирование проводится в два этапа:
- изучение программного кода;
- создание и внедрение алгоритмов проверки.
Для проверки по методу «белого ящика» тестировщик должен знать язык программирования. Он самостоятельно создает тест-кейсы, чтобы выявить не только очевидные, но и скрытые ошибки.
Тестирование по методу «черного ящика»
Black box testing — проверка, при которой тестировщик не имеет доступа к коду. Он, как реальный клиент или пользователь, оценивает функции и работу программы, ориентируясь исключительно на интерфейс взаимодействия.
Тестирование «черным ящиком» может происходить как вручную, так и автоматически. И, как и в случае «белого ящика», специалист создает test-кейсы, чтобы покрыть все возможные сценарии использования программы.
Такое тестирование можно проводить на любом этапе разработки ПО. Часто оно не позволяет выявить скрытые ошибки, но зато доступно начинающим специалистам и помогает посмотреть на продукт глазами обычного пользователя.
При использовании метода «черного ящика» тестировщик не видит код программы
Разработчики часто подвержены когнитивным искажениям. Они знают, как устроен код и как должна работать программа. Но обычный пользователь — человек непредсказуемый и часто может действовать не по сценарию. Так, банальная ошибка при вводе данных может полностью порушить парсинг.
Когда мы работаем без возможности увидеть код, то можем предвидеть многие нестандартные пользовательские сценарии, так как не ограничены своим знанием об устройстве кода. Таким образом, не ждем от него только какого-то одного известного нам поведения.
Тестирование по методу «серого ящика»
Grey box testing считается промежуточным вариантом между «белым и черным ящиком». В этом случае тестировщик может видеть часть кода или иметь доступ к внутренним настройкам продукта, недоступным обычному пользователю.
Однако проверка при этом приходит с использованием программного интерфейса. Это позволяет получить преимущества «черного ящика» и исключить искажения при работе с «белым».
«Серый ящик» — предпочтительный способ тестирования. Он лишен минусов когнитивного искажения, но в то же время мы можем подсматривать в код, чтобы убедиться в том, что ничего не упустили.
Классический «белый ящик» работает внутри кода и часто не позволяет проверить интеграцию с другими сервисами. В случае с «серым ящиком» нам будет отвечать реальная система и мы сможем увидеть результат при реальном взаимодействии. На такое тестирование может потребоваться больше времени, но оно дает наиболее полную картину о качестве ПО.
Какой метод выбрать
Главное, что объединяет все виды тестирования — это общая цель: повышение качества работы программного обеспечения.
И «черный», и «белый ящики» направлены на поиск и устранение ошибок еще до того, как приложение попадает к конечному пользователю. Зачастую, чтобы добиться конечной цели, необходимо использовать все возможные методы проверки.
Метод «белого ящика» помогает исключить важные системные ошибки; принцип «черного ящика» необходим, чтобы посмотреть на продукт глазами обычного пользователя и исключить нештатные ситуации.
Качественное тестирование продукта предполагает его проверку на всех трех уровнях пирамиды тестирования. Но на практике, особенно в случае со стартапами, к сожалению, многие начинают сразу тестировать всю систему целиком и упускают этап unit-тестов.
Самое распространенное тестирование — это end-to-end, когда пользователь либо автотест нажимает на кнопки и проверяет их работоспособность. Это классический «черный ящик». В более зрелых организациях, где процесс тестирования построен лучше, эта пирамида выравнивается и тесты строятся на всех трех уровнях. При этом важно понимать, что у каждого конкретного продукта своя специфика устройства и тестирования. Есть такие ситуации, когда выстраивать классическую пирамиду экономически невыгодно.