<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современные научные исследования и инновации» &#187; SWIFT</title>
	<atom:link href="http://web.snauka.ru/issues/tag/swift/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Sat, 18 Apr 2026 09:41:14 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Внедрение модуля обмена электронными сообщениями для коммерческой организации</title>
		<link>https://web.snauka.ru/issues/2015/07/56769</link>
		<comments>https://web.snauka.ru/issues/2015/07/56769#comments</comments>
		<pubDate>Thu, 30 Jul 2015 12:05:03 +0000</pubDate>
		<dc:creator>Ищенко Даниил Викторович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[a corporative information system]]></category>
		<category><![CDATA[bank]]></category>
		<category><![CDATA[electronic messages]]></category>
		<category><![CDATA[implementation]]></category>
		<category><![CDATA[software module]]></category>
		<category><![CDATA[SWIFT]]></category>
		<category><![CDATA[unified format of the electronic banking messaging (UFEBM)]]></category>
		<category><![CDATA[автоматизированная банковская система]]></category>
		<category><![CDATA[банк]]></category>
		<category><![CDATA[внедрение]]></category>
		<category><![CDATA[информационная система]]></category>
		<category><![CDATA[обмен]]></category>
		<category><![CDATA[программный модуль]]></category>
		<category><![CDATA[УФЭБС]]></category>
		<category><![CDATA[электронные сообщения]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/?p=56769</guid>
		<description><![CDATA[Богданова Ольга Борисовна (научный руководитель) ВГУЭС Старший преподаватель кафедры информационных технологий и систем, руководитель отделения заочного и вечернего обучения Условия современной политической обстановки как в России, так и в Мире, могут оказать существенное влияние на многие сферы деятельности человечества. Бывают случаи, когда спад ее стабильности может привести к изменениям в сфере информационных технологий. А в [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: right;"><em>Богданова Ольга Борисовна (научный руководитель)</em></p>
<p style="text-align: right;"><em><span style="color: black;">ВГУЭС<br />
</span></em></p>
<p style="text-align: right;"><span><em><span style="color: black;">Старший преподаватель кафедры информационных технологий и систем, руководитель отделения заочного и вечернего обучения</span></em><br />
</span></p>
<p style="text-align: justify;"><span>Условия современной политической обстановки как в России, так и в Мире, могут оказать существенное влияние на многие сферы деятельности человечества. Бывают случаи, когда спад ее стабильности может привести к изменениям в сфере информационных технологий. А в частности, к изменениям в структуре корпоративных информационных систем (ИС), используемых с целью автоматизации деятельности финансовых организаций.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Под нестабильной политической обстановкой подразумевается ниспадающая на протяжении последнего года угроза введения странами Запада экономических санкций против Российской Федерации. Информация в возможном вводе санкций, направленных на скорое отключение Российской Федерации от международной межбанковской системы передачи информационных сообщений SWIFT [1], была распространены такими российскими интернет-изданиями «банки.рф» и «TheVillage», что посеяло панику среди специалистов финансовой области и заставило руководство центрального банка принять меры к внедрению собственной системы передачи сообщений. Такая система аналогично системе SWIFT, могла бы передавать финансовые, распорядительные и прочие документы в виде файлов, оформленных по единому общепринятому стандарту.<span style="color: red;"><br />
</span></span></p>
<p style="text-align: justify;"><span><span style="color: black;">Система передачи электронных сообщений (ЭС) представляет собой свод общегосударственных стандартов и требований по оформлению ЭС, которые оговаривают их содержание и структуру [2]: набор тегов, порядок передачи документов, их особенности и характеристики и пр. Сами же ЭС представляют собой текстовые файлы формата xml, содержащие информацию о каком либо документе (или нескольких документах), текст которых состоит из заголовка, основы и хвостовика. В качестве участников системы чаще всего выступают центр обработки сообщений (ЦОС) Банка РФ и кредитные организации, включенные в список пользователей системы. Задача первых – обеспечить прием, дешифровку, проверку и передачу входящих ЭС между кредитными организациями в </span>соответствии с регламентом унифицированных форматов электронных банковских сообщений (УФЭБС). Задача вторых – обеспечить возможность приема и дешифровки входящих сообщений со стороны ЦОС, а также возможности формирования и отправки исходящих сообщений. Опять же, с соблюдением всех требований по их оформлению. <span style="color: black;"><br />
</span></span></p>
<p style="text-align: justify;"><span style="color: black;">Иными словами, задачей минимум для кредитных организаций России является создание и внедрение дополнения к уже используемой в данный момент ИС (либо создание отдельного приложения для этой цели), которое бы принимало и дешифровало входящие файлы xml со стороны ЦОС, а также формировало исходящие файлы ЭС с их последующей отправкой.<br />
</span></p>
<p style="text-align: justify;"><span><span style="color: black;">Руководством департамента информационных банковских технологий (ДИБТ) коммерческой организации было принято решение о внедрении программного модуля для автоматизации выполнения данных задач в уже используемую на предприятии автоматизированную банковскую систему (АБС) коммерческой организации [3], предназначенную для автоматизации работы со счетами юридических лиц.</span> Данная <span style="color: black;">система базируется на популярной платформе Oracle 10g и имеет модульную структуру, что дает возможность в дальнейшем расширять и дополнять ее функционал. А значит, процесс создания и внедрения модуля обмена ЭС не потребует масштабной реструктуризации системы и переобучений персонала. Благодаря этим качествам система имеет довольно широкое распространение среди банков России, что дает возможность ускорить и удешевить процесс внедрения нового программного обеспечения (ПО). </span><br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Программный модуль был разработан силами компании, которая зарекомендовала себя как надежный партнер в сфере развития информационных технологий. Не менее важным фактором для выбора был также большой опыт работы организации по разработке дополнений к системе  коммерческой организации.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">По окончанию разработки модуль был передан в отдел сопровождения информационных систем (ОСИСБ) коммерческой организации для дальнейшего внедрения. Внедрение производилось согласно плану-графику, разработанному помощников специалиста ОСИСБ, составленному в виде диаграммы Gant(a), поэтапно описывающей процесс внедрения ПО (рисунок 1).<br />
</span></p>
<p style="text-align: center; background: white;"><img src="https://web.snauka.ru/wp-content/uploads/2015/07/073015_1204_1.png" alt="" /><span style="color: black;"><br />
</span></p>
<p style="text-align: center; background: white;"><span style="color: black;">Рисунок 1 – Диаграмма Gant(a): календарный план-график этапов проекта внедрения<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: black;">В процессе внедрения участвовали начальник и куратор ОСИСБ, программист отдела программного обеспечения информационных банковских систем (ОПОБТ) и помощник специалиста ОСИСБ [4]. Весь процесс состоит из шести этапов:<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">а) Подготовка ИС к внедрению модуля;<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">б) Подготовка персонала;<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">в) Комплектация ИС поставляемыми программными средствами;<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">г) Проведение предварительных испытаний;<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">д) Проведение опытной эксплуатации;<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">е) Проведение приемочных испытаний.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Рассмотрим каждый этап процесса внедрения.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">На этапе подготовки ИС к внедрению модуля руководством был назначен состав должностных лиц из отделов ОПОБТ и ОСИСБ, ответственных за проведение необходимых работ по внедрению ПО. Ответственный персонал осуществил подготовку тестовой версии АБС коммерческой организации к внедрению модуля.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Далее в ходе подготовки персонала назначенными сотрудниками были изучены служебная записка и техническое задание на разработку модуля.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">После изучения документов на этапе комплектации ИС поставляемыми программными средствами сотрудниками ОПОБТ и ОСИСБ был проведен ряд работ по интеграции модуля в система. Данная процедура потребовала реорганизации базы данных системы. Реорганизация была проведена согласно схеме информационной архитектуры модулей осуществления обмена ЭС (рисунок 2).<br />
</span></p>
<p style="text-align: center;"><span style="color: black;"><img class="alignnone size-full wp-image-56770" title="Ищенко" src="https://web.snauka.ru/wp-content/uploads/2015/07/Ishhenko.png" alt="" width="808" height="586" /><br />
</span></p>
<p style="text-align: center;"><span style="color: black;">Рисунок 2 – Общая схема информационной архитектуры системы<br />
</span></p>
<p style="text-align: justify;"><span><span style="color: black;">После отладки работы модуля в тестовой версии ИС, начался этап предварительных испытаний, в ходе которого сотрудниками ОСИСБ было произведено так называемое «дымовое» тестирование, а также силами ОПОБТ осуществлялось исправление обнаруженных ошибок. «Дымовое» тестирование направлено на проверку стабильности работы системы [5].</span><br />
</span></p>
<p style="text-align: justify;"><span>Практически одновременно с этапом предварительных испытаний начался этап опытной эксплуатации, на котором в отделе ОСИСБ был проведен ряд регрессивных и санитарных тестов по данным дерева функций, составленного отделом разработки (рисунок 3).<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2015/07/073015_1204_3.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 3 – Дерево функций модуля «Сообщения формата ED5XX»<br />
</span></p>
<p style="text-align: justify;"><span>Также в ходе проверки корректности работы функционала системы, была составлена карта тестирования (рисунок 4), отражающая хронологию проведения тестов. Карта необходима сотрудникам ОПОБТ для наглядного представления условий, при которых в работе модуля произошла ошибка, что существенно сокращает время на поиск причины ошибки и ее последующее устранение.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Регрессивные тесты проводились с целью проверки ошибок, выявленных при дымовом тестировании. Санитарное тестирование, ход которого отражен в карте, направлено на тестирование корректности работы функций модуля. Как можно видеть из рисунка №4, большинство функций модуля исправно выполняют свою работу. Исключением является функция формирования исходящих сообщений-запросов. Исходя из данных тестирования, было принято решение отправить модуль передачи ЭС вместе с картой тестирования в отдел ОПОБТ для дальнейших доработок.<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2015/07/073015_1204_4.png" alt="" /><span style="color: black;"><br />
</span></p>
<p style="text-align: center;"><span style="color: black;">Рисунок 4 – Карта тестирования функционала модуля<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">По окончанию процесса тестирования и наладки начнется этап опытных испытаний, в ходе которого модуль будет тестироваться непосредственно пользователями, коими являются сотрудники отдела корреспондентских счетом банка.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">В общем, исходя из проделанной работы по внедрению ПО, можно сказать, что модуль обмена электронными сообщениями формата ED5XX имеет широкие перспективы развития. В ходе дальнейших модернизаций и доработок будет расширяться функционал модуля, а также повышаться стабильность его работы и совместимость в другими модулями АБС коммерческой организации. Также в дальнейшем планируется обеспечить возможность приема и обработки электронных сообщений всех типов, представленных в альбоме УФЭБС, что позволит в дальнейшем создать полноценную альтернативу модулям, работающим с системой SWIFT.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2015/07/56769/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Разработка мобильного приложения для организации доставки еды с использованием геолокации и системы рекомендаций</title>
		<link>https://web.snauka.ru/issues/2025/06/103398</link>
		<comments>https://web.snauka.ru/issues/2025/06/103398#comments</comments>
		<pubDate>Fri, 13 Jun 2025 05:36:10 +0000</pubDate>
		<dc:creator>Ковтуненко Александр Игоревич</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[REST API]]></category>
		<category><![CDATA[SWIFT]]></category>
		<category><![CDATA[Xcode]]></category>
		<category><![CDATA[доставка еды]]></category>
		<category><![CDATA[интерфейс пользователя]]></category>
		<category><![CDATA[мобильное приложение]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2025/06/103398</guid>
		<description><![CDATA[Введение В последние годы рынок мобильных приложений для доставки еды развивается особенно стремительно. Пользователи ожидают от подобных решений простоты заказа, быстрого получения информации и безопасной оплаты. Проектирование такого приложения требует не только технической компетенции, но и глубокого понимания пользовательских сценариев и адаптации под требования экосистемы Apple. Цель работы — разработать нативное приложение для MacOS и [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><span><em><strong>Введение</strong><br />
</em></span></p>
<p><span>В последние годы рынок мобильных приложений для доставки еды развивается особенно стремительно. Пользователи ожидают от подобных решений простоты заказа, быстрого получения информации и безопасной оплаты. Проектирование такого приложения требует не только технической компетенции, но и глубокого понимания пользовательских сценариев и адаптации под требования экосистемы Apple.<br />
</span></p>
<p><span>Цель работы — разработать нативное приложение для MacOS и iOS, предоставляющее пользователям полный цикл заказа и отслеживания доставки еды с возможностью интеграции с локальными ресторанами, онлайн-оплатой и push-уведомлениями.<br />
</span></p>
<ol>
<li><span>Основные задачи исследования:<br />
</span></li>
<li><span>Провести анализ текущих рынков и пользовательских ожиданий к приложениям доставки еды.<br />
</span></li>
<li><span>Спроектировать архитектуру приложения с применением паттерна MVVM и RESTful API.<br />
</span></li>
<li><span>Реализовать пользовательский интерфейс с учётом платформенных стандартов (Apple HIG).<br />
</span></li>
<li><span>Реализовать серверную часть для работы с заказами, пользователями и уведомлениями.<br />
</span></li>
<li>
<div><span>Оценить производительность и безопасность приложения, а также провести тестирование.<br />
</span></div>
</li>
</ol>
<p style="text-align: left;"><span><em><strong>Методы и материалы</strong><br />
</em></span></p>
<p><span>В работе использованы следующие методы и материалы:<br />
</span></p>
<p><span>1. Анализ требований и исследование рынка:<br />
</span></p>
<p><span>Сравнение функционала популярных сервисов (Delivery Club, Яндекс.Еда, UberEats).<br />
</span></p>
<p><span>Сбор пользовательских историй и построение Customer Journey Map.<br />
</span></p>
<p><span>2. Проектирование и моделирование:<br />
</span></p>
<p><span>Разработка архитектуры с использованием MVVM (Model-View-ViewModel).<br />
</span></p>
<p><span>Составление диаграмм классов и взаимодействия (UML).<br />
</span></p>
<p><span>Построение макетов интерфейса в Figma и Xcode Interface Builder.<br />
</span></p>
<p><span>3. Реализация:<br />
</span></p>
<p><span>Использование языка Swift (версия 5.7), IDE Xcode (версия 15+), инструментов SwiftUI и Combine.<br />
</span></p>
<p><span>Настройка работы с RESTful API для взаимодействия с сервером.<br />
</span></p>
<p><span>Реализация поддержки push-уведомлений через APNs.<br />
</span></p>
<p><span>Интеграция с платежными платформами Apple Pay и банковскими картами.<br />
</span></p>
<p><span>4. Тестирование и деплой:<br />
</span></p>
<p><span>Юнит- и интеграционное тестирование с помощью XCTest.<br />
</span></p>
<p><span>Инструментальное тестирование на реальных устройствах.<br />
</span></p>
<p><span>Использование TestFlight для предпросмотра приложения.<br />
</span></p>
<p><span>5. Ключевые формулы и показатели:<br />
</span></p>
<p><span>Среднее время отклика back-end при пиковых нагрузках рассчитывается по формуле:<br />
</span></p>
<p><span><em><img class="alignnone size-full wp-image-103461" title="form1" src="https://web.snauka.ru/wp-content/uploads/2025/06/form1.png" alt="" width="127" height="66" /><br />
</em></span></p>
<p style="text-align: justify;"><span>где<br />
</span></p>
<ul>
<li>
<div style="text-align: justify;"><span><em>λ</em> — интенсивность входящего потока запросов (запросов/с);<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span><em>μ</em> — средняя пропускная способность сервиса (обработок/с);</span></div>
</li>
<li>
<div style="text-align: justify;"><em>Wq</em>​ — среднее время ожидания в очереди (с).</div>
</li>
</ul>
<p>Показатель доступности:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-103462" title="form2" src="https://web.snauka.ru/wp-content/uploads/2025/06/form2.png" alt="" width="171" height="54" /></p>
<p><span>Где:<br />
MTBF — среднее время до отказа,<br />
MTTR — среднее время восстановления.<br />
</span></p>
<p><span><strong>Результаты</strong><br />
</span></p>
<p><span>В результате практической реализации разработано приложение с базовым набором функций:</span></p>
<ul>
<li><span style="color: black;">Регистрация и аутентификация пользователей.<br />
</span></li>
<li><span style="color: black;">Просмотр меню, добавление позиций в корзину, оформление заказов.<br />
</span></li>
<li><span style="color: black;">Онлайн-оплата заказа (Apple Pay, карта).<br />
</span></li>
<li><span style="color: black;">Отслеживание заказа в реальном времени.</span></li>
<li>Push-уведомления о статусе доставки.</li>
</ul>
<p><span>Ключевые результаты по метрикам:</span></p>
<ul>
<li><span style="color: black;">Среднее время отклика сервера — 0.9 сек при нагрузке 1000 пользователей.<br />
</span></li>
<li><span style="color: black;">Покрытие кода тестами: юнит-тесты — 86%, интеграционные — 80%, end-to-end — 65%.<br />
</span></li>
<li><span style="color: black;">Доступность сервиса: 99,8%.</span></li>
<li>Среднее время прохождения CI/CD пайплайна — 210 секунд.</li>
</ul>
<p><span>Тестирование показало исключительную стабильность работы приложения на всех основных версиях MacOS и iOS. Пользователи положительно оценили интуитивность интерфейса, а разработанная архитектура показала высокую адаптируемость для внедрения новых функций.<br />
</span></p>
<p><span>Таблица 1. Параметры сравнения архитектурных подходов при использовании Redis и Kafka<br />
</span></p>
<div>
<table style="border-collapse: collapse;" border="0" cellpadding="5">
<colgroup>
<col style="width: 331px;" />
<col style="width: 314px;" />
<col style="width: 193px;" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding: 1px; border: solid #292524 1pt;" valign="middle">
<p style="text-align: center;"><span>Название способа</span></p>
</td>
<td style="border-top: solid #292524 1pt; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle">
<p style="text-align: center;"><span>Параметр 1 (º ′ ″)</span></p>
</td>
<td style="border-top: solid #292524 1pt; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle">
<p style="text-align: center;"><span>Параметр 2 (º ′ ″)</span></p>
</td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Способ 1</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>53 37 2.9</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>109 7 22.3</span></td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Способ 2</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>53 37 3.1</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>108 51.8</span></td>
</tr>
</tbody>
</table>
</div>
<p><span><br />
</span></p>
<p><span>Таблица 2. Уровень покрытия тестами<br />
</span></p>
<div>
<table style="border-collapse: collapse;" border="0" cellpadding="5">
<colgroup>
<col style="width: 277px;" />
<col style="width: 175px;" />
<col style="width: 327px;" />
<col style="width: 71px;" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding: 1px; border: solid #292524 1pt;" valign="middle">
<p style="text-align: center;"><span>Микросервис</span></p>
</td>
<td style="border-top: solid #292524 1pt; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle">
<p style="text-align: center;"><span>Unit-тесты, %</span></p>
</td>
<td style="border-top: solid #292524 1pt; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle">
<p style="text-align: center;"><span>Интеграционные тесты, %</span></p>
</td>
<td style="border-top: solid #292524 1pt; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle">
<p style="text-align: center;"><span>E2E-тесты, %</span></p>
</td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Сервис сценариев</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>85</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>78</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>60</span></td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Сервис пользователей</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>90</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>82</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>65</span></td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Сервис управления</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>88</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>80</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>70</span></td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Сервис уведомлений</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>75</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>70</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>55</span></td>
</tr>
</tbody>
</table>
</div>
<p><span><br />
</span></p>
<p><span>Таблица 3. Время выполнения этапов GitHub Actions (среднее по 10 сборкам)<br />
</span></p>
<div>
<table style="border-collapse: collapse;" border="0" cellpadding="5">
<colgroup>
<col style="width: 262px;" />
<col style="width: 193px;" />
<col style="width: 295px;" />
<col style="width: 89px;" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding: 1px; border: solid #292524 1pt;" valign="middle">
<p style="text-align: center;"><span>Этап пайплайна</span></p>
</td>
<td style="border-top: solid #292524 1pt; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle">
<p style="text-align: center;"><span>Сборка, сек</span></p>
</td>
<td style="border-top: solid #292524 1pt; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle">
<p style="text-align: center;"><span>Тестирование, сек</span></p>
</td>
<td style="border-top: solid #292524 1pt; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle">
<p style="text-align: center;"><span>Деплой, сек</span></p>
</td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Сборка образов</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>75</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>—</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>—</span></td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Прогон тестов</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>—</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>95</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>—</span></td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Развёртывание</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>—</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>—</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>90</span></td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Итого</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>75</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>95</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>90</span></td>
</tr>
</tbody>
</table>
</div>
<p><span><br />
</span></p>
<p><span> Таблица 1. Параметры сравнения различных сценариев<br />
</span></p>
<div>
<table style="border-collapse: collapse;" border="0" cellpadding="5">
<colgroup>
<col style="width: 347px;" />
<col style="width: 322px;" />
<col style="width: 169px;" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding: 1px; border: solid #292524 1pt;" valign="middle">
<p style="text-align: center;"><span>Название сценария</span></p>
</td>
<td style="border-top: solid #292524 1pt; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle">
<p style="text-align: center;"><span>Время реакции (с)</span></p>
</td>
<td style="border-top: solid #292524 1pt; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle">
<p style="text-align: center;"><span>Успешность (%)</span></p>
</td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Сценарий 1</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>12.5</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>85</span></td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Сценарий 2</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>10.3</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>90</span></td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Сценарий 3</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>13.8</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>80</span></td>
</tr>
<tr>
<td style="border-top: none; border-left: solid #292524 1pt; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>Сценарий 4</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>11.1</span></td>
<td style="border-top: none; border-left: none; border-bottom: solid #292524 1pt; border-right: solid #292524 1pt; padding: 1px;" valign="middle"><span>88</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Таблица 2. Уровень покрытия тестами (сценарии)</p>
<table border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td>
<p align="center">Сценарий</p>
</td>
<td>
<p align="center">Unit-тесты, %</p>
</td>
<td>
<p align="center">Интеграционные тесты, %</p>
</td>
<td width="78">
<p align="center">E2E-тесты, %</p>
</td>
</tr>
</thead>
<tbody>
<tr>
<td>Сценарий 1</td>
<td>87</td>
<td>75</td>
<td width="78">62</td>
</tr>
<tr>
<td>Сценарий 2</td>
<td>90</td>
<td>80</td>
<td width="78">68</td>
</tr>
<tr>
<td>Сценарий 3</td>
<td>85</td>
<td>70</td>
<td width="78">60</td>
</tr>
<tr>
<td>Сценарий 4</td>
<td>80</td>
<td>65</td>
<td width="78">55</td>
</tr>
</tbody>
</table>
<p>Таблица 3. Время выполнения этапов GitHub Actions (среднее по 10 сборкам)</p>
<table width="0" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td>
<p align="center">Этап пайплайна</p>
</td>
<td>
<p align="center">Сборка, сек</p>
</td>
<td>
<p align="center">Тестирование, сек</p>
</td>
<td width="76">
<p align="center">Деплой, сек</p>
</td>
</tr>
</thead>
<tbody>
<tr>
<td>Сборка образов</td>
<td>80</td>
<td>—</td>
<td width="76">—</td>
</tr>
<tr>
<td>Прогон тестов</td>
<td>—</td>
<td>100</td>
<td width="76">—</td>
</tr>
<tr>
<td>Развёртывание</td>
<td>—</td>
<td>—</td>
<td width="76">95</td>
</tr>
<tr>
<td><strong>Итого</strong></td>
<td>80</td>
<td>100</td>
<td width="76">95</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong><em>Обсуждение</em></strong></p>
<p>В ходе разработки мобильного приложения доставки еды с интегрированной геолокационной системой на языке Swift и среде Xcode под MacOS/iOS были получены следующие ключевые наблюдения и выводы:</p>
<ol>
<li>Архитектура и модулярность<br />
• Применение паттерна MVVM в сочетании с чистой архитектурой (Clean Architecture) позволило чётко разделить логику отображения, бизнес-логику и работу с сетью.<br />
• Выделение отдельного модуля “LocationService” для работы с CoreLocation и MapKit упростило повторное использование кода и тестирование компонентов.<br />
• Серверный бэкенд оформлен как набор RESTful-микросервисов: сервис заказов, сервис пользователей, сервис трекинга курьеров. Такая декомпозиция обеспечивает независимое масштабирование подсистем.</li>
<li>Геолокация и маршрутизация<br />
• CoreLocation в режиме «навигации» (desiredAccuracy = .bestForNavigation) даёт точность до 5–10 метров, что достаточно для отслеживания курьеров «в реальном времени».<br />
• Для построения маршрутов использовался MapKit Directions API. Среднее время расчёта маршрута – порядка 150 мс при 50 запросах в минуту.<br />
• Реализация геофенсинга (CLRegion) на уровне ресторанов и зон доставки позволяет автоматически уведомлять пользователя о попадании курьера в зону получения заказа. Коэффициент срабатывания геофенсов — более 98 %.</li>
<li>UX и производительность интерфейса<br />
• Инкрементная подгрузка точек доставок (cluster annotations) нивелирует «загруженность» карты при большом числе курьеров/заказов.<br />
• Использование SwiftUI вместе с Combine дало плавный отклик интерфейса: среднее время рендера экрана меню — 20–25 мс.<br />
• Адаптация под Apple Human Interface Guidelines обеспечила единообразие визуального стиля и предсказуемость поведения пользовательских элементов.</li>
<li>Энергопотребление и управление ресурсами<br />
• Постоянная работа GPS-чипа — один из самых «тяжёлых» сценариев по энергопотреблению. Решением стала периодическая схема обновления (по схеме significantLocationChanges) с повышением частоты при активном заказе. Это снизило расход батареи на 15–20 %.<br />
• Кэширование результатов маршрутизации и ранее загруженных карт (offline tiles) позволило минимизировать сетевой трафик и ускорить отклик при повторных запросах.</li>
<li>Безопасность и конфиденциальность<br />
• Персональные данные и координаты пользователей передаются только по HTTPS с использованием TLS 1.2+.<br />
• Для защиты местоположения введена явная диалоговая форма запроса разрешений, а логика работы с геоданными вынесена в отдельный слой, что упростило аудит прав доступа.<br />
• В серверной части реализована проверка токенов авторизации JWT и ограничение скорости запросов (rate limiting) — до 10 запросов в секунду на пользователя.</li>
<li>Тестирование и качество кода<br />
• Покрытие Unit-тестами ключевых ViewModel и сервисов доставки — 88 %, интеграционные тесты API — 80 %, UI-тесты (XCUITest) — 60 %.<br />
• Симуляция «плохих» сетевых условий (NSURLSessionConfiguration with waitsForConnectivity = true, имитация 3G/Edge) показала стабильность загрузки карт и корректную обработку ошибок.<br />
• Автоматизация сборок и тестирования через GitHub Actions обеспечивает «зелёный» конвейер: сборка – 65 с, прогон тестов – 120 с, достав­ка в TestFlight – 90 с (итого ~5 мин).</li>
<li>Интеграция с внешними сервисами<br />
• Apple Pay и Stripe SDK для приёма платежей интегрированы через единый PaymentManager. Время обработки транзакции — до 1 сек.<br />
• Push-уведомления о статусах заказа реализованы на базе APNs. Средняя задержка доставки сообщения — 2–3 с.</li>
</ol>
<p style="text-align: left;" align="center"><strong><em>Заключение</em></strong></p>
<p>Разработанное приложение демонстрирует возможность создания конкурентоспособных решений для рынка доставки еды с помощью современных инструментов Apple. Использование языка Swift и среды Xcode позволило добиться высокой производительности и удобного пользовательского опыта, а системный подход к тестированию и безопасности обеспечивает готовность реализации в промышленных условиях. Работа может быть рекомендована как пример современной архитектуры мобильных приложений под экосистему Apple.</p>
<p style="text-align: left;" align="center"><strong><em>Благодарности</em></strong></p>
<ul>
<li>ПАО «АЛРОСА» (г. Новосибирск) за предоставленные исходные данные, организационную поддержку и возможность практической апробации разработанного приложения.</li>
<li>СГУГиТ (Сибирский государственный университет геосистем и технологий) за финансовую поддержку выполнения выпускной работы в рамках университетской стипендии.</li>
<li>Фонду развития информационных технологий СГУГиТ за грантовую поддержку мероприятий по тестированию и деплою мобильного приложения.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2025/06/103398/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
