Хотите стать экспертом по тестированию ПО? Если да, то важно хорошо разбираться в различных типах методов тестирования. В этой статье мы предоставим вам обзор различных типов тестов, методов тестирования и того, что вам нужно знать, чтобы стать профессиональным тестировщиком!
Тестирование ПО — это метод проверки соответствия фактического продукта требованиям и обеспечения отсутствия багов в программном продукте. Он включает в себя выполнение тест-кейсов с использованием ручных или автоматизированных инструментов. Существуют различные уровни тестирования, которые выполняются на протяжении всего жизненного цикла разработки. Каждый уровень тестирования имеет определенную цель и помогает гарантировать, что программный продукт обладает высоким качеством и соответствует требованиям заказчика.
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.
Иерархия тестирования
Существует иерархия тестирования.

Методологии и методы тестирования
Давайте рассмотрим, что такое методологии тестирования.
Методологии тестирования — это подходы и методы, используемые для тестирования программных приложений. Эти методологии помогают гарантировать, что ПО работает должным образом и соответствует заданным требованиям.
Существуют различные типы тестов, и в общем смысле методы тестирования можно разделить на две категории: ручные и автоматизированные.
1. Ручное тестирование

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

Автоматизированные тесты выполняются машиной, которая запускает заранее написанный тестовый сценарий. Эти тесты могут варьироваться по сложности: от проверки одного метода в классе до проверки того, что выполнение последовательности сложных действий в UI приводит к ожидаемым результатам. Автоматизированное тестирование гораздо более надежное и стабильное по сравнению с ручным тестированием, однако качество автоматизированных тестов зависит от того, насколько хорошо написаны тестовые сценарии.
Методы ручного тестирования

Ручное тестирование можно разделить на три различных типа:
- Тестирование «белого ящика»
- Тестирование «черного ящика»
- Тестирование «серого ящика»
1.1 Тестирование «белого ящика»

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

Тестирование методом «черного ящика» — это метод тестирования, при котором проверяется функциональность программы без анализа её внутренней структуры или кода. В этом методе тестировщик выбирает функцию, задает входное значение для проверки ее функциональности и проверяет, выдает ли функция ожидаемый результат.
Если функция возвращает правильный результат, тест считается пройденным; если нет — он провален. Команда тестировщиков сообщает результат команде разработчиков, а затем тестирует следующую функцию.
После завершения тестирования всех функций, если остаются серьезные проблемы, то они передаются команде разработчиков для исправления. Исходный код в этом тестировании не виден, поэтому его называют тестированием «черного ящика».
1.3 Тестирование «серого ящика»

Тестирование серого ящика — это метод тестирования, при котором тестируется продукт или приложение с частичным знанием его внутренней структуры. Целью тестирования «серого ящика» является поиск и выявление дефектов, вызванных неправильной структурой кода или неправильным использованием приложений. В этом процессе обычно выявляются контекстно-зависимые ошибки, связанные с веб-системами. Он увеличивает покрытие тестами, концентрируясь на всех слоях любой сложной системы.
Другими словами, тестирование методом «серого ящика» — это метод тестирования, представляющий собой комбинацию методов тестирования «белого ящика» и «черного ящика».
- При тестировании методом «белого ящика» внутренняя структура (код) известна
- При тестировании методом «черного ящика» внутренняя структура (код) неизвестна
- При тестировании методом «серого ящика» внутренняя структура (код) частично известна
Типы тестирования «черного ящика»

В программной инженерии тестирование «черного ящика» является важной частью процесса тестирования. Оно делится на два типа:
- Функциональное тестирование
- Нефункциональное тестирование
1.2.1 Функциональное тестирование

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

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

После того, как мы успешно внедрили модульное тестирование, мы переходим к интеграционному тестированию. Это второй уровень функционального тестирования, где мы тестируем поток данных между зависимыми модулями или интерфейс между двумя фичами.
Типы интеграционного тестирования:
- Сверху вниз (Top Down Integration)
- Снизу вверх (Bottom Up Integration)
Системное тестирование

После того, как мы закончили с модульным и интеграционным тестированием, мы переходим к системному тестированию. В системном тестировании тестовая среда параллельна рабочей (производственной) среде. Это также известно как «сквозное тестирование» (end-to-end testing). В этом типе тестирования мы проверяем каждый атрибут ПО и тестируем, соответствует ли конечный результат бизнес-требованиям, а также анализируем продукт как целостную систему.
Системное тестирование включает в себя следующие этапы:
- Проверка входных функций приложения, чтобы убедиться, что оно выдает ожидаемые результаты.
- Тестирование интегрированного ПО с подключением внешних периферийных устройств для проверки взаимодействия различных компонентов между собой.
- Тестирование всей системы для проведения сквозного тестирования (End to End).
- Тестирование поведения приложения с точки зрения пользовательского опыта.
1.2.2 Нефункциональное тестирование
Нефункциональное тестирование помогает минимизировать производственный риск и связанные с ним затраты. Нефункциональное тестирование включает в себя такие виды, как тестирование производительности, нагрузочное тестирование, стресс-тестирование, тестирование удобства использования и совместимости. Давайте рассмотрим виды и примеры нефункционального тестирования.
Типы нефункционального тестирования

