Добавлен: 15.06.2023
Просмотров: 298
Скачиваний: 2
СОДЕРЖАНИЕ
1. Основные понятия качества и тестирования программ
1.1. Качество программного обеспечения
1.2. Методы контроля качества программного обеспечения
1.3. Финишные этапы разработки программных систем
1.4. Терминология тестирования
2. Виды тестирования, тестирование надежности, организация процесса тестирования
3. Практические вопросы отладки и автоматизированного тестирования
Тестирование – это[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 - Часть скрипта проверки главного меню
Полный код данного компонента приведен в приложении А.
Основной задачей тестировщика является поиск и предупреждение ошибок. Так как всё приложение оттестировать полностью невозможно, то сложность этой задачи, как правило, сводится к тому, чтобы понять где и что искать. Первое правило, которым стоит руководствоваться любому тестировщику, – ошибки есть всегда и везде. Существует формула, по которой можно вычислить коэффициент обнаружения дефектов (КОД) командой тестировщиков. Для этого необходимо знать количество всех найденных командой дефектов (КНД) и количество дефектов, которые были найдены конечными пользователями уже после выдачи программы заказчику (количество ненайденных командой дефектов – КННД). Коэффициент обнаружения дефектов вычисляется по формуле: КОД = КНД / (КНД + КННД). Его можно использовать для того, чтобы оценить качество работы команды тестировщиков и их профессионализм. Чем выше этот коэффициент, тем лучше работает команда. Вторая особенность ошибок – это их кластерность. То-есть, ошибки чаще всего сосредоточены в каких-то конкретных местах. Кластерность ошибок определяется несколькими факторами: сложностью реализации компоненты, внимательностью разработчика, эмоциональным состоянием разработчика, опытом разработчика. Как отдельный фактор, можно назвать – случайные ошибки, но их количество столь мало в коде, что попытки их поиска довольно неэффективное мероприятие с точки зрения времени и ресурсов.