РАЗРАБОТКА КОМПЛЕКСА ПРОГРАММ ДЛЯ АВТОМАТИЗИРОВАННОГО ТЕСТИРОВАНИЯ, АНАЛИЗА АРМ ДИЛЕРА МЕЖДУНАРОДНОГО ВАЛЮТНОГО
РЫНКА FOREX М.С. Тулякова Научный руководитель - к. т.н., доцент Б.А. Крылов
Проведено исследование различных видов и методов тестирования программного обеспечения, а также изучена предметная область разработки: рынок Forex. Произведена разработка приложения, позволяющего осуществлять стрессовое, нагрузочное, негативное тестирование протокола взаимодействия между сервером и АРМ Диллера. Приложение имеет графический интерфейс и разработано на языке Java 2.0
Введение
Торговля на международном рынке Forex - одна из составляющих изменения курса мировых валют. Каждый день на рынке Forex продается и покупается с выше пятисот миллионов долларов, евро, фунтов стерлингов и прочих валют. При этом все перемещения денежных масс происходит виртуально, и очень важной частью в этом процессе являются сервера, обеспечивающие возможность совершения сделок, и люди, которые контролируют сделки на рынке (дилера). Соответственно, чтобы сделки проходили честно, быстро и надежно, необходим четкий и постоянный контроль за всеми составляющими серверной платформы, обеспечивающей торговлю на рынке. Одной из них является протокол взаимодействия дилера с сервером, в том числе - определение времени реакции сервера на разные запросы при разной нагрузке, поскольку курс валют меняется до 50 раз в минуту, и сделка, совершенная по курсу, который был упущен из-за того, что сервер не успел отреагировать, может обернуться не только проблемами для клиентов, заключивших сделку, но и отразиться на общемировом курсе валют. Для того чтобы определить узкие места, улучшить производительность и скорость взаимодействия между дилером и серверной платформой, требуется комплекс, который позволил бы совместить в себе нагрузочное, стресс- и функциональное тестирование и был родственен по своей структуре самому серверу.
Одним из составляющих системы является протокол передачи данных между сервером и клиентами, работающий поверх протокола HTTP/HTTPs. Протокол обмена разделен на две части - запросы, передаваемые методом GET, и частично POST. Ответы приходят в XML по протоколу HTTP. В течение долгого времени разработчики наблюдали ошибки, связанные с передачей данных, а также задержки ответов со стороны сервера, но на тот момент не было средств для определения устойчивости протокола и поиска места в коде или протоколе, из-за которого происходят задержки. Именно поэтому потребовалось создать программное обеспечение (ПО), которое позволило бы протестировать и сервер, и протокол, причем с применением разных тестовых подходов - стресс-тестирование, нагрузочное, функциональное и негативное тестирования. Было предложено сделать основной упор на функциональное и стрессовое тестирование, поскольку, в первую очередь, необходимо определить, правильно ли функционирует сервер и как он реагирует на сообщения при повышенной нагрузке. Обычное число пользователей, одновременно подключенных к серверу, в среднем составляет пятьсот человек, во время падения или роста курсов валют это число увеличивается почти вдвое. Поэтому проверка функциональности при стрессовых ситуациях очень важна, потому что с помощью этих тестов и при помощи мониторинговой системы сервера можно определить, в какой части кода происходит задержка сообщений.
Аналитический обзор существующих систем тестирования
Тестирование - один из важнейших этапов проверки качества разработанного ПО. Основной целью тестирования является увеличение вероятности того, что приложение при любых обстоятельствах будет функционировать надлежащим образом и будет соответствовать установленным требованиям. Тем самым приложение будет удовлетворять ожиданиям конечных пользователей благодаря обнаружению (и последующему устранению) как можно большего числа дефектов [1].
Принято разделять тестирование по уровням задач и объектов на разных стадиях и этапах разработки ПО [3].
(1) тестирование частей ПО (модулей, компонентов) с целью проверки правильности реализации алгоритмов - выполняется разработчиками;
(2) функциональное тестирование подсистем и ПО в целом с целью проверки степени выполнения функциональных требований к ПО - рекомендуется проводить отдельной группой тестировщиков, не подчиненной руководителю разработки;
(3) нагрузочное тестирование (в том числе стрессовое) для выявления характеристик функционирования ПО при изменении нагрузки (интенсивности обращений к нему, наполнения базы данных и т. п.) - для выполнения этой работы требуются высококвалифицированные тестировщики и дорогостоящие средства автоматизации экспериментов.
Каждый из типов применяется на одном или нескольких этапах тестирования ПО. Соответствие типов и этапов тестирования отображено в табл. 1.
Вид тестирования Стадия, этап Объект Критерий
Структурное, надежности Разработка Компоненты Покрытие ветвлений, функции
Сборочное Разработка Подсистемы Функциональность, степень проверки компонентов
Функциональное Разработка Система в целом Соответствие функциональным требованиям ТЗ
Регрессионное Разработка, сопровождение Система в целом Проверка качества внесения изменений
Нагрузочное Разработка, сопровождение Система в целом Оценка статистических характеристик системы, соответствие ТЗ, ТТХ, подбор конфигурации оборудования
Стрессовое Разработка, сопровождение Система в целом Корректность работы системы при предельных нагрузках
Таблица 1. Этапы тестирования
Виды и методы тестирования
Детерминированное тестирование (ДТ) - это наиболее эффективный метод тестирования, при котором задаются конкретные совокупности исходных данных, которым соответствуют также конкретные значения эталонных результатов. Этот метод позволят не только обнаружить ошибку, но и в ряде случаев локализовать ее.
ДТ основывается на нескольких подходах. (1) Структурное тестирование или тестирование программы как «белого ящика» (стратегия тестирования, управляемого логикой программы). Подбираются такие тесты,
которые позволяют обеспечить выполнение максимально возможные количества маршрутов, логических ветвлений, циклов и т.п.
(2) Функциональное тестирование или тестирование как «черного ящика» (тестирование по входу-выходу). Абстрагируясь от логики программы, проверяют только входные и выходные функциональные спецификации.
(3) Стахостическое тестирование - это тестирование, при котором исходные тестовые данные задаются множеством случайных величин с соответствующими распределениями, а для сравнения полученных результатов используются также распределения случайных величин. В результате при стохастическом тестировании возможно более широкое варьирование исходных данных, хотя отдельные ошибки могут быть не обнаружены, если они мало искажают средние статистические значения или распределения.
Модульное тестирование - это тестирование программы на уровне отдельно взятых модулей, функций или классов. Цель модульного тестирования состоит в выявлении локализованных в модуле ошибок в реализации алгоритмов, а также в определении степени готовности системы к переходу на следующий уровень разработки и тестирования. Модульное тестирование проводится по принципу «белого ящика», т.е. основывается на знании внутренней структуры программы и часто включает те или иные методы анализа покрытия кода.
Интеграционное тестирование - это тестирование части системы, состоящей из двух и более модулей. Основная задача интеграционного тестирования - поиск дефектов, связанных с ошибками в реализации и интерпретации интерфейсного взаимодействия между модулями.
Системное тестирование охватывает целиком всю систему. Большинство функциональных сбоев должно быть идентифицировано еще на уровне модульных интеграционных тестов. В свою очередь, системное тестирование обычно фокусируется на нефункциональных требованиях - безопасности, производительности, точности, надежности т.п. На этом уровне также тестируются интерфейсы к внешним приложениям, аппаратному обеспечению, операционной среде и т.д. [2]
Рынок Forex и программные средства для торговли на нем
Форекс (Forex) - от англ. foreign exchange market (международный валютный рынок) сформировался в 1971 году, когда межбанковская торговля после Бретон-Вудского соглашения перешла от фиксированных курсов валют к плавающим. Товаром на международном валютном рынке Forex являются валюты различных стран. Главный принцип на рынке Forex заключается в обмене одной валюты на другую по свободно формирующемуся курсу. При этом курс одной валюты относительно другой определяется равновесие спроса и предложения [5].
Рынок Forex не имеет конкретного места торговли, торговля на валютном рынке осуществляется по телефону или через компьютерные терминалы одновременно в сотнях банков во всем мире. Торговые операции на рынке совершаются круглые сутки в течении всей рабочей недели. Самый распространенный в настоящее время способ торговли на рынке Форекс - торговля через Интернет (интернет-трейдинг). Интернет-трейдинг сделал торговлю на валютном рынке доступной в любой точке мира, при наличии торгового терминала и выхода в Интернет.
Осуществить выход на FOREX возможно только через посредника. Таким посредником может быть дилинговый центр. Эта организация предоставляют канал связи (компьютерный или телефонный) с брокером, который дает котировки валюты и через которого можно совершать торговые операции. Клиент заключает договор с компанией, по которому последняя обязуется по поручению клиента за свой счет и от своего имени осуществлять операции. Главная особенность валютного рынка Forex, привле-
кающая к нему мелких игроков, - это возможность купли и продажи иностранных валют при отсутствии у трейдера всей суммы, необходимой для совершения сделки. Недостающую часть предоставляет дилинговый центр в виде кредитного плеча. Кредитное плечо - это отношение между суммой залога и выделяемым под нее кредитным капиталом. Риск потерь возлагается на клиента, депозит страхует дилинговый центр.
Сервер VTFX - программная платформа, которая обеспечивает бизнес-логику работы клиентов с рынком Forex, а также обеспечивает контроль и безопасность финансовых потоков пользователей и компании. При обращении клиента к серверу первым запросом должен быть запрос на получение TradingSystemlnterface (объект, который содержит информацию обо всех доступных пользователю сервисах на сервере. Список доступных сервисов зависит от типа пользователя и сервера). В качестве ответа сервером посылается XML, который содержит информацию о всех сервисах, доступных клиенту для запросов. Следующим запросом к серверу должен быть запрос «login», в ответ на который сервер присылает сообщение с идентификационным номером клиента. Далее клиент получает информацию о данных своего аккаунта и отправляет запросы к серверу на получение предназначенной ему информации. Доставка сообщений проходит по методу pull, при котором клиент сам инициирует получение сообщений. Таким образом, клиент постоянно посылает запросы к определенному сервлету на сервере для получения предназначенных ему сообщений.
Клиентами сервера VT FX являются программы VTDealer и VTTrader. VTTrader -инструмент, с помощью которого трейдер будет торговать валютой, участвуя во всемирной торговле на бирже FOREX. Для использования этой программы необходимо зарегистрировать аккаунт трейдера в компании Visual Trading Systems.
АРМ дилера представляет из себя набор терминалов и программного обеспечения, которое позволяет контролировать все сделки, идущие через платформу VT FX. Это необходимо для того, чтобы отсекать мошеннические сделки, сделки, сделанные по ошибке на большие суммы, а также те, что были совершены по цене, которой на рынке уже нет. Например, клиент покупает 10000 евро за доллары по цене 1.24, но цена ушла в это время до 1.30 за евро. Такое случается, если у клиента Интернет-канал не обладает достаточной пропускной способностью или сервер компании перегружен. Мошеннические сделки появляются, когда кто-либо из пользователей или клиентов компании обнаруживает ошибки в платформе или использует специфические возможности сервера и могут принести большой ущерб компании. Наиболее частый вариант мошенничества - торговля на пипсах.
В общем случае АРМ дилера - это два компьютерных терминала или персональных компьютера, на подключенных мониторах видна вся информация по текущему и прошлому состоянию рынка и сделкам, проводимым клиентами. Также дилер получает всю информацию о котировках сторонних фирм, новостях, которые могут повлиять на рынок и так далее.
Общая схема работы приложения Leiron
Программа работает как в консольном, так и в графическом режиме. При запуске программы в консольном режиме, необходимо в параметрах запуска указать task-файл с цепочками запросов для сервера. В этом случае программа сразу же начинает посылать запросы к серверу, а результаты писать в консоль. Так же программа пишет лог своей работы в файл access.log.
В графическом режиме у пользователя есть возможность задать task-файл (файл с цепочками команд), init-файл (файл с типами запросов, отрабатываемыми сервером, а также с параметрами этих запросов), лог-файл. Графики времени обработки запросов выводятся только в графическом режиме.
Функциональность приложения Leiron:
• приложение отправляет запросы на сервер согласно заданным в XML-файле цепочкам команд;
• типы запросов, отрабатываемые сервером, а также их параметры можно задать в XML-файле;
• приложение измеряет и записывает в структуру данных время отработки каждого запроса;
• приложение сравнивает ответы сервера с эталонными;
• приложение стоит графики времени выполнения определенной команды или группы команд;
Таким образом, работа программы состоит из нескольких этапов: чтение и преобразование данных из XML-структуры; отправка цепочек запросов серверу; обработка результатов работы программы. Общая схема работы приложения изображена на рис. 1.
Рис. 1. Общая схема работы программы
Работа с init-XML файлом и task-XML файлом
Init-XML файл для каждого запроса, поддерживаемого сервером, содержит информацию об имени запроса, о том, какой сервис сервера обрабатывает данный запрос, типе ответа сервера и о параметрах, необходимых для обработки данного запроса. Каждая цепочка команд, содержащаяся в task-xml файле, должна содержать ip хоста и порт, по которому запрос должен быть отправлен, а каждая команда этой цепочки - параметры, необходимые для выполнения этого запроса. Все команды должны быть уже известны программе, т.е. должны быть заданы в init-файле; параметры также должны соответствовать указанным в init-файле параметрам для данной команды.
Разбор файла происходит при помощи стандартной библиотеки для разбора XML файлов SAX (Simple API for XML). Он основан на последовательной генерации событий, связанных с каждой сущностью при разборе.
Отправка запросов серверу
При отправке запросов используется структура данных, полученная на предыдущем этапе. Пользователь имеет возможность задавать необходимость выполнения данной группы тестов и количество раз, которое необходимо эту группу выполнить в программе (рис. 2). По умолчанию группа тестов выполняется, а количество повторений этой группы тестов - 1.
^Commands
Commands Execute Quaniitv t
test2(1 0.78.0.129:7001) Щ 6
login 1 3
userNellnfo 0
ksetJAIive □
gstAnnountcments И
getMassages v
getUser 0
logoff S
lest3(1 0.78.0.129:7001) □
login □
logoff □
test4(1 8.78.0.129:7001) v
login И
userNellnfo
keepAlive 0
logoff 0 -
OK Cancel
Рис. 2. Окно приложения, позволяющее менять параметры выполнения тестов
Рис. 3. Структурная схема алгоритма отправки запросов на сервер
При запуске тестирования: последовательно перебираются все группы тестов; проверяется, нужно ли выполнять текущую группу тестов;
• проверяется, сколько раз нужно повторить текущую группу тестов;
• перебираются все запросы в этой группе тестов;
• проверяется, нужно ли выполнять текущий запрос;
• выполняется текущий запрос.
Структурная схема алгоритма отправки запросов на сервер изображена на рис. 3, а результат работы программы - на рис. 4.
> Connecting to server".
□Ш
File Charts Help
Choose tile with commands: § lprojecilniaealcpnriiparsrris2.xrril
Edit list of commands
Star!
| ask Host: port Response Status Code i ¡me
login (test2) 1 078.0.'12Э 7001 200 2906 A
userNeilnfb (test2) 1 0.78.0.129 7001 200 110
keepAiive (test2) 10.78.0.123 7001 200 63
getAnnountcments itest2) 10.78.0.123 7001 200 422
getUseritest2) 10.78.0.123 7001 200 1353
logoff (test2) 10.78.0.123 7001 200 360
login (test3) 10.78.0.129 7001 200 328
logoff (test3) 10.78.0.123 7001 200 ■235
login (test4) 10.78.0.123 7001 200 438
userNetlnfD (Iest4) 10.78.0.123 7001 200 47
keepAiive (tesMj 10.78.0.129 7001 200 31
logoff (test4) 10.78.0.129 7001 200 250
W
Error: CornrnandGroup: test2, command:ge!Massages, HttpF'rotocolException: responseStatusGode=401 oom.vtsystems.ft.client.api.htip.UriauthcilzedExceptlon: [null/null] Unauthorized to perform method ип=1Шр:/Л 0.78.0.123:7001>messagi: A.
* | Li I»
Рис. 4. Главное окно приложения 1_е1гоп
Обработка результатов запросов
Обработка результатов включает в себя построение графиков, показывающих время выполнения очередного запроса для дальнейшего анализа производительности, а также анализ среднего времени выполнения определенного типа запроса и сравнение с эталонным временем для этого типа запроса.
Построение графиков осуществляется с использованием библиотеки ХРгееСЬаЛв. Программа строит графики двух видов:
• для определенного типа запроса - отображение графика времени, затраченного выполнение всех запросов данного типа. На этом графике также отображается эталонное время выполнения данной команды, которое можно задать в специальном окне. По умолчанию берется среднее время выполнения этой команды;
• для группы тестов - отображение графика времени, затраченного на выполнение каждого отдельного запроса этой группы тестов.
Программа строит график нормального распределения времени обработки для каждого запроса к серверу. Графики, построенные программой, изображены на рис. 5.
ЙР Г 0111111,1 n (к
Select type of chart:
С Line cliaii Bar chan
Select commands:
getAnnciuntcments getUser
Edit ¡average lime
325 3D0 275 250 225 200
Hi
£ 175 i-
150 125 100
mm
tills m test2(2) tsst2(3) test2 (4) tail2 (5) tsil2 (3J tsst4(1)
userNetlnfo
Рис. 5. Окно программы, отображающее графики Заключение
Работа выполнена на фирме Визуал Трейдинг Системс и будет использоваться при стрессовом, нагрузочном, негативном и функциональном тестировании протокола взаимодействия УТТгаёег'а и УТБХ. Приложение позволяет не только тестировать, но и анализировать результаты тестов.
В ходе выполнения работы были изучены различные методики тестирования программного обеспечения и выбрана оптимальная методика для решения поставленной задачи. Также было проведено изучение платформы УТ БХ и схемы ее взаимодействия с сетевыми службами; разработана методика тестирования протокола взаимодействия АРМ дилера и сервера УТ БХ; выполнена программная реализация разработанных алгоритмов.
Литература
1. Макгрегор Дж., Сайкс Д. Тестирование объектно-ориентированного программного обеспечения; К: Диасофт, 2002. 432 с.
2. Канер С., Фолк Дж., Нгуен Енг. Тестирование программного обеспечения, К: ДиаСофт, 2000 544 с.
3. www.software-testing.ru
4. Ведихин А., Петров Г., Шилов Б. Валютные рынки для начинающих и профессионалов, М.: Омега Л, 2005. 428 с.
5. vtsystems.com
6. www.pfgfx.ru/forex