Сейчас мы запускаем весь набор тестов на каждый коммит, который был запущен. Общий тестовый прогон включает все уровни тестирования и занимает один час, из которых 1500 UI-тестов выполняются 25 минут. Все вышесказанное https://deveducation.com/ касается бекэнд-части приложения, однако и фронтенд не отстает. Они быстрые и надежные, поддерживают стабильность и работоспособность приложения.

Приемочное тестирование (AT – Acceptance testing)

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

Переносим сквозные тесты на компонентный уровень

Модульное тестирование (Unit Testing)Компонентное (модульное) тестирование проверяет функциональность и ищет дефекты в частях приложения, которые доступны и могут быть протестированы по-отдельности (модули программ, объекты, классы, функции и т.д.). Обычно при выполнении интеграционного тестирования используется стратегия ETVX (Entry Criteria, Task, Validation, Exit Criteria). Иногда тестировщики повторно тестируют то, что разработчики уже проверили юнит-тестами — это приводит к двойной работе и лишним ошибкам. Так происходит, потому что тестировщики и разработчики не обмениваются информацией. Под поддержкой тестов мы понимаем изменение тестов при паттерн page object изменении требований. Любые тесты нуждаются в поддержке, но у каждого уровня есть свои особенности.

уровни пирамиды тестирования

Юнит- (модульное) и компонентное тестирование

Михаил, профессиональный партнерский маркетолог, является основателем компании South Media OÜ, которая была создана в 2018 году и базируется в Таллинне. С 2016 года Михаил уехал из Финляндии и жил как настоящий «цифровой кочевник» в IT-индустрии, путешествуя по миру только с ноутбуком.

Чтобы представить себе это в перспективе, сегодня для приложения Bumble на iOS у нас около 900 сквозных сценариев в различных наборах тестов. Подавляющее большинство из них выполняется на симуляторах параллельно (насколько это возможно) и относительно быстро. Последние измерения показывают, что в среднем выполнение сквозного теста на симуляторе iOS занимает от 30 до 90 секунд (включая настройку и удаление). Следовательно, выполнение полного набора тестов займёт 20—30 минут. Кроме того, мы делаем тестовые запуски и на реальных iOS-устройствах. Это другое подмножество тестов, которые нельзя перенести в симулятор, потому что им, например, нужна физическая камера или какие-то разрешения.

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

Предполагается, что первичная цель тестирования состоит в достижении как можно большего «освобождения от багов». Но автор модели не стремится к 100% тестовому покрытию, наоборот подчеркивая что это плохая идея сама по себе, ухудшающая качество продукта, когда тестовое покрытие превысило примерно 70%. Но также большое внимание должно уделяться предварительному уровню пирамиды — статическому тестированию, которое проводится перед модульным.

Скажу лишь, что мы придерживаемся политики нулевой терпимости к недетерминированности в компонентных тестах (а для приложения Bumble на iOS  у нас их около 300). Компонентные тесты выделяются в отдельную категорию — как бы «промежуточная стадия» между модульными и приемочными; это тестирование компонентов более крупных чем модули. Она часто используется для визуализации и планирования стратегии тестирования в проекте. Обычно на этом уровне QA-специалисты начинают применять свои базовые умения. Это может быть и функциональное тестирование, и нефункциональное (например, нагрузочное). QA-инженер должен знать основные инструменты, которые помогают организовать работу по тестированию ПО.

Оба вида тестирования часто приравнивают к одному, однако у них есть существенные различия. Надеюсь, это поможет нам эффективнее планировать тестовое покрытие, а также будет полезно в обслуживании, поддержке и миграции тестов. Здесь множество вариантов тестовых пирамид (42!), с объяснениями и со ссылками на статьи и книги.

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

Тем не менее, перевернутая пирамида на практике встречается весьма часто. Скотт называет это «недостаточной культурой тестирования», и восхваляет TDD-разработку (разработка через тестирование, когда тесты пишутся одновременно или лучше перед написанием кода). Кратко об уровнях тестирования, и действиях QA-команды на этих уровнях речь шла здесь. А сейчас поговорим подробнее о такой концепции в QA как пирамида тестирования, и ее многочисленных разновидностях. Тем более что пирамида оказывается может быть перевернутой, или вообще выглядеть не как пирамида, а как пчелиная сота, спортивный кубок и даже как стаканчик мороженого. Пирамида тестирования и регрессионное тестирование являются двумя различными, но взаимосвязанными концепциями в области тестирования программного обеспечения.

уровни пирамиды тестирования

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

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

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

Пирамида в таком виде показывает, что тесты нижнего уровня (юнит-тесты) обычно составляют большую часть от общего количества тестов. По мере продвижения по уровням Пирамиды вверх – тестов становится меньше. Во время интервью на вакансию тестировщика могут спросить не только про Канбан-доски, дополнительные функции LinkedIn или шарики пинг-понга в автобусе, но и про уровни тестирования. При этом надо понимать, что существуют разные версии Пирамиды (может отличаться терминология). В конце концов мы приходим к тому, что unit-тестирование и правда мастхэф для разработчика любого абсолютно уровня, потому как от этого зависит и вся разработка в целом, в общем-то. Mockito также предоставляет большой набор методов и классов для настройки мок-объектов и проведения более гибкого тестирования.

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

Leave a Reply

Your email address will not be published. Required fields are marked *