Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Отладка и основные подходы в тестирование программ, ограничения

Содержание:

ВВЕДЕНИЕ

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

Объект исследования: особенности технологий и средств тестирования программного обеспечения.

Предмет исследования: возможности применения автоматизации тестирования программного обеспечения на базе интеграции различных решений и программных инструментов.

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

Задачи исследования:

  1. Обзор терминологии тестирования современных программных продуктов.
  2. Обзор существующих видов тестирования программ.
  3. Анализ возможностей существующих библиотек для проведения тестирования приложений.
  4. Анализ функциональных возможностей существующих средств и технологий автоматизации тестирования.
  5. Описание специфики реализации процесса тестирования программного обеспечения на базе средства автоматизации Jenkins.

В рамках первой главы данной работы рассмотрены основы тестирования программ. Рассмотрена современная терминология тестирования программных продуктов, проведен анализ существующих видов тестирования ПО. Осуществлен обзор существующих библиотек для обеспечения тестирования программ, написанных на различных языках программирования, таких как Java, С# и Groove. Выделены основные достоинства библиотеки тестирования NUnit.

Во второй главе приведены результаты проведенного обзора средств и технологий автоматизации процесса тестирования ПО. Описаны результаты проведенного анализа функциональных возможностей и достоинств Soap UI, Selenim, Ranorex и Rational Functional Tester. Проведен анализ общих преимуществ и недостатков, характерных для концепции автоматизированного тестирования ПО.

В рамках третье главы было проведено исследование специфики реализации процесса тестирования программного обеспечения на базе применения средства автоматизации тестирования. Описаны результаты разработки проекта для проведения тестирования, приведены основные фрагменты конфигурации и применения средств автоматизации тестирования Jenkins и библиотеки Allure Report.

В процессе написания курсовой работы использовалось 20 литературных источников. Наиболее полезными оказались следующие труды таких авторов: Б. Бейзера, К. Бек, Д. Бернса, Р. Блек, И.В. Винниченко, С. Канера, Д. Коваленко, Г. Майерса, Дж. Мессароша, Д. Стотлемайера, П.Б. Хорева и С. Хорстмана, т.к. все перечисленные авторы уделили много внимания описанию специфике и концепциям тестирования программных средств и продуктов.

ГЛАВА 1 ОСНОВЫ ТЕСТИРОВАНИЯ ПРОГРАММ

1.1. Терминология тестирования программных продуктов

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

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

Компонент набор функций, который будет использоваться многократно в различных тестах [4].

Создание тестов или компонентов происходит путем записи сеанса работы с приложением или web-сайтом. Также существует возможность ручного создания тестового скрипта, используя в поле ключевых слов ключевые слова из предварительно созданного хранилища объектов (object repository).

Чтобы создать тест или компонент необходимо написать (записать) скрипт выполнения данного теста.

Существует два варианта записи скрипта:

  • автоматически записать сеанс работы с приложением или сайтом;
  • сформировать object repository и использовать эти объекты для добавления шагов вручную или поле кода [7].

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

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

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

Тестовые сценарии (ТС) применяют для проверки различных функциональных требований и оценки нефункциональных требований. В ряде случаев применяются тесты, в которых количественные параметры проведенных результатов только в общем виде удовлетворяют поставленным целям тестирования.

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

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

ТС должен помочь провести проверку продукта без ознакомления со всей документацией. Написанный один раз, он удобен в поддержке, т.к. экономит много времени и сил тестировщикам [9].

Для написания тестовых сценариев, используются, как правило, следующие элементы:

- Идентификатор - уникальный идентификатор тест-кейса. Его удобно использовать для единообразного понимания, о которой проверке говорится.

- Название - краткое описание сути проверки. Должно быть компактным и быть понятным.

- Описание - описание элемента тестового сценария.

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

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

- Test Data - данные, которые используют тестовые сценарии.

- Ожидаемый результат - сама проверка: что мы ожидаем получить после выполнения всех шагов тестирования [4].

1.2. Существующие виды тестирования

Современные виды тестирования ПО, в зависимости от необходимых поставленных целей и технических заданий, часто классифицирую на такие обобщенные группы [5]:

- Функциональный вид тестирования ПО.

- Нефункциональные вид тестирования ПО.

