Close

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

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

Фотография Макса Рекопфа
Макс Рекопф

Приглашенный автор


What is automated testing?


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

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

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

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

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

См. решение

Разработка и эксплуатация программного обеспечения с помощью Open DevOps

Связанные материалы

Автоматическое тестирование для DevOps

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


It is arguable that any tests that can be automated should be automated. It is a huge gain in productivity and human time cost. With that said, there are times when the ROI of developing an automated test suite is not worth it when compared to executing a manual test.

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Automated testing is a standard modern software development practice. The best teams and companies use automated tests. CI/CD is dependant on automated tests and critical to helping the best teams ship reliable and robust software to their customers. Start exploring CI/CD solutions today

Max Rehkopf
Max Rehkopf

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


Поделитесь этой статьей

Рекомендуемые статьи

Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.

Рисунок: DevOps

Сообщество DevOps

Рисунок: DevOps

Узнать больше в блоге

Рисунок: карта

Начните работу бесплатно

Подпишитесь на информационную рассылку по DevOps

Thank you for signing up

продолжение темы
The different types of testing in software