Разработка мессенджера с поддержкой ввода текста артикуляционным девайсом

21.06.2026
Просмотры: 64
Краткое описание
Кратко о работеПроверьте, подходит ли готовый материал под вашу тему
О чем

Выпускная квалификационная работа посвящена разработке мессенджера для обмена текстовыми сообщениями в реальном времени с поддержкой ввода текста артикуляционным девайсом.

Цель

Цель работы — спроектировать и реализовать клиент-серверное приложение для обмена сообщениями, которое позволяет вводить текст без использования клавиатуры.

Что рассмотрено

Архитектура клиент-серверного приложения на Python, реализация серверной части на FastAPI с WebSocket, разработка кроссплатформенного клиента на KivyMD, проектирование базы данных SQLite, реализация альтернативного ввода и панели администратора.

Выводы

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

Почему стоит скачать

Получите готовую рабочую архитектуру и код для собственного проекта или доработки.

Предпросмотр документа

Название университета

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА НА ТЕМУ:

РАЗРАБОТКА МЕССЕНДЖЕРА С ПОДДЕРЖКОЙ ВВОДА ТЕКСТА АРТИКУЛЯЦИОННЫМ ДЕВАЙСОМ

Выполнил:

ФИО: Студент

Специальность: Специальность

Проверил:

ФИО: Преподаватель

г. Москва, 2026 год.

Содержание

Введение2
1. Теоретический раздел4
1.1. Общая характеристика объекта программирования: мессенджер как класс программ, принципы клиент-серверного взаимодействия, протоколы HTTP и WebSocket, роль базы данных5
1.2. Анализ существующих аналогов (Telegram, WhatsApp, Viber) и специализированных средств ввода. Определение функциональных требований6
1.3. Анализ предметной области: модель обмена сообщениями, структура входных данных, обоснование выбора технологического стека7
2. Проектно-конструкторский раздел9
2.1. Разработка архитектуры программного продукта10
2.2. Разработка дизайн-макета интерфейса11
2.3. Выбор языка программирования и среды разработки. Проектирование базы данных12
3. Технологический раздел14
3.1. Реализация программного продукта15
3.2. Разработка базы данных16
3.3. Проверка безопасности и производительности17
4. 4 Экономический раздел19
4.1. Расчёт экономической эффективности разрабатываемого программного обеспечения: анализ эксплуатационных затрат20
4.2. Расчёт обобщающих экономических показателей21
Заключение23
Список использованных источников25

Введение

В современном мире общение через интернет стало обычным делом. Люди используют мессенджеры каждый день, чтобы обмениваться сообщениями, звонить и делиться файлами. Такие программы, как Telegram, WhatsApp и Viber, прочно вошли в нашу жизнь. Но у этих программ есть одна общая черта — они рассчитаны на обычных пользователей, которые могут пользоваться клавиатурой и сенсорным экраном.

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

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

Объект исследования — это программы для обмена текстовыми сообщениями, которые работают по схеме «клиент-сервер». Предмет исследования — процесс создания такого мессенджера, который поддерживает ввод текста через артикуляционное устройство. В работе рассматриваются вопросы архитектуры, алгоритмов и выбора технологий.

Цель работы — создать мессенджер, который работает в реальном времени, позволяет обмениваться текстовыми сообщениями и поддерживает ввод текста через артикуляционное устройство.

Чтобы достичь этой цели, нужно решить несколько задач:

1. Изучить, как устроены существующие мессенджеры и какие есть специальные средства ввода. Определить, какие функции должен иметь наш продукт.<br>2. Спроектировать общую архитектуру программы: как будет устроена клиентская часть, серверная часть и база данных.<br>3. Написать серверную часть на фреймворке FastAPI. Сервер должен использовать WebSocket для обмена сообщениями в реальном времени и HTTP для входа в систему.<br>4. Создать клиентскую часть на фреймворке KivyMD. Она должна работать на разных платформах, иметь удобный интерфейс и поддерживать артикуляционный ввод.<br>5. Проверить, как работает готовая программа, и убедиться, что она делает все, что нужно.

В работе использовались разные методы: анализ похожих программ, сравнение их возможностей, проектирование архитектуры, объектно-ориентированное программирование и тестирование. При проектировании базы данных применялся метод нормализации, чтобы данные хранились правильно и без лишних повторов.

При написании работы использовалась официальная документация по Python, FastAPI, KivyMD и SQLAlchemy. Также изучались учебники по проектированию клиент-серверных приложений и статьи о разработке программ для людей с ограниченными возможностями.

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

Теоретический раздел

1.1 Общая характеристика объекта программирования: мессенджер как класс программ, принципы клиент-серверного взаимодействия, протоколы HTTP и WebSocket, роль базы данных

Мессенджер как класс программного обеспечения представляет собой приложение для обмена текстовыми сообщениями между пользователями в реальном времени. Такие системы начали развиваться с простых протоколов вроде IRC (Internet Relay Chat) и превратились в многофункциональные платформы с передачей файлов, звонками и элементами социальных сетей. В этой работе под мессенджером понимается клиент-серверное приложение для надежной доставки текстовых сообщений с возможностью альтернативного ввода. Это особенно важно для пользователей с ограниченными возможностями здоровья.

В основе работы современных мессенджеров лежит клиент-серверная архитектура. Она делит обязанности между двумя частями: клиентской и серверной. Клиентская часть отвечает за интерфейс и взаимодействие с пользователем. В этой работе она реализована на фреймворке KivyMD. Клиент показывает данные, обрабатывает ввод с артикуляционного девайса и отображает полученные сообщения. Серверная часть построена на асинхронном фреймворке FastAPI. Она обрабатывает запросы, управляет сессиями, хранит данные и направляет сообщения между клиентами. Такое разделение позволяет управлять данными централизованно и масштабировать систему без изменения клиентских приложений [12].

Протокол HTTP (HyperText Transfer Protocol) используется для запросов, не требующих постоянного соединения. В разрабатываемом мессенджере HTTP применяется для аутентификации пользователей. При входе клиент отправляет HTTP-запрос с логином и паролем. Сервер проверяет данные и возвращает подтверждение авторизации. HTTP также используется для начальной загрузки списка контактов и истории сообщений. Это снижает нагрузку на постоянное соединение при запуске приложения.

Для обмена сообщениями в реальном времени HTTP не подходит из-за модели «запрос-ответ». Она требует постоянного создания новых соединений. Для этой задачи применяется протокол WebSocket. WebSocket создает постоянное двустороннее соединение между клиентом и сервером поверх TCP. В отличие от HTTP, сервер может отправлять данные в любой момент без запроса клиента. Это критически важно для мгновенной доставки сообщений. Основные преимущества WebSocket для мессенджера — низкая задержка, минимальный служебный трафик после установки соединения и эффективные push-уведомления. В этой работе WebSocket используется для отправки и получения текстовых сообщений, обновления статусов и синхронизации чатов [13].

База данных — неотъемлемая часть любого мессенджера. Она хранит учетные записи пользователей (логины, хеши паролей, идентификаторы), информацию о контактах и чатах, а также историю переписки. Целостность и сохранность данных критически важны. Пользователи должны иметь доступ к истории при повторном входе с любого устройства. База данных также нужна для администрирования — управления пользователями и модерации сообщений.

В этом проекте выбрана СУБД SQLite. Это встроенная реляционная база данных, которая не требует отдельного серверного процесса. SQLite работает в адресном пространстве приложения. Это упрощает развертывание и настройку, что важно для прототипа или приложения с небольшими нагрузками. Отсутствие отдельного серверного процесса снижает требования к ресурсам и упрощает конфигурацию сервера. SQLite уступает PostgreSQL в производительности при большом количестве конкурентных записей. Но для мессенджера с ограниченным числом пользователей ее производительность достаточна. Использование ORM SQLAlchemy позволяет в будущем перейти на более мощную СУБД без значительных изменений кода [18].

Протоколы HTTP и WebSocket в разрабатываемом мессенджере имеют четкое функциональное разграничение. HTTP как синхронный протокол применяется на начальном этапе. Например, HTTP-запрос к эндпоинту `/users/login` используется для аутентификации. Клиент отправляет логин и пароль, сервер проверяет их и возвращает идентификатор пользователя. После успешной аутентификации и установки WebSocket-соединения HTTP может применяться для загрузки статических данных. Но основная нагрузка по передаче динамических данных ложится на WebSocket. Это отправка и получение сообщений, обновление статусов и уведомления. Такой подход позволяет избежать избыточных HTTP-запросов и обеспечить мгновенную доставку [27].

Безопасность передачи данных через WebSocket — важная часть разработки. Необходимо шифровать трафик между клиентом и сервером. Для этого используется протокол WSS (WebSocket Secure), работающий поверх TLS. WSS гарантирует, что все данные, включая содержимое сообщений, защищены от перехвата. Второй аспект — аутентификация при установке WebSocket-соединения. Сервер проверяет, что запрос на соединение поступает от аутентифицированного пользователя. Это реализуется через передачу идентификатора пользователя или временного токена в параметрах запроса. Сервер проверяет валидность данных и только после этого разрешает соединение. Также нужно защититься от атак типа Cross-Site WebSocket Hijacking. Для этого сервер проверяет заголовок `Origin` в запросе. В нативном приложении эта угроза менее актуальна, но ее нужно учитывать при расширении функционала.

Производительность SQLite при работе с большим объемом сообщений требует внимания. SQLite не требует отдельного серверного процесса и работает в адресном пространстве приложения. Это дает высокую скорость для сценариев с низким и средним параллелизмом. Для ускорения запросов к истории сообщений используются индексы. В схеме базы данных созданы индексы по полям `chat_id` и `timestamp` в таблице `messages`. Это сокращает время выполнения запросов с фильтрацией и сортировкой. Основное ограничение SQLite — однопоточная запись. Только один процесс может выполнять запись в базу данных в любой момент времени. Это может стать узким местом при высокой нагрузке. Но для проекта с небольшим количеством пользователей это ограничение не критично. Архитектура мессенджера, где сервер FastAPI — единственный процесс, работающий с базой данных, минимизирует проблемы конкурентного доступа. При необходимости масштабирования миграция на PostgreSQL не представляет сложности. Благодаря ORM SQLAlchemy изменение диалекта базы данных сводится к изменению строки подключения.

Альтернативные подходы к организации клиент-серверного взаимодействия помогают обосновать выбор WebSocket. Один из таких подходов — длинные опросы (long polling). Клиент отправляет HTTP-запрос, и сервер удерживает соединение до появления нового сообщения или истечения тайм-аута. После получения ответа клиент немедленно отправляет новый запрос. Long polling позволяет эмулировать реальное время, но имеет недостатки. Он создает избыточную нагрузку на сервер из-за постоянного открытия и закрытия соединений. Задержка выше, чем у WebSocket, а сетевые ресурсы используются неэффективно. Другой подход — Server-Sent Events (SSE). SSE позволяет серверу отправлять данные клиенту в одностороннем порядке через одно долгоживущее HTTP-соединение. Этот протокол эффективен для сценариев, где нужно только получать данные от сервера. Но для мессенджера требуется двусторонняя связь. SSE не поддерживает отправку данных от клиента к серверу по тому же соединению. Это вынуждает использовать отдельные HTTP-запросы для отправки, усложняя архитектуру. WebSocket, обеспечивающий полнодуплексную асинхронную связь с низкой задержкой, является оптимальным выбором для мессенджера.

Мессенджер как класс программного обеспечения требует интеграции нескольких ключевых компонентов: клиент-серверной архитектуры, протоколов реального времени и надежной системы хранения данных. Проведенный анализ показал, что выбранный стек технологий адекватно решает поставленные задачи. Использование HTTP для начальной аутентификации и WebSocket для динамического обмена сообщениями обеспечивает баланс между безопасностью и производительностью. Применение ORM SQLAlchemy позволяет абстрагироваться от конкретной реализации базы данных, обеспечивая гибкость и возможность масштабирования. Разработанная архитектура создает прочную основу для реализации всех функциональных требований, включая поддержку альтернативного ввода текста [7].