- Вид тестирования ПО, сопряженный с возможными изменениями.

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

К наиболее распространенным видам функциональных тестов чаще всего относятся [7]:

  • Функциональное тестирование.
  • Тестирование безопасности доступа.
  • Тестирование специфики взаимодействия.

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

1. Тестирования производительности:

  • нагрузочное тестирование ПО;
  • стрессовое тестирование ПО;
  • тестирование стабильности ПО.

2. Тестирование установки.

3. Тестирование удобства (комфорта) использования.

4. Тестирование на отказоустойчивость.

5. Конфигурационное тестирование [4].

Связанные с изменениями виды тестирования.

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

  • Дымовое тестирование ПО.
  • Регрессионное тестирование ПО.
  • Тестирование сборки ПО.
  • Верификация исправности или согласованности ПО.

1.3. Обзор существующих библиотек для проведения тестирования

Языки программирования представляют собой формальные знаковые системы, предназначенные для записи компьютерных программ. Они определяют наборы различных синтаксических, лексических, семантических принципов и правил, на базе которых формируются программные комплексы и возможные действия, выполняемые пользователем. Главная черта высокоуровневых языков программирования - наличие механизмов абстракций, представляющих собой смысловые конструкции, которые описывают различные структуры данных, возможные операции над данными [12].

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

На сегодняшний день на рынке наблюдается обилие решений, направленных на осуществление тестирования программных продуктов, с возможностями интеграции с различными языками программирования и средами разработки. Рассмотрим наиболее актуальные из них [15,16].

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

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

На практике, в Java широко используются такие библиотеки тестирования, как JUnit 3, JUnit 4, Mockito, JMock, EasyMock, FEST Assert, Hamcrest, XMLUnit, HttpUnit, JaCoCo, TestNG и др. JUnit 4 в отличие от JUnit 3 полностью построен на аннотациях [13].

Для использования данной технологии аннотаций необходимо загрузить библиотеку JUnit с сервера junit.org и включить архив junit.jar в список библиотек приложения. Пример работы с тестовым проектом с использованием JUnit в IDE IntellijIdea приведен на рис.1.

Рисунок 1 – Работа с тестовым проектом с использованием JUnit в IDE IntellijIdea

При подключения возможностей проведения модульного тестирования в разрабатываемое ПО [6]:

— тесты строятся не только для очевидных методов взаимодействия с системой;

— ошибки идентифицируются непосредственно в процессе разработки класса или метода;

— наибольшим приоритетом являются тесты, ориентированные на положительные сценарий взаимодействия с системой;

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

— разработчику необходимо имплементировать четко сфокусированные на своих обязанностях фрагменты программного кода, по причине сложности тестирования хаотичного и не структурированного кода;

— уменьшается возможное число новых ошибок в случае имплементации новых функциональностей;

— устаревшие тесты необходимо регулярно убирать;

— некорректное завершение модульного теста позволяет информировать о нарушении технических заданных требований от заказчика;

— каждое техническое требование должно иметь конкретный модульный тест;

— обеспечение работоспособного кода с минимальными затратами.

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

Язык Groovy. Разработан для платформы Java в качестве альтернативы с поддержкой возможностей Ruby, Python и Smalltalk.

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

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

Пример работы с тестовым проектом в языке Groovy с использованием Groove.Test.Suite в IDE Eclipse приведен на рис.2.

Рисунок 2 – Работа с тестовым проектом в языке Groovy с использованием Groove.Test.Suite в IDE Eclipse

Принципиальные отличия Groovy от Java [19,20]:

— Поддержка как статической, так и динамической типизации.

— Интеграция синтаксиса обработки различных коллекций: ассоциативных массивов, массивов, а также регулярных выражений.

— Поддержка замыканий различных уровней.

— Перегрузка выполняемых операций.

В связке с Groovy часто применяется Spock Framework, для обеспечения возможностей комплексного тестирования десктопных программных продуктов и различных веб-приложений. Чаще всего для задач тестирования использут такие методы [14]:

  • setup() — выполняется перед каждым тестовым сценарием;
  • cleanup() — выполняется после каждого тестового сценария;
  • setupSpec() — выполняется только до первого сценария в спецификации;
  • cleanupSpec() — выполняется только после последнего сценария в спецификации.

