Типы тестирования

Есть много способов тестирования, по разным оценкам в среднем их больше 30.

Каждый из видов тестирования направлен на проверку различных аспектов программного обеспечения. Условно их можно разделить на шесть групп


1. По характеру сценариев

Сценарий в тестировании — это описание того, как пользователь будет взаимодействовать с готовым продуктом. 

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

Тестирование негативных сценариев проверяет, как программа ведет себя в необычных или некорректных ситуациях.


2. По критериям запуска программы или кода

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

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

Динамическое тестирование — это вид проверки программного обеспечения, который выполняется во время работы программы.


3. По степени автоматизации тестирования

Ручное тестирование — это проверка программного обеспечения вручную, без использования автоматизированных инструментов. Тестировщик взаимодействует с программой как обычный пользователь.

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


4. По объектам тестирования

Функциональное тестирование проверяет соответствие программы или системы заранее определенным функциональным требованиям и ожиданиям. Основная цель функционального тестирования — убедиться, что программа выполняет свои функции и операции согласно спецификациям, а также работает правильно и без сбоев.

Функциональное тестирование делится на подвиды:


  • Unit-тестирование (также модульное тестирование) — проводится во время создания исходного кода. На этом этапе тестируются отдельные компоненты приложения. Тестировщики пишут тесты, чтобы убедиться, что каждый компонент будущей программы работоспособен и дает правильные результаты при различных входных данных.
  • Интеграционное тестирование. На следующем этапе тестируется то, как компоненты будущего приложения взаимодействуют между собой.
  • Системное тестирование (End-to-end тестирование). На этом этапе специалисты тестируют все компоненты программы как единое приложение. Тестировщики проверяют, что продукт корректно обрабатывает различные сценарии и ситуации.
  • Приемочное тестирование. На последнем этапе продукт тестирует уже клиент или заказчик. Они проверяют, соответствует ли проект их ожиданиям и требованиям. А еще убеждаются, что программа дает правильные результаты и работает без ошибок.


Нефункциональное тестирование проверяет нефункциональные аспекты программы — производительность, безопасность, надежность, масштабируемость и совместимость. Основная цель нефункционального тестирования — убедиться, что программа не только выполняет свои функции, но также соответствует требованиям к качеству, производительности и безопасности.

Нефункциональное тестирование делится на подвиды:


  • Нагрузочное тестирование — для проверки производительности приложения под нагрузкой. Во время теста программа подвергается нагрузке: тестировщик, например, увеличивает число пользователей или операций и проверяет, как она будет работать.
  • Тестирование на проникновение — для проверки уровня безопасности. Этот вид тестирования проводится, чтобы узнать, насколько безопасна программа или веб-сайт от потенциальных кибератак и несанкционированного доступа. Тестировщики, как настоящие хакеры, используют различные методы, чтобы проверить защиту программы и предотвратить возможные угрозы для безопасности данных.
  • Тестирование совместимости. На этом этапе тестировщики проверяют работу программы на различных платформах, устройствах и браузерах, чтобы убедиться в их совместимости.
  • Стресс-тестирование — этот вид тестирования помогает выявить уязвимости и слабые места в системе, которые могут проявиться при больших нагрузках.
  • Тестирование на отказоустойчивость — помогает удостовериться, что приложение может успешно справляться с различными неполадками, такими как сбои серверов, потеря связи или другие неблагоприятные события, и продолжать функционировать нормально без значительных нарушений или потери данных.
  • Тестирование интерфейса пользователя — подразумевает проверку удобства, доступности и правильности работы пользовательского интерфейса программы.
  • Тестирование на восстановление. В ходе этого тестирования создаются различные сценарии отказов: отключение серверов или потеря связи, чтобы убедиться, что приложение может быстро и корректно восстановиться и продолжить работу без значительных проблем.


5. По степени знания системы

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

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

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

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

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


6. По времени проведения тестирования

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

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

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

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

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