Тестирование
November 17, 2023

1.6 Уровни тестирования. Позитивные и негативные тесты

Классификация по уровням

1. Компонентное тестирование - происходит тестирование отдельных модулей.

Например, если это интернет-магазин, то это тестирование корзины (т.е. отдельного компонента). Или тестирование оплаты заказа.

2. Интеграционное тестирование - тестинг части системы, состоящей из двух или более модулей.

Например, как из корзины интернет-магазина можно произвести оплату товара посредством платежной системы.

Интеграционное тестирование включает в себя:

  1. Компонентный интеграционный уровень (CIT - Component Integration testing): Проверяется взаимодействие между компонентами одной системы после проведения компонентного тестирования.
  2. Системное интеграционное тестирование (SIT - System Integration testing) - тестирование взаимодействия между всеми компонентами тестирования; либо взаимодействие разных систем между собой; либо тестирование интерфейсов, с помощью которых взаимодействует система.

Существует 3 вида интерфейсов:

  1. Интерфейс программирования приложений (API) - набор методов, которые можно использовать для доступа к функциональности другой программы. (Например, используется для внедрения платежного инструмента).
  2. Интерфейс командной строки (CLI) - инструкции компьютеру даются путем ввода команд через командную строку (текстовые строки).
  3. Графический пользовательский интерфейс (GUI) - в нем программные функции представлены графическими элементами экрана. (Например, интернет-страница в браузере).

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

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

3. Системное тестирование - выполняется на полной интегрированной системе с целью проверки системы исходным требованиям.

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

4. Приемочное тестирование - тестирование, проводимое на этапе сдачи готового продукта либо на этапе сдачи какой-то готовой его части заказчику.

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

Обычно тестируется основной функционал, который не требует тщательных проверок.

Существует несколько типов приемочного тестирования:

  1. Пользовательское приемочное тестирование (UAT) - тестирование, которое проводится конечными пользователями продукта.
  2. Эксплуатационное - выполняется либо пользователями, либо администратором в среде, которая имитирует реальные условия рабочего окружения. На этом этапе проводиться проверка резервного копирования, либо аварийного восстановления системы.
  3. Тестирование на соответствие контракту - проверка на соответствие спеке либо другому нормативному акту. Это не только проверка по требованиям заказчика, но так же проверка, соответствует ли ГОСТу или иным нормативным документам или GDPR*.
  4. Альфа-тестирование - это первоначальное тестирование продукта небольшой группой пользователей. Главные задачи этого этапа – проверка функциональности и получение обратной связи. Проводится на стороне разработчиков, но не тестерами или сотрудниками, а потенциальными потребителями.
  5. Бета-тестирование - проводиться на внешней стороне без участия разработчиков. Проводиться небольшой группой пользователей для того, чтобы получить от них обратную связь до выхода продукта на рынок.
*GDPR — это регламент ЕС, который обновляет и расширяет более раннюю Директиву о защите данных (DPD), впервые принятую в 1995 году. Регламент GDPR посвящен обеспечению конфиденциальности данных физического лица, будь то клиент, сотрудник или деловой партнер. Цель GDPR заключается в обеспечении защиты персональных данных граждан ЕС, независимо от того, проживают они в ЕС или в другом месте.

Классификация по позитивности тестовых сценариев

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

2. Негативное тестирование - тестирование, во время которого применяются сценарии, которые соответствуют внештатному поведению системы.

Например, ситуации или какие-то неверные данные. Пример - если это калькулятор, то деление на ноль должно выдать ошибку.

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

Позитивное тестирование (positive testing) - исследование приложения в ситуации, когда все действия выполняются строго по инструкции без каких бы то ни было ошибок, отклонений, ввода неверных данных и т.д.

Пример: ввод валидных значений в поле имя и пароль для успешной регистрации пользователя.

Негативное тестирование (negative testing, invalid testing) — направлено на исследование работы приложения в ситуациях, когда с ним выполняются (некорректные) операции и/или используются данные, потенциально приводящие к ошибкам (классика жанра — деление на ноль).

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

Деструктивное тестирование (destructive testing) - одна из форм негативного тестирования с целью нарушить работоспособность приложения и обнаружить точку отказа.

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

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

  1. Любое тестирование необходимо начинать с позитивных проверок. Наша первоочередная задача убедиться, что приложение работает в стандартных условиях и готово для использования.
  2. Нельзя объединять позитивные и негативные тесты, так как это затрудняет локализацию дефектов.