Тестирование программного обеспечения — виды, процесс и методы
Программное обеспечение присутствует во всех сферах деятельности. Банковская система, медицина, транспортная логистика зависят от работы ПО. Поэтому тестирование – часть процесса программирования и обслуживания. Оно находит и устраняет дефекты.
Сравнение режимов: ручного и в автоматического
Ручное предполагает выполнение тестовых сценариев вручную. Для этого обязательно участие тестировщика. Этот способ гибкий и адаптирующийся. Опытный IT-работник использует навыки для выявления проблем. Ручная детально и тщательно изучает ПО, находя потенциальные дефекты и несоответствия требовани ям.
Недостатки:
- Процесс долгий.
- Требует больших затрат времени и ресурсов.
- Нельзя исключать человеческий фактор.
Автоматический основан на использовании специальных инструментов и скриптов для выполнения тестовых сценариев. Это снижает время и затраты. Отсутствует человеческий фактор ошибки. Выбор между видами зависит от конкретной ситуации. В большинстве случаев задействуют оба варианта.
Тесты
Ниже рассмотрим разновидности способов.
Анализ производительности
Его цель – определение и оценка производительности или отдельных компонентов. Это выявляет возможные проблемы. Также предотвращает появление баги в ПО. В данной группе есть несколько подвидов:
- Нагрузочные тесты. Исследуют, как система ведет себя при высоких нагрузках или большом количестве одновременных запросов.
- Тестирование масштабируемости. Определяет, насколько ПО умеет поддерживать увеличение нагрузки. Например, быстродействие при увеличении числа пользователей или обработке большого объема данных.
Есть тестирование стабильности. Проверяет поведение в разных условиях. Например, при нестабильной сети или периодических нагрузках.
Сквозные
Проводятся для проверки целостности и корректности приложения. Отличается от модульных или интеграционных тестов. Сквозные – комплексные проверки. Выполняются в реальных условиях использования приложения. Благодаря этому, выявляют ошибки, проявляющиеся только при контакте с другими компонентами. Проводится на всех уровнях: пользовательский интерфейс, интеграция с внешними системами и др.
Smoke-тестирование
Smoke-тестирование – оно же пробное или предварительное. Цель – проверка базовой функциональности. Проводится перед основной диагностикой. Цель – проверить, работает ли корректно основной функционал, и не возникают ли критические сбои. Осуществляется на ранних стадиях программирования. Подходит для быстрой оценки качества продукта. Smoke-тестирование часто выполняется автоматически. Для этого используют специальных инструменты или тестовые фреймворки. Это ускоряет процесс и повышает его надежность. Результаты представляют в виде отчетов. Так люди увидят, какие функции прошли успешно, а какие требуют исправлений. Выбор тестовых случаев для smoke-тестирования зависит от вида ПО. Обнаружит фундаментальные баги на ранних стадиях конструирования.
Функциональные
Направлены на проверку соответствия функциональных требований предписанному сценарию. Цель – убедиться в корректности функций продукта. Узнают, отвечают ли они ожиданиям разработчиков. Используется вариант, основанный на входных данных и ожидаемых результатах. Найденные расхождения считаются дефектом. Его предстоит исправить. В этой категории есть несколько подвидов:
- исследование положительных и отрицательных сценариев;
- изучение граничных значений;
- аудит производительности;
- на совместимость.
Все направлены на проверку конкретного критерия функциональности.
Модульные
Проверяют корректность отдельных модулей. Это отдельная часть с функциональностью, взаимодействующей с другими компонентами. В процессе диагностируют каждый модуль. Основная цель – проверить наличие дефектов в самых маленьких единицах программы. Проводится на уровне исходного кода модуля. Это выявляет недочеты на этапе придумывания ПО.
Плюсы:
- раннее выявление дефектов;
- быстрая локализация уязвимых мест;
- упрощение отладки.
Удается по высить надежность кода и облегчить процесс создания.
Интеграционные
Выявляют неисправности ПО в условиях контакта с другими модулями или компонентами. Цель – проверка корректности работы в контексте ее тандема с иными компонентами. Выявляет возможные конфликты и несовместимости.
Есть несколько видов интеграционного исследования:
- Снизу вверх или bottom-up. Сначала изучаются отдельные компоненты, а затем их взаимодействие. Это находит и исправляет возможные баги на ранних стадиях создания.
- Сверху вниз или top-down. Сначала тестируется взаимодействие ПО с внешними системами, а затем проверяются отдельные компоненты. Выявляет неисправности, возникающие во время работы ПО в реальных условиях.
Сначала определяют цели и требования. После составляется тестовый план. Затем проводится подготовка окружения и создание тестовых данных. Только потом выполняются сами тесты, а полученные результаты изучают.
Хотите узнать, сколько будет стоить разработка вашего MVP?
Три варианта: «белый ящик», «чёрный ящик» и «серый ящик»
Вариант «белого ящика» основан на знании внутренней структуры. У тестировщика есть полный доступ к исходному коду. Он берет эту информацию для создания тестов. О сновная цель – проверить внутреннюю структуру ПО. Специалист создает тестовые сценарии, чтобы проверить специфические функции.
Метод «черного ящика», напротив, основан на изучении внешнего поведения ПО. Для этого знать внутреннюю структуру не нужно. Проверяются только выходные данные, их соответствие заданным входным параметрам. Затем изучают правильность работы в определенных условиях. Главная цель этого – проверка функциональных требований и обнаружение дефектов.
Способ «серого ящика» – это комбинация двух предыдущих методов. У специалиста есть частичное знание о внутренней структуре программы. Однако оно не настолько детальное, как в способе «белый ящик». Способ проверяет и входные, и выходные данные. Аспекты внутренней структуры используют для более эффективных тестов. Цель – обеспечить баланс между проверкой внутреннего устройства и внешней деятельности ПО.
Главные модели
Здесь рассмотрим три модели: каскадную (Waterfall Model), гибкую (Agile Methodology), итеративная (Iterative Development).