1.2 Анализ существующих аналогов (Telegram, WhatsApp, Viber) и специализированных средств ввода. Определение функциональных требований

Разработка мессенджера с поддержкой альтернативного ввода требует анализа существующих решений. Изучение аналогов позволяет выявить их сильные стороны и функциональные пробелы, которые должен заполнить новый продукт. Особое внимание уделяется аспектам доступности (accessibility). Это ключевое требование для целевой аудитории — людей с ограниченными возможностями, использующих артикуляционные девайсы. Формулирование функциональных требований невозможно без критической оценки того, как ведущие платформы решают задачи обеспечения равного доступа к цифровой коммуникации.

На рынке мессенджеров доминируют несколько крупных платформ: Telegram, WhatsApp и Viber. Каждый сервис имеет свою архитектуру и набор функций, но их объединяет общая цель — обеспечение мгновенного обмена сообщениями. Telegram разработан на основе протокола MTProto. Он известен высокой скоростью доставки и гибкой системой API, что позволяет создавать сторонних клиентов и ботов. Архитектура Telegram предполагает облачное хранение истории, обеспечивая синхронизацию между устройствами. С точки зрения безопасности, Telegram предлагает сквозное шифрование в режиме «секретных чатов». В обычных чатах сообщения хранятся на серверах в зашифрованном виде. WhatsApp базируется на протоколе Signal и по умолчанию применяет сквозное шифрование для всех сообщений. Это делает его одним из самых безопасных решений. Архитектура WhatsApp также клиент-серверная, но с жесткой привязкой к номеру телефона и ограниченными возможностями кастомизации. Viber использует сквозное шифрование и предоставляет базовый набор функций, включая голосовые и видеозвонки. По сравнению с Telegram, Viber имеет менее развитую экосистему для разработчиков и меньшую гибкость интерфейса.

Сравнительный анализ аналогов по ключевым критериям позволяет выявить их сильные и слабые стороны. Скорость доставки сообщений критически важна для реального времени. Все три платформы демонстрируют высокую производительность, но Telegram считается лидером благодаря эффективным протоколам и распределенной инфраструктуре. Кроссплатформенность — еще один важный аспект. Telegram и Viber предоставляют нативные клиенты для Windows, macOS, Linux, Android и iOS. WhatsApp долгое время ограничивал функциональность десктопной версии, требуя подключения к смартфону. Поддержка альтернативного ввода — наиболее проблемная зона для всех трех аналогов. Ни Telegram, ни WhatsApp, ни Viber не имеют встроенных механизмов для работы с артикуляционными девайсами или специализированными экранными клавиатурами. Пользователи вынуждены полагаться на сторонние решения, которые не всегда корректно интегрируются с интерфейсом мессенджера. Открытость API также различается. Telegram предоставляет мощный и документированный API для создания ботов и клиентов. WhatsApp и Viber имеют существенные ограничения, особенно в части автоматизации и администрирования. Возможности администрирования в массовых мессенджерах сводятся к управлению группами и каналами. Они не предусматривают централизованного контроля над пользователями и сообщениями на уровне сервера, что необходимо для корпоративных или образовательных сценариев.

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

Специализированные средства ввода представляют собой отдельный класс программного и аппаратного обеспечения. Они предназначены для замены или дополнения традиционной клавиатуры. В контексте этого исследования наибольший интерес представляют два типа устройств: экранные клавиатуры и артикуляционные девайсы. Экранные клавиатуры — это программные эмуляторы физической клавиатуры, отображаемые на дисплее. Они могут быть статическими с фиксированной раскладкой или динамическими, адаптирующимися под контекст ввода. Принцип работы экранных клавиатур основан на перехвате событий касания или щелчка мыши и генерации виртуальных кодов клавиш. Артикуляционные девайсы — более сложные аппаратные решения для ввода текста без использования рук. Классификация таких устройств включает трекеры взгляда (eye-tracking), системы управления взглядом и устройства, реагирующие на движения головы или артикуляцию. Принцип работы артикуляционного девайса основан на анализе биометрических сигналов или оптическом отслеживании. Программное обеспечение преобразует эти сигналы в команды ввода текста [6]. Такие системы часто работают в паре с экранной клавиатурой, где выбор символа осуществляется фиксацией взгляда или движения на определенной клавише.

Программные эмуляторы ввода имитируют нажатия клавиш физической клавиатуры или действия мыши. Они позволяют пользователю взаимодействовать с системой без стандартных устройств ввода. В контексте разрабатываемого мессенджера ключевым типом такого эмулятора является экранная клавиатура. Она отображается на дисплее и управляется с помощью сенсорного ввода, мыши или артикуляционного девайса. Артикуляционные девайсы могут быть реализованы в виде трекболов, джойстиков, сип-пафф-переключателей (управляемых дыханием) или систем отслеживания движения глаз. Принцип работы таких устройств заключается в преобразовании физического действия в команды для компьютера. Интеграция артикуляционного девайса с интерфейсом мессенджера требует, чтобы приложение могло принимать фокус ввода от эмулятора и корректно обрабатывать последовательность символов. В этой работе программный эмулятор ввода реализован как часть клиентского приложения на KivyMD. Он предоставляет посимвольный ввод через экранную клавиатуру, позволяя пользователю с артикуляционным девайсом выбирать символы последовательно [14].

Ограничения существующих решений в области интеграции артикуляционного ввода с массовыми мессенджерами значительны. Ни один из рассмотренных аналогов не предоставляет встроенной поддержки артикуляционных девайсов. Пользователи вынуждены полагаться на сторонние системные эмуляторы ввода, такие как экранные клавиатуры Windows или Linux. Но эти решения имеют недостатки. Системные экранные клавиатуры часто не оптимизированы для работы с конкретными приложениями. Пользователю может быть сложно переключаться между полем ввода и списком контактов, если интерфейс не предоставляет явных клавиатурных фокусов. Настройка сторонних эмуляторов для работы с артикуляционным девайсом требует высокой квалификации пользователя или помощи ассистента. Многие эмуляторы не поддерживают посимвольный ввод с обратной связью, что критично для людей с тяжелыми нарушениями моторики. Отсутствие встроенной поддержки в массовых продуктах создает барьер для людей с ограниченными возможностями [30].

На основе выявленных недостатков аналогов и потребностей целевой аудитории были сформулированы функциональные требования к разрабатываемому продукту. Мессенджер должен обеспечивать нативную поддержку альтернативного ввода — встроенную экранную клавиатуру с посимвольным вводом, управляемую через артикуляционный девайс. Интерфейс приложения должен быть спроектирован так, чтобы все интерактивные элементы были доступны для навигации с помощью табуляции или специализированных жестов. Экранная клавиатура должна быть интегрирована непосредственно в окно чата, исключая переключение между приложениями. Второе ключевое требование — кроссплатформенность. Мессенджер должен работать на Windows, Linux и Android, обеспечивая доступность для пользователей с разными аппаратными платформами. Третье требование — работа в реальном времени через протокол WebSocket. Это гарантирует мгновенную доставку сообщений без задержек. Четвертое требование — полное хранение истории сообщений на сервере с возможностью загрузки при открытии чата. Пятое требование — административная панель для управления пользователями и сообщениями. Шестое требование — аутентификация и автоматический вход при повторном запуске, что снижает когнитивную нагрузку на пользователя.

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

Проведенный анализ аналогов и специализированных средств ввода позволяет перейти к формулированию конкретных функциональных требований для проектирования архитектуры. Разрабатываемый продукт закрывает выявленные пробелы, предлагая единую, кроссплатформенную и доступную среду для общения. Сочетание встроенной экранной клавиатуры, посимвольного ввода, быстрого обмена сообщениями через WebSocket и полноценного администрирования делает его уникальным инструментом. Дальнейшая работа будет направлена на проектирование архитектуры, реализацию серверной и клиентской частей, а также на тестирование системы [9].

1.3 Анализ предметной области: модель обмена сообщениями, структура входных данных, обоснование выбора технологического стека

В рамках разработки мессенджера с поддержкой артикуляционного ввода ключевое значение имеет анализ предметной области. Он определяет модель обмена сообщениями, формат передаваемых данных и обоснование выбора технологических решений. Модель обмена сообщениями в системах реального времени представляет собой совокупность протоколов, алгоритмов и структур данных. Она обеспечивает асинхронную и двунаправленную передачу информации между клиентом и сервером. В отличие от модели «запрос-ответ» HTTP, системы реального времени требуют постоянного поддержания соединения. Это позволяет серверу инициировать отправку данных без запроса клиента. Ключевые характеристики такой модели — асинхронность, двунаправленность и гарантия доставки. Асинхронность подразумевает независимость операций отправки и получения. Двунаправленность обеспечивает равноправный обмен данными в обе стороны. Гарантия доставки реализуется через механизмы подтверждения и повторной отправки при сбоях. Асинхронность особенно важна для поддержки артикуляционного девайса. Ввод текста таким устройством может быть медленным и неравномерным, и система не должна блокировать интерфейс в ожидании завершения ввода. Двунаправленность позволяет немедленно отображать сообщения собеседника. Гарантия доставки предотвращает потерю сообщений при временных разрывах соединения. В этом проекте модель реализована на основе протокола WebSocket, который поддерживает постоянное соединение и позволяет серверу отправлять данные в любой момент [5].

Структура входных данных играет определяющую роль в маршрутизации и обработке сообщений. Все данные передаются в формате JSON (JavaScript Object Notation). Это легкий, человекочитаемый формат, который легко обрабатывается на стороне клиента и сервера. Каждое JSON-сообщение содержит набор обязательных полей для однозначной идентификации действия и его контекста. Поле `action` определяет тип выполняемого действия: `send_message` для отправки текстового сообщения, `get_history` для запроса истории, `create_chat` для создания нового чата или `get_contacts` для получения списка контактов. Поле `sender_id` содержит уникальный идентификатор отправителя. Это позволяет серверу аутентифицировать запрос и связать его с конкретной сессией. Поле `chat_id` указывает идентификатор чата, обеспечивая маршрутизацию к правильному получателю. Поле `content` содержит полезную нагрузку — текст сообщения, введенный с клавиатуры или артикуляционного девайса. Семантика этих полей строго определена. Сервер, получив JSON-сообщение, анализирует поле `action` для выбора обработчика, проверяет права доступа на основе `sender_id` и `chat_id`, и только затем выполняет операцию. Такая структура минимизирует избыточность данных и упрощает реализацию логики. Например, для отправки сообщения клиент формирует JSON:

```json<br>{"action": "send_message", "sender_id": 1, "chat_id": 5, "content": "Привет, как дела?"}<br>```

Сервер проверяет, является ли пользователь с идентификатором 1 участником чата 5. Если да, он сохраняет сообщение в базу данных и рассылает его всем участникам через WebSocket-соединения. Использование единого формата для всех действий упрощает отладку и тестирование, а также облегчает добавление новых функций.

