Чем отличается тестирование по методу белого и черного ящика?

Что такое тестирование по методу белого ящика? Что такое тестирование по методу черного ящика? Есть ли у них сходство? Чем они отличаются? Каковы технические особенности реализации каждого метода на практике? Все эти вопросы мы рассмотрим в данной статье.

Чем отличается тестирование по методу белого и черного ящика?

Сходство тестирования по методу «черный ящик» и методу «белый ящик»

Парадоксальность в очевидности. Сходство этих двух методов заключается в том, что оба имеют общую цель – повышение качества программного обеспечения.

Действительно, в разработке программного обеспечения тестирование всегда направлено поиск ошибок. Приступая к тестированию программного обеспечения, тестировщик всегда имеет в голове какой-то тезис. И в процессе тестирования, этот тезис будет либо подтвержден, либо опровергнут.

По сути, оба метода – это как две дороги, которые ведут к одному пункту назначения под названием «качество ПО». Но это не альтернативные дороги. Чтобы добраться до заданного пункта, нужно пройти обе.

Различия в методах тестирования «черный ящик» и «белый ящик»

Являясь частью одного целого (т.е. обеспечения качества), тестирование по методу черного ящика и тестирование по методу белого ящика затрагивают разные аспекты качества и представляют совершенно разный подход к тестированию программного обеспечения. Если продолжить нашу аналогию с дорогой к пункту назначения, можно сказать, что это две дороги, которые, хотя и идут в одном направлении, имеют свои изгибы, ответвления и вехи.

Иными словами, данные методы тестирования имеют огромное различие в фокусном внимании.

Фокусное внимание «черного ящика»

Тестирование по методу черного ящика проверяет функциональность системы в целом, не задумываясь над тем, как и каким образом работают шестеренки в данной системе. То есть, фокусируется на том, как приложение ведет себя во время использования. Именно поэтому данный метод обычно называют поведенческим тестированием и считают низкоуровневым методом контроля качества.

Действительно, цель «черного ящика» – улучшить внешнее качество приложения. Единственное, что здесь имеет значение, это удобство дизайна для конечного пользователя, а также то, работают ли все модули должным образом, работоспособна ли заданная функциональность.

Здесь тестировщики имеют дело с так называемыми «вводами» и «возвращенными результатами». Иными словами, они проверяют каждый «ввод» и сравнивают фактически полученные результаты с ожидаемыми. Если эти два параметра совпадают для каждого «ввода» в отношении конкретной тестируемой функциональности, работа данной функции признается корректной.

Условно говоря, при тестировании по методу черного ящика важно лишь то, что «2+2=4». Не важно, почему это так и каким образом это достигается. Важно лишь то, что данный тезис должен быть подтвержден.

Фокусное внимание «белого ящика»

Тестирование по методу белого ящика, напротив, фокусируется на внутреннем устройстве приложения. Здесь тестировщик исследует исходный код, структуру каталогов, маршрутизацию, циклы и петли обратной связи и т.д.

Тестирование «белый ящик» нацелено на повышение внутреннего качества программного обеспечения и создание продукта, который:

  • не имеет каких-либо «тупиков» и прочих антипаттернов,
  • имеет достаточный потенциал для дальнейшего развития.

Определенно, невозможно получить информацию о вышеупомянутых аспектах, проверяя только взаимодействие ввода и возвращенного результата. Поэтому данный метод тестирования, по сути, является структурным тестированием или тестированием на основе кода и считается высокоуровневым методом контроля качества.

Особенности применяемых техник тестирования

Логично предположить, что при тестировании методами черного и белого ящиков используются совершенно разные техники. При этом, данные различия предъявляют определённые требования к навыкам тестировщиков. Так, для низкоуровневого контроля качества тестировщикам не обязательно уметь программировать. Им даже не нужно знать язык программирования, который используется для разработки этого приложения. Для проведения тестирования методом белого ящика, напротив, глубокие знания в области разработки программного обеспечения и реализованных в данном приложении технологий просто необходимы.

Техники тестирования по методу черного ящика

