Что такое метод белого ящика?
Тестирование методом белого ящика направлено на то, чтобы найти проблемы, ошибки и узкие места в коде. Ещё его называют «открытым тестированием», что указывает на прозрачность данного процесса. То есть в этом случае тестировщик имеет доступ к исходному коду. Поэтому пишет свои сценарии для теста с учетом механики продукта. Это позволяет глубоко исследовать код и добраться туда, где не ступала нога человека.
Благодаря методу белого ящика можно выполнить следующие задачи:
Найти неоптимизированные и сломанные участки кода.
Обнаружить прорехи в коде, исправление которых позволит увеличить уровень безопасности.
Оптимизировать рабочие процессы и улучшить сценарии ввода.
Сделать лучше условные процессы.
Выявить неправильно функционирующие объекты.
Найти информацию, которая отображается некорректно.
Все это позволит улучшить качество кода продукта, повысить его надежность и безопасность, а также привести в соответствие с требованиями.
Чтобы реализовать данный метод проверки, нужно выполнить следующие шаги:
Разработать тест–кейсы и план работ по проведению тестирования.
Тест–кейсы содержат полный путь, по которому проходит проверка кода. Этот алгоритм описывает то, какие шаги необходимо выполнить, чтобы подготовиться к тесту, провести его, а также какие результаты от этого ожидаются.
План работ содержит информацию о том, на каких этапах разработки будет проводиться проверка продукта, сколько это займет времени, какое количество людей для этого потребуется и прочие нюансы.
Это позволит тестировщикам грамотно провести проверку, найти баги, ошибки, узкие места и возможности для развития и при этом иметь возможность измерить эффективность своей работы.
Изучение кода во время проведения тест–кейсов.
Тестировщику важно знать языки программирования, чтобы уметь читать код. Особенно, если подразумевается ручное тестирование в рамках метода белого ящика. Здесь требуется глубокое погружение в код, поэтому тестировщик должен быть опытным. Разумеется, существуют различные инструменты автоматизации, которые помогут в процессе, но и их нужно знать, чтобы эффективно использовать.
Проверка внутренних программ.
То есть здесь проверяется работоспособность кода, компонентов и логики поведения продукта. Способен ли он выполнять то, что от него требуют.
Тестирование операторов, таких как циклы, для проверки их эффективности и точности для вводимых данных.
Исполняемые операторы исходного кода реализуются хотя бы единожды. Их проверка позволит посчитать, какое количество раз это произошло. Это дает возможность охватить все допустимые пути и строки кода.
На последнем этапе QA–специалисты проводят тестирование безопасности, чтобы проверить возможные уязвимости в системе.
Ещё один, не менее важный этап в тестировании, это поиск уязвимостей. Качество кода становится выше, если удается обнаружить и устранить прорехи. Это позволяет защитить программный продукт и его пользователей от злоумышленников.
Метод белого ящика подразумевает применение как ручного, так и автоматизированного тестирования. Причем последний вид будет в приоритете, так как позволяет сократить процесс и избежать влияния человеческого фактора.
Проверка программного продукта методом белого ящика осуществляется на разных этапах тестирования. Это и модульное тестирование, и интеграционное, и системное, но в большей степени на этапе юнит–проверки.
Чем метод белого ящика отличается от метода черного ящика и серого ящика?
При проверке программного продукта применяются различные методы и технологии. Согласно одному из принципов тестирования ПО, невозможно достичь исчерпывающих результатов. Это происходит по нескольким причинам.
Во–первых, потому что тестирование является затратным и трудоемким процессом. Особенно для крупных и сложных проектов. Даже при наличии инструментов автоматизации, за которые, к слову, тоже нужно платить, и не так уж мало, это все равно кропотливо.
Во–вторых, здесь вступает в силу принцип Парето. Если это переложить на тестирование, то получается, что 80% ошибок находятся в 20% кода. Также это распространяется на поведение пользователей. То есть 80% юзеров используют лишь 20% программного продукта. Поэтому, чтобы качественно исследовать код, достаточно проверить лишь 20%, чтобы найти все критические ошибки и узкие места.
Но даже при таком раскладе тестировщики используют несколько подходов и инструментов. Это позволяет найти скрытые баги и узкие места в том случае, если это не произошло при применении одного из методов. Ниже разберемся, какие есть различия между методами белого, черного и серого ящика в тестировании.
Черный ящик.
Данный тип проверки проводится с точки зрения пользователя. То есть у тестировщика нет доступа к исходному коду, он не знает систему и изучает ее возможности вслепую. Поэтому рассматриваются только вводимые данные и полученные в итоге результаты.
Часто метод черного ящика используют при тестировании интерфейса, когда тестировщик примеряет на себя роль юзера. На этапе приемочных испытаний в проверке могут принимать участие реальные пользователи. Они не имеют специфических знаний и навыков, поэтому результаты их проверки получаются самыми честными.
Также существуют различные инструменты автоматизации тестов, которые имитируют поведение пользователей и проводят проверку по самым часто повторяемым сценариям.
Черный ящик рассматривает программный продукт лишь с одной из сторон и не всегда может обнаружить скрытые проблемы. Поэтому тестировщику понадобится больше времени на то, чтобы найти причину возникновения бага или ошибки.
Однако данный метод тестирования позволяет обеспечить максимальное покрытие тестами, а также имеет достаточно высокую скорость тестов, так как по сути копает по поверхности.
Серый ящик.
Это средний вариант между белым и черным, когда тестировщик имеет доступ к настройкам продукта и частично видит код, но при этом проводит проверку через программный интерфейс.
Во время проверки QA–специалисты полагаются в первую очередь на спецификации по функционалу и определение интерфейса, а не исходный код. Также в этом случае проверка осуществляется не с точки зрения дизайнера или разработчика, а с точки зрения пользователя, как и в черном методе.
Тестировщик может создать отличные от белого и черного сценарии для проверки продукта, но в некоторых ситуациях они могут быть излишними, так как уже были проведены при применении других подходов.
Кроме того, здесь вступает в силу принцип о том, что невозможно достичь исчерпывающего тестирования. Поэтому провести проверку всех доступных входных потоков нереально и не нужно, потому что это будет слишком трудозатратно.
Однако метод серого ящика лишен когнитивных искажений, а частичный доступ к коду позволяет сверять, что ничего важного не пропущено.
Белый ящик.
Данный подход к проверке продукта дает возможность провести более тщательное и результативное тестирование.
Сам тестировщик в силу своего знания языков программирования может предоставить подробный и четкий отчет о результатах проверки. Поэтому у разработчиков не возникнет сложностей в том, чтобы исправить ошибку.
Кроме того, в процессе проверки тестировщик имеет возможность доработать логику и архитектуру программного продукта, если у него есть на это полномочия и время.
Однако стоит помнить, что при применении данного подхода, тестировщик подвержен когнитивному искажению. Он хорошо знает систему, но при этом уверен, что ее поведение не выходит за рамки заданного алгоритма.
Также метод белого ящика не дает возможности проверить совместимость программного продукта с другими сервисами.
Все три метода проверки подразумевают поиск ошибок и уязвимостей с целью улучшения кода. Это позволит улучшить качество продукта и сделать его более безопасным. В идеале использовать все три подхода, если это позволяет время и средства, но это далеко от реальности в среднем и малом бизнесе. Поэтому выбор метода стоит основывать на специфике проекта и имеющихся возможностях команды разработки.
Какие существуют типы тестирования методом белого ящика?
Типов проверки программного продукта существует немало, но не в каждом из них применяется белый ящик. Рассмотрим те, где данный метод используется обычно, и узнаем для чего.
Модульное (unit)-тестирование.
Позволяет проверить отдельные компоненты кода. Часто при гибком методе разработки создание программы происходит в рамках коротких итераций. На протяжении каждой из них пишется функционал отдельно взятого модуля. Это позволяет тут же проверять код на наличие ошибок, узких мест и уязвимостей. В итоге, когда наступает этап сборки, каждый отдельно взятый модуль уже проверен, ошибки устранены, и поэтому возрастает общее качество продукта.
Если бы проверка осуществлялась после полного завершения цикла разработки, то это было бы более трудоемко и затратно.
Применение метода белого ящика на этапе модульного тестирования позволяет контролировать качество кода и изучать его достаточно глубоко, чтобы находить скрытые проблемы до того, как они станут критическими.
Следующим этапом проверки, где применяется метод белого ящика, является интеграционное тестирование. В этом случае происходит объединение модулей в группы. Это позволяет не только проверить чистоту и надежность кода, но и корректность взаимодействия между компонентами программы.
Данный шаг проверки наступает после модульного тестирования. На предыдущем этапе уже выявлены некоторые ошибки и узкие места, поэтому их остается не так много. Основные проблемы возникают именно в процессе взаимодействия модулей. После завершения данного типа проверки, проект снова отправляется в команду разработчиков на доработку.
Регрессионное тестирование.
Этот этап наступает уже после того, как в код были внесены изменения. Здесь задача разработчика заключается в том, чтобы проверить, не повлияли ли эти изменения на текущий функционал программы. Возможно, потребуется откат до предыдущей рабочей версии продукта.
Метод белого ящика в этом случае опять же позволяет углубиться в код и исследовать работу системы максимально подробно.
Какие инструменты используются для применения метода белого ящика?
Тестирование проводится с применением различных инструментов, даже если оно ручное. Это неотъемлемая часть процесса, которая делает работу тестировщиков значительно проще. Рассмотрим несколько инструментов для проведения тестирования по методу белого ящика.
EclEmma.
Является бесплатной программой для покрытия кода, написанного на языке Java. Она доступна по публичной лицензии Eclipse. Инструмент переносит анализ покрытия кода в Eclipse workbench. Не нуждается в дополнительных модификациях и настройках. Совместим со многими программами и фреймворками, используемыми для сборки кода и обеспечения качества программного продукта.
NUnit.
Является открытой средой для проведения юнит–тестирования приложений для.NET. Фреймворк используют для пакетного проведения тестов. Обычно используют в тех случаях, когда больше подходит простой раннер.
PyUnit.
Фреймворк для автоматизации тестирования на языке Python. Очень пригодится в том случае, если осуществляется переход с языка Java на язык Python. PyUnit снабжен всеми необходимыми инструментами тестирования, например, такими, как фикстусы, раннеры, методы для выполнения тестов и другие.
HtmlUnit.
Ещё один инструмент автоматизации тестирования, но в этот раз для веб–сайтов, также его используют для получения данных. Имеет открытый исходный код, написанный на языке Java, что оставляет пространство для маневров тестировщикам. По сути, является библиотекой с собственным API. Она дает возможность открывать ссылки, делать заполнение форм, осуществлять нажатие кнопок и выполнять множество других действий автоматически без участия человека. Поддерживает и другие сложные библиотеки, что позволяет работать с нестандартными продуктами.
CppUnit.
Фреймворк для автоматизации модульного тестирования. Используется для программного обеспечения, написанного на языке С++. Он выполняет проверку в наборах. Выходные данные результатов тестирования проходят через фильтр, который дает возможность выводить XML–данные, имеющие совместимость с системами отчетности непрерывной интеграции.
Инструменты автоматизации являются частью технологического стека и обычно остаются неизменными, но в некоторых случаях набор может меняться в зависимости от особенностей программного продукта.
Важно, чтобы тестировщик не только обладал необходимыми навыками для управления средствами автоматизации, но и хорошо знал различные языки программирования. Только в совокупности это даст эффективный результат.