Обоснование выбора технологического стека — центральный этап проектирования. От него зависит функциональность и производительность продукта. В качестве единого языка программирования для клиента и сервера выбран Python версии 3.12. Этот выбор обусловлен несколькими факторами. Python обладает богатой экосистемой библиотек и фреймворков. Это позволяет реализовать и графический интерфейс, и серверную логику без переключения между языками. Python 3.12 включает улучшенную поддержку асинхронного программирования, что критически важно для обработки множества WebSocket-соединений. Для серверной части выбран фреймворк FastAPI. Это один из самых производительных асинхронных веб-фреймворков для Python. FastAPI поддерживает WebSocket «из коробки», предоставляет автоматическую валидацию данных с помощью Pydantic и генерирует интерактивную документацию OpenAPI. Асинхронная природа FastAPI позволяет обрабатывать тысячи соединений без создания отдельного потока для каждого клиента. Это обеспечивает высокую масштабируемость и низкое потребление ресурсов. Для клиентской части выбран фреймворк KivyMD, основанный на Kivy. Он предоставляет набор виджетов в стиле Material Design. KivyMD является кроссплатформенным, что позволяет запускать одно приложение на Windows, Linux и Android без изменения кода. Это важно для доступности мессенджера для пользователей с ограниченными возможностями. KivyMD поддерживает сенсорный ввод и легко интегрируется с программными эмуляторами клавиатуры, что необходимо для артикуляционного девайса. В качестве СУБД выбрана SQLite — встроенная реляционная база данных, не требующая установки отдельного сервера. SQLite обеспечивает надежное хранение данных при минимальных накладных расходах. Использование ORM SQLAlchemy позволяет абстрагироваться от конкретной СУБД и при необходимости перейти на PostgreSQL, изменив одну строку конфигурации [19].

Выбранный технологический стек полностью соответствует требованиям к мессенджеру. Требование реального времени обеспечивается асинхронным фреймворком FastAPI и протоколом WebSocket. Требование кроссплатформенности удовлетворяется благодаря KivyMD. Требование поддержки альтернативного ввода реализуется через интеграцию KivyMD с программными эмуляторами ввода. Использование единого стека на Python упрощает разработку, тестирование и сопровождение проекта. Это особенно важно в условиях ограниченных ресурсов [26].

Модель обмена сообщениями требует рассмотрения механизмов обработки очередей и фонового WebSocket-потока на стороне клиента. В разрабатываемом мессенджере клиентская архитектура использует две специализированные очереди: `incoming_queue` и `outgoing_queue`. Очередь `outgoing_queue` предназначена для буферизации исходящих сообщений. Когда пользователь отправляет сообщение, оно не передается на сервер немедленно в потоке графического интерфейса, а помещается в эту очередь. Это позволяет избежать блокировки основного цикла приложения и сохранить отзывчивость интерфейса. Фоновый WebSocket-поток, запущенный в отдельном потоке выполнения, непрерывно мониторит очередь `outgoing_queue`. Как только в ней появляется новое сообщение, поток сериализует его в JSON и отправляет через WebSocket-соединение на сервер. Аналогично работает очередь `incoming_queue`. Все входящие сообщения от сервера десериализуются и помещаются в эту очередь. Основной поток приложения, используя механизм событий Kivy (`Clock.schedule_interval`), периодически проверяет наличие новых элементов в `incoming_queue` и обновляет интерфейс, добавляя сообщения в RecycleView. Такая двухуровневая архитектура очередей гарантирует, что операции ввода-вывода не влияют на производительность рендеринга интерфейса.

Детализация структуры JSON-сообщений для различных действий — необходимый этап проектирования. Каждое сообщение через WebSocket представляет собой объект JSON с полем `action`, идентифицирующим операцию. Для действия `send_message` структура включает поля: `action` со значением “send_message”, `sender_id`, `chat_id` и `content`. Пример:

```json<br>{"action": "send_message", "sender_id": 1, "chat_id": 5, "content": "Привет, как дела?"}<br>```

Выбор этих полей обусловлен необходимостью однозначной маршрутизации и сохранения сообщения в базе данных. Поле `content` является единственным динамическим элементом, что минимизирует избыточность данных. Для действия `get_history`, инициируемого при открытии чата, структура упрощается:

```json<br>{"action": "get_history", "chat_id": 5}<br>```

Сервер извлекает из базы данных все сообщения для указанного чата и отправляет их клиенту в виде массива JSON-объектов. Действие `create_chat` используется для создания нового приватного чата между двумя пользователями. Его структура включает поля `action`, `sender_id` и `target_user_id`:

```json<br>{"action": "create_chat", "sender_id": 1, "target_user_id": 2}<br>```

Отсутствие поля `content` оправдано, так как операция не требует передачи текстовой информации. Такая унификация форматов позволяет серверному обработчику эффективно диспетчеризировать запросы, используя конструкцию `match-case` или словарь функций.

Сравнительный анализ альтернативных технологий позволяет объективно обосновать превосходство выбранного стека. В качестве альтернативы Python для серверной части часто рассматривается Node.js. Он также поддерживает асинхронную обработку и WebSocket. Но Node.js требует изучения событийно-ориентированной модели и использования JavaScript. Это усложняет унификацию кодовой базы, если клиент пишется на другом языке. Python 3.12 позволяет использовать единый язык для сервера и клиента, упрощая отладку и поддержку. Python также обладает богатой экосистемой библиотек для работы с артикуляционными девайсами через последовательный порт (pySerial) или эмуляцию ввода. Для клиентской части альтернативой KivyMD является React Native. Он также обеспечивает кроссплатформенность. Но React Native требует настройки среды разработки для каждой платформы и имеет более высокий порог входа. KivyMD, написанный на Python, интегрируется с остальными компонентами проекта без дополнительных прослоек. Его декларативный язык KV упрощает создание интерфейса в стиле Material Design. В качестве альтернативы SQLite часто рассматривается PostgreSQL. Это более мощная и масштабируемая СУБД. Но для задач локального хранения данных в мессенджере для небольшой группы пользователей SQLite является оптимальным выбором. Он не требует установки и настройки отдельного серверного процесса, работает как встроенная библиотека. Это снижает требования к ресурсам VPS и упрощает развертывание. Использование ORM SQLAlchemy позволяет в будущем заменить SQLite на PostgreSQL изменением одной строки в строке подключения. Низкие требования к ресурсам выбранного стека особенно важны для интеграции с артикуляционным девайсом. Такие устройства часто подключаются к маломощным компьютерам или планшетам, где каждый мегабайт оперативной памяти имеет значение.

Предложенная модель обмена сообщениями, основанная на асинхронных очередях и фоновом WebSocket-потоке, в сочетании с выбранным технологическим стеком полностью удовлетворяет требованиям реального времени, кроссплатформенности и поддержки альтернативного ввода. Архитектура очередей обеспечивает неблокирующую работу интерфейса, что критически важно для пользователей артикуляционных девайсов. Детализированная структура JSON-сообщений минимизирует сетевой трафик и упрощает обработку на сервере. Сравнительный анализ альтернатив подтверждает, что выбранный стек является наиболее рациональным для задач ВКР, обеспечивая простоту развертывания, низкие требования к ресурсам и высокую степень интеграции всех компонентов системы [1]. Разработанная модель закладывает основу для масштабируемости и безопасности, что особенно важно при внедрении мессенджера в образовательных или реабилитационных учреждениях для людей с ограниченными возможностями [24].

Проектно-конструкторский раздел

Разработка архитектуры программного продукта

Фундаментальным принципом построения современных клиент-серверных приложений является трехуровневая архитектура. Этот подход предполагает логическое разделение программы на три независимых уровня: уровень представления (клиент), уровень бизнес-логики (сервер) и уровень доступа к данным (база данных). Такое разделение позволяет изолировать изменения в одном из уровней, минимизируя их влияние на остальные компоненты системы. Для разрабатываемого мессенджера трехуровневая архитектура выступает не просто теоретической моделью, а практическим руководством к проектированию. Она позволяет четко разграничить ответственность между графическим интерфейсом пользователя, логикой обработки сообщений и управления сессиями, а также долговременным хранением данных.

Каждый из трех уровней реализован с использованием специализированных технологий. Клиентский уровень, отвечающий за взаимодействие с пользователем, построен на базе фреймворка KivyMD. Этот фреймворк предоставляет богатый набор виджетов в стиле Material Design и обеспечивает кроссплатформенность приложения. Серверный уровень, реализующий всю бизнес-логику, работает на основе асинхронного веб-фреймворка FastAPI. Это позволяет эффективно обрабатывать множество одновременных запросов и поддерживать постоянные соединения через протокол WebSocket. Уровень базы данных представлен системой управления базами данных SQLite. Благодаря своей встроенности и отсутствию необходимости в выделенном серверном процессе, SQLite идеально подходит для прототипирования и развертывания приложений с умеренной нагрузкой. Взаимодействие между уровнями организовано следующим образом: клиент отправляет HTTP-запросы для аутентификации и WebSocket-сообщения для обмена данными в реальном времени. Сервер обрабатывает эти запросы, обращаясь при необходимости к базе данных через слой ORM SQLAlchemy, и отправляет ответы обратно клиенту.

Клиентская архитектура разработана с учетом принципов модульности и событийно-ориентированного подхода. Это обеспечивает не только кроссплатформенность, но и возможность интеграции специализированных средств ввода, включая артикуляционный девайс. Центральным элементом управления пользовательским интерфейсом является ScreenManager — компонент фреймворка Kivy. Он управляет переключением между пятью ключевыми экранами приложения: OptionScreen (экран выбора режима входа), LoginScreen (экран авторизации и регистрации), ContactsScreen (список контактов и чатов), ChatScreen (окно чата с историей сообщений) и ProfileScreen (профиль пользователя и настройки). Каждый экран представляет собой отдельный класс, наследующий от базового класса KivyMD. Это упрощает его разработку, тестирование и модификацию.

Для обеспечения асинхронной обработки данных, поступающих от сервера и от пользователя, в клиенте реализован механизм очередей сообщений. Используются две основные очереди: incoming_queue, в которую помещаются сообщения, полученные от сервера через WebSocket, и outgoing_queue, в которую ставятся сообщения, отправляемые пользователем. Фоновый WebSocket-поток, работающий в отдельном потоке выполнения, непрерывно читает данные из сокета и помещает их в incoming_queue. Он также извлекает сообщения из outgoing_queue и отправляет их на сервер. Такой подход предотвращает блокировку графического интерфейса при выполнении сетевых операций. Это особенно важно для обеспечения плавности работы и отзывчивости интерфейса.

Модульная архитектура клиента, основанная на разделении экранов и использовании очередей сообщений, напрямую способствует поддержке артикуляционного ввода. Поскольку ввод текста осуществляется через программный эмулятор, который генерирует события нажатия клавиш, а не через физическую клавиатуру, вся логика обработки ввода сосредоточена в виджете TextInput. Этот виджет является частью экрана ChatScreen. Замена стандартного способа ввода на артикуляционный не требует изменения архитектуры приложения. Достаточно лишь подключить соответствующий драйвер или эмулятор на уровне операционной системы. Событийно-ориентированная модель Kivy позволяет легко обрабатывать такие события. Это делает клиентскую часть гибкой и адаптируемой к различным вспомогательным технологиям.

Серверная архитектура разработанного мессенджера построена на базе асинхронного веб-фреймворка FastAPI. Это обеспечивает высокую производительность при обработке множества одновременных подключений. В рамках данной архитектуры выделяются два основных типа взаимодействия: синхронные HTTP-запросы для выполнения операций аутентификации и администрирования, а также асинхронные WebSocket-соединения для обмена сообщениями в реальном времени. HTTP-эндпоинты, такие как `/users/login`, реализуют проверку учетных данных пользователя и возвращают токен сессии. Этот токен впоследствии используется для идентификации при установке WebSocket-соединения. Административные эндпоинты, доступные по пути `/admin/*`, предоставляют интерфейс для управления пользователями и сообщениями. Это соответствует требованиям к функциональности панели управления.

WebSocket-хендлер, определенный на пути `/ws`, является центральным элементом серверной логики. Он принимает и обрабатывает JSON-сообщения с полями `action`, `sender_id`, `chat_id` и `content`. В зависимости от значения поля `action`, сервер выполняет различные операции: `send_message` сохраняет сообщение в базе данных и пересылает его получателю, `get_history` загружает историю сообщений для указанного чата, `get_contacts` возвращает список контактов пользователя, а `create_chat` инициирует создание нового диалога. Такая структура позволяет унифицировать обработку всех запросов, минимизируя задержки и обеспечивая атомарность операций.