Виды нефункционального тестирования:
- Тестирование производительности
- Тестирование удобства использования
- Тестирование совместимости
Тестирование производительности

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

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

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

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

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

В тестировании совместимости проверяется функциональность приложения в конкретных аппаратных и программных средах. Когда приложение стабильно с функциональной точки зрения, только тогда можно переходить к тестированию совместимости. Здесь «программное обеспечение» означает, что мы можем тестировать приложение на разных операционных системах и браузерах, а «аппаратное обеспечение» означает, что мы можем протестировать приложение на различных устройствах с разными размерами экрана.
Другие типы тестирования
Также существуют и другие виды тестов, которые не входят в вышеописанные категории тестирования, но они также необходимы.
- Smoke-тестирование
- Санитарное тестирование
- Регрессионное тестирование
- Приемочное пользовательское тестирование
- Исследовательское тестирование
- Ad-hoc тестирование
- Тестирование безопасности
- Тестирование глобализации
Smoke-тестирование
При smoke-тестировании мы проверяем базовые и критически важные функции приложения до того, как провести более глубокое и тщательное тестирование. Основной целью выполнения smoke-тестирования в QA является анализ рабочего процесса основных и ключевых функций приложения.
Санитарное тестирование
Санитарное тестирование используется для того, чтобы убедиться, что все ошибки были исправлены и что из-за этих изменений не возникли новые проблемы. Санитарное тестирование не имеет заранее подготовленных сценариев, то есть его невозможно задокументировать. Оно проверяет правильность новых функций и компонентов, добавленных в приложение.
Читайте также: Чем отличаются санитарное и дымовое тестирование
Регрессионное тестирование
Регрессионное тестирование — это наиболее часто используемый тип тестирования. В данном контексте термин «регрессия» означает, что необходимо повторно тестировать те части приложения, которые не были затронуты изменениями. Регрессионное тестирование идеально подходит для автоматизации с помощью инструментов тестирования. В зависимости от типа проекта и доступности ресурсов, регрессионное тестирование может быть схоже с повторным тестированием.
Приемочное пользовательское тестирование
Приемочное пользовательское тестирование (User Acceptance Testing, UAT) проводится отдельной командой, известной как эксперт в области/заказчик или клиент. Определение приемочного пользовательского тестирования заключается в изучении приложения перед принятием конечного продукта.
Исследовательское тестирование
Исследовательское тестирование становится решающим, особенно для важных приложений. Когда требования отсутствуют или требуется проведение ранних итераций, опытная команда тестировщиков играет ключевую роль. При проведении исследовательского тестирования тестировщик должен сначала тщательно исследовать приложение всеми возможными способами. Затем нужно задокументировать подход к тестированию и глубоко понять поток работы приложения перед выполнением тестов. Следуя этим шагам, можно обеспечить комплексное тестирование и предоставить качественный продукт.
Adhoc тестирование
Тестирование приложения случайным образом, как только сборка проходит проверку в последовательности, называется adhoc-тестированием. Оно также называется обезьянье тестирование (Monkey testing) или горилье тестирование (Gorilla testing). При adhoc-тестировании мы проверяем приложение в противоречии с требованиями клиента, поэтому это также известно как негативное тестирование.
Тестирование безопасности
Тестирование безопасности чрезвычайно важно, поскольку оно используется для определения слабых мест, рисков или угроз в программном приложении. Проведение теста безопасности помогает избежать неприятных атак со стороны внешних пользователей и обеспечивает безопасность наших программных приложений.
Тестирование глобализации
Тестирование глобализации используется для проверки того, поддерживает ли разработанное ПО несколько языков. Здесь слово «глобализация» означает адаптацию приложения к различным языкам. Тестирование глобализации необходимо для того, чтобы убедиться, что приложение будет поддерживать несколько языков и различные функции.
В этой статье представлен подробный обзор наиболее часто используемых типов тестирования. Разные организации могут использовать разные классификации или методы, но основная идея везде одна и та же. Важно отметить, что различные виды тестирования, методы и способы выполнения могут меняться в зависимости от масштаба проекта, требований и графика. Понимая эти тонкости, вы можете стать более универсальным и эффективным тестировщиком.
Перевод статьи «Explore Various Testing Methods for Software: A Comprehensive Guide».