Язык C#. Данный язык программирования реализует компонентно-ориентированный подход в программировании приложений, что позволяет снизить машинно-архитектурную зависимость полученного кода, благодаря чему достигается высокая степень переносимости и повторного использования кода. Преимущества языка: включает расширенную и гибкую поддержку событийно-ориентированного программирования, эффективно интегрируется с существующими продуктами от Microsoft. Главными недостатками языка является довольно сложный синтаксис и не высокая, в сравнении с С++, производительность [5].

Для среды MS Visual Studio существует различное количество фреймворков и библиотек для тестирования программных приложения, как десктопных, так и имеющих веб-архитектуру. К наиболее часто используемым на практике относятся MS Unit Testing Framework, Selenium Webdriver и NUnit.

NUnit — открытая среда модульного-тестирования ПО для платформ семейства .NET. В прошлом ее портировали с библиотеки JUnit. Первые версии NUnit были написаны на языке программирования J#, однако в дальнейшем программный код был переписан под язык C# с поддержкой атрибутов.

Существуют наборы расширений пакета NUnit, большая часть из которых являются проектами с открытым исходным кодом. NUnit.Forms обеспечивает NUnit набором средств тестирования имеющихся элементов пользовательского интерфейса, выполненного на базе Windows Forms. NUnit.ASP предназначено для выполнения аналогичных действий над элементами интерфейса в ASP.NET [10].

Пример работа с тестовым проектом на С# с использованием NUnit приведен на рис.3.

Рисунок 3 – Работа с тестовым проектом на С# с использованием NUnit

Достоинства NUnit:

  1. Экономия времени. Тестирование ПО осуществляется в полностью автоматическом режиме, что является ключевым преимуществом в тех случаях, когда создано значительное колличество unit тестов.
  2. Гарантия правильности написанного программного кода. Измерить уровень правильности и корректности кода можно наиболее полно в тех случаях, когда имеется информация об уровне покрытия кода тестами.
  3. Простота тестирования. С повышением сложности структуры программного модуля возрастает трудоемкость его тестирования, в связи с чем его разбивают на простые составляющие (подмодули). В таком случае сложное тестирование модуля сводится к тривиальному проведению серии простых тестов.
  4. Простой механизм рефакторинга. В случае наличия правильных и корректных тестов можно вносить изменения, осуществляя оперативную проверку правильности прохождения тестов, что существенно сокращает время отладки.

Выводы по главе 1

В рамках данной главы рассмотрены основы тестирования программ. Рассмотрена современная терминология тестирования программных продуктов, проведен анализ существующих видов тестирования ПО. Осуществлен обзор существующих библиотек для обеспечения тестирования программ, написанных на различных языках программирования, таких как Java, С# и Groove. Выделены основные достоинства библиотеки тестирования NUnit.

ГЛАВА 2. ОБЗОР СРЕДСТВ И ТЕХНОЛОГИЙ АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ

2.1. Анализ функциональных возможностей системы Soap UI и Selenium

SoapUI — это кроссплатформенное клиентское оконное приложение с открытым исходным кодом, лицензией GNU и реализацией на языке Java. Поддерживаются версии для Linux, Windows и MacOS.

Поддерживаются технологии SOAP/WDSL, REST, Web и HTTP, AMF, JDBC, JMS и системы автоматической сборки Maven, Hudson, Bamboo, Ant, JUnit и другие. Возможности интеграции с IDE IntellijIdeam, NetBeans, Eclipse.

SoapUI обладает гибкими возможностями для тестирования веб-сервисов путем отправки им сообщений и получения ответов. 

SoapUI является одним из ведущих функциональных инструментов для тестирования SOA и Web-сервисов. С помощью понятного в использовании графическому пользовательскому интерфейсу, функциям корпоративного сегмента, данное приложение обеспечивает простоту и мобильность создания и выполнения функциональных, регрессионных и нагрузочные тестов разрабатываемого ПО. Таким образом в рамках единой среды SoapUI обеспечивает комплексное покрытие тестов – от SOAP и REST, на базе применения различных веб-служб, до JMS сообщающихся слоев предприятий, баз данных, Rich Internet Applications, и др [13].

