Файл: Основные понятия качества и тестирования программ.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 15.06.2023

Просмотров: 302

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Тестирование – это[2]:

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

Тестирование и его процесс разделяют на три этапа (рис. 6): [13]

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

Рисунок 6 - Схема процесса тестирования[14]

Основная задача тестирования: определить такой набор данных, который был бы достаточно объемен и позволил бы сказать с большой степенью достоверность в правильности ПО вообще и в соответствии с требованиями.[16]

Основные проблемы тестирования[17]:

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

• Требование к тестам - программа на любом тесте должна останавливаться, а не зацикливаться.

• Выбор конечного набора тестов (X,Y) является неразрешимой задачей. Для решения практических задач ищутся частные случаи решения

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

1. Приводится классификация видов тестирования. Рассмотрена следующая классификация

  • Тестирование “белого ящика”, “черного ящика”, “серого ящика”.
  • По степени автоматизации тестов;
  • По виду позитивности;
  • По времени проведения;
  • По степени изолированности компонентов.

2. Рассмотрено тестирования Web-приложений.

3. Описан процесс организации тестирования.

4. Выделены основные проблемы которые могут возникнуть в процессе тестирования.

3. Практические вопросы отладки и автоматизированного тестирования


3.1. Отладка программы

Для каждого языка программирования есть своя среда разработки. Но все современные среды разработки, такие как Visual Studio, Delphi Embasador и т.д., имеют похожий аппарат отладки программного обеспечения, рассмотрим его.

У Delphi есть мощное средство поиска и устранения ошибок в программе — отладчик. Отладчик позволяет выполнять трассировку программы, наблюдать значения переменных, контролировать выводимые программой данные. [11]

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

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

Delphi обеспечивает два режима трассировки[19] (рисунок 7):

  • без захода в процедуру (Step over);
  • с заходом в процедуру (Trace into).

При отладке широко используется метод, который называют методом точек останова. Суть метода – необходимо отметить некоторую инструкцию программы (поставить точку останова), при достижении которой программа приостанавливает свою работу, и программист может начать трассировку или проконтролировать значения переменных. [9]

Рисунок 7 – Отладка примера

Рисунок 8 – Точка останова

Во время отладки, бывает полезно знать, чему равно значение той или иной переменной. Отладчик позволяет наблюдать значения переменных программы. [19]

Рисунок 9 – Просмотр значения переменных

Рисунок 10 – Watch List с искомыми переменными

После отладки и создание рабочего проекта, точки останова необходимо удалить.

3.2. Автоматизированное тестирование

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


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

В курсовой работе рассмотрим процесс создания одного скрипта для автоматизированного тестирования формы регистрации web-сайта. Средой автоматизированного тестирования выберем Selenium IDE[5]

Selenium IDE (Integrated Development Environment, интегрированная среда разработки) — это инструмент, используемый для разработки тестовых сценариев. Он представляет собой простое в использовании дополнение к браузеру Firefox и, в целом, является наиболее эффективным способом разработки тестовых сценариев. Дополнение среди прочего содержит контекстное меню, позволяющее пользователю сначала выбрать любой элемент интерфейса на отображаемой браузером в данный момент странице, а затем выбрать команду из списка команд Selenium с параметрами, предустановленными в соответствии с выбранным элементом. [1]

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

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

Схему взаимодействия моделей системы Selenium можно представить следующим видом (Рисунок 11).

Рисунок 11 - Схема взаимодействия модулей системы Selenium[1]

Для осуществления загрузки компонента в программу Selenium необходимо выполнить ряд действий:[4]

  • Открыть вкладку “File”;
  • Нажать клавишу “Open”; (Рисунок 12)
  • Выбрать необходимый для тестирования компонент или набор компонентов;
  • Нажать клавишу “Открыть”. (Рисунок 13)

Рисунок 12 - Открытие окна Select a File


Рисунок 13 - . Окно Select a File

В данный момент Selenium используя модуль “Диспетчер загрузки компонентов”[5] осуществляет импортирование выбранных компонентов. По завершению загрузки компонентов имеется возможность простого запуска разработанного компонента или при наличии необходимости произвести его изменение, внеся всю необходимую информацию через интерфейс SeleniumIDE.[4]

При запуске компонента необходимая информация передается в модуль “Диспетчер запуска и работы компонента” являющегося основным модулем контроля выполнения загруженного компонента.(Рисунок 6)

Процесс выполнения компонента сводится к следующим шагам[1]:

  • SeleniumIDE устанавливает связь с сервером Selenium;
  • Сервер Selenium запускает браузер с URL, внедряющим Selenium ядра в загружаемую браузером веб-страницу;
  • SeleniumIDE передает серверу команды запрограммированные в компоненте;
  • Сервер интерпретирует команды и затем вызывает соответствующий JavaScript, исполняющий команду в браузере.
  • Selenium ядро дает браузеру команды выполнить первую инструкцию, обычно это открытие страницы тестируемого приложения;
  • Браузер получает запрос на открытие и запрашивает содержимое веб-сайта у сервера Selenium;
  • Сервер Selenium связывается с веб-сервером, запрашивая страницу. Получив ее, сервер Selenium отправляет страницу браузеру, маскируя источник таким образом, чтобы он выглядел так, будто страница пришла от того же сервера, что и Selenium Core (благодаря чему Selenium Core соблюдается правило ограничения домена);
  • Браузер получает веб-страницу и отображает в зарезервированном для нее окне.

При выполнении любой команды сервер и ядро передает информацию о состоянии в модуль “Запуска и работы компонента”, что позволяет отслеживать процесс работы компонента и регистрировать возникающие ошибки. По окончанию работы компонента, вся собранная информация из данного модуля передается в модуль “Формирования отчета по работе компонента” в котором вся информация предоставляется в читабельном виде. (Рисунок 14)[4]

Рассмотрим процесс работы компонента при прохождении одного из тест-кейсов.

Далее приведен пример работы компонента «Регистрация и работа пользователя в Интернет магазине». Разработанный компонент за одно свое выполнение производит проверку всех функциональных областей Интернет-магазина которые были выявлены для тестирования на шаге анализа требований. (Рисунок 9)

Действия выполняемые компонентом за одно выполнение:

- Регистрация нового пользователя в Интернет-магазине;


- Проверка возможности изменения информации в личном кабинете пользователя;

- Добавление и удаление объекта из корзины;

- Полноценный заказ товара;

- Работа консультанта.

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

Рисунок 14 - Форма регистрации пользователя в интернет-магазине

Assert.AreEqual("ПароливполяхПарольиПодтверждениепаролянесовпадают.", driver.FindElement(By.CssSelector("#password2_error_message > p")).Text);

}

catch (AssertionException e)

{

verificationErrors.Append(e.Message);

}

driver.FindElement(By.Id("password1")).Clear();

driver.FindElement(By.Id("password1")).SendKeys("●●●●●●●●●●●●");

driver.FindElement(By.Id("save_profile_but")).Click();

driver.FindElement(By.Id("password1")).Clear();

driver.FindElement(By.Id("password1")).SendKeys("ЙЦУкен123456");

driver.FindElement(By.Id("password2")).Clear();

driver.FindElement(By.Id("password2")).SendKeys("ЙЦУкен123456");

driver.FindElement(By.Id("save_profile_but")).Click();

driver.FindElement(By.CssSelector("img.logo")).Click();

driver.FindElement(By.LinkText("Вседляавтозвука")).Click();

driver.FindElement(By.XPath("//div[@id='category_products_25']/div/div/ul/li/a/img")).Click();

Листинг 1 - Часть скрипта проверки главного меню

Полный код данного компонента приведен в приложении А.

Основной задачей тестировщика является поиск и предупреждение ошибок. Так как всё приложение оттестировать полностью невозможно, то сложность этой задачи, как правило, сводится к тому, чтобы понять где и что искать. Первое правило, которым стоит руководствоваться любому тестировщику, – ошибки есть всегда и везде. Существует формула, по которой можно вычислить коэффициент обнаружения дефектов (КОД) командой тестировщиков. Для этого необходимо знать количество всех найденных командой дефектов (КНД) и количество дефектов, которые были найдены конечными пользователями уже после выдачи программы заказчику (количество ненайденных командой дефектов – КННД). Коэффициент обнаружения дефектов вычисляется по формуле: КОД = КНД / (КНД + КННД). Его можно использовать для того, чтобы оценить качество работы команды тестировщиков и их профессионализм. Чем выше этот коэффициент, тем лучше работает команда. Вторая особенность ошибок – это их кластерность. То-есть, ошибки чаще всего сосредоточены в каких-то конкретных местах. Кластерность ошибок определяется несколькими факторами: сложностью реализации компоненты, внимательностью разработчика, эмоциональным состоянием разработчика, опытом разработчика. Как отдельный фактор, можно назвать – случайные ошибки, но их количество столь мало в коде, что попытки их поиска довольно неэффективное мероприятие с точки зрения времени и ресурсов.