Знакомство с различными видами тестирования ПО

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

  • Введение в тестирование программного обеспечения
  • Почему необходимо тестировать программное обеспечение?
  • Жизненный цикл тестирования программного обеспечения
  • Виды тестирования программного обеспечения

Введение в тестирование ПО

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

Тестирование подразумевает под собой процессы верификации и валидации программного продукта. При этом проверяется:

  • Соответствует ли он бизнес- и техническим требованиям, на основе которых он был спроектирован и разработан
  • Работает ли он в соответствии с требованиями
  • Может ли он быть реализован с теми же характеристиками.

Теперь давайте рассмотрим причины, по которым нам необходимо проводить тестирование ПО.

Почему необходимо тестировать ПО?

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

Экономическая эффективность

Своевременное тестирование позволяет сэкономить деньги в долгосрочной перспективе. Разработка программного обеспечения состоит из множества этапов, и, если выявить ошибки на ранних стадиях, их исправление обходится гораздо дешевле.

Безопасность

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

Качество продукта

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

Удовлетворенность клиентов

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

Жизненный цикл тестирования ПО (STLC)

Жизненный цикл тестирования ПО – это последовательность различных действий, выполняемых командой тестирования для обеспечения качества продукта.

Различные фазы жизненного цикла тестирования программного обеспечения включают в себя:

  • Анализ требований – это первый этап жизненного цикла тестирования ПО. На этом этапе команда обеспечения качества (QA) анализирует требования с точки зрения того, что будет протестировано.
  • Планирование тестирования является наиболее важной фазой жизненного цикла, в ходе которой определяется вся стратегия тестирования. На данном этапе менеджер по тестированию занимается оценкой трудозатрат и стоимости всего проекта, а так же определяет его цели и объемы.
  • Разработка тест-кейсов начинается после завершения фазы планирования. Именно на этом этапе команда тестировщиков составляет подробные тест-кейсы и готовит тестовые данные. После того как тест-кейсы готовы, они рецензируются коллегами или руководителем отдела QA.
  • Настройка тестовой среды является важнейшей частью жизненного цикла. Тестовая среда – это набор программных и аппаратных средств, предназначенных для выполнения тест-кейсов. Она поддерживает выполнение тестов с помощью настроенного оборудования, программного обеспечения и сети.
  • Выполнение тестов – это процесс выполнения тест-кейсов и сравнения ожидаемых и фактических результатов с целью обнаружения дефектов (багов). Затем баги фиксируются и направляются команде разработчиков для исправления.
  • Завершение цикла тестирования включает в себя созыв совещания членов команды тестирования и оценку критериев завершения цикла на основе достигнутого тестового покрытия, качества, бизнес-целей и потраченных денег и времени.

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

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

Виды тестирования программного обеспечения

Функциональное тестирование

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

В функциональном тестировании можно выделить следующие уровни:

Модульное тестирование (Unit Testing)

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

Преимущества модульного тестирования:

  • Юнит-тестирование повышает уверенность в качестве кода.
  • Код становится более пригодным для многократного использования.
  • Разработка идет быстрее. Усилия, необходимые для поиска и устранения дефектов, обнаруженных в ходе модульного тестирования, очень малы по сравнению с усилиями, необходимыми для устранения дефектов, обнаруженных в ходе системного или приемочного тестирования.
  • Стоимость исправления дефекта, обнаруженного в ходе модульного тестирования, меньше по сравнению с дефектами, обнаруженными на более высоких уровнях.
  • Легкость отладки. Если тесты провалились, отлаживать нужно будет только последние изменения.

Интеграционное тестирование (Integration Testing)

Это уровень тестирования, при котором отдельные модули объединяются и проверяются как единое целое. Целью данного уровня тестирования является выявление неисправностей во взаимодействии между интегрированными модулями.

Подходы к интеграционному тестированию:

  • Подход Большого взрыва (Big Bang approach) – это подход к интеграционному тестированию, при котором все или большинство модулей объединяются вместе и тестируются за один раз. Такой подход применяется, когда команда тестирования получает весь код целиком.
  • Нисходящий подход (Top-Down Approach) – это подход, при котором сначала тестируются модули верхнего уровня, а затем поэтапно добавляются модули нижнего уровня. Все модули более низкого уровня симулируются заглушками с аналогичной функциональностью, затем по мере готовности заменяются реальными активными компонентами.
  • Восходящий подход (Bottom-Up Approach)  – это подход, при котором сначала тестируются модули нижнего уровня, а затем, шаг за шагом, вводятся модули верхнего уровня. Данный подход считается полезным, если все или практически все модули, разрабатываемого уровня, готовы.
  • Гибридный/сэндвич-подход (Sandwich/Hybrid Approach) – это подход к интеграционному тестированию, который представляет собой комбинацию нисходящего и восходящего подходов. Здесь целью является средний слой, в то время как драйверы заменяют верхние модули, а заглушки – нижние, до тех пор пока компоненты этих слоев не будут разработаны.

Системное тестирование (System Testing)

Выполняется на полной интегрированной системе. Цель такого тестирования – оценить соответствие системы заданным требованиям.