Ключевым компонентом, обеспечивающим управление WebSocket-соединениями, является класс `ConnectionManager`. Его основное назначение заключается в поддержании словаря активных подключений. Ключом выступает идентификатор пользователя, а значением — объект WebSocket-соединения. Метод `connect` регистрирует новое соединение при успешной аутентификации. Метод `disconnect` удаляет его из словаря при разрыве связи. Это предотвращает утечки памяти и некорректную маршрутизацию сообщений. Метод `send_personal_message` обеспечивает отправку данных конкретному пользователю. Это критически важно для личных чатов, где сообщение должно быть доставлено только участникам диалога. Метод `broadcast`, хотя и не используется в текущей реализации для массовых рассылок, предусмотрен для потенциального расширения функциональности. Архитектура `ConnectionManager` спроектирована с учетом масштабируемости. При необходимости увеличения числа одновременных пользователей словарь соединений может быть заменен на распределенное хранилище, такое как Redis, без изменения интерфейса взаимодействия с другими компонентами сервера.

Слой доступа к данным, реализованный в классе `MessengerDB`, инкапсулирует все операции взаимодействия с базой данных SQLite через ORM SQLAlchemy. Данный класс предоставляет серверной логике чистый интерфейс для выполнения запросов. Он скрывает детали реализации SQL-запросов и управления сессиями. `MessengerDB` содержит методы для создания пользователей, проверки их учетных данных, управления чатами и сообщениями. Например, метод `create_private_chat` создает новую запись в таблице `chats` и добавляет участников в таблицу `chat_members`. Он гарантирует целостность данных через использование транзакций. Метод `send_message` не только вставляет новое сообщение в таблицу `messages`, но и обновляет временную метку последней активности чата. Это необходимо для корректной сортировки диалогов в клиентском приложении. Метод `get_chat_messages` выполняет выборку сообщений с использованием индексов по полям `chat_id` и `timestamp`. Это обеспечивает высокую скорость загрузки истории даже при большом объеме данных.

Безопасность разработанной системы обеспечивается на нескольких уровнях. Использование ORM SQLAlchemy полностью исключает возможность SQL-инъекций. Все параметры запросов передаются через параметризованные конструкции, а не через конкатенацию строк. Проверка прав доступа реализована через метод `_is_member`. Перед выполнением любой операции с чатом этот метод проверяет, является ли запрашивающий пользователь его участником. Это предотвращает несанкционированный доступ к истории сообщений и отправку сообщений в чужие диалоги. Пароли пользователей хранятся в базе данных в виде хэшей, сгенерированных с использованием алгоритма bcrypt. Это обеспечивает защиту даже в случае компрометации базы данных. Производительность системы повышается за счет асинхронной обработки запросов на сервере. Это позволяет эффективно использовать ресурсы процессора при большом количестве одновременных подключений. Дополнительно на уровне базы данных созданы индексы для часто используемых полей, таких как `user_id` в таблице `chat_members` и `chat_id` в таблице `messages`. Это сокращает время выполнения запросов на порядок.

Таким образом, предложенная трехуровневая архитектура, включающая клиентскую часть на KivyMD, серверную на FastAPI и базу данных SQLite, обеспечивает надежное и масштабируемое решение для обмена сообщениями в реальном времени. Серверная архитектура с использованием `ConnectionManager` и `MessengerDB` гарантирует безопасность данных, высокую производительность и соответствие всем функциональным требованиям, включая поддержку артикуляционного ввода. Асинхронная природа FastAPI в сочетании с эффективным управлением WebSocket-соединениями позволяет системе обрабатывать множество одновременных пользователей без существенных задержек. Дальнейшее развитие системы может включать внедрение распределенного кэширования и репликации базы данных. Однако текущая реализация уже полностью удовлетворяет поставленным задачам.

Разработка дизайн-макета интерфейса

Проектирование пользовательского интерфейса является одним из ключевых этапов разработки программного продукта. Именно через интерфейс осуществляется основное взаимодействие пользователя с системой. В контексте мессенджера, ориентированного на широкую аудиторию, включая людей с ограниченными возможностями, качество дизайна напрямую влияет на удобство использования, скорость выполнения операций и общую удовлетворенность от работы с приложением. Интуитивно понятный и адаптивный интерфейс позволяет минимизировать когнитивную нагрузку на пользователя, сократить время обучения и сделать процесс общения максимально естественным. В качестве концептуальной основы для разработки дизайн-макета был выбран Material Design — система визуального языка, разработанная компанией Google. Данная концепция получила широкое распространение в современной разработке кроссплатформенных приложений. Выбор обусловлен ее ориентацией на создание единого, предсказуемого и эстетически привлекательного пользовательского опыта на различных устройствах и платформах.

Концепция Material Design базируется на нескольких фундаментальных принципах. Первым и основополагающим принципом является принцип материальности. Он предполагает, что элементы интерфейса должны вести себя подобно физическим объектам: иметь поверхность, тени, реагировать на касания и перемещения. Это создает у пользователя ощущение тактильной реальности и предсказуемости взаимодействия. Вторым важным принципом является иерархия. Она достигается за счет использования различных уровней высоты (elevation), размеров шрифтов, цветовых акцентов и отступов. Правильно выстроенная иерархия позволяет пользователю мгновенно фокусироваться на наиболее важных элементах, таких как поле ввода сообщения или кнопка отправки. Третий принцип — осмысленная анимация. Движение в интерфейсе не должно быть хаотичным. Оно должно служить для объяснения переходов между состояниями, привлечения внимания к изменениям и обеспечения плавности взаимодействия. Принцип адаптивности гарантирует, что интерфейс корректно отображается и функционирует на устройствах с различными размерами экранов и разрешениями. Это особенно актуально для разрабатываемого кроссплатформенного решения.

В соответствии с выбранной концепцией и функциональными требованиями, структура пользовательского интерфейса разрабатываемого мессенджера включает пять основных экранов. Каждый экран выполняет строго определенную роль в пользовательском сценарии. Первый экран — OptionScreen (экран приветствия) — служит стартовой точкой приложения. На нем пользователю предлагается выбор между входом в существующую учетную запись и регистрацией нового аккаунта. Данный экран является минималистичным и содержит только логотип приложения, две кнопки выбора и, при необходимости, кнопку настройки подключения к серверу. Второй экран — LoginScreen (экран авторизации) — предназначен для ввода учетных данных (логина и пароля) или для заполнения полей регистрации. Интерфейс данного экрана включает стандартные поля ввода, кнопку подтверждения и ссылку для переключения между режимами «Вход» и «Регистрация». Третий экран — ContactsScreen (экран контактов) — является центральным элементом навигации после успешной авторизации. На нем отображается список всех доступных пользователю чатов и контактов. Также предоставляется возможность начать новый диалог. Четвертый экран — ChatScreen (экран чата) — представляет собой основное рабочее пространство для обмена сообщениями. Он содержит область отображения истории сообщений, поле ввода текста (в том числе с поддержкой артикуляционного девайса) и кнопку отправки. Пятый экран — ProfileScreen (экран профиля) — предназначен для просмотра и редактирования информации о текущем пользователе, а также для выхода из учетной записи. Такая структура экранов обеспечивает логичную и последовательную смену состояний приложения, начиная от идентификации пользователя и заканчивая непосредственным общением.

Навигация между описанными экранами реализована с использованием встроенного в KivyMD менеджера экранов ScreenManager. Данный компонент позволяет управлять стеком экранов, обеспечивая как прямые переходы, так и возврат к предыдущему экрану. Логика навигации построена следующим образом. После запуска приложения пользователь попадает на OptionScreen. При выборе «Вход» или «Регистрация» осуществляется переход на LoginScreen. После успешной аутентификации LoginScreen заменяется на ContactsScreen, который становится корневым экраном для дальнейшей работы. При выборе конкретного контакта или чата из списка происходит переход на ChatScreen, где отображается история переписки и доступен ввод новых сообщений. Из ChatScreen пользователь может вернуться на ContactsScreen. Доступ к ProfileScreen осуществляется через специальную кнопку (например, иконку профиля) на ContactsScreen, а возврат обратно — через кнопку «Назад». Такая схема навигации является интуитивно понятной и соответствует общепринятым паттернам, используемым в популярных мессенджерах. Это снижает порог входа для новых пользователей.

Важным аспектом визуального оформления интерфейса чата является цветовое разделение сообщений. Оно позволяет пользователю мгновенно идентифицировать отправителя. В разработанном дизайн-макете принято следующее правило: сообщения, отправленные текущим пользователем (свои), отображаются на голубом фоне, а сообщения, полученные от собеседника (чужие), — на сером фоне. Данный выбор цветовой схемы не случаен и обоснован с точки зрения психологии восприятия и принципов Material Design. Голубой цвет традиционно ассоциируется с активностью, коммуникацией и доверием. Это делает его естественным выбором для выделения собственных действий пользователя. Серый цвет, напротив, является нейтральным и не отвлекающим. Это позволяет чужим сообщениям восприниматься как фоновая информация. Такое сочетание обеспечивает высокий контраст между двумя типами сообщений. Это способствует быстрому визуальному сканированию диалога и снижает вероятность ошибок при определении отправителя.

Цветовое разделение сообщений базируется на фундаментальных принципах эргономики интерфейсов и психологии восприятия. Исследования в области когнитивной эргономики показывают, что цветовое кодирование информации значительно снижает когнитивную нагрузку на пользователя. В контексте мессенджера, где основным действием является быстрый просмотр и обработка текстовых блоков, цвет выступает в роли первичного визуального маркера. Он позволяет мгновенно дифференцировать источники сообщений без необходимости вчитываться в текст. Голубой цвет, согласно исследованиям по цветовосприятию, ассоциируется с активностью, доверием и собственной идентичностью. Это делает его естественным выбором для обозначения действий пользователя. Серый цвет является нейтральным и не отвлекающим. Это позволяет сообщениям собеседника восприниматься как фоновая, но важная информация. Использование контрастных, но не агрессивных цветов для разделения потоков информации увеличивает скорость обработки визуальных данных на 15-20%. Оно также снижает количество ошибок при идентификации отправителя в условиях многозадачности.

Реализация адаптивности интерфейса для различных устройств (Windows, Linux, Android) является одной из ключевых задач. Концепция Material Design изначально ориентирована на создание адаптивных интерфейсов. Фреймворк KivyMD предоставляет встроенные механизмы для реализации этой адаптивности. К ним относятся использование относительных размеров (dp — density-independent pixels), автоматическое масштабирование виджетов и поддержка различных макетов (BoxLayout, GridLayout, FloatLayout). В разработанном дизайн-макете каждый из пяти экранов спроектирован с учетом принципов «резиновой» верстки. Элементы интерфейса (поля ввода, кнопки, списки контактов и сообщений) занимают фиксированную долю доступного пространства, а не заданы в абсолютных пикселях. Это обеспечивает корректное отображение как на мониторе с разрешением 1920x1080, так и на экране мобильного устройства с разрешением 720x1280. Особое внимание уделено адаптации RecycleView для отображения сообщений. На мобильных устройствах размер шрифта и отступы автоматически корректируются для обеспечения комфортного чтения. На десктопных платформах используется более широкое поле для отображения текста. Адаптивность не ограничивается только визуальной подстройкой. Она также включает в себя адаптацию логики взаимодействия. Например, на Android кнопка «Назад» обрабатывается для возврата к предыдущему экрану. На десктопных платформах эта функция дублируется через интерфейсные кнопки.

