Что такое функциональное тестирование? Типы и примеры (полное руководство)
Что такое функциональное тестирование?
Функциональное тестирование — это вид тестирования программного обеспечения, при котором основные функциональные возможности приложения проверяются на соответствие заранее определенному набору спецификаций. Используя методы тестирования «черного ящика», функциональные тесты измеряют, возвращает ли заданный входной сигнал желаемый выходной сигнал, независимо от любых других деталей. Результаты являются двоичными: тесты проходят или не проходят.
Почему важно функциональное тестирование?
Функциональное тестирование важно, потому что без него вы не сможете точно понять, функционирует ли ваше приложение так, как задумано. Приложение может пройти нефункциональные тесты и в остальном работать хорошо, но если оно не обеспечивает конечного пользователя ключевыми ожидаемыми результатами, приложение нельзя считать рабочим.
В чем разница между функциональным и нефункциональным тестированием?
Функциональные тесты проверяют, выполняются ли заданные функциональные требования, в то время как нефункциональные тесты могут использоваться для проверки нефункциональных вещей, таких как производительность, безопасность, масштабируемость или качество приложения. Другими словами, функциональное тестирование проверяет, работают ли ключевые функции, а нефункциональные тесты больше интересуются тем, как происходят эти операции.
Примеры типов функциональных тестов
Существует множество типов функциональных тестов, которые вы можете захотеть выполнить в процессе тестирования вашего приложения.
Несколько наиболее распространенных из них включают:
Unit тесты
Юнит-тестирование разбивает желаемый результат на отдельные блоки, позволяя вам проверить, приводит ли небольшое количество входных данных (иногда всего один) к желаемому результату. Юнит-тесты, как правило, являются одними из самых маленьких тестов, которые можно быстро написать и выполнить, поскольку каждый из них предназначен для проверки только одного участка кода (функции, метода, объекта и т.д.) и проверки его функциональности.
Smoke тесты (дымовые тестирование)
Дымовое тестирование проводится для проверки того, что наиболее важные части приложения работают так, как задумано. Это первый проход в процессе тестирования, и он не является исчерпывающим. Дымовые тесты гарантируют, что приложение работает на базовом уровне. Если это не так, нет необходимости переходить к более детальному тестированию, и приложение может быть возвращено команде разработчиков для проверки.
Санитарное тестирование
Тестирование на пригодность к использованию в некотором роде является двоюродным братом смок тестов, поскольку оно также предназначено для проверки базовой функциональности и потенциально позволяет избежать детального тестирования неработающего программного обеспечения. Разница заключается в том, что тестирование на пригодность проводится на более поздних этапах процесса, чтобы проверить, оказало ли новое изменение кода желаемый эффект. Это «проверка на вменяемость» конкретного изменения, чтобы определить, работает ли новый код так, как ожидалось.
Интеграционное тестирование
Интеграционное тестирование определяет, правильно ли функционируют комбинации отдельных программных модулей вместе. Отдельные модули могут уже пройти независимые тесты, но когда их успешная работа зависит от других модулей, такое тестирование необходимо, чтобы убедиться, что все части работают вместе, как ожидается.
Регрессионное тестирование
Регрессионное тестирование позволяет убедиться, что добавление нового кода не нарушает существующие функциональные возможности. Другими словами, не привел ли новый код к «регрессу» или откату качества приложения? Регрессионные тесты нацелены на внесенные изменения и гарантируют, что приложение в целом остается стабильным и функционирует так, как ожидается.
Приемочное пользовательское тестирование (UAT)/Бета-тестирование
Тестирование юзабилити подразумевает использование приложения ограниченной группой реальных пользователей в производственной среде. Отзывы этих реальных пользователей, которые не имеют опыта работы с приложением и могут обнаружить критические ошибки, о которых не знали внутренние команды, используются для внесения дальнейших изменений в приложение перед полным запуском.
Тестирование UI/UX
UI/UX тестирование оценивает графический пользовательский интерфейс приложения. Проверяется производительность компонентов пользовательского интерфейса, таких как меню, кнопки, текстовые поля и т.д., чтобы убедиться, что пользовательский интерфейс идеально подходит для пользователей приложения. Тестирование UI/UX также известно как визуальное тестирование и может быть ручным или автоматизированным.
Другие классификации функционального тестирования включают тестирование «черного ящика», тестирование «белого ящика», тестирование компонентов, тестирование API, тестирование системы и производственное тестирование.
Как проводить функциональное тестирование
Суть функционального тестирования включает в себя три этапа:
- Определите желаемые входные значения теста
- Выполнить тесты
- Оценить полученные выходные значения тестов
По сути, когда вы выполняли задачу с вводом данных (например, вводили адрес электронной почты в текстовое поле и нажимали кнопку отправки), генерировало ли ваше приложение ожидаемый результат (например, пользователь был подписан и отображалась страница благодарности)?
Мы можем понять это с помощью небольшого примера.
Пример функционального тестирования
Давайте начнем с простого приложения: калькулятора.
Чтобы создать набор функциональных тестов, вам потребуется:
- Оценить все возможные входные данные — например, числа и математические символы — и разработать утверждения для проверки их функциональности
- Выполнение тестов (автоматизированное или ручное).
- Убедитесь, что генерируются желаемые выходные данные — например: каждая математическая функция работает так, как задумано, конечный результат выдается правильно во всех случаях, история формул отображается точно и т.д.
Техники функционального тестирования
Существует множество методов функционального тестирования, которые вы можете использовать для разработки набора тестов:
- Тесты граничных значений оценивают, что произойдет, если входные данные будут получены вне установленных пределов — например, пользователь введет слишком большое число (если установлен предел) или попытается ввести нечисловой ввод.
- Тесты, основанные на принятии решений, проверяют результаты после того, как пользователь решит предпринять какое-либо действие, например, очистить историю.
- Пользовательские тесты оценивают, как компоненты работают вместе в приложении — если история калькулятора хранится в облаке, такой тест проверит, что это происходит успешно.
- Специальные тесты могут быть проведены в конце, чтобы попытаться обнаружить ошибки, которые не были выявлены другими методами, пытаясь сломать приложение и проверить его реакцию.
Другие распространенные методы функционального тестирования включают тестирование эквивалентности, тестирование альтернативного потока, позитивное тестирование и негативное тестирование.
Автоматизированное функциональное тестирование в сравнении с ручным функциональным тестированием
Ручное функциональное тестирование требует от разработчика или инженера по тестированию разработки, создания и выполнения каждого теста вручную. Этот метод является гибким и может быть эффективным при наличии подходящей команды. Однако по мере усложнения программного обеспечения и сокращения сроков выпуска релизов стратегия чисто ручного тестирования будет сталкиваться с трудностями в обеспечении большого тестового покрытия.
Автоматизированное функциональное тестирование автоматизирует многие части процесса тестирования, позволяя тестам выполняться непрерывно без участия человека — и с меньшей вероятностью человеческой ошибки. Тесты по-прежнему должны разрабатываться и оцениваться людьми, но последние усовершенствования в области искусственного интеллекта означают, что при наличии соответствующего инструмента все большая часть нагрузки может быть выполнена автономно.
Как использовать автоматизированное визуальное тестирование для функциональных тестов
Одним из способов автоматизации функциональных тестов является автоматизированное визуальное тестирование. Автоматизированное визуальное тестирование использует Visual AI для просмотра программного обеспечения так же, как это делает человек, и может автоматически выделять любые неожиданные различия с высокой степенью точности.
Визуальное тестирование позволяет тестировать визуальные ошибки, которые в противном случае крайне сложно обнаружить с помощью традиционных инструментов функционального тестирования. Например, если в результате несвязанного изменения кнопка «отправить» сместилась в крайний правый угол страницы, и пользователь больше не может нажать на нее, но технически она все еще находится на странице и использует правильный идентификатор, то она пройдет традиционное функциональное тестирование. Визуальное тестирование позволит выявить эту ошибку и убедиться, что функциональность не нарушена визуальной регрессией.
Как выбрать инструмент для автоматизированного тестирования?
Вот несколько ключевых моментов, которые следует учитывать при выборе инструмента автоматизированного тестирования:
- Простота использования: Легко ли использовать его существующей команде QA или легко нанять сотрудников? Требует ли он длительного обучения или его можно быстро освоить?
- Гибкость: Можно ли его использовать на разных платформах? Может ли он легко интегрироваться с вашей текущей средой тестирования, и позволяет ли он вам свободно менять среду в будущем?
- Возможность повторного использования/помощь ИИ: Насколько легко повторно использовать тесты, особенно при изменении пользовательского интерфейса? Есть ли значимый искусственный интеллект, который может помочь вам тестировать более эффективно, особенно в масштабе, который вам необходим?
- Поддержка: Какой уровень поддержки клиентов вам необходим, и насколько легко вы можете получить ее от поставщика вашего инструмента?
Инструменты автоматизированного тестирования могут быть платными или с открытым исходным кодом. Некоторые популярные инструменты с открытым исходным кодом включают Selenium для веб-тестирования и Appium для мобильного тестирования.