24 сентября 2024
Автор: Екатерина Ананьева
Интеграции
Нотации и диаграммы
С появлением искусственного интеллекта (ИИ) системным и бизнес-аналитикам просто необходимо знать как минимум базовые команды к нему, чтобы ускорять свою работу.
И если вы уже используете в своей работе инструмент для создания любой диаграммы через код, то для ускорения этого процесса на помощь приходит ИИ.
В этой статье вы узнаете, как пошагово построить UML-Sequence диаграмму с использованием связки инструментов: ChatGPT + PlantUML.
Для использования этой инструкции не обязательны знания как писать код в PlantUML.
1. Откройте ChatGPT и войдите в аккаунт
Сейчас можно работать с ChatGPT без авторизации, но при работе как авторизованный пользователь вы получаете более умную версию нейросети, а также возможность хранить историю диалогов.
Вид страницы ChatGPT без авторизации
Вход в аккаунт с использованием учетной записи Google
2. Прежде чем строить UML-диаграмму, вы должны подготовить детально описанный Use Case, который "как есть" будете целиком копировать в запрос к ChatGPT.
Обычно UML-Sequence диаграммы строятся для систем, в которых нужно сделать интеграции с внешними системами. То есть обеспечить обмен данными между нашей и чужой системой.
UML-диаграмма является отличным визуальным инструментом, который помогает быстрее понять как работает этот процесс без чтения всего текста, который описывает сценарий.
В этой статье мы будем использовать пример Use Case для интеграционного сценария системы курьерской службы #ShipEasyGA: пользователь вводит буквы адреса в строку и начиная с 10-го символа надо запрашивать подтсказки по структурированному адресу от внешней системы DaData.
Описание этого сценария доступно в Telegram-канале и приведено ниже.
Пример Use Case для сценария интеграции систем
Сценарий:
Структурирование адреса при оформлении заказа в системе курьерской службы
Пользователи и системы:
Предусловие:
Пользователь перешел на экран оформления заказа курьерской службы и дошел до полей ввода адреса Отправителя / Получателя.
При загрузке экранной формы вызывается API ShipEasyGA GET /countries для получения справочника стран.
Основной сценарий:
1. Выбор страны:
1.1. Пользователь должен выбрать страну из справочника.
По умолчанию выбрана “Россия” (id = "0f05db91-50a3-4d43-bd7a-a45d6fa051e3").
1.2. Для выбора страны пользователь нажимает на поле ввода.
Отображается выпадающий список стран по алфавиту. Россия всегда вверху списка, если не введено ни одной буквы. В списке одновременно отображаются 5 записей, доступна прокрутка.
1.3. Пользователь может начать ввод букв по одной в поле ввода.
При вводе каждой буквы список стран фильтруется и отображаются только те, в названии которых входит введенная пользователем строка (поиск по вхождению подстроки в строку, в любую часть). Поиск по справочнику выполняется локально, на клиенте, с использованием справочника, который был подгружен при открытии формы оформления заказа через GET /countries.
1.4. После выбора страны из списка значение в поле обновляется.
Если пользователь не выбрал страну из списка и снимает выделение с поля, то оставить в нем введенные буквы, подсветить его красным и сделать снизу подсказку “Страна не выбрана”. Поля ввода адреса блокировать до выбора страны из справочника.
2. Пользователь вводит Полный адрес:
2.1. При вводе 10 и более символов отображается выпадающий список с подсказками адреса.
2.1.1. Для получения подсказок Frontend вызывает метод API ShipEasyGA
GET /address?text=’строка адреса в любом виде’
2.1.2. Backend ShipEasyGA принимает запрос и перенаправляет его во внешнюю систему DaData, вызывая метод
POST http://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address
с телом запроса, содержащим адрес:
{
"query": "сочи, севастопольская, 123"
}
2.1.2. Backend ShipEasyGA принимает запрос и перенаправляет его во внешнюю систему DaData, вызывая метод
POST http://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address
с телом запроса, содержащим адрес:
2.1.3. API DaData возвращает ответ в виде массива.
2.1.4. Backend ShipEasyGA выбирает из ответа только нужные данные и формирует JSON для ответа, в соответствии с требованиями к маппингу данных, описанному ниже. Возвращать только первые 5 рекомендуемых DaData адресов. Остальные значения в массиве, полученном от DaData, игнорировать. Также Backend сверяет координаты первого по порядку предложенного адреса с координатами пунктов курьерской службы. Если в радиусе 5 км от адреса они есть, то такие пункты также возвращаются в ответе отдельным списком (до 3-х пунктов).
2.1.5. Backend ShipEasyGA возвращает в ответ на Frontend 5 адресов, наиболее подходящих по запросу.
2.2. В списке одновременно отображаются 5 записей, прокрутка недоступна.
В списке могут предлагаться для выбора пункты, куда Отправитель может принести посылку или откуда Получатель ее может забрать. Они выделены специальной иконкой. Если такие пункты есть, то записей в списке может быть более 5, и пункты курьерской службы предлагаются первыми.
2.3. Пользователь может выбрать адрес из списка подсказок.
В этом случае остальные поля ввода для адреса (город, улица, дом, корпус, квартира, индекс) будут заполнены автоматически на основе выбранной подсказки.
2.4. Пользователь может снять выделение из строки адреса.
В этом случае остальные поля ввода для адреса (город, улица, дом, корпус, квартира, индекс) будут заполнены автоматически на основе введенных данных. Перед автозаполнением спрашивать у пользователя подтверждение автовыбора адреса. Часть полей структурированного адреса может остаться незаполненной.
3. Пользователь проверяет структурированный адрес.
Если необходимо, то он вносит правки в него. При внесении правок строка с полным адресом должна обновляться при завершении редактирования каждого поля — снятия с него выделения.
4. Пользователь продолжает ввод остальных полей на форме для Отправителя и Получателя.
5. По завершении ввода пользователь оформляет заказ курьерской службы.
Альтернативные сценарии:
2.1.3А. Ошибка доступа в DaData
Если возникла ошибка доступа к API DaData, то Backend возвращает ошибку на клиент с соответствующим сообщением для пользователя "Ошибка при получении адресов. Попробуйте позже."
2.1.3B. DaData временно недоступна
Если API DaData временно недоступна, то Backend возвращает сообщение "Сервис подсказок адресов временно недоступен. Введите адрес вручную."
2.1.3C. DaData не отвечает более 10 секунд
Если API DaData не отвечает более 10 секунд (время задается в параметрах конфигурации для интеграции), то запрос отменяется, и пользователю отображается сообщение о временной недоступности подсказок.
2.1.3D. DaData вернула ошибку
Если API DaData вернула ошибку в ответе, то Backend передает сообщение пользователю: "Ошибка при получении подсказок. Попробуйте позже."
2.1.3E. DaData вернула пустой результат
Если API DaData вернула пустой массив [], то в интерфейсе пользователю показывается сообщение "Адрес не найден. Введите корректный адрес."
...
2.3A. Пользователь выбрал пункт курьерской службы
Если пользователь выбрал пункт курьерской службы вместо адреса, то все остальные поля адреса блокируются, и в заказ автоматически добавляется информация о выбранном пункте.
...
Этот текст можно использовать, если вы хотите попробовать возможности ChatGPT для построения UML-диаграммы, но у вас под рукой нет готового сценария.
Выполните команду к ChatGPT для генерации кода UML-Sequence диаграммы:
Работай как опытный системный аналитик.
Сделай код для plantUML, чтобы создать UML Sequence диаграмму.
Не показывай альтернативные сценарии.
Сценарий:
<название сценария>
Пользователи и системы:
<участники сценария>
Описание сценария:
<описание Use Case>
Пояснения к команде:
Результат работы ChatGPT - код для копирования в PlantUML:
@startuml
actor User
participant "Web/iOS/Android" as App
participant "Backend - API ShipEasyGA" as Backend
participant "Database" as DB
participant "API DaData" as DaData
== Предусловие: Переход на экран оформления заказа ==
User -> App : Открывает экран оформления заказа
App -> Backend : GET /countries
Backend -> DB : Запрос справочника стран
DB --> Backend : Возвращает список стран
Backend --> App : Возвращает список стран
== Основной сценарий ==
User -> App : Выбирает страну
App -> Backend : Отправка выбранной страны
== Ввод адреса ==
User -> App : Вводит полный адрес (>= 10 символов)
App -> Backend : GET /address?text=адрес
Backend -> DaData : POST /suggest/address {"query": "введенный адрес"}
DaData --> Backend : Возвращает предложенные адреса
Backend -> DB : Сверка координат с пунктами курьерской службы
DB --> Backend : Возвращает пункты курьерской службы
Backend --> App : Возвращает 5 предложенных адресов и пункты курьерской службы
User -> App : Выбирает адрес из предложенного списка
App -> Backend : Отправка выбранного адреса
Backend -> DB : Сохранение адреса в БД
== Завершение оформления заказа ==
User -> App : Оформляет заказ
App -> Backend : POST /order
Backend -> DB : Сохранение заказа в БД
Backend --> App : Подтверждение успешного оформления
@enduml
Результат разработки кода UML-диаграммы через ChatGPT
Откройте PlantUML и вставьте код, полученный на предыдущем шаге:
Результат вставки кода в PlantUML
Полученная UML-диаграмма
Обязательно проверьте и скорректируйте результат, так как ChatGPT может делать ошибки и перегружать диаграмму лишними элементами:
ChatGPT помогает ускорить создание диаграммы UML-Sequence, но опыт и знания аналитика, который использует инструмент, тоже очень важны из-за потенциальных ошибок и усложнений, которые может допустить искусственный интеллект.
Поэтому прежде чем использовать ChatGPT для своей работы, необходимо хорошо разобраться и понять нотацию UML и правила создания UML-Sequence диаграмм.
Если в вашем Confluence или другом инструменте для работы с документацией есть плагин для работы с PlantUML, то создайте новую диаграмму сразу в Confluence и вставляйте код туда, чтобы создать диаграмму. Код и диаграмма в этом случае хранятся в одном месте.
Если плагина нет, то вставьте в ваш инструмент для работы с документацией картинку, которую создали на сайте PlantUML, а также обязательно добавьте код к картинке. Это поможет в будущем легко внести правки в существующую диаграмму, если алгоритм работы будет расширяться и дорабатываться, а не создавать опять весь код с нуля.
Плюсы:
Минусы:
Рекомендую использовать этот лайфхак только при знании и понимании нотации UML, со знанием всех минусов использования ChatGPT для ускорения работы системного аналитика.
Для тех, кто только изучает UML, рекомендую использовать ChatGPT для проверок ваших результатов и не доверять ему на 100%.
Как работать с задачами на интеграции, описывать интеграционные сценарии (Use Case) с учетом технических деталей работы системы и создавать UML-диаграммы самостоятельно, без использования ChatGPT, мы разбираем на практической программе "Интеграции систем" для системных и бизнес-аналитиков.
Мы используем файлы cookie, для персонализации сервисов и повышения удобства пользования сайтом. Если вы не согласны на их использование, поменяйте настройки браузера.