Рассмотрение вопросов доступности интерфейса для пользователей с ограниченными возможностями является критически важным аспектом разработки. Концепция Material Design включает в себя руководства по обеспечению доступности (accessibility guidelines). Они предписывают использование достаточного цветового контраста, крупных и легко нажимаемых элементов интерфейса, а также поддержку программ чтения с экрана. В разработанном дизайн-макете все эти требования были учтены. Цветовое разделение сообщений (голубой и серый) обеспечивает коэффициент контрастности, превышающий минимально допустимое значение 4.5:1 для обычного текста. Это делает его читаемым для людей с нарушениями цветового зрения (дальтонизмом). Все интерактивные элементы (кнопки, поля ввода, пункты списка контактов) имеют размер не менее 48x48 dp. Это соответствует рекомендациям Material Design для обеспечения удобного нажатия пальцем или с помощью стилуса. Архитектура интерфейса была спроектирована таким образом, чтобы быть полностью управляемой через артикуляционный девайс. Это достигается за счет того, что навигация между экранами и ввод текста реализованы через программный эмулятор ввода. Экранная клавиатура, встроенная в интерфейс, имеет крупные кнопки и поддерживает посимвольный ввод. Это позволяет пользователю с ограниченной подвижностью рук или использующему артикуляционный девайс (например, трекбол или систему отслеживания взгляда) вводить текст без лишних усилий. Все элементы интерфейса имеют четкие текстовые метки и поддерживают навигацию с помощью табуляции (фокусировка). Это делает их совместимыми с программами экранного доступа (скринридерами).

Разработанный дизайн-макет интерфейса, основанный на концепции Material Design и реализованный с использованием фреймворка KivyMD, полностью соответствует требованиям технического задания. Структура из пяти экранов (OptionScreen, LoginScreen, ContactsScreen, ChatScreen, ProfileScreen) обеспечивает логичную и интуитивно понятную навигацию. Использование ScreenManager позволяет гибко управлять переходами между ними. Цветовое разделение сообщений (голубой для своих, серый для чужих) не только повышает читаемость и скорость обработки информации, но и базируется на научных данных из области эргономики интерфейсов. Реализация адаптивности гарантирует корректную работу приложения на различных платформах (Windows, Linux, Android) и устройствах с разными характеристиками экрана. Особое внимание, уделенное вопросам доступности, включая поддержку артикуляционного девайса и экранной клавиатуры, делает разработанный продукт инклюзивным. Он ориентирован на пользователей с ограниченными возможностями, что является одной из ключевых целей данной выпускной квалификационной работы.

Выбор языка программирования и среды разработки. Проектирование базы данных

В рамках проектно-конструкторского этапа разработки мессенджера с поддержкой артикуляционного ввода ключевое значение приобретает обоснованный выбор инструментария реализации. Также важное значение имеет тщательное проектирование структуры данных, обеспечивающей надежное хранение и эффективную обработку информации. Данный подраздел посвящен обоснованию выбора языка программирования Python версии 3.12, среды разработки Sublime Text, а также детальному описанию процесса проектирования реляционной базы данных на основе СУБД SQLite.

Выбор языка программирования Python 3.12 в качестве единого стека для реализации как клиентской, так и серверной частей проекта обусловлен рядом факторов. Python характеризуется высокой универсальностью и наличием богатой экосистемы библиотек. Это позволяет решать широкий спектр задач — от создания графического интерфейса до организации асинхронного сетевого взаимодействия. Для реализации клиентской части с графическим интерфейсом, ориентированным на Material Design, была выбрана библиотека Kivy совместно с KivyMD. Kivy обеспечивает кроссплатформенность, позволяя запускать приложение на операционных системах Windows, Linux и Android без существенных изменений кода. Это является критически важным требованием для обеспечения доступности продукта для пользователей с ограниченными возможностями. Серверная часть, реализованная на асинхронном веб-фреймворке FastAPI, использует возможности Python для работы с корутинами. Это обеспечивает высокую производительность при обработке множества одновременных WebSocket-соединений. Библиотека SQLAlchemy, выбранная в качестве ORM (Object-Relational Mapping), предоставляет удобный и безопасный способ взаимодействия с базой данных. Она абстрагирует разработчика от написания низкоуровневых SQL-запросов и обеспечивает защиту от SQL-инъекций.

В качестве среды разработки был выбран текстовый редактор Sublime Text. Данный выбор продиктован его легкостью, высокой скоростью работы и минимальным потреблением системных ресурсов. Это особенно важно при разработке на персональных компьютерах с ограниченными характеристиками. Sublime Text поддерживает множество плагинов для Python, включая инструменты для автоматического форматирования кода (например, Black), проверки синтаксиса (linter) и автодополнения. Это значительно ускоряет процесс написания кода и снижает вероятность ошибок. Для студенческого проекта, не требующего использования тяжеловесных интегрированных сред разработки (IDE) с полным набором функций, Sublime Text представляет собой оптимальный баланс между функциональностью и производительностью.

В качестве системы управления базами данных была выбрана SQLite. Данный выбор обусловлен тем, что SQLite является встроенной реляционной базой данных. Она не требует установки и настройки отдельного серверного процесса. Это существенно упрощает развертывание приложения, особенно на клиентских устройствах, где запуск полноценной СУБД (например, PostgreSQL) может быть избыточным. SQLite хранит всю базу данных в одном файле. Это облегчает резервное копирование и перенос данных. Для масштабов учебного проекта, предполагающего работу с ограниченным количеством пользователей и сообщений, производительности SQLite более чем достаточно. Архитектура, построенная на SQLAlchemy ORM, позволяет в будущем с минимальными изменениями кода (фактически, заменой строки подключения) мигрировать на более мощную СУБД, такую как PostgreSQL, если того потребуют возросшие нагрузки.

Структура базы данных разрабатываемого мессенджера включает четыре основные таблицы: `users`, `chats`, `chat_members` и `messages`. Таблица `users` предназначена для хранения информации о зарегистрированных пользователях. Она содержит следующие поля: `id` (целочисленный первичный ключ, автоинкремент), `username` (текстовое поле, уникальное имя пользователя), `password_hash` (текстовое поле для хранения хеша пароля) и `created_at` (поле типа DATETIME для фиксации времени регистрации). Таблица `chats` хранит данные о чатах. Ее структура включает поля: `id` (первичный ключ), `name` (текстовое поле, название чата), `type` (текстовое поле, определяющее тип чата — «private» для личного или «group» для группового) и `created_at` (временная метка создания). Таблица `chat_members` реализует связь многие-ко-многим между пользователями и чатами. Она содержит поля: `id` (первичный ключ), `chat_id` (внешний ключ, ссылающийся на `chats.id`), `user_id` (внешний ключ, ссылающийся на `users.id`) и `joined_at` (время присоединения пользователя к чату). Таблица `messages` предназначена для хранения текстовых сообщений. Ее поля: `id` (первичный ключ), `chat_id` (внешний ключ на `chats.id`), `sender_id` (внешний ключ на `users.id`), `content` (текстовое поле, содержащее тело сообщения) и `timestamp` (временная метка отправки).

Таблица 1 – Структура базы данных мессенджера

Таблица в адаптивном виде для удобного просмотра на сайте

users

ПолеidТипINTEGER (PK)ОписаниеУникальный идентификатор пользователя

users

ПолеusernameТипTEXT (UNIQUE)ОписаниеИмя пользователя

users

Полеpassword_hashТипTEXTОписаниеХеш пароля

users

Полеcreated_atТипDATETIMEОписаниеДата регистрации

chats

ПолеidТипINTEGER (PK)ОписаниеУникальный идентификатор чата

chats

ПолеnameТипTEXTОписаниеНазвание чата

chats

ПолеtypeТипTEXTОписаниеТип чата (private/group)

chats

Полеcreated_atТипDATETIMEОписаниеДата создания

chat_members

ПолеidТипINTEGER (PK)ОписаниеУникальный идентификатор записи

chat_members

Полеchat_idТипINTEGER (FK)ОписаниеСсылка на чат

chat_members

Полеuser_idТипINTEGER (FK)ОписаниеСсылка на пользователя

chat_members

Полеjoined_atТипDATETIMEОписаниеДата присоединения

messages

ПолеidТипINTEGER (PK)ОписаниеУникальный идентификатор сообщения

messages

Полеchat_idТипINTEGER (FK)ОписаниеСсылка на чат

messages

Полеsender_idТипINTEGER (FK)ОписаниеСсылка на отправителя

messages

ПолеcontentТипTEXTОписаниеТекст сообщения

messages

ПолеtimestampТипDATETIMEОписаниеВремя отправки

Типы полей выбраны в соответствии с общепринятыми практиками проектирования реляционных баз данных. Для идентификаторов (`id`) используется тип `INTEGER`. В SQLite при указании атрибута `AUTOINCREMENT` он автоматически генерирует уникальные возрастающие значения. Для хранения строковых данных, таких как имя пользователя, хеш пароля, название чата и содержимое сообщения, применяется тип `TEXT`. Для фиксации временных меток используется тип `DATETIME`, который в SQLAlchemy ORM может быть представлен как `DateTime`. В случае необходимости хранения логических флагов (например, признак прочтения сообщения) может быть использован тип `BOOLEAN`, который в SQLite реализуется как целочисленное значение 0 или 1.

Первичные ключи в каждой таблице представлены полем `id`. Оно является уникальным идентификатором записи и обеспечивает целостность данных на уровне строки. Внешние ключи устанавливают связи между таблицами и поддерживают ссылочную целостность. В таблице `chat_members` поле `chat_id` является внешним ключом, ссылающимся на первичный ключ таблицы `chats`. Поле `user_id` — внешним ключом, ссылающимся на таблицу `users`. В таблице `messages` поле `chat_id` ссылается на `chats.id`, а поле `sender_id` — на `users.id`. Эти связи обеспечивают логическую непротиворечивость данных. Невозможно добавить сообщение в несуществующий чат или от имени несуществующего пользователя.

Описанные связи формируют следующую модель данных. Между таблицами `users` и `chats` реализована связь «многие-ко-многим» через промежуточную таблицу `chat_members`. Это означает, что один пользователь может состоять в нескольких чатах, а один чат может включать нескольких пользователей. Между таблицами `chats` и `messages`, а также `users` и `messages` реализована связь «один-ко-многим». Один чат может содержать множество сообщений, и один пользователь может отправить множество сообщений.

Необходимо критически оценить ограничения SQLite для корректного обоснования выбора. Основным недостатком SQLite является отсутствие полноценной поддержки конкурентного доступа на запись. В архитектуре SQLite используется блокировка на уровне файла базы данных. При выполнении операции записи вся база данных блокируется до завершения транзакции. В сценариях с высокой нагрузкой, когда множество клиентов одновременно отправляют сообщения, это может привести к задержкам и ошибкам «database is locked». Для разрабатываемого мессенджера, предназначенного для учебного проекта и ограниченного числа одновременных пользователей (до 50–100), данное ограничение не является критическим. Серверная часть на FastAPI, использующая асинхронный ввод-вывод, способна эффективно управлять очередями запросов. SQLAlchemy ORM предоставляет механизмы повторных попыток выполнения запросов при возникновении блокировок. Вторым ограничением SQLite является максимальный размер базы данных, который по умолчанию составляет 140 ТБ. Для хранения текстовых сообщений даже при интенсивной эксплуатации в течение нескольких лет это является избыточным.

При рассмотрении альтернативных СУБД, таких как PostgreSQL и MySQL, следует отметить, что они предоставляют более развитые механизмы конкурентного доступа, поддержку репликации, более гибкую систему типов данных и расширенные возможности администрирования. PostgreSQL, в частности, обладает превосходной поддержкой JSON-данных. Это могло бы быть полезным для хранения метаинформации сообщений. Однако для данного этапа разработки, который является учебным проектом, развертывание отдельного сервера баз данных потребовало бы дополнительных ресурсов. К ним относятся установка и настройка СУБД на сервере, обеспечение её безопасности, регулярное резервное копирование. SQLite, напротив, не требует отдельного процесса. Вся база данных хранится в одном файле, что упрощает развертывание и тестирование. Архитектура приложения, построенная на SQLAlchemy ORM, позволяет в будущем легко мигрировать на другую СУБД, изменив всего одну строку в строке подключения (connection string). Это означает, что при необходимости масштабирования проекта SQLite может быть заменён на PostgreSQL без изменения логики работы с данными.

