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

Блог

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

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

Функциональное тестирование (Functional testing)

Собственно, функциональное тестирование — это проверка способности ПО решать задачи, необходимые пользователям. Функциональные тесты могут проводиться на всех уровнях тестирования (компонентном, интеграционном, системном, приёмочном).  При этом, задачи, которые выполняет ПО, определяются функциональными требованиями.

 

Функциональные требования включают:

  • Функциональную пригодность;

  • Точность;

  • Способность к взаимодействию;

  • Соответствие стандартам и правилам;

  • Защищенность.

 

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

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

Это тоже функциональный вид тестирования, который направлен на проверку безопасности системы, а также на анализ рисков, связанных с различными видами атак. Общая стратегия безопасности основывается на трёх принципах — Конфиденциальности, Целостности и Доступности.

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

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

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

Тестирование взаимодействия (Interoperability Testing).

Включает в себя Тестирование Совместимости (Compatibility Testing) и Интеграционное Тестирование (Integration Testing). Тестирование взаимодействия проверяет способности приложения работать с одним и более компонентами или системами. ПО с хорошими показателями взаимодействия будет легко интегрироваться с другими системами, не требуя серьёзных модификаций.

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

Нефункциональное тестирование направлено на проверку реализуемости нефункциональных требований, которые включают:

  • Производительность;

  • Удобство пользования;

  • Портируемость (установки);

  • Надежность (отказ/восстановление).

 

Нефункциональное тестирование не проверяет систему на выполнение функций, которые хочет заказчик. Зато оно позволяет контролировать глобальные свойства:

  • работоспособность системы под различными нагрузками;

  • требования к масштабируемости приложения;

  • адаптация приложения для различных платформ;

  • гарантия продолжения работы приложения даже в случаях непредвиденных ситуаций.

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

Это автоматизированное тестирование, имитирующее работу определенного количества пользователей на ресурсе.
У него также есть свои виды:

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

  • Стрессовое тестирование. Проверка, насколько приложение и сама система в целом, сохраняют работоспособность в условиях стресса.

  • Объемное тестирование. Проверка производительности при увеличении объёмов данных в базе.

  • Тестирование Стабильности/Надёжности. Проверка работоспособности приложения при длительном (многочасовом) тестировании при среднем уровнем нагрузки. На первое место выходит важность проверки — отсутствие утечек памяти, перезапусков серверов под нагрузкой и прочие аспекты, влияющие непосредственно на стабильную работу ПО.

Тестирование Установки (Installation testing)

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

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

Тестирование Удобства Пользования (Usability Testing)

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

Тестирование на Отказ и Восстановление (Failover and Recovery Testing) 

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

Конфигурационное Тестирование (Configuration Testing)

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

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

В зависимости от цели испытания все виды тестирования можно разделить на 3 типа: функциональные виды, нефункциональные и связанные с изменениями.

Связанные с изменениями виды тестирования

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

Дымовое тестирование (Smoke Testing)

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

Это тестирование выполняется  перед Регрессионным Тестированием, соответственно, охватывает меньше функционала при проверке.

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

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

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

Заключение

В этой статье мы рассмотрели основные типы тестирования. Для удобства и запоминания сохраняйте себе эту таблицу:

Виды

Классификация

Преимущества

Недостатки

Функциональные

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

Возможность имитации фактической работы системы.

Высокая вероятность избыточных тестов.

Есть шанс упустить логические ошибки в ПО.

Тестирование безопасности

Уверенность, что шансы повреждения системы внешними воздействиями — минимальна.

Независимо от количества тестов невозможно быть уверенным, что система полностью защищена от любых атак.

Тестирование взаимодействия

Включает в себя совместимость и интеграцию, облегчает работу по внедрению ПО.

Высокие шансы не охватить все виды интеграции и совместимости.

 Необходимость постоянного учета обновления/выхода из актуализации устройств.

Нефункциональные

Тестирование производительности

Автоматизированное тестирование, что облегчает ручное тестирование и экономит время.

Защищенность ПО в виду готовности к ситуациям, ведущим к нагрузкам на систему.

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

Считается одним из самых сложных тестов, требует много времени на обучение.

Тестирование установки

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

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

Тестирование удобства пользования

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

Не всегда есть возможность провести тестирование при «‎сером/черном ящике». Высокие шансы потери сценариев.

Тестирование на отказ и восстановление

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

Невозможность предусмотреть все ситуации.

Конфигурационное тестирование

Использование матрицы покрытия.

Определение оптимальной конфигурации оборудования, проверка объекта тестирования на совместимость.

Низкие расходы при наличии автоматизации.

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

Связанные с изменениями

Дымовое тестирование

Сравнительно низкие показатели по затраченному на тестирование времени.

Приоритет на гарантию работы основного функционала.

Поверхностное тестирование. Намеренный пропуск части функционала при охвате.

Регрессионное тестирование

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

Ускорение ре-тестов.

Гарантия обнаружения дефектов на ранних стадиях разработки.

Возросшее количество времени и активности на проекте.

Потеря концентрации при постоянном ре-тестировании.