При необходимости, возможно напрямую добавить WSDL, разработав образец запроса для всех операций в службе, и создать макет импортированного WSDL. После создания проекта предоставляются функциональные возможности создания и запуска любое количество функциональных / нагрузочных тестов и MockServices. Наличие окна Navigator, отображающего структуру дерева в левой части главного окна, прогресс испытания тестов постоянно находится в поле зрения. Из главного окна приложения можно управлять и контролировать все, что связано с проектом.

Пример работы с тестовым проектом в SoapUI приведен на рис.4.

Рисунок 4 – Работа с тестовым проектом в SoapUI

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

К преимуществам Soap UI относятся [7]:

  1. Поддержка Mock-сервисов.
  2. Использование скриптов с возможностью расширения.
  3. Поддержка функционального, нагрузочного тестирования.
  4. Широкие возможности тестирование безопасности приложений.
  5. Интеграция с JUnit, Maven, Ant, CI (Hudson & Bamboo).
  6. Поддержка плагинов для работы с IDE: NetBeans, Eclipse, IDEA.

Окно работы с тестовым проектом в SoapUI представлено на рис.1.5. Окно состоит из нескольких отдельных фрагментов:

  1. Информация о проектах.
  2. Настройки для рассматриваемого проекта.
  3. Запрос для отправки.
  4. Полученный ответ.

Существенными достоинствами Soap UI являются:

  1. Возможности адаптации WSDL схем для четкого и понятного восприятия.
  2. Поддержка различных заглушек для тестирования.
  3. Гибкие возможности хранения и поддержания тестов и тесткейсов [13].

Система Selenium включает ряд инструментов, имеющих свое прикладное назначение. Перечислим основные из них [3].

1. Selenium Webdriver.

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

Пример работы с тестовым проектом в Selenium IDE приведен на рис.5.

Создатели WebDriver приняли решении при разработке осуществить слияние двух отдельных проектов для создания более надежного и гибкого инструмента автоматизации процесса проведения тестирования. В качестве ядра данного средства может быть интегрирована собственная реализация WebDriver или более ранняя, которая была имплементирована в рамках Selenium 1. При этом в Selenium 2 подключена библиотека Selenium RC, что позволяет организовать обратную совместимость. С помощью данного средства появляется поддержка миграции существующих тестовых кейсов на более новую версию инструмента.

Рисунок 5 – Работа с тестовым проектом в Selenium IDE

2. Selenium Remote Control – первая версия данного инструмента. Selenium 1 широко применяется на практике тестирования в режиме сопровождения, в силу того, что позволяет обеспечить ряд возможностей, не до конца реализованных в рамках Selenium 2. В частности, это поддержка ряда устаревших языков программирования (Perl, Fortran) и поддержку ряда браузеров [8].

3. Selenium IDE — это среда разработки, которая применяется ждя создания и выполнения тестовых сценариев. Является удобным в использовании дополнением (плагином) к распространенному бесплатному браузеру Firefox. Плагни поддерживает возможность использования контекстного меню, обеспечивающего пользователю возможность выбора различных элементов интерфейса на открытой странице в веб-браузере, после чего есть возможность выбора команды из списка Selenium с необходимыми параметрами. 

4. Selenium Grid.

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

Selenium Grid обеспечивает возможность запуска тестов в параллельном режиме, что позволяет различным тестам проходить проверку одновременно на нескольких удаленных рабочих станциях или серверах. В связи с этим появляется два значительных преимущества [3].

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

Во-вторых, в случае, когда разработанные тесты ПО необходимо запускать в различных рабочих окружениях, браузерах или операционных системах, появляется возможность настройки удаленных серверов развертывания с независимом запуском одного набора тестов во всех необходимых средах. Это значительно ускоряет процесс тестирования. Это является значительным преимуществом Selenium в сравнении с существующими аналогами [8].

2.2. Анализ возможностей средства Ranorex и Rational Functional Tester

Ranorex является средством автоматизации тестирования GUI для тестирования настольных, web и мобильных приложений. Ranorex не имеет собственного языка сценариев, и использует в этом качестве стандартные языки программирования C# и VB.NET в качестве базы [9, 11].

Поддерживаемые приложения:

  • Windows native (WinForms, WPF, Win32);
  • Java;
  • Qt;
  • Delphi;
  • Flex +;
  • HTML.

Браузеры:

  • Internet Explorer;
  • Mozilla Firefox;
  • Chrome;
  • Safari.

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

Исполнение тестов происходит путем последовательного запуска .exe файлов test-suite. После их выполнения формируется по одному файлу формата zip на один test-suite, каждый из которых включает один файл XML с полученными результатами. Затем программный скрипт осуществляет конвертацию XML формата в xUnit. За счет этого достигается возможность получить отчетов по каждому клиенту в Ranorex и в графическом формате представления тестов.

На базе записи данных действий происходит автоматическое формирование программного кода. Каждый шаг, при этом, можно написать вручную [2].

Окно создания тестового проекта в Ranorex представлено на рис.6.

Рисунок 6 – Создание тестового проекта в Ranorex

IBM Rational Functional Tester – это комплексный инструмент проведения автоматизированного регрессионного и функционального тестирования.

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

Rational Functional Tester входит в состав IBM Rational Quality Manager, что представляет собой стек средств управления процессом тестирования, идентификации дефектов, управления различными версиями сценариев осуществления тестирования и менеджмента требований. Инструментальные средства, которые интегрированы в данную платформу, позволяют обеспечить процесс ускорения разработки приложений, что способствует облегчению координации и коммуникации внутри разработчиков [4].

Окно работы с тестовым проектом в Rational Functional Tester представлено на рисунке 7.

Рисунок 7 – Работа с тестовым проектом в IBM Rational Functional Tester

Основные возможности [7]:

  • проведение процесса тестирования программных приложений на языке Java;
  • тестирование различных Web-приложений, реализованных на базе JavaScript, HTML и др;
  • написание модульных тестовых сценариев на базе языка Java;
  • интеграция технологии ScriptAssure для обеспечения проверки модификации прикладных данных;
  • поддержка коммуникационных коллективных средств системы Rational;
  • имплементация возможностей проверки работы приложений 3270 (zSeries) и 5250 (iSeries) с помощью плагина Functional Tester Extension для терминальных приложений.

2.3 Анализ преимуществ и недостатков автоматизации тестирования программ

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

Преимущества автоматизации тестирования [4,6,7]:

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

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

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

- Наличие гибких отчетов. Отчеты о результатах тестирования генерируются и рассылаются автоматически.

Недостатки [1,2,6,7]:

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

- Рост расходов на поддержку. С увеличением количества релизов и развертываний в различных инфраструктурах повышаются временные и материальные затраты на поддержку.

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

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

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

Выводы по главе 2

В данной главе приведены результаты проведенного обзора средств и технологий автоматизации процесса тестирования ПО. Описаны результаты проведенного анализа функциональных возможностей и достоинств Soap UI, Selenim, Ranorex и Rational Functional Tester. Проведен анализ общих преимуществ и недостатков, характерных для концепции автоматизированного тестирования ПО.

ГЛАВА 3 СПЕЦИФИКА РЕАЛИЗАЦИИ ПРОЦЕССА ТЕСТИРОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

3.1. Разработка и описание проекта для проведения тестирования

Для разработки системы автоматизированного тестирования за основу был взят паттерн проектирования Page Object.

Page Object - один из самых полезных и используемых архитектурных решений в автоматизации.

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

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

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

Далее рассмотрим несколько примеров описания элементов страницы с помощью самописного декоратора:

1. Описание выпадающего списка на странице.

@FindBy(name = "bmonth") public SelectList bmonthField;

2. Описание текстового поля на странице.

@FindBy(name = "firstname")

public TextField firtNameField;

3. Описание кнопки на странице.

@FindBy(name = "submit")

public Button submitButton;

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

Далее рассмотрим действие над несколькими стандартными элементами страницы.

Над текстовым полем можно сделать действие очистки поля и ввести новое значение в поле, что представлено на следующем фрагменте:

@Step("FirstName {0}")

public AddAddressPage setFirtNameField(String text){

firtNameField.clearAndType(text); return this;

}

Над выпадающим списком можно сделать выбор значения из представленных в списке:

@Step("Month {0}")

public AddAddressPage setBmonthField(String text){ bmonthField.select(text);

return this;

}

Над кнопкой можно с эмулировать действия клика мыши:

@Step("Enter")

public void clickSubmitButton(){

submitButton.click();

}

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

addGroupPage = initElements(new AddGroupPage(this));

Для каждого объекта в приложении созданы классы-помощники, которые наследуются от базового класса-помощника DriverBaseHelper. Он создает объект PageManager, а также инициализирует WebDriver для класса-помощника и передает помощникам ApplicationManager.

Классы-помощники нужны для описания общих действий над объектами, таких как: создание, редактирование, удаление и т.д.

Классы-помощники имеют доступ как к действиям над элементами страницы через PageManager, так и к другим классам-помощникам через ApplicationManager. Для нашего приложения используется следующие классы-помощники:

  • NavigationHelper - ответственный за навигацию по страницам;
  • GroupHelper - ответственный за действия над группами;
  • AddressHelper - ответственный за действия над адресами.

Всеми менеджерами управляющей ApplicationManager, которому все менеджеры создаются и ограничиваются к ним доступ.

Также данный менеджер ответственный за запуск и остановку браузера и передачу параметров в WebDriver.

Все тестовые классы наследуются от класса TestBase, который служит для создания ApplicationManager и остановке браузера после завершения тестов.

В каждом тестовом классе описываются тесты по конкретному объекту: тесты с адреса в классе AddressTest, по группа в классе GroupTest.

Для управления тестовыми данными используется технология - Data Driven Testing.

Data Driven Testing (тесты, управляемые данными) - это такой подход к тестированию, при котором тестовые данные хранятся отдельно от скриптов, обычно в документе Excel, CSV-файле или в базе данных. То есть данные для тестов хранятся отдельно и в зависимости от количества набора тестовых данных будет зависеть количество тестов [13].

Для генерации тестовых отчетов использовался Allure Framework.

Для успешной генерации отчетов необходимо все методы воздействия над элементами заметить аннотацией @step (), а тестовые методы заметить аннотация @Title и @Description.

На рис. 8 можно увидеть общий вид фрагмента UML-диаграммы проекта.

Рисунок 8 – UML-диаграмма проекта

3.2. Конфигурация и применение средства автоматизации тестирования Jenkins

Для дальнейшей работоспособности тестов, следует создать новый job и настроить его (рис.9).

Для создания новой job в Jenkins, выбираем первый предложенный пункт. Это - основной и наиболее универсальный тип задач в Jenkins. Jenkins будет собирать наш проект, комбинируя любую SCM с любой сборочной системой.

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

Рисунок 9 – Создание job

После того как job была создана, следует провести все настройки для удачного выполнения тестов.

На рис. 10 управления исходным кодом осуществляется с помощью «Git» (распределенная система управления версиями).

Система управления версиями (от англ Version Control System, VCS) - это программное обеспечение для облегчения работы с переменной информацией.

Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое [20]\.

А сами разработанные программные тесты находятся на https://github.com.

GitHub - крупнейший веб-сервис для хостинга ИТ-проектов и их совместной разработки.

Сервис абсолютно бесплатный для проектов с открытым исходным кодом и предоставляет им все необходимые возможности для хранения и тестирования.

Рисунок 10 – Настройка job

После сохранения настроек, Jenkins будет иметь следующий вид (рис. 11).

Рисунок 11 - Страница запуска job-а

Для запуска тестов нажимаем на кнопку «Запланировать сборник: Address Book» и тесты должны запуститься.

Чтобы убедиться, что разработанные тесты прошли успешно, переходим на страницу «Console Output» и видим результат проделанной работы рис. 12.

Рисунок 12 - Окно результатов тестирования Console Output

Результат отображения успешного проведения тестирования сборки приведен на рис.13.

Рисунок 13 – Проверка успешности проведения тестов

Одной из особенностей Allure Report является создание отчетов. Отчеты генерируются с помощью консольной утилиты или плагинов для систем непрерывной интеграции и сборки проекта. На вкладке «Результаты» можно посмотреть функциональность работы отчетов об успешно прошедший тестах. Результаты работы данной библиотеки приведены на рис. 14.

Рисунок 14 – Создание отчетов в Allure Report

Например, создание отчета о тесте - «Тест создания группы» включает такие пункты:

- заполняется поле Group name (Название группы);

- заполняется поле Group header (Logo) (Заголовок группы (логотип))

- заполняется поле Group footer (Comment) (группа колонтитула (Комментарий))

- заполняется поле Enter information (Введите информацию).

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

Выводы по главе 3

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

ЗАКЛЮЧЕНИЕ

В рамках первой главы данной работы рассмотрены основы тестирования программ. Рассмотрена современная терминология тестирования программных продуктов, проведен анализ существующих видов тестирования ПО. Осуществлен обзор существующих библиотек для обеспечения тестирования программ, написанных на различных языках программирования, таких как Java, С# и Groove. Выделены основные достоинства библиотеки тестирования NUnit, рассмотрена специфика библиотеки модульного тестирования JUnit.

Во второй главе приведены результаты проведенного обзора средств и технологий автоматизации процесса тестирования ПО. Описаны результаты проведенного анализа функциональных возможностей и достоинств Soap UI, Selenim, Ranorex и Rational Functional Tester, приведены примеры интерфейсов каждого из рассмотренных средств. Проведен анализ общих преимуществ и недостатков, характерных для концепции автоматизированного тестирования ПО.

В рамках третье главы было проведено исследование специфики реализации процесса тестирования программного обеспечения на базе применения современного средства автоматизации тестирования программ. Описаны результаты разработки проекта для проведения тестирования, приведены основные фрагменты настройки, поэтапной конфигурации и применения средств автоматизации тестирования Jenkins и библиотеки Allure Report.

.В процессе выполнения курсовой работы решены следующие поставленные задачи:

  1. Проведен обзор терминологии тестирования современных программных продуктов.
  2. Осуществлен обзор существующих видов тестирования программ.
  3. Проведен анализ возможностей существующих библиотек для проведения тестирования приложений.
  4. Проведен анализ функциональных возможностей существующих средств и технологий автоматизации тестирования.
  5. Описана специфика реализации процесса тестирования программного обеспечения на базе средства автоматизации Jenkins.

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

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  1. Бейзер Б. Тестирование черного ящика. Технологии функционального тестирования программного обеспечения и систем. – СПб.: Издательский дом "ПИТЕР", 2014. – 426 с.
  2. Бек К. Экстремальное программирование: разработка через тестирование. – СПб.:Питер, 2013. - 224 с.
  3. Бернс Д. Selenium 2 средства тестирования: руководство для начинающих. – М.: Packt Publishing, 2012. - 285 с.
  4. Блек Р. Ключевые процессы тестирования. – М.: Академия, 2013. - 544 c.
  5. Веренинов И.А. Основы программирования. Учебное пособие. – СПб.: Издательство Политехнического университета, 2012. – 212 c.
  6. Винниченко И.В. Автоматизация процессов. – СПб.: Питер, 2015. – 312 с.
  7. Канер С. Тестирование программного обеспечения. – К.: ДиаСофт, 2014. — 612 с.
  8. Коваленко Д. Selenium Design Patterns and Best Practices. – М.: PACKT Publishing, 2014. - 320 с.
  9. Майерс Г. Искусство тестирования программ. – К.: Сандлєр, 2012. - 272 с.
  10. Месарош Дж. Шаблоны тестирования xUnit. – СПб.: Вільямс, 2009. - 832 с.
  11. Орлов С.А. Теория и практика языков программирования. – СПб.: Питер, 2014. – 688 с.
  12. Себеста Р. Основные концепции языков программирования. – М.: Эксмо, 2013. – 316 с.
  13. Стотлемайер Д. Тестирование web - приложений. – М.: КУДИЦ-ОБРАЗ, 2013. – 315 с.
  14. Сьерра К. Изучаем Java. – М.: Эксмо, 2013. – 414 с.
  15. Тюгашев А.А.. Основы программирования. Часть 1. – СПб.: Университет ИТМО, 2016. – 160 с.
  16. Тюгашев А.А.. Основы программирования. Часть 2. – СПб.: Университет ИТМО, 2016. – 160 с.
  17. Хаггарти  Р. Дискретная математика для программистов. – М.: Техносфера, 2014. – 378 с.
  18. Холодов Г.М., Поповкин А.В. Алгоритмическое и объектно-ориентированное программирование. – М.: МГТУ МАМИ, 2013. – 459 с.
  19. Хорев П.Б. Объектно-ориентированное программирование. – М.: Академия, 2012. – 446 с. 
  20. Хорстманн С. Java. Библиотека профессионала. – М.: ООО И.Д. Вильямс, 2014. – 864 с.