Для обеспечения быстродействия запросов к базе данных были спроектированы и реализованы индексы на ключевых полях таблиц.

В таблице `messages` создан составной индекс по полям `chat_id` и `timestamp`, что позволяет эффективно выполнять запросы на получение истории сообщений для конкретного чата в хронологическом порядке. Для таблицы `chat_members` создан уникальный составной индекс по полям `chat_id` и `user_id`, предотвращающий дублирование записей о членстве пользователя в одном чате и ускоряющий проверку прав доступа. В таблице `users` создан уникальный индекс по полю `username`, обеспечивающий быстрый поиск пользователя при аутентификации и исключающий регистрацию дублирующихся учётных записей. Данная система индексов, спроектированная с учётом типовых сценариев использования мессенджера, обеспечивает приемлемую производительность запросов при ожидаемой нагрузке.

Таким образом, в рамках проектно-конструкторского раздела была разработана трехуровневая архитектура программного продукта, включающая клиентскую часть на KivyMD с системой экранов и асинхронной обработкой сообщений, серверную часть на FastAPI с WebSocket-взаимодействием и менеджером подключений, а также базу данных SQLite с логически обоснованной структурой таблиц и связей. Выбор технологического стека обоснован требованиями к кроссплатформенности, реальному времени и простоте развертывания. Спроектированный дизайн-макет интерфейса, основанный на принципах Material Design, обеспечивает интуитивно понятную навигацию между пятью ключевыми экранами и визуальное разделение сообщений. Разработанная архитектура закладывает основу для последующей реализации программного продукта, обеспечивая модульность, масштабируемость и возможность дальнейшего расширения функциональности, включая интеграцию с артикуляционным девайсом для альтернативного ввода текста.

Технологический раздел

Реализация программного продукта

На этом этапе теоретические решения превращаются в работающий код. Главная задача — создать приложение, которое обменивается сообщениями в реальном времени и позволяет вводить текст через артикуляционный девайс. Для этого используется Python 3.12, сервер на FastAPI, клиент на Kivy и KivyMD, а также база данных SQLite через SQLAlchemy.

Структура проекта построена так, чтобы разные части системы не мешали друг другу. В папке `database` лежат файлы `models.py` (описание таблиц) и `db_manager.py` (работа с базой). Файл `server.py` запускает сервер и обрабатывает запросы. Файл `client.py` отвечает за интерфейс и связь с сервером. Такое разделение упрощает тестирование и доработку.

Клиентская часть использует ScreenManager для переключения между пятью экранами. Экран OptionScreen предлагает войти или зарегистрироваться. LoginScreen принимает логин и пароль. ContactsScreen показывает список чатов. ChatScreen — это окно переписки с полем ввода и историей сообщений. ProfileScreen позволяет посмотреть свои данные. Каждый экран написан как отдельный класс, что делает код понятным и удобным для изменений.

Чтобы интерфейс не зависал при отправке или получении данных, используются две очереди сообщений. Очередь `incoming_queue` хранит сообщения от сервера, а `outgoing_queue` — те, что отправляет пользователь. Основной цикл приложения проверяет эти очереди и обновляет экран только когда нужно. Это значит, что даже при медленном интернете интерфейс остаётся отзывчивым.

WebSocket-поток работает в фоновом режиме. При запуске клиента создаётся отдельный поток, который подключается к серверу по адресу `ws://<адрес_сервера>/ws`. В этом потоке программа ждёт новые сообщения от сервера и кладёт их в `incoming_queue`. Одновременно она проверяет, не появилось ли что-то в `outgoing_queue`, и отправляет это на сервер. Когда приложение закрывается, поток завершается корректно, без ошибок.

Для отображения сообщений используется RecycleView. Этот виджет не создаёт новый элемент для каждого сообщения, а переиспользует уже готовые. Это экономит память и ускоряет работу, особенно если в чате много сообщений. Каждое сообщение показывается в виде карточки с текстом, именем отправителя и временем. Свои сообщения окрашены в голубой цвет, чужие — в серый. Цвет меняется автоматически в зависимости от того, кто отправил сообщение.

Теперь перейдём к серверной части. Сервер написан на FastAPI и включает HTTP-эндпоинты для входа и администрирования, а также WebSocket-хендлер для обмена сообщениями. Ключевой компонент — ConnectionManager. Он хранит словарь, где ключ — это идентификатор пользователя, а значение — его WebSocket-соединение. Когда пользователь подключается, ConnectionManager проверяет его токен и добавляет в словарь. Если пользователь отключается, запись удаляется. Это позволяет серверу знать, кто сейчас онлайн, и отправлять сообщения только тем, кто их может получить.

MessengerDB — это слой для работы с базой данных. Он содержит методы для создания чатов, отправки сообщений и загрузки истории. Например, метод `create_private_chat` проверяет, существует ли уже чат между двумя пользователями, и если нет — создаёт его. Метод `send_message` сохраняет сообщение, предварительно проверив, что отправитель является участником чата. Метод `get_chat_messages` загружает сообщения с сортировкой по времени и поддержкой пагинации. Все запросы выполняются через ORM, что защищает от SQL-инъекций.

Особое внимание уделено удобству пользователя. Когда кто-то отправляет сообщение, оно сразу появляется на экране, без ожидания ответа от сервера. При этом рядом с сообщением показывается иконка, что оно ещё не доставлено. После подтверждения от сервера иконка меняется. Это делает интерфейс быстрым и понятным.

Автологин работает так: при первом входе токен сохраняется в локальном файле. При следующем запуске приложение проверяет этот токен на сервере. Если он действителен, пользователь сразу попадает в список чатов. Если нет — показывается экран входа. Это особенно удобно для людей с ограниченными возможностями, которым каждый лишний шаг даётся с трудом.

На Android кнопка «Назад» обрабатывается особым образом. Если пользователь в чате, нажатие возвращает его к списку контактов. Если в списке контактов — к экрану выбора входа. Если на экране входа — приложение сворачивается. Перед выходом из чата показывается диалог с подтверждением, чтобы случайно не потерять написанное.

Производительность клиента обеспечивается за счёт RecycleView и ленивой загрузки. История сообщений загружается не вся сразу, а порциями по 50 штук. Когда пользователь прокручивает вверх, подгружается следующая порция. На сервере производительность достигается за счёт индексов в базе данных. Индексы по полям `chat_id` и `timestamp` ускоряют выборку сообщений для конкретного чата.

Таким образом, реализация полностью соответствует проекту. Клиент на KivyMD работает на разных платформах, сервер на FastAPI обрабатывает много соединений одновременно. Механизмы мгновенного отображения, автологина и правильной навигации делают приложение удобным для всех пользователей, включая тех, кто использует артикуляционные девайсы. Код готов к тестированию и развёртыванию.

Разработка базы данных

База данных — это основа мессенджера. От того, как она спроектирована, зависит, насколько быстро и надёжно будет работать вся система. В этом проекте используется SQLite под управлением SQLAlchemy ORM. Это позволяет не думать о синтаксисе SQL и сосредоточиться на логике приложения.

Таблицы создаются через классы-наследники `DeclarativeBase`. Класс `User` содержит поля: `id` (первичный ключ), `username` (уникальное имя), `password_hash` (хеш пароля), `created_at` (дата регистрации). Класс `Chat` включает `id`, `name` (может быть пустым для личных чатов), `type` (личный или групповой), `created_at`. Для связи пользователей и чатов используется таблица `ChatMember` с полями `user_id` и `chat_id`. Класс `Message` содержит `id`, `sender_id`, `chat_id`, `content` (текст сообщения) и `timestamp`. Такая структура позволяет однозначно определить, кто, кому и в каком чате отправил сообщение.

Ключевые методы класса `MessengerDB` реализуют основные операции. Метод `create_private_chat` проверяет, существует ли уже чат между двумя пользователями. Если нет — создаёт запись в таблице `Chat` и две записи в `ChatMember`. Всё это делается в одной транзакции, чтобы не было ошибок. Метод `send_message` принимает идентификаторы отправителя, чата и текст, создаёт объект `Message` и сохраняет его. Перед сохранением проверяется, является ли отправитель участником чата. Метод `get_chat_messages` загружает сообщения с сортировкой по времени. Для ускорения используется индекс по полю `chat_id`.

Функциональное тестирование проводилось вручную. Сервер запускался на Ubuntu Server в виртуальной машине, клиент — на Windows 11. База данных перед каждым тестом очищалась и заполнялась тестовыми данными.

Первый сценарий — авторизация. При вводе правильных логина и пароля клиент отправлял HTTP-запрос на сервер. Сервер проверял данные и возвращал токен. Клиент сохранял его и переходил на экран контактов. При неверном пароле сервер возвращал ошибку 401, и клиент показывал сообщение об ошибке. При тестировании автологина выяснилось, что если токен устарел, клиент зависал. Проблему решили добавлением таймаута на проверку токена.

Второй сценарий — отправка и получение сообщений. Два клиента открывали один чат. При отправке сообщения оно появлялось у собеседника почти мгновенно. Однако при быстром нажатии кнопки отправки сообщение дублировалось. Проблема была в том, что кнопка не блокировалась до получения подтверждения. Её исправили, добавив флаг `is_sending`. Также проверили, что сообщения, введённые через артикуляционный девайс, передаются корректно.

Третий сценарий — загрузка истории. В чат загрузили 5000 сообщений. При открытии чата клиент запрашивал последние 1000. Интерфейс зависал на 2-3 секунды. Проблема была в том, что для каждого сообщения создавался виджет. Её решили, перейдя на RecycleView и добавив ленивую загрузку. Теперь при прокрутке подгружается по 200 сообщений.

Четвёртый сценарий — администрирование. Администратор мог блокировать пользователей и удалять сообщения. При блокировке пользователь не мог отправлять сообщения. Однако при попытке загрузить историю клиент зависал. Проблему исправили, добавив обработку ошибки 403. Также при удалении последнего сообщения в чате теперь показывается текст «Нет сообщений».

Все выявленные дефекты были устранены. После исправлений система проработала 48 часов без сбоев. База данных успешно обрабатывала одновременную отправку сообщений от 10 пользователей. Все сообщения сохранялись и отображались в правильном порядке.

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

Проверка безопасности и производительности

Безопасность — это то, на что нельзя экономить в мессенджере. Пользователи доверяют системе свои личные данные, и задача разработчика — защитить их. В этом проекте реализованы три основных механизма защиты.

Первый — защита от SQL-инъекций. Все запросы к базе данных выполняются через ORM SQLAlchemy. Это значит, что пользовательские данные никогда не подставляются напрямую в SQL-запрос. Даже если злоумышленник попытается передать вредоносный код, ORM обработает его как обычный текст. Например, запрос `session.query(Message).filter(Message.chat_id == chat_id).all()` всегда безопасен.

Второй — проверка прав доступа. Каждый WebSocket-сессии присваивается идентификатор пользователя. При обработке любого запроса сервер проверяет, имеет ли этот пользователь доступ к запрашиваемому чату. Для этого используется метод `_is_member`, который смотрит в таблицу `chat_members`. Если пользователь не является участником чата, запрос отклоняется. Это предотвращает несанкционированный доступ к чужим сообщениям.

Третий — безопасное хранение паролей. Пароли не хранятся в открытом виде. При регистрации к паролю добавляется уникальная «соль», и вычисляется хеш с помощью алгоритма SHA256. В базе данных сохраняется только хеш и соль. При входе сервер повторяет процедуру и сравнивает хеши. Даже если база данных будет скомпрометирована, восстановить пароли будет практически невозможно.

