Программирование • 26 февраля 2024 • 5 мин чтения

В шаге от запуска: как тестируют готовые системы

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

Что такое системное тестирование

Продукт тестируют в несколько этапов. Сначала проводят модульное или юнит-тестирование. В этом случае проверяют работу отдельных функций. К примеру, разработчик написал код для функции «Добавить в избранное» в интернет-магазине и сразу проверяет, работает ли он корректно.

Следующий этап — интеграционное тестирование. Модули объединяют в группы и проверяют, как они друг с другом взаимодействуют. Например, получается ли добавить товар из раздела «Избранное» в корзину или удалить его.

Системное тестирование проводят после интеграционного. На этом этапе систему или приложение проверяют как единое целое и тестируют все компоненты в различных комбинациях. Цель системного тестирования — убедиться, что продукт соответствует техническим требованиям и работает без ошибок. Системное тестирование выполняют инженеры по тестированию (QA) без участия команды разработки — так получается сохранить объективность результатов.

Если системное тестирование проходит успешно, продукт проверяют на соответствие требованиям бизнеса и пользователей, а дальше — выпускают на рынок

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

Освойте ручное тестирование и автоматизацию тестов на Java
Учитесь тестировать веб-, мобильные приложения и API у тестировщиков из Яндекса и других IT-компаний. Добавьте в портфолио 10 проектов и получите помощь с поиском работы. Пройдите вводную часть курса бесплатно.

Преимущества и недостатки

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

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

Недостатки

● Может занять много времени, особенно если продукт большой. Например, приложение маркетплейса.
● Высокая стоимость.

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

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

«Чёрный ящик» даёт ответ на два вопроса:

Что делает система? Тестировщик проверяет, делает ли система то, что от неё ждут. Например, приходит ли письмо пользователю после регистрации.
Как работает система? Во время тестирования оценивают качественные характеристики системы: насколько она удобна, как быстро работает.

Какие виды системного тестирования могут проводить «по-чёрному», разобрали в таблице.


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


Проверка функций системы, которые указаны в документации.

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

Нагрузочное

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

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

Восстановительное

Проверка способности системы к восстановлению после сбоев.

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

Совместимости

Проверка работы системы на различных платформах и совместимость с другими системами.

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

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

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

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

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

Насколько система защищена от злоумышленников.

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

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

Насколько пользователю понятен интерфейс, может ли он ориентироваться в нём без подсказок.

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

Конфигурации

Проверка работы системы с учётом разных параметров.

Пример: запустить веб-приложение на разных версиях Windows, изменить языковые настройки.

Отказоустойчивости

Проверка работы системы в ситуациях, когда какие-то компоненты не работают или случился форс-мажор.

Пример: сымитировать медленное соединение или отключить сервер, который обрабатывает заказы.

Этапы тестирования

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

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

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

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

4. Анализ. Тестировщики оценивают прохождение тестовых сценариев, выявляют дефекты и проблемы с производительностью или стабильностью приложения. Документируют результаты тестирования и делятся выводами с командой разработки.

Основные инструменты

Какие инструменты выбрать — зависит от проекта и предпочтений специалиста. Разберём программы, которые чаще всего выбирают.


Фреймворки для автоматизированного тестирования. Автотесты помогают быстро и точно проверить, работает ли система правильно. Инженеры по тестированию используют такие программы, как Selenium или Appium, чтобы автоматизировать рутинные задачи и таким образом ускорить вывод продукта на рынок.


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

Appium используют по такому же принципу, как Selenium, только для тестирования мобильных приложений. Фреймворк позволяет написать один и тот же тестовый скрипт, который будет работать и для Android, и для iOS.

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

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

LoadRunner — ещё один инструмент для нагрузочного тестирования. Оформляет результаты тестов в виде графиков, отчётов и диаграмм.

Инструменты для генерации тестовых данных

Mockaroo позволяет генерировать имена, адреса, электронные почты, числа, даты. Поддерживает генерацию данных в различных форматах CSV, JSON, SQL, XML — это дает возможность использовать сгенерированные данные в различных типах тестов или интегрировать их в другие системы. С помощью Mockaroo можно создавать настраиваемые схемы данных с заданными правилами и ограничениями.Так получается генерировать данные, соответствующие специфическим требованиям приложения или тестового сценария.

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

Совет эксперта

Василий Беляков

Системное тестирование — это только одна из областей знаний тестировщика. Обычно компании ищут специалистов, которые знакомы с разными видами тестирования и могут выбрать тот, который подойдёт для конкретной задачи. Чтобы джуну быть востребованным, нужно освоить базу: работу с документацией, чек-листы и баг-репорты, как отличать более критичные баги от менее критичных, основы автоматизации тестирования. Навыки программирования в начале действительно не так важны. Плюсом будет, если тестировщик сможет найти простые ошибки в коде — вроде пропущенной точки с запятой.
Статью подготовили:
Василий Беляков
Яндекс Практикум
Наставник, инженер по обеспечению качества
Яндекс Практикум
Редактор
Анастасия Павлова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться
Знакомство с IT: Бесплатный гид Практикума по профессиям
Thu Apr 11 2024 17:27:55 GMT+0300 (Moscow Standard Time)