Тестирование ПО: разбираемся в видах и этапах

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

Источник: https://process.filestackapi.com/resize=fit:clip,width:1440,height:1000/quality=v:79/compress/cache=expiry:604800/T4W62ZGpR62cVDoFPB2O
Источник: https://process.filestackapi.com/resize=fit:clip,width:1440,height:1000/quality=v:79/compress/cache=expiry:604800/T4W62ZGpR62cVDoFPB2O

Основные виды тестирования

В зависимости от запуска кода можно выделить:

  • Статическое тестирование, которое проводится без фактического выполнения программного кода.
  • Динамическое тестирование, которое невозможно без запуска программного кода приложения.

По доступу к коду выделяют:

  • Белый ящик, при котором используется доступ к исходному коду.
  • Чёрный ящик, когда не требуется доступ к исходному коду.

В зависимости от уровня тестирования применяют следующие подходы:

  • Модульное тестирование, которое проводится над отдельными компонентами системы.
  • Интеграционное тестирование, направленное на проверку взаимодействия нескольких компонентов или систем.
  • Системное тестирование, оценивающее соответствие готовой системы функциональным и нефункциональным требованиям.
  • Приёмочное тестирование (UAT), которое выполняется заказчиком.

В зависимости от степени автоматизации можно выделить:

  • Ручное тестирование.
  • Автоматизированное тестирование.
Источник: https://cdn.otus.ru/media/public/63/3c/1-1801-633cf6.jpg
Источник: https://cdn.otus.ru/media/public/63/3c/1-1801-633cf6.jpg

По целям тестирования можно выделить функциональное и нефункциональное тестирование. К нефункциональному тестированию относятся следующие типы:

  • Нагрузочное тестирование, направленное на проверку поведения системы при плановых повышенных и пиковых нагрузках.
  • Стрессовое тестирование, которое проверяет работу системы в экстремальных условиях.
  • Тестирование удобства использования (usability testing).
  • Тестирование безопасности.
  • Регрессионное тестирование — повторная проверка ранее протестированной функциональности после внесения изменений в код приложения с целью удостовериться, что эти изменения не привнесли ошибок в области, которые не подверглись изменениям.

Относительно тестовых стендов можно выделить:

  • Среду разработки (Dev), за которую отвечают разработчики, в которой они пишут код, проводят отладку и исправляют ошибки.
  • Среду тестирования (Test), в которой работают специалисты по тестированию.
  • Интеграционную среду (Integration Env), где проводится тестирование взаимодействия различных систем.
  • Предпродакшн среду (Preprod Env), которая максимально приближена к рабочей среде продакшена. Здесь проводится окончательное тестирование функционала.
  • Продакшн среду (Prod Env), где работают конечные пользователи.

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

  1. Анализ требований – этот этап помогает выявить возможные проблемы, которые могут возникнуть в процессе тестирования. Также здесь можно выявить несоответствия или недостаточно ясные требования, которые требуют дополнительного уточнения у разработчиков или заказчика.
  2. Планирование тестирования – на этом этапе определяются методы тестирования, ресурсы, и устанавливаются сроки.
  3. Тест-дизайн – включает разработку тест-кейсов. Тест-кейс представляет собой последовательность действий, необходимых для проверки работы системы. В нем могут быть указаны следующие атрибуты: ID, название, предусловия, шаги, ожидаемый результат, фактический результат, статус.
  4. Подготовка к тестированию – этот этап включает в себя создание тестового окружения, подготовку тестовых данных, написание автотестов, развертывание приложения на тестовом стенде.
  5. Выполнение тестирования – в начале производится интеграционное или системное тестирование, в зависимости от особенностей процесса тестирования в конкретной компании. Модульное тестирование обычно проводится разработчиком при написании кода с использованием юнит-тестов.
  6. Формирование результатов – на этом этапе готовится отчет о проведенном тестировании, который содержит информацию о результатах выполнения тест-кейсов и выявленных дефектах.

Таким образом, процесс тестирования - достаточно трудоемкий и разнообразный процесс.