При тестировании методом «черного ящика» тестировщики сначала изучают спецификации тестирования программного обеспечения, после чего пробуют различные вводные данные, следуя заранее заданному набору тест-кейсов. Затем они просто сообщают разработчикам о выявленных ими проблемах, не вникая в причинно-следственные связи.

Условно говоря, здесь достаточно лишь констатировать факт, что в данной системе «2+2=5» вместо положенных «2+2=4». Установить точную причину выявленных проблем с функциональностью системы – есть задача разработчиков.

Среди техник тестирования по методу черного ящика, применяемых в нашей компании по разработке программного обеспечения, наиболее распространены:

  • Анализ классов эквивалентности, при котором тестировщик группирует все возможные входные данные по классам (т.е. группам вводных данных, при которых программа возвращает результат определенного характера, без какой-либо вариативности) и проверяет фактически возвращаемый результат при взаимодействии с представителем каждого класса.

Например, при тестировании модуля расчета суммы подлежащих к уплате процентов в зависимости от срока кредитования, за класс эквивалентности мы берем все значения в одном из диапазонах сроков кредитования. Т.е., если известно, что при сроке кредитования от 180 до 360 дней ставка по кредиту составляет 10%, то для проверки правильности возвращаемых результатов достаточно ввести лишь одно значение из указанного диапазона (например, 240).

  • Анализ граничных значений, где, как следует из названия, в качестве вводных данных используются только граничные значения, как по нижней, так и по верхней границе.

Так, для приведенного выше примера следует протестировать такие значения как 179, 180, 181, 359, 360 и 361.

  • Предугадывание ошибок, где тестировщики используют свою экспертизу в определенной предметной области и пытаются имитировать действия и условия, которые могут привести к ошибке работы системы.

Для приведенного нами примера тестируемого модуля расчета суммы подлежащих к уплате процентов в зависимости от срока кредитования, вводами здесь могут быть нецелые значения, буквы и иные символы, а также ввода в виде диапазонов (например, 200-250).

  • Нефункциональное тестирование (стресс-тесты, нагрузочные тесты и т.д.), когда проверяется производительность и масштабируемость системы, ее поведение при повышенных нагрузках, безопасность системы и т. д.

Техники тестирования по методу белого ящика

Чем отличается тестирование по методу белого и черного ящика?

В процессе тестирования методом «белого ящика» тестировщики проверяют код, стремясь найти и исправить некорректные блоки. Как правило, для больших программ это происходит в форме написания автоматизированных тест-кейсов для обеспечения высокого уровня тестового покрытия. Однако, иногда используются и ручные тесты.

В нашей компании наиболее распространенными являются следующие техники тестирования по методу белого ящика:

  • Тестирование потоков управления, при котором проверяется правильность логики кода и его способность возвращать результаты надлежащим образом. Здесь производится тестирование ветвей, операторов и путей (а также альтернатив), в процессе которого проверяется и подтверждается, что каждая ветвь, оператор и путь выполняются, срабатывают, проходятся хотя бы один раз;
  • Тестирование потока данных, целью которого является поиск ошибок, ведущих к аномалиям и неправильному использованию данных и потоков данных.

Заключительный нюанс

Несмотря на то, что, говоря о методах тестирования, сначала говорится о методе «черного ящика», и только потом переходят к методу «белого ящика» (и данная статья – скорее подтверждение, нежели исключение этого паттерна), в реальной разработке последовательность применения данных методов кардинально противоположная.

Так, тестирование «черного ящика», как правило, проводится для проверки финальной сборки (как программы в целом, так и отдельного ее модуля). Это гарантирует, что взаимодействие пользователя с системой будет плавным, а реакция программы на каждое действие пользователя будет правильной и соответствующей требованиям программного обеспечения.

В свою очередь, тестирование методом белого ящика осуществляется непосредственно в процессе разработки, на завершающем этапе каждой итерации. Таким образом, ошибки кодирования могут быть обнаружены (и, соответственно, устранены) на ранней стадии разработки включительно.

Основная закономерность, которую мы определили для себя – чем лучше было проведено тестирование методом белого ящика, тем меньше ошибок будет выявлено при тестировании методом черного ящика. А следовательно, меньше доработок и исправлений.

44
Начать дискуссию