2024-test-moskovskij-analit.../messenger--functional-requirement__(tst_0b).md

440 lines
32 KiB
Markdown
Raw Normal View History

2024-08-04 21:36:54 +03:00
## Функциональные требования функционала отправки сообщений между пользователями внутри уже созданной информационной системы
## 1. Общие сведения о Заявке
### 1.1. Наименование информационной системы
...
### 1.2. Наименование подсистемы информационной системы:
Система Отправки Сообщений "Ничатка" (СОС "НИЧАТКА")
### 1.3. Функциональный заказчик
...
### 1.4. Автор
Еремин Сергей
### 1.5. Компонент(ы) подсистемы, подлежащий развитию, обработке
Система Запросов и Заданий "Вехно" (СЗЗ "ВЕХНО")
### 1.6. Приоритет заявки
...
### 1.7. Предлагаемый срок исполнения работ по заявке
...
## 2. Цели и обоснование необходимости реализации
### 2.1. Цель создания подсистемы:
Модернизация СЗЗ "ВЕХНО" с целью реализация функционала отправки сообщений между пользователями.
### 2.2. Описание проблемы, решение которой требуется разработать
Необходимо обеспечить возможность обмениваться сообщениями между пользователями в рамках информационной СЗЗ "ВЕХНО".
### 2.3. Описание ожидаемых результатов от реализации подсистемы
Пользователи смогут обмениваться сообщениями в рамках СЗЗ "ВЕХНО", что позволит улучшить коммуникацию между пользователями и повысить эффективность работы в рамках проектов.
### 3. Нормативные и методические документы влияющие на выполнение заявки
#### 3.1. Нормативные правовые акты: ____
#### 3.2. Методические и иные документы определяющие требования и ограничения процессам, подлежащим автоматизации: ____
### 4. Требования к результату
### 4.1. Бизнес- или функциональные требования
Модернизация СЗЗ "ВЕХНО", с целью привнесения функционала обмена сообщениями между пользователями (СОС "НИЧАТКА").
СОС "НИЧАТКА" должна быть реализована как надстройка над СЗЗ "ВЕХНО" и обеспечивать возможность обмена сообщениями между пользователями.
* Сообщения имеют могут быть как адресованные конкретному пользователю (адресные), так и групповые (групповые), а так же безадресные (широковещательные).
* Сообщения могут иметь метки:
* цветовые: не менее шести;
* приоритетные: критично, важно, обычно;
* статусные: новые, прочитано, скрыто.
* Система должна обеспечивать возможность скрытия обработанных сообщений (удаление сообщений запрещено).
* Система должна обеспечивать возможность просмотра истории сообщений (включая скрытые).
* Система должна обеспечивать возможность управления сообщениями (изменения цветовых меток и приоритета, скрытие).
* Система должна обеспечивать возможность управления списком пользователей (адресатов адресных и групповых сообщений)
* Система должна обеспечивать возможность просмотра истории сообщений. Просмотр должен быть снабжен системой фильтров и поиска.
СОС "НИЧАТКА" должна быть реализована как надстройка над СЗЗ "ВЕХНО". Основной код и БД не должны быть изменены. Рефакторинг кода СЗЗ "ВЕХНО" допускается. Изменения дизайн (фронтэнд) допускается в минимальных объемах.
### 4.2. Общее описание автоматизируемых бизнес-процессов и их участников, модели взаимодействия и порядка обработки данных
#### 4.2.1. Наименование бизнес-процесса
СОС "НИЧАТКА" -- Система обмен сообщениями между пользователями СЗЗ "ВЕХНО"
#### 4.2.2. Описание (логика бизнес-процесса)
СОС "НИЧАТКА" должна быт разработана как отдельное приложение (django app), работающее в рамках СЗЗ "ВЕХНО". Никакие таблицы БД СЗЗ "ВЕХНО" не должны быть измены. Все таблицы СОС "НИЧАТКА" должны быть созданы в отдельной схеме БД.
Доработка дизайна (фронтэнд) СЗЗ "ВЕХНО" ограничивается добавлением двух элементов: иконка <колокольчик> в верхнем меню и скрытый блок для AJAX-подгрузки (виджета).
```
+--------------------------------------------------------------------------+
| ВЕРХНЕЕ МЕНЮ СЗЗ "ВЕХНО" <колокольчик> {user}|
+--------------------------------------------------------------------------+
| ОСНОВНОЙ ИНТЕРФЕЙС СЗЗ "ВЕХНО" | ПАНЕЛЬ СОС "НИЧАТКА" |
| | (блок открыт) |
| | |
| | |
| | |
| | |
| | |
| +----------------------|
| |
| |
| |
+--------------------------------------------------------------------------+
```
Псевдокод BPMN диаграммы:
1. Создать пул для системы.
2. Добавить дорожки для "Пользователь" и "Система".
* Добавить задачи и события:
* Начальное событие: "Загрузка страницы"
* Задача: "Запрос статуса из СОС 'НИЧАТКА'"
* Задача: "Отобразить колокольчик со статусом"
* Промежуточное событие: "Клик на колокольчик"
* Исключающее условие: "Панель видима?"
* Если нет:
* Задача: "Загрузить контент из СОС 'НИЧАТКА'" (по web-api)
* Задача: "Показать панель"
* Если да:
* Задача: "Скрыть панель"
* Конечное событие: "Конец"
Диаграмма:
```bpmn
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL">
<bpmn:process id="message_system_status" name="Статус системы сообщений">
<bpmn:laneSet>
<bpmn:lane id="user_lane" name="Пользователь">
<bpmn:flowNodeRef>click_bell_event</bpmn:flowNodeRef>
</bpmn:lane>
<bpmn:lane id="system_lane" name="Система">
<bpmn:flowNodeRef>request_status_task</bpmn:flowNodeRef>
<bpmn:flowNodeRef>display_bell_task</bpmn:flowNodeRef>
<bpmn:flowNodeRef>load_content_task</bpmn:flowNodeRef>
<bpmn:flowNodeRef>show_panel_task</bpmn:flowNodeRef>
<bpmn:flowNodeRef>hide_panel_task</bpmn:flowNodeRef>
</bpmn:lane>
</bpmn:laneSet>
<bpmn:startEvent id="start_event" name="Загрузка страницы"/>
<bpmn:task id="request_status_task" name="Отправить запрос на получение статуса из СОС 'НИЧАТКА"/>
<bpmn:task id="display_bell_task" name="Отобразить колокольчик и число сообщений"/>
<bpmn:intermediateCatchEvent id="click_bell_event" name="Нажатие на колокольчик">
<bpmn:timerEventDefinition/>
</bpmn:intermediateCatchEvent>
<bpmn:exclusiveGateway id="is_panel_visible" name="Панель видима?"/>
<bpmn:task id="load_content_task" name="Загрузить контент из СОС 'НИЧАТКА'"/>
<bpmn:task id="show_panel_task" name="Показать панель"/>
<bpmn:task id="hide_panel_task" name="Скрыть панель"/>
<bpmn:endEvent id="end_event" name="Конец"/>
<bpmn:sequenceFlow id="flow1" sourceRef="start_event" targetRef="request_status_task"/>
<bpmn:sequenceFlow id="flow2" sourceRef="request_status_task" targetRef="display_bell_task"/>
<bpmn:sequenceFlow id="flow3" sourceRef="display_bell_task" targetRef="click_bell_event"/>
<bpmn:sequenceFlow id="flow4" sourceRef="click_bell_event" targetRef="is_panel_visible"/>
<bpmn:sequenceFlow id="flow5" sourceRef="is_panel_visible" targetRef="load_content_task">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">No</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="flow6" sourceRef="load_content_task" targetRef="show_panel_task"/>
<bpmn:sequenceFlow id="flow7" sourceRef="show_panel_task" targetRef="end_event"/>
<bpmn:sequenceFlow id="flow8" sourceRef="is_panel_visible" targetRef="hide_panel_task">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">Yes</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="flow9" sourceRef="hide_panel_task" targetRef="end_event"/>
</bpmn:process>
</bpmn:definitions>
```
```text
Пул: Система
+------------------------------------------------------+
| Дорожка: Пользователь |
| +-----------------------------+ |
| | Начальное событие: | |
| | "Загрузка страницы" | |
| +-------------+---------------+ |
| | |
| v |
| +-------------+---------------+ |
| | Задача: | |
| | "Запрос статуса из СОС |-----------------+ |
| | 'НИЧАТКА'" | | |
| +-------------+---------------+ | |
| | | |
| v | |
| +-------------+---------------+ | |
| | Задача: |<----------------+ |
| | "Отобразить колокольчик | |
| | со статусом" | |
| +-------------+---------------+ |
| | |
| v |
| +-------------+---------------+ |
| | Промежуточное событие: | |
| | "Клик на колокольчик" | |
| +-------------+---------------+ |
| | |
| v |
| +-------------+---------------+ |
| | Исключающее условие: | |
| | "Панель видима?" | |
| +------+------------+----------+ |
| | | |
| | Нет | Да |
| | | |
| v v |
| +------+------------+----------+ |
| | Задача: | |
| | "Загрузить контент из СОС |-----------------+ |
| | 'НИЧАТКА'" | | |
| +------+------------+----------+ | |
| | +------+ |
| | | |
| v v |
| +------+------------+---------+ +------+----------+|
| | Задача: | | Задача: ||
| | "Показать панель" | | "Скрыть панель" ||
| +-------------+---------------+ +------+----------+|
| | |
| v |
| +-------------+---------------+ |
| | Конечное событие: | |
| | "Конец" | |
| +-----------------------------+ |
+------------------------------------------------------+
| Дорожка: Система |
| +-----------------------------+ |
| | Начальное событие: | |
| | "Запрос статуса из СОС |<-----------------+ |
| | 'НИЧАТКА'" | |
| +-------------+---------------+ |
| | |
| v |
| +-------------+---------------+ |
| | Задача: | |
| | "Отправить запрос к СОС | |
| | 'НИЧАТКА'" | |
| +-------------+---------------+ |
| | |
| v |
| +-------------+---------------+ |
| | Задача: | |
| | "Получить статус" | |
| +-------------+---------------+ |
| | |
| v |
| +-------------+---------------+ |
| | Задача: | |
| | "Передать статус в дорожку |------------------+ |
| | 'Пользователь'" | | |
| +-------------+---------------+ | |
| | | |
| v | |
| +-------------+---------------+ | |
| | Задача: | | |
| | "Загрузить контент из СОС |<----=------------+ |
| | 'НИЧАТКА'" | | |
| +-------------+---------------+ | |
| | | |
| v | |
| +-------------+---------------+ | |
| | Задача: | | |
| | "Передать контент в дорожку |-----------------+ |
| | 'Пользователь'" | |
| +-------------+---------------+ |
+------------------------------------------------------+
```
СОС "НИЧАТКА" должна быть реализована как отдельное приложение (django app), работающее в рамках СЗЗ "ВЕХНО". Никакие таблицы БД СЗЗ "ВЕХНО" не должны быть измены. Все таблицы СОС "НИЧАТКА" должны быть созданы в отдельной схеме БД.
Псевдокод BPMN диаграммы:
1. Создать пул для системы.
2. Добавить дорожки для "Статус" и "Панель".
* Добавить задачи и события:
* Начальное событие: "Запрос статуса {user}"
* Задача: "Отправить ответ на запрос статуса: число сообщений и наивысший приоритет"
* Промежуточное событие: "Получение списка приоритетов непрочитанных сообщений"
* Задача: "Посчитать общее количество непрочитанных сообщений (через список статусов)"
* Задача: "Найти наивысший приоритет среди списка статусов"
* Добавить задачу и событие:
* Начальное событие: "Оправить рендер (web-api) для Панели Сообщений"
* Задача: "Отобразить элемент управления: фильтры"
* Задача: "Получить и отобразить список сообщений"
* Промежуточное событие: "Получение списка сообщений в соответствии с фильтрами и пейджинацией"
* Задача: "Отобразить список -- сообщение-отправитель-дата-время-получатели"
* Промежуточное событие: "Отобразить дополнительные элементы управления сообщением"
* Задача: "Отобразить элементы управления: прочитано (скрыть)"
* Задача: "Отобразить элементы управления: цветовые метки"
* Задача: "Отобразить элементы управления: ответить"
* Задача: "Отобразить пейджинатор"
* Задача: "Отобразить элемент управления: создать и отправить сообщение"
* Промежуточное событие: "Получение списка адресатов (пользователей)"
* Задача: "Отобразить элемент управления: список и выбора адресатов"
* Задача: "Отобразить элемент управления: список и выбора приоритета"
* Задача: "Отобразить элемент управления: ввести сообщение (текст)"
* Задача: "Отобразить элемент управления: Отменить"
* Задача: "Отобразить элемент управления: Отправить"
И так далее... не уверен, что все правильно с точки зрения BPMN (никогда не использовал), но думаю, что идея понятна.
#### 4.2.3 Участники взаимодействия и их роли
Учаcтники: все пользователи СЗЗ "ВЕХНО".
Роли: СОС "НИЧАТКА" -- одноранговая. Каждый может отправить сообщение любому, и ответить на любое полученное сообщение или скрыть его.
#### 4.2.4. Схема взаимодействия
Система обмена сообщениями и взаимодействия между пользователями асинхронная, одноранговая. Пользователь может отправить сообщение, а также прочитать, ответить на него или скрыть. Пользователь может отправить сообщение любому пользователю, а также нескольким пользователям (группе). Пользователь может отправить широковещательное сообщение. Для отправки широковещательных сообщений пользователь должен выбрать группу (адресата) "Все".
Схема взаимодействия пользователей представлена на блок-схеме:
```mermaid
graph TD
А[Пользователь] -->|Запрос статуса| B(Система)
B -->|Отправить статус| А
2024-08-04 21:44:39 +03:00
А -->|Клик на колокольчик / Запросить контент/список сообщений| B
B -->|Отобразить список сообщений в соответсвии с фильтрами и паджинацией| А
2024-08-04 21:46:01 +03:00
A -->|Создать сообщение| B
А -->|Указать адресата или адресатов| B
А -->|Указать приоритет| B
A -->|Отправить сообщение| B
2024-08-04 21:36:54 +03:00
```
#### 4.2.5. Описание смежных видов деятельности
Каждый пользователь при создании сообщения может установить его приоритет. Приоритеты: критично, важно, обычно. Адресат не может изменить приоритет сообщения. Ответив на сообщение, приоритет сохраняется.
Каждый пользователь может установить свои цветовые метки для сообщений. Установленные метки видны только установившему их пользователю.
#### 4.2.6. Описание основных сущностей
Сущности:
* сообщение
* адресат/адресаты (пользователь)
* отправитель (пользователь)
* приоритет сообщения
* цветовая метка сообщения в привязке к пользователю
* статус сообщения (новое, прочитанное, скрытое)
* родительское сообщение (в случае, если сообщение является ответом)
* штамп времени
### 4.3. Входные данные
Весь обмен данными между СОС "НИЧАТКА" и СЗЗ "ВЕХНО" должен осуществляться через web-api. Состав данных определяется через URL-запроса.
### 4.3.1. Состав входной информации
Запрос статуса:
* Параметры:
* Уникальный ник-нейм пользователя СЗЗ "ВЕХНО"
* Токен верификации
* Метод: GET
* Исключения: В случае отсутствия данных, система должна вернуть ошибку 401.
Запрос панели сообщений:
* Поля:
* Уникальный ник-нейм пользователя СЗЗ "ВЕХНО"
* Токен верификации
* Параметры фильтрации
* Параметры пейджинации.
* Метод: GET
* Исключения: В случае отсутствия данных, система должна вернуть ошибку 401.
Передача сообщения:
* Поля:
* Уникальный ник-нейм пользователя СЗЗ "ВЕХНО"
* Токен верификации
* Адресат/адресаты (если есть, для первичного сообщения)
* Приоритет
* Текст сообщения
* ID родительского сообщения (если есть, для ответа)
* Метод: POST
* Исключения: В случае ошибки данных, система должна вернуть статус 401.
Передача изменения состояния:
* Поля:
* Уникальный ник-нейм пользователя СЗЗ "ВЕХНО"
* Токен верификации
* ID сообщения
* Параметры изменения: цветовая метка, приоритет, статус
* Параметры статуса сообщения: прочитано, скрыть
* Статус "происходит ввод текста" (для предотвращения перезагрузки виджета в момент ввода нового сообщения)
* Метод: PATCH (GET)
* Исключения: В случае ошибки данных, система должна вернуть статус 401.
##### 4.3.2. Наименование набора данных
Никакие данные, кроме уникального ник-нейма пользователя СЗЗ "ВЕХНО" и токена верификации, не должны быть переданы в запросе к СОС "НИЧАТКА". Все прочие запросы и ответы являются частью СОС "НИЧАТКА", и осуществляются внутри блока (виджета) СОС "НИЧАТКА".
###### 4.3.2.1. Описание входной информации
Все данные из СОС "НИЧАТКА" должны быть переданы в формате составе URL и методом GET или POST.
###### 4.3.2.2. Формат
Переменные GET или POST.
###### 4.3.2.3. Способ загрузки
Загрузка данных должна осуществляться через web-api. Витжет СОС "НИЧАТКА" отправляет периодически запрос статуса и запрос на обновление панели сообщений (виджета) в случае если панель открыта.
###### 4.3.2.4. Владелец
СОС "НИЧАТКА" одноранговая. Сообщения не имеют владельца. И отправитель, и адресата -- равноправные участники, никто не имеет права изменять или удалять сообщения )ни свои. ни других участников).
#### 4.4. Выходные данные
Все данные из СОС "НИЧАТКА" должны быть переданы в формате web-api (готовые фрагменты HTML для обработки внутри виджета). Протокол передачи данных: HTTPS, сжатые gzip, кодировка utf-16.
### 4.5. Нефункциональные требования
Цветовые и стилевые решения внутри виджета СОС "НИЧАТКА" должны быть согласованы с дизайном СЗЗ "ВЕХНО". Виджет должен быть адаптивным и поддерживать все современные браузеры. Виджет должен быть легковесным и не замедлять работу СЗЗ "ВЕХНО". Виджет должен быть удобным в использовании и интуитивно понятным.
## 5. Роли и права доступа пользователей
Роли и права доступа пользователей в СОС "НИЧАТКА" не регламентируются. Все пользователи равноправны и могут обмениваться сообщениями между собой. Права доступа к сообщениям и их изменениям не регламентируются. Пользователь может изменить цветовую метку, приоритет и статус сообщения, а также скрыть его. Эти изменения касаются только отображения сообщений для конкретного пользователя.
## 6. Критерии проверки результатов работ
* Результаты работ должны быть проверены на соответствие бизнес-требованиям и функциональным требованиям.
* Результаты работ должны быть проверены на соответствие нефункциональным требованиям.
* Результаты работ должны быть проверены на соответствие дизайну СЗЗ "ВЕХНО".
* Результаты работ должны быть проверены на соответствие стандартам безопасности и качества кода.
* Результаты работ должны быть проверены на соответствие стандартам производительности и оптимизации кода.
* Результаты работ должны быть проверены на соответствие стандартам адаптивности и кросс-браузерности.
* Результаты работ должны быть проверены на соответствие стандартам доступности и удобства использования.
* Результаты работ должны быть проверены на соответствие стандартам тестирования и отладки.
* Результаты работ должны быть проверены на соответствие стандартам документирования и комментирования кода.