Автоматическое тестирование ПО

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

Max Rehkopf Max Rehkopf

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

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

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

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

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

Графическая иллюстрация автоматического тестирования.

Важность автоматического тестирования для непрерывной поставки

Основная цель непрерывной поставки (CD) — максимально ускорить поставку новых релизов клиентам. Этого не получится добиться без автоматического тестирования. Однако для автоматизации поставки кода необходимо избавиться от тормозящего работу этапа ручной проверки.

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

Такие связи между автоматическим тестированием, CI и CD приносят быстрым командам разработки ПО много преимуществ. Автоматическое тестирование гарантирует качество на каждом этапе разработки. С его помощью можно убедиться, что новые коммиты не приведут к багам, а также сохранить готовность продукта к развертыванию в любой момент.

Схема взаимосвязей между автоматическим тестированием, непрерывной интеграцией и непрерывной поставкой.

Какие виды тестов программного обеспечения следует автоматизировать в первую очередь?

Сквозные тесты


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

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

Модульные тесты

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

Интеграционное тестирование

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

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

Тесты производительности

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

Какие виды тестов программного обеспечения следует проводить вручную?

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

Глубокое тестирование

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

Визуальное регрессионное тестирование

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

Как создать систему автоматизации тестирования для команды DevOps

Всеобъемлющего решения для автоматического тестирования не существует. При планировании такого тестирования в своей команде необходимо учесть несколько важных моментов.

Частота релизов

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

Доступные инструменты и экосистема

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

Соответствие продукта рынку и зрелость базы кода

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

Встройте автоматическое тестирование в конвейер CD

Автоматическое тестирование — стандартная практика в современной разработке ПО. Автоматические тесты применяют все передовые команды и компании. Они необходимы для организации процессов непрерывной интеграции и непрерывной поставки (CI/CD), которые помогают самым эффективным командам поставлять надежное многофункциональное ПО для клиентов. Начните изучать решения для CI/CD уже сегодня.