Выполняя системное тестирование, можно обнаружить следующие типы дефектов:

  • Неправильное использование системных ресурсов
  • Непредусмотренные комбинации пользовательских данных
  • Проблемы с совместимостью окружения
  • Непредусмотренные сценарии использования
  • Несоответствие функциональным требованиям
  • Ненадлежащее удобство использования.

Тестирование интерфейсов (Interface Testing)

Когда разрабатывается приложение, программное обеспечение или веб-сайт, то в его состав входит несколько компонентов. Этими компонентами могут быть сервер, база данных и т.д. Звено, которое обеспечивает взаимодействие между этими компонентами, называется интерфейсом.

3 фазы тестирования интерфейсов:

  1. Конфигурирование и разработка – после начала разработки интерфейса необходимо проверить его конфигурацию на соответствие требованиям.
  2. Валидация – при завершении разработки интерфейс должен быть валидирован и проверен, это также может быть сделано в ходе модульного тестирования.
  3. Сопровождение – когда мы начинаем разрабатывать интерфейс, необходимо убедиться, что мы не вносим никаких дефектов в существющий код, поэтому тестирование интерфейса является обязательным.

Регрессионное тестирование (Regression Testing)

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

Методы регрессионного тестирования:

  • Полная регрессия (Retest all) — все тест-кейсы из тестового набора выполняются повторно, чтобы убедиться в отсутствии ошибок, возникших из-за изменений в коде.
  • Выбор регрессионных тестов — выполняется не весь тестовый набор, а только тест-кейсы, относящиеся к компонентам, на которые могут повлиять изменения в коде.
  • Приоритизация тест-кейсов — тест-кейсы с высоким приоритетом выполняются в первую очередь. Наивысший приоритет устанавливается для функциональностей с большим процентом ранее обнаруженных дефектов и высоким коммерческим потенциалом, а так же для постепенно внедряемых функций с множеством вносимых изменений.

Приемочное тестирование (Acceptance Testing)

Приемочное тестирование – это уровень тестирования, при котором система проверяется на приемлемость — готовность к передаче заказчику и/ или пользователям. Цель такого тестирования – оценить соответствие системы бизнес-требованиям и требованиям пользователей и определить, готова ли она к запуску.

Типы приемочного тестирования:

  1. Бизнес-приёмочное тестирование (BAT) — проводится для оценки соответствия продукта целям и задачам бизнеса. В основном оно фокусируется на бизнес-выгодах, которые являются достаточно сложными в связи с постоянно меняющимися условиями рынка.
  2. Контрактное приёмочное тестирование (CAT) — это контракт, в котором указано, что после запуска продукта в эксплуатацию в течение заранее оговоренного периода должны быть проведены приемочные испытания, в ходе которых продукт должен успешно пройти все тесты.
  3. Эксплуатационное приёмочное тестирование (OAT) — относится к нефункциональному тестированию и проводится для оценки эксплуатационной готовности продукта. В основном оно включает в себя тестирование восстановления, совместимости, поддерживаемости, доступности технической поддержки, надежности, отказоустойчивости, локализации и т.д.
  4. Альфа-тестирование — оценка продукта в среде разработки/тестирования специализированной командой тестировщиков, обычно называемой альфа-тестерами.
  5. Бета-тестирование — оценка продукта путем его демонстрации реальным конечным пользователям, обычно называемым бета-тестерами, в реальной среде. Собирается постоянная обратная связь от пользователей, и устраняются проблемы.

Нефункциональное тестирование

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

Различные виды нефункционального тестирования включают в себя :

Тестирование документации (Documentation Testing)

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

Тестирование установки (Installation Testing)

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

Советы по тестированию установки:

  1. Установите полную версию приложения
  2. Автоматизируйте процесса тестирования
  3. Проверьте требуемое дисковое пространство при установке
  4. Автоматизируйте проверку установленных файлов
  5. Придумайте негативные сценарии для тестирования установки
  6. Протестируйте деинсталляцию приложения.

Тестирование производительности (Performance Testing)

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

Виды тестирования производительности:

  • Нагрузочное тестирование проводится для оценки поведения системы при заданной нагрузке. Этой нагрузкой может быть ожидаемое количество одновременно работающих пользователей, совершающих определенное число транзакций за интервал времени. Такой тип тестирования обычно позволяет вычислить время отклика всех самых важных бизнес-транзакций. 
  • Стресс-тестирование используется для понимания пределов пропускной способности системы. Оно проводится для определения надёжности системы во время экстремальных нагрузок, превышающих ожидаемый максимум.
  • Тестирование на выносливость – тип тестирования производительности, проводимый для оценки поведения системы при постоянной значительной нагрузке. Цель тестирования состоит в том, чтобы убедиться, что приложение способно выдержать длительную нагрузку без какого-либо ухудшения времени отклика.
  • Spike Testing – это тип тестирования производительности, который проводится для оценки поведения системы при внезапном и значительном скачке нагрузки.

Тестирование безопасности (Security Testing)

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

Направления тестирования безопасности:

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

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

Перевод статьи «Get Started With The Different Types Of Software Testing».

1 комментарий к “Знакомство с различными видами тестирования ПО”

  1. Пингбэк: Большой учебник по тестированию

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *