Файл: Отладка и основные подходы в тестирование программ, ограничения.pdf
Добавлен: 14.06.2023
Просмотров: 220
Скачиваний: 2
СОДЕРЖАНИЕ
ГЛАВА 1 ОСНОВЫ ТЕСТИРОВАНИЯ ПРОГРАММ
1.1. Терминология тестирования программных продуктов
1.2. Существующие виды тестирования
1.3. Обзор существующих библиотек для проведения тестирования
ГЛАВА 2. ОБЗОР СРЕДСТВ И ТЕХНОЛОГИЙ АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ
2.1. Анализ функциональных возможностей системы Soap UI и Selenium
2.2. Анализ возможностей средства Ranorex и Rational Functional Tester
2.3 Анализ преимуществ и недостатков автоматизации тестирования программ
ГЛАВА 3 СПЕЦИФИКА РЕАЛИЗАЦИИ ПРОЦЕССА ТЕСТИРОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
3.1. Разработка и описание проекта для проведения тестирования
3.2. Конфигурация и применение средства автоматизации тестирования Jenkins
ВВЕДЕНИЕ
Актуальность темы исследования заключается в важности и целесообразно исследования специфики обеспечения тестирования программного обеспечения в условиях современности. Изучение возможностей автоматизации процесса тестирования программ позволяет современным командам разработчиков различных приложений снижать временные и материальные затраты на поддержку и проверку программного кода.
Объект исследования: особенности технологий и средств тестирования программного обеспечения.
Предмет исследования: возможности применения автоматизации тестирования программного обеспечения на базе интеграции различных решений и программных инструментов.
Цель работы заключается в закреплении, расширении, обобщении и систематизации знаний в рамках изучаемой предметной дисциплины, за счет проведения анализа специфики использования современных подходов и программных средств тестирования программного обеспечения.
Задачи исследования:
- Обзор терминологии тестирования современных программных продуктов.
- Обзор существующих видов тестирования программ.
- Анализ возможностей существующих библиотек для проведения тестирования приложений.
- Анализ функциональных возможностей существующих средств и технологий автоматизации тестирования.
- Описание специфики реализации процесса тестирования программного обеспечения на базе средства автоматизации 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.