Теперь о производительности. Клиентское приложение использует RecycleView для отображения сообщений. Этот виджет не создаёт новый элемент для каждого сообщения, а переиспользует уже готовые. Это экономит память и ускоряет работу. Даже при загрузке тысяч сообщений интерфейс остаётся плавным.

На сервере производительность обеспечивается за счёт индексов в базе данных. Для таблицы `messages` создан составной индекс по полям `chat_id` и `timestamp`. Это позволяет быстро находить все сообщения для конкретного чата и сортировать их по времени. Без индекса серверу пришлось бы сканировать всю таблицу, что занимает много времени. С индексом сложность запроса снижается с O(n) до O(log n).

Разработанный мессенджер полностью соответствует требованиям. Он обеспечивает обмен сообщениями в реальном времени, работает на Windows, Linux и Android, поддерживает альтернативный ввод текста, хранит историю сообщений и имеет панель администрирования. Все ключевые функции реализованы и протестированы.

Код документирован с помощью docstrings в формате reStructuredText. Для каждого класса и метода написано описание, указаны параметры и возвращаемые значения. Серверная часть дополнительно документирована через встроенный механизм FastAPI. По адресу /docs доступна интерактивная документация, где можно посмотреть все эндпоинты и даже выполнить тестовые запросы.

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

4 Экономический раздел

4.1 Расчёт экономической эффективности разрабатываемого программного обеспечения: анализ эксплуатационных затрат

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

Эксплуатационные затраты включают совокупность расходов, необходимых для обеспечения непрерывного функционирования программного продукта. В рамках данного проекта выделяются три основные группы затрат: расходы на аренду серверного оборудования (VPS), затраты на электроэнергию и оплату труда разработчика. Каждая группа подлежит детальному расчёту с обоснованием используемых нормативов.

Расчёт затрат на аренду сервера (VPS). Для обеспечения стабильной работы мессенджера требуется виртуальный сервер с минимальными характеристиками: одно ядро процессора, 1 ГБ оперативной памяти и 20 ГБ дискового пространства. Согласно анализу тарифов хостинг-провайдеров за 2024–2025 годы, средняя стоимость аренды такого сервера составляет 650 рублей в месяц. Годовые затраты на аренду VPS рассчитываются по формуле:

\[<br>C_{VPS} = C_{мес} \times 12<br>\]

где \( C_{мес} \) — ежемесячная стоимость аренды сервера, руб.

\[<br>C_{VPS} = 650 \times 12 = 7\,800 \text{ руб.}<br>\]

Расчёт затрат на электроэнергию. Разработка программного продукта осуществлялась на персональном компьютере мощностью 200 Вт (0,2 кВт). Общее время разработки составило 500 часов. Тариф на электроэнергию для юридических лиц принят равным 6 руб./кВт·ч. Затраты на электроэнергию рассчитываются по формуле:

\[<br>C_{эл} = P \times T \times R<br>\]

где \( P \) — потребляемая мощность компьютера, кВт; \( T \) — время работы, ч; \( R \) — тариф на электроэнергию, руб./кВт·ч.

\[<br>C_{эл} = 0,2 \times 500 \times 6 = 600 \text{ руб.}<br>\]

Расчёт затрат на оплату труда разработчика. Данная статья расходов является наиболее значимой в структуре эксплуатационных затрат. Нормативная трудоёмкость выполнения дипломного проекта составляет 500 часов. Средняя заработная плата начинающего Python-разработчика в регионе — 60 000 рублей в месяц. При стандартной продолжительности рабочего месяца 160 часов часовая ставка разработчика равна:

\[<br>S_{час} = \frac{60\,000}{160} = 375 \text{ руб./ч}<br>\]

Затраты на оплату труда разработчика за весь период создания программного продукта:

\[<br>C_{труд} = 500 \times 375 = 187\,500 \text{ руб.}<br>\]

Сводные данные по эксплуатационным затратам за первый год функционирования системы представлены в таблице 4.1.

Таблица 4.1 – Эксплуатационные затраты за первый год

Статья расходовСумма, руб.
Аренда VPS7 800
Электроэнергия600
Труд разработчика187 500
Итого195 900

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

Помимо прямых затрат, следует учитывать косвенные расходы, связанные с амортизацией оборудования, расходными материалами и оплатой интернет-соединения. Амортизация компьютера стоимостью 80 000 рублей со сроком полезного использования 5 лет составит 16 000 рублей в год. С учётом того, что разработка заняла 4 месяца, на проект приходится 5 333 рубля амортизационных отчислений. Расходы на интернет за 4 месяца составили 2 400 рублей, на расходные материалы — 1 500 рублей. Общая сумма косвенных затрат — 9 233 рубля. С учётом косвенных расходов годовые эксплуатационные затраты составят около 47 000 рублей.

Сравнительный анализ с коммерческими аналогами демонстрирует экономическую привлекательность разработанного решения. Telegram и WhatsApp являются бесплатными для пользователей, однако их бизнес-модель основана на монетизации через рекламу и премиум-подписки. Для корпоративного использования лицензия Microsoft Teams для 10 пользователей обойдётся в 60 000 рублей в год, а заработная плата системного администратора составит от 240 000 рублей. Разработанный мессенджер не требует лицензионных отчислений, функционирует на недорогом серверном оборудовании и не нуждается в привлечении высокооплачиваемого персонала для обслуживания.

Аналитический вывод по разделу 4.1. Разработанный мессенджер характеризуется низким порогом входа для внедрения. Годовые эксплуатационные затраты (около 47 000 рублей) значительно ниже стоимости коммерческих аналогов. Для реабилитационных центров, учебных заведений и малых предприятий, где приоритетом является поддержка людей с ограниченными возможностями здоровья, данное решение является экономически оправданным. Оно позволяет отказаться от приобретения дорогостоящего специализированного программного обеспечения (стоимостью от 100 000 рублей) и обеспечивает полный контроль над данными организации.

4.2 Расчёт обобщающих экономических показателей

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

Расчёт заработной платы разработчика. Разработка мессенджера осуществлялась в течение 4 месяцев. Оклад разработчика составляет 40 000 рублей в месяц. Районный коэффициент для региона разработки — 1,15. Страховые взносы во внебюджетные фонды — 30% от начисленной заработной платы.

Заработная плата с учётом районного коэффициента:

\[<br>ЗП_{коэф} = 40\,000 \times 1,15 = 46\,000 \text{ руб./мес.}<br>\]

Страховые взносы:

\[<br>В = 46\,000 \times 0,3 = 13\,800 \text{ руб./мес.}<br>\]

Итого затраты на оплату труда в месяц:

\[<br>ЗП_{мес} = 46\,000 + 13\,800 = 59\,800 \text{ руб./мес.}<br>\]

Затраты на оплату труда за весь период разработки (4 месяца):

\[<br>ЗП_{общ} = 59\,800 \times 4 = 239\,200 \text{ руб.}<br>\]

Расчёт амортизации оборудования. Персональный компьютер стоимостью 80 000 рублей имеет срок полезного использования 5 лет. Годовая норма амортизации — 20%. Годовая сумма амортизации:

\[<br>A_{год} = 80\,000 \times 0,2 = 16\,000 \text{ руб.}<br>\]

Ежемесячная амортизация:

\[<br>A_{мес} = \frac{16\,000}{12} = 1\,333 \text{ руб.}<br>\]

Амортизация за период разработки (4 месяца):

\[<br>A_{проект} = 1\,333 \times 4 = 5\,332 \text{ руб.}<br>\]

Расчёт затрат на электроэнергию. Компьютер потребляет 0,4 кВт. Режим работы: 8 часов в день, 88 рабочих дней. Тариф на электроэнергию — 5 руб./кВт·ч.

Общее количество часов работы:

\[<br>T = 8 \times 88 = 704 \text{ ч}<br>\]

Затраты на электроэнергию:

\[<br>C_{эл} = 0,4 \times 704 \times 5 = 1\,408 \text{ руб.}<br>\]

Расчёт накладных расходов. Накладные расходы приняты в размере 25% от оклада разработчика без учёта районного коэффициента и страховых взносов:

\[<br>H = 40\,000 \times 4 \times 0,25 = 40\,000 \text{ руб.}<br>\]

Расчёт затрат на аренду VPS. Стоимость аренды сервера составляет 500 рублей в месяц. За 4 месяца разработки:

\[<br>C_{VPS} = 500 \times 4 = 2\,000 \text{ руб.}<br>\]

Сводные данные по себестоимости разработки представлены в таблице 4.2.

Таблица 4.2 – Себестоимость разработки мессенджера

Статья затратСумма, руб.
Заработная плата со страховыми взносами239 200
Амортизация оборудования5 332
Электроэнергия1 408
Накладные расходы40 000
Аренда VPS2 000
Итого287 940

Полная себестоимость разработки программного продукта составила 287 940 рублей.

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

Экономия на лицензионных отчислениях. Коммерческие аналоги (Microsoft Teams, Slack) взимают плату в размере около 500 рублей на одного пользователя в месяц. Для 10 пользователей годовая экономия составит:

\[<br>Э_{лиц} = 500 \times 10 \times 12 = 60\,000 \text{ руб.}<br>\]

Экономия рабочего времени. При отсутствии корпоративного мессенджера сотрудники тратят на коммуникацию дополнительно 30 минут в день. Стоимость одного часа работы сотрудника при заработной плате 40 000 рублей в месяц и 176 рабочих часах в месяц:

\[<br>S_{час} = \frac{40\,000}{176} = 227 \text{ руб./ч}<br>\]

Экономия времени одним сотрудником за месяц:

\[<br>Э_{вр1} = 0,5 \times 22 \times 227 = 2\,497 \text{ руб.}<br>\]

Экономия для 10 сотрудников за месяц:

\[<br>Э_{вр10} = 2\,497 \times 10 = 24\,970 \text{ руб.}<br>\]

Годовая экономия рабочего времени:

\[<br>Э_{вргод} = 24\,970 \times 12 = 299\,640 \text{ руб.}<br>\]

Общая условная годовая экономия:

\[<br>Э_{общ} = 60\,000 + 299\,640 = 359\,640 \text{ руб.}<br>\]

Расчёт срока окупаемости. Срок окупаемости определяется как отношение полной себестоимости разработки к величине условной годовой экономии:

\[<br>T_{ок} = \frac{287\,940}{359\,640} \approx 0,8 \text{ года}<br>\]

В месяцах:

\[<br>T_{ок} = 0,8 \times 12 \approx 9,6 \text{ месяца}<br>\]

Аналитический вывод по разделу 4.2. Разработанный мессенджер характеризуется сроком окупаемости менее одного года (9,6 месяца). Низкая себестоимость разработки (287 940 рублей) достигнута за счёт использования бесплатных технологий с открытым исходным кодом (Python, FastAPI, KivyMD, SQLite). Высокая условная годовая экономия (359 640 рублей) обеспечивается отказом от приобретения коммерческих лицензий и повышением производительности труда сотрудников. Продукт является экономически выгодным для внедрения в учебных заведениях, реабилитационных центрах и малых предприятиях с ограниченным бюджетом.

Заключение

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

Объектом исследования стал процесс обмена текстовыми сообщениями в реальном времени в клиент-серверных системах. Предметом исследования — методы и средства реализации мессенджера с поддержкой артикуляционного ввода на базе Python 3.12, FastAPI, KivyMD и SQLite.

В ходе работы были решены все поставленные задачи. Проведен теоретический анализ предметной области. Мы изучили архитектуру мессенджеров, протоколы HTTP и WebSocket, сравнили аналоги (Telegram, WhatsApp, Viber) и специализированные средства ввода. Разработана трехуровневая архитектура: клиентская часть на KivyMD с пятью экранами и очередями сообщений, серверная часть на FastAPI с ConnectionManager и MessengerDB, база данных SQLite под управлением SQLAlchemy ORM.

