Часть серии статей о |
Разработка программного обеспечения |
---|
This article includes a list of general references, but it lacks sufficient corresponding inline citations. (February 2009) |
В тестировании программного обеспечения автоматизация тестирования — это использование программного обеспечения отдельно от тестируемого программного обеспечения для управления выполнением тестов и сравнения фактических результатов с прогнозируемыми результатами. [1] Автоматизация тестирования может автоматизировать некоторые повторяющиеся, но необходимые задачи в формализованном процессе тестирования, который уже существует, или выполнять дополнительное тестирование, которое было бы трудно выполнить вручную. Автоматизация тестирования имеет решающее значение для непрерывной поставки и непрерывного тестирования . [2]
Существует множество подходов к автоматизации тестирования, однако ниже приведены наиболее распространенные подходы:
Одним из способов автоматического создания тестовых случаев является тестирование на основе моделей с использованием модели системы для создания тестовых случаев, но продолжаются исследования различных альтернативных методологий для этого. [ необходима ссылка ] В некоторых случаях подход на основе моделей позволяет нетехническим пользователям создавать автоматизированные бизнес-тестовые случаи на простом английском языке, так что для их настройки для нескольких операционных систем, браузеров и смарт-устройств не требуется никакого программирования. [3]
Некоторые задачи тестирования программного обеспечения (например, обширное низкоуровневое регрессионное тестирование интерфейса ) могут быть трудоемкими и отнимающими много времени для выполнения вручную. Кроме того, ручной подход не всегда может быть эффективным при поиске определенных классов дефектов. Автоматизация тестирования дает возможность эффективно выполнять эти типы тестирования.
После разработки автоматизированных тестов их можно быстро и многократно запускать. Это может быть экономически эффективным методом регрессионного тестирования программных продуктов с длительным сроком эксплуатации. Даже незначительные исправления в течение жизненного цикла приложения могут привести к поломке существующих функций, которые работали ранее.
Тестирование API также широко используется тестировщиками программного обеспечения, поскольку оно позволяет им проверять требования независимо от реализации их GUI, обычно для их тестирования на ранних этапах разработки и для того, чтобы убедиться, что сам тест соответствует принципам чистого кода, особенно принципу единой ответственности . Оно включает в себя непосредственное тестирование API как часть интеграционного тестирования , чтобы определить, соответствуют ли они ожиданиям по функциональности, надежности, производительности и безопасности. [4] Поскольку API не имеют GUI , тестирование API выполняется на уровне сообщений . [5] Тестирование API считается критическим, когда API служит основным интерфейсом для логики приложения . [6]
Многие инструменты автоматизации тестирования предоставляют функции записи и воспроизведения, которые позволяют пользователям интерактивно записывать действия пользователя и воспроизводить их любое количество раз, сравнивая фактические результаты с ожидаемыми. Преимущество этого подхода в том, что он требует небольшой или нулевой разработки программного обеспечения . Этот подход может быть применен к любому приложению, имеющему графический пользовательский интерфейс . Однако зависимость от этих функций создает серьезные проблемы с надежностью и удобством обслуживания. Переименование кнопки или перемещение ее в другую часть окна может потребовать повторной записи теста. Запись и воспроизведение также часто добавляют нерелевантные действия или неправильно записывают некоторые действия. [ необходима цитата ]
Разновидность этого типа инструмента предназначена для тестирования веб-сайтов. Здесь «интерфейсом» является веб-страница. Однако такой фреймворк использует совершенно другие методы, поскольку он отображает HTML и прослушивает события DOM вместо событий операционной системы. Для этой цели обычно используются браузеры Headless или решения на основе Selenium Web Driver . [7] [8] [9]
Другой вариант этого типа инструмента автоматизации тестирования предназначен для тестирования мобильных приложений. Это очень полезно, учитывая количество различных размеров, разрешений и операционных систем, используемых на мобильных телефонах. Для этого варианта используется фреймворк для создания экземпляров действий на мобильном устройстве и сбора результатов действий.
Другой вариант — автоматизация тестирования без использования скриптов, которая не использует запись и воспроизведение, а вместо этого создает модель [ требуется пояснение ] приложения, а затем позволяет тестировщику создавать тестовые случаи, просто вставляя тестовые параметры и условия, что не требует навыков написания скриптов.
Автоматизация тестирования, в основном использующая модульное тестирование, является ключевой особенностью экстремального программирования и гибкой разработки программного обеспечения , где она известна как разработка через тестирование (TDD) или разработка сперва через тестирование. Модульные тесты могут быть написаны для определения функциональности до написания кода. Однако эти модульные тесты развиваются и расширяются по мере того, как кодирование продвигается, обнаруживаются проблемы и код подвергается рефакторингу. [10] Только когда все тесты для всех требуемых функций пройдены, код считается завершенным. Сторонники утверждают, что он создает программное обеспечение, которое является и более надежным, и менее затратным, чем код, который тестируется вручную. [ необходима цитата ] Он считается более надежным, потому что покрытие кода лучше, и потому что он выполняется постоянно во время разработки, а не один раз в конце цикла разработки водопада . Разработчик обнаруживает дефекты сразу после внесения изменений, когда их исправление наименее затратно. Наконец, рефакторинг кода безопаснее, когда используется модульное тестирование; Преобразование кода в более простую форму с меньшим дублированием кода , но эквивалентным поведением, гораздо менее вероятно приведет к появлению новых дефектов, если рефакторингованный код покрыт модульными тестами.
Непрерывное тестирование — это процесс выполнения автоматизированных тестов в рамках конвейера поставки программного обеспечения для получения немедленной обратной связи по бизнес-рискам, связанным с кандидатом на выпуск программного обеспечения. [11] [12] Для непрерывного тестирования область тестирования простирается от проверки восходящих требований или пользовательских историй до оценки системных требований, связанных с общими бизнес-целями. [13]
Что автоматизировать, когда автоматизировать или даже нужна ли автоматизация на самом деле — это важные решения, которые должна принять команда тестирования (или разработки). [14] Многосторонний обзор литературы из 52 практиков и 26 академических источников показал, что пять основных факторов, которые следует учитывать при принятии решения об автоматизации тестирования: 1) Тестируемая система (SUT), 2) типы и количество тестов, 3) инструмент тестирования, 4) человеческие и организационные темы и 5) сквозные факторы. Наиболее частыми индивидуальными факторами, выявленными в исследовании, были: необходимость регрессионного тестирования, экономические факторы и зрелость SUT. [15]
Хотя повторное использование автоматизированных тестов ценится компаниями-разработчиками ПО, это свойство можно рассматривать и как недостаток. Оно приводит к так называемому «парадоксу пестицида» , когда многократно выполняемые скрипты перестают обнаруживать ошибки, выходящие за их рамки. В таких случаях ручное тестирование может оказаться более выгодной инвестицией. Эта неоднозначность в очередной раз приводит к выводу, что решение об автоматизации тестирования следует принимать индивидуально, учитывая требования и особенности проекта.
Инструменты тестирования могут помочь автоматизировать такие задачи, как установка продукта, создание тестовых данных, взаимодействие с графическим интерфейсом, обнаружение проблем (рассмотрите возможность использования агентов синтаксического анализа или опроса, оснащенных тестовыми оракулами ), регистрация дефектов и т. д., без обязательной автоматизации тестов в сквозном режиме.
Думая об автоматизации тестирования, необходимо продолжать удовлетворять распространенным требованиям:
Инструменты автоматизации тестирования могут быть дорогими и обычно используются в сочетании с ручным тестированием. Автоматизация тестирования может стать экономически эффективной в долгосрочной перспективе, особенно при многократном использовании в регрессионном тестировании . Хорошим кандидатом для автоматизации тестирования является тестовый случай для общего потока приложения, поскольку его требуется выполнять (регрессионное тестирование) каждый раз, когда в приложение вносится улучшение. Автоматизация тестирования сокращает усилия, связанные с ручным тестированием. Ручные усилия необходимы для разработки и поддержки автоматизированных проверок, а также для проверки результатов тестирования.
В автоматизированном тестировании инженер по тестированию или специалист по обеспечению качества ПО должны иметь возможность кодирования ПО, поскольку тестовые случаи пишутся в форме исходного кода, который при запуске выдает выходные данные в соответствии с утверждениями, которые являются его частью. Некоторые инструменты автоматизации тестирования позволяют выполнять авторинг тестов с помощью ключевых слов вместо кодирования, что не требует программирования.
Стратегией для определения количества тестов для автоматизации является пирамида автоматизации тестирования. Эта стратегия предполагает написание трех типов тестов с разной степенью детализации. Чем выше уровень, тем меньше количество тестов для написания. [16]
Одна из концепций пирамиды тестирования содержит модульные, интеграционные и сквозные модульные тесты. Согласно блогу Google по тестированию, модульные тесты должны составлять большую часть вашей стратегии тестирования, с меньшим количеством интеграционных тестов и лишь небольшим количеством сквозных тестов. [19]
Фреймворк автоматизации тестирования — это интегрированная система, которая устанавливает правила автоматизации определенного продукта. Эта система объединяет библиотеки функций, источники тестовых данных, детали объектов и различные повторно используемые модули. Эти компоненты действуют как небольшие строительные блоки, которые необходимо собрать для представления бизнес-процесса. Фреймворк обеспечивает основу автоматизации тестирования и упрощает усилия по автоматизации.
Главное преимущество фреймворка предположений , концепций и инструментов, которые обеспечивают поддержку автоматизированного тестирования программного обеспечения, заключается в низкой стоимости обслуживания . Если в какой-либо тестовый случай вносятся изменения , то необходимо обновить только файл тестового случая, а скрипт драйвера и скрипт запуска останутся прежними. В идеале нет необходимости обновлять скрипты в случае изменений в приложении.
Выбор правильной структуры/техники написания сценариев помогает поддерживать более низкие затраты. Расходы, связанные с написанием сценариев тестирования, обусловлены усилиями по разработке и обслуживанию. Подход к написанию сценариев, используемый во время автоматизации тестирования, влияет на затраты.
Обычно используются различные методы фреймворков/скриптов:
Структура тестирования отвечает за: [20]
Растущей тенденцией в разработке программного обеспечения является использование фреймворков модульного тестирования , таких как фреймворки xUnit (например, JUnit и NUnit ), которые позволяют выполнять модульные тесты для определения того, действуют ли различные разделы кода так, как ожидается, при различных обстоятельствах. Тестовые случаи описывают тесты, которые необходимо запустить в программе, чтобы убедиться, что программа работает так, как ожидается.
Интерфейсы автоматизации тестирования — это платформы, которые предоставляют единое рабочее пространство для включения нескольких инструментов тестирования и фреймворков для системного/интеграционного тестирования тестируемого приложения. Целью интерфейса автоматизации тестирования является упрощение процесса сопоставления тестов с бизнес-критериями без кодирования, встающего на пути процесса. Ожидается, что интерфейс автоматизации тестирования повысит эффективность и гибкость поддержки тестовых сценариев. [21]
Интерфейс автоматизации тестирования состоит из следующих основных модулей:
Интерфейсные движки построены поверх Интерфейсной среды. Интерфейсный движок состоит из парсера и тестового раннера. Парсер присутствует для разбора объектных файлов, поступающих из репозитория объектов, в тестовый язык сценариев. Тестовый раннер выполняет тестовые сценарии с помощью тестового оборудования . [21]
Репозитории объектов представляют собой набор данных объектов пользовательского интерфейса/приложения, записанных инструментом тестирования во время исследования тестируемого приложения. [21]
Инструменты специально разработаны для определенной тестовой среды, например, Windows и веб-инструментов автоматизации и т. д. Инструменты служат движущей силой процесса автоматизации. Однако фреймворк автоматизации — это не инструмент для выполнения определенной задачи, а скорее инфраструктура, которая предоставляет решение, в котором различные инструменты могут выполнять свою работу унифицированным образом. Это обеспечивает общую платформу для инженера по автоматизации.
Существуют различные типы фреймворков. Они классифицируются на основе используемого ими компонента автоматизации. Это: