Программирование • 13 марта 2025 • 5 мин чтения

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

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

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

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

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

Суть классической пирамиды тестирования: чем выше уровень, тем меньше тестов проводится. В то же время тесты на верхнем уровне сложнее выполнять и поддерживать

Разобраться, для чего нужна пирамида на конкретном проекте, поможет курс «Инженер по тестированию: от новичка до автоматизатора». Занятия позволят освоить регрессионные тесты, тестирование API, веб‑ и мобильных приложений, а также написание автоматических тестов на Java или Python.

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

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

Нижний уровень

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

Возьмём для примера простой калькулятор. Чтобы проверить, что при сложении 2 + 2 в метод передаётся ответ 4, разработчик проводит юнит-тест. Код может быть таким:

import unittest

def add(a, b):
return a + b

class TestAddFunction(unittest.TestCase):
def test_add_two_and_two(self):
result = add(2, 2)
self.assertEqual(result, 4)

if __name__ == '__main__':
unittest.main()

Такой тест позволяет обнаружить ошибки в коде: например, что в метод отправляется только одна двойка, а вторая теряется. В этом случае разработчик тестирует, что какой ответ даёт программа.

Разберёмся в плюсах и минусах нижнего уровня пирамиды тестирования.

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

  • Скорость. Независимость юнит-тестов от внешних систем, отсутствие сложных конфигураций и возможность параллельного запуска делают нижний уровень пирамиды тестирования довольно простым и быстрым.
  • Лёгкая поддержка. Как правило, логика работы программы, которая проверяется в рамках юнит-тестов, не меняется — к примеру, всегда 2 + 2 = 4. Поэтому к ним редко приходится возвращаться.
  • Сохранение логики. Юнит-тесты являются своего рода документацией, которая позволяет понять, как метод работает и не работает, как он должен функционировать

Недостатки

  • Количество. На нижнем уровне пирамиды тестирования приходится писать много тестов, счёт идёт на тысячи. Как правило, они покрывают минимум 80% кода.
  • Примитивность. Юнит-тесты не помогают выявить ошибки на уровне интеграции, например между разными модулями. То есть успешное прохождение тестирования не гарантирует работу функционала программы
Средний уровень

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

Обычно на этом уровне пирамиды тестирования проводится меньше проверок, они исчисляются сотнями. Как правило, для них требуются дополнительные сущности в виде тестового окружения, например базы данных или методы API.

Возьмём для примера простой API, который принимает GET-запрос по адресу http://example.com/api/users и возвращает список пользователей в формате JSON.

Пример интеграционного теста с помощью Postman

У второго уровня пирамиды тестирования есть свои преимущества и недостатки.

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

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

Недостатки

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

Этот уровень пирамиды тестирования включает функциональные, или end-to-end, тесты. В зависимости от сложности продукта таких тестов могут быть десятки или больше сотни. Они имитируют действия пользователя, то есть пошагово проходят его путь и анализируют ответы системы. Как правило, такие тесты автоматические и пишутся тестировщиками.
Возьмём для примера тестирование авторизации на сайте. Автотест открывает браузер, затем сайт находит форму авторизации, вводит валидный логин и пароль, нажимает «Войти» и проверяет, что пользователь попадает, например, на страницу личного кабинета или на главную страницу сайта.

Пример проверки авторизации на верхнем уровне пирамиды тестирования с использованием языка Python и фреймворка Selenium

Функциональные тесты — обязательный этап любого тестирования, но у них есть свои особенности.

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

  • Пользовательский взгляд. Тесты на уровне end-to-end позволяют увидеть работу программы глазами пользователей, например реально открыть браузер или заполнить форму.
  • Учёт рисков. Верхний уровень пирамиды тестирования помогает проверить все возможные сложности, которые могут возникнуть у пользователя. Так можно убедиться, к примеру, что все кнопки нажимаются, а все списки открываются.
  • Тестирование в продакшене. У тестировщиков есть возможность взять пользователя продакшен-среды и войти в его окружение. Это позволяет проверять самые критические ключевые сценарии
Недостатки
  • Трудность написания. Для создания функциональных тестов важно чётко понимать, как должна работать система. Чем она сложнее, тем больше функций и взаимодействий между компонентами нужно протестировать, чтобы охватить все сценарии действий пользователей.
  • Скорость выполнения. Тесты верхнего уровня пирамиды тестирования долго исполняются, даже если они автоматические, потому что включают много последовательных шагов.
  • Сложность поддержки. Функциональные тесты труднее поддерживать, потому что они перестают быть актуальными при изменениях логики интерфейса. В этом случае нужно писать новые тесты

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

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

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

Процесс проходит в три этапа начиная с основания пирамиды:

  1. Анализ процессов. Прежде всего тестировщику необходимо изучить процесс разработки и понять, какую часть кода программисты покрывают юнит-тестами. Если их меньше 80% и проверки идут нерегулярно, тимлиду разработчиков нужно поставить подчинённым задачу проводить тестирование новых фич.
  2. Распределение зон ответственности. Этот этап касается второго уровня пирамиды тестирования. Исходя из компетенций и нагрузки необходимо определить, кто будет заниматься написанием интеграционных тестов — это могут быть как разработчики, так и автотестеры. Или различные варианты тестов подразделения могут поделить между собой. При этом важно следить, чтобы проверки второго уровня пирамиды не дублировали юнит-тесты.

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

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

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

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

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

Поделиться
Угадайте, где правда, а где фейк про IT, и получите скидку на курсы Практикума
Thu Mar 20 2025 17:11:03 GMT+0300 (Moscow Standard Time)