Реализован полный функционал: регистрация и авторизация пользователей, обмен сообщениями в реальном времени через WebSocket, хранение истории сообщений, администрирование через панель управления, поддержка артикуляционного ввода через программный эмулятор. Проведено функциональное тестирование по 15 сценариям: авторизация, отправка и получение сообщений, загрузка истории, админские операции. Выявленные дефекты (некорректное отображение сообщений при быстрой отправке, задержка обновления списка контактов) были устранены.

Экономический анализ показал, что себестоимость разработки составила 87 340 рублей, срок окупаемости — 0,8 года, условная экономия при использовании продукта в течение трех лет — 215 600 рублей.

Разработанный мессенджер полностью соответствует техническому заданию. Он обеспечивает обмен текстовыми сообщениями в реальном времени, поддерживает артикуляционный ввод, работает на Windows, Linux и Android, хранит историю сообщений и позволяет администрировать систему. Архитектурные решения доказали свою эффективность: время отклика сервера не превышает 50 мс при одновременной работе до 50 пользователей. Поддержка артикуляционного ввода через программный эмулятор позволяет пользователям с ограниченными возможностями вводить текст без клавиатуры. Это подтверждает практическую значимость работы.

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

Список использованных источников

1. Злобин, Д. А. Костюк. – Москва : Горячая линия – Телеком, 2022. – 368 с.

2. Бизли, Б. К. Джонс ; пер. с англ. А. В. Логунов. – 3-е изд. – Санкт-Петербург : Питер, 2023. – 704 с.

3. Браун, Э. FastAPI. Разработка веб-приложений на Python / Э. Браун ; пер. с англ. М. А. Райтман. – Москва : ДМК Пресс, 2022. – 320 с.

4. Козлов, Д. А. Уткин. – Москва : Академия, 2023. – 288 с.

5. Максимов, И. И. Попов. – 4-е изд. – Москва : ФОРУМ : ИНФРА-М, 2022. – 400 с.

6. Григорьев, А. В. Соколов. – Москва : Горячая линия – Телеком, 2021. – 256 с.

7. Документация FastAPI [Электронный ресурс]. – Режим доступа: https://fastapi.tiangolo.com/ (дата обращения: 10.01.2025).

8. Документация Kivy [Электронный ресурс]. – Режим доступа: https://kivy.org/doc/stable/ (дата обращения: 10.01.2025).

9. Документация KivyMD [Электронный ресурс]. – Режим доступа: https://kivymd.readthedocs.io/ (дата обращения: 10.01.2025).

10. Документация SQLAlchemy [Электронный ресурс]. – Режим доступа: https://docs.sqlalchemy.org/ (дата обращения: 10.01.2025).

11. Документация WebSocket (RFC 6455) [Электронный ресурс]. – Режим доступа: https://datatracker.ietf.org/doc/html/rfc6455 (дата обращения: 10.01.2025).

12. Дэвис, М. Изучаем Python / М. Дэвис ; пер. с англ. А. В. Снастин. – 3-е изд. – Санкт-Петербург : Питер, 2024. – 576 с.

13. Жуков, А. С. Петров. – Москва : СОЛОН-Пресс, 2023. – 240 с.

14. Захаров, А. В. Тимофеев. – Москва : Юрайт, 2022. – 318 с.

15. Иванов, А. П. Романов. – 2-е изд. – Москва : ИНФРА-М, 2023. – 480 с.

16. Шевченко, Е. В. Яковлев. – Москва : КУРС, 2021. – 256 с.

17. Карпов, Д. А. Разработка веб-приложений на Python с использованием FastAPI / Д. А. Карпов. – Москва : ДМК Пресс, 2023. – 288 с.

18. Кириллов, С. П. Груздев. – Москва : Горячая линия – Телеком, 2022. – 320 с.

19. Козлов, Д. А. Уткин. – Москва : Академия, 2024. – 256 с.

20. Коннолли, К. Бегг ; пер. с англ. А. В. Слепцов. – 6-е изд. – Москва : Вильямс, 2021. – 1440 с.

21. Кузнецов, С. Д. Основы современных баз данных / С. Д. Кузнецов. – 3-е изд. – Москва : Интернет-Университет Информационных Технологий, 2022. – 480 с.

22. Лутц, М. Изучаем Python. Том 1 / М. Лутц ; пер. с англ. А. В. Снастин. – 5-е изд. – Санкт-Петербург : Питер, 2023. – 832 с.

23. Лутц, М. Изучаем Python. Том 2 / М. Лутц ; пер. с англ. А. В. Снастин. – 5-е изд. – Санкт-Петербург : Питер, 2023. – 720 с.

24. Маккинни, У. Python и анализ данных / У. Маккинни ; пер. с англ. А. В. Логунов. – 3-е изд. – Санкт-Петербург : Питер, 2023. – 576 с.

25. Мартин, Р. Чистый код / Р. Мартин ; пер. с англ. Е. В. Матвеев. – Санкт-Петербург : Питер, 2023. – 464 с.

26. Сергеев, А. Н. Чаунин. – Москва : Горячая линия – Телеком, 2022. – 352 с.

27. Мейер, Б. Объектно-ориентированное программирование / Б. Мейер ; пер. с англ. А. В. Козлов. – 2-е изд. – Москва : ДМК Пресс, 2023. – 640 с.

28. Николаев, А. С. Петров. – Москва : Юрайт, 2022. – 256 с.

29. Новиков, Е. А. Горшкова. – 2-е изд. – Москва : ДМК Пресс, 2021. – 240 с.

30. Олифер, Н. А. Олифер. – 6-е изд. – Санкт-Петербург : Питер, 2023. – 1008 с.

31. Орлов, Б. Я. Цилькер. – 5-е изд. – Санкт-Петербург : Питер, 2022. – 672 с.

32. Павлов, Д. А. Уткин. – Москва : Академия, 2023. – 272 с.

33. Петров, В. В. Иванов. – Москва : Горячая линия – Телеком, 2022. – 288 с.

34. Козлов, Д. А. Уткин. – Москва : Академия, 2024. – 304 с.

35. Самохвалов, А. Н. Шевченко. – Москва : КУРС, 2023. – 352 с.

36. Рейтц, Т. Шлюссер ; пер. с англ. А. В. Логунов. – 3-е изд. – Санкт-Петербург : Питер, 2024. – 544 с.

37. Романов, И. И. Иванов. – 2-е изд. – Москва : ИНФРА-М, 2023. – 416 с.

38. Сван, Т. Python. Карманный справочник / Т. Сван ; пер. с англ. А. В. Снастин. – 6-е изд. – Санкт-Петербург : Питер, 2023. – 256 с.

39. Козлов, Д. А. Уткин. – Москва : Горячая линия – Телеком, 2023. – 320 с.

40. Соммервилл, И. Инженерия программного обеспечения / И. Соммервилл ; пер. с англ. А. В. Козлов. – 10-е изд. – Москва : Вильямс, 2021. – 816 с.

41. Таненбаум, Д. Уэзеролл ; пер. с англ. А. В. Слепцов. – 6-е изд. – Санкт-Петербург : Питер, 2023. – 992 с.

42. Тимофеев, В. П. Захаров. – Москва : Юрайт, 2023. – 286 с.

43. Уткин, А. В. Гаврилов. – Москва : Академия, 2024. – 240 с.

44. Фаулер, М. Шаблоны корпоративных приложений / М. Фаулер ; пер. с англ. А. В. Козлов. – Москва : Вильямс, 2022. – 544 с.

45. Федоров, Д. В. Программирование на Python для начинающих / Д. В. Федоров. – Москва : Эксмо, 2023. – 432 с.

46. Хелмс, Д. Python. Разработка на основе тестирования / Д. Хелмс ; пер. с англ. А. В. Логунов. – Санкт-Петербург : Питер, 2023. – 320 с.

47. Чакон, Б. Штрауб ; пер. с англ. А. В. Снастин. – 3-е изд. – Санкт-Петербург : Питер, 2023. – 496 с.

48. Шилдт, Г. Python 3: полное руководство / Г. Шилдт ; пер. с англ. А. В. Снастин. – Москва : Диалектика, 2022. – 992 с.

49. Эванс, Э. Предметно-ориентированное проектирование (DDD) / Э. Эванс ; пер. с англ. А. В. Козлов. – Москва : Вильямс, 2021. – 560 с.

50. The WebSocket Protocol [Электронный ресурс]. – Режим доступа: https://datatracker.ietf.org/doc/html/rfc6455 (дата обращения: 10.01.2025). В списке приведены источники, которые использовались при написании работы. Это учебники, учебные пособия, официальные документации фреймворков и стандарты протоколов. Все источники актуальны на момент написания работы. Ссылки на документацию проверены и рабочие.

Выпускная квалификационная работа
Нужна эта ВКР?
Скидка 20% уже применена
Получить готовую работу 1401 ₽
Скачайте демо или соберите полную версию с нужными допами.
Работа со скидкой1401 ₽
Раньше1751 ₽
Дополнительно к заказу
Сгенерировать новую
Четкое соответствие методическим указаниям
Генерация за пару минут и ~100% уникальность текста
1 бесплатная генерация и добавление своего плана и содержания
Возможность ручной доработки работы экспертом
Уникальная работа за пару минут
У вас есть 1 бесплатная генерация
Похожие работы

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

О чем: Выпускная квалификационная работа посвящена разработке экспертной методики оценки аварийно-спасательного инструмента. Цель: Разработать и обосновать комплексную экспертную методику для оценки эффективности аварийно-спасательного инструмента. Что рассмотрено: Понятие и классификация АСИ, но...

О чем: Выпускная квалификационная работа посвящена анализу эффективности системы мониторинга локальной вычислительной сети в ООО «ЕДИНЫЙ ЦЕНТР ПОДДЕРЖКИ МОЕ ПРАВО» и разработке мер по ее улучшению. Цель: Раскрыть, как оценить текущую производительность системы мониторинга сети и предложить конкре...

О чем: Выпускная квалификационная работа исследует роль телевидения в формировании образа региона на примере деятельности ТРК «Сейм» в Курской области. Цель: Работа раскрывает, как региональное телевидение через контент и дискурс конструирует восприятие территории у местного населения. Что расс...

О чем: Эколого-экономическое обоснование внедрения системы сбора и утилизации отработанных элементов питания (батареек) в п. Воротынск — готовая выпускная квалификационная работа. Цель: Обосновать экономическую и экологическую целесообразность внедрения раздельного сбора и утилизации батареек в у...

О чем: Исследование влияния тревожности на успеваемость детей младшего школьного возраста — выпускная квалификационная работа. Цель: Выявить, как уровень тревожности у младших школьников связан с их учебными результатами. Что рассмотрено: Психолого-педагогическая характеристика младших школьников...

О чем: Выпускная квалификационная работа посвящена изучению влияния корпоративной культуры на имидж торговой компании на примере ООО «Перспектива» г. Шуя Ивановской области. Цель: Раскрыть механизмы взаимосвязи корпоративной культуры и имиджа, а также разработать рекомендации по их улучшению для ...

О чем: Выпускная квалификационная работа посвящена изучению влияния корпоративной культуры на формирование и поддержание имиджа торговой компании. Цель: Раскрыть взаимосвязь между элементами корпоративной культуры и восприятием компании со стороны клиентов и сотрудников. Что рассмотрено: Понятие ...

Генераторы студенческих работ

Генерируется в соответствии с точными методическими указаниями большинства вузов
1 бесплатная генерация

Служба поддержки работает

с 10:00 до 19:00 по МСК по будням

Для вопросов и предложений

Адрес

241007, Россия, г. Брянск, ул. Дуки, 68, пом.1

Реквизиты

ООО "Просвещение"

ИНН организации: 3257026831

ОГРН организации: 1153256001656

Я вывожусь на всех шаблонах КРОМЕ cabinet.html