paint-brush
ChatGPT: ваш помощник для экономии времени при создании UML-диаграммк@nastyakostina
8,615 чтения
8,615 чтения

ChatGPT: ваш помощник для экономии времени при создании UML-диаграмм

к Anastasiia Kostina9m2024/02/07
Read on Terminal Reader

Слишком долго; Читать

Легко создавайте и улучшайте диаграммы UML с помощью ChatGPT, используя генерацию кода PlantUML. Экономьте время, оптимизируйте процессы и оптимизируйте свою работу, делая создание диаграмм более эффективным и приятным.
featured image - ChatGPT: ваш помощник для экономии времени при создании UML-диаграмм
Anastasiia Kostina HackerNoon profile picture

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


Однако наступил момент, когда я обнаружил, что работаю над одной UML-диаграммой, которую мне не очень хотелось создавать.


В своем стремлении упростить или ускорить этот процесс я обратился к различным методам. Обычно я создаю диаграммы UML, используя код PlantUML... здесь меня осенило: это форма кода, и код можно генерировать.


Таким образом, ChatGPT превратился в ценный инструмент для создания диаграмм, и теперь я рад поделиться с вами своим опытом.

Несколько слов об UML

UML означает «унифицированный язык моделирования» и служит языком для определения, визуализации, конструирования и документирования артефактов программных систем. UML опирается на концепции объектно-ориентированных языков программирования; наличие знаний в области разработки полезно для моделирования UML, но не обязательно.


Он в первую очередь предназначен для описания аспектов проектирования программного обеспечения, но также предлагает набор поведенческих диаграмм для моделирования требований бизнеса или пользователей.


В своей роли я занимаюсь ИТ-бизнес-процессами, уделяя особое внимание их моделированию для анализа, оптимизации и переводу в понятный формат для реализации разработчиками.

Когда дело доходит до моделирования, я использую различные подходы и инструменты, одним из которых является UML.


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

Рисование против кода

Как и любую диаграмму, ее легко нарисовать — это просто, удобно, быстро и дает четкое представление о процессе и результате. Для этой цели доступны многочисленные графические инструменты, и я ими пользуюсь. Однако чаще всего я выбираю «кодовый» подход благодаря PlantUML.


PlantUML , язык и инструмент моделирования с открытым исходным кодом, позволяет создавать диаграммы на основе обычного текстового языка. Проще говоря, вы можете написать код на PlantUML для создания диаграмм.


Мне нравится рисовать диаграммы в «творческом режиме», но чаще всего я либо потом конвертирую их в код, либо пишу код напрямую. Для этого есть две основные причины:

  1. Вы можете вставлять, перемещать и удалять блоки на диаграммах гораздо эффективнее.

    Изменение порядка блоков в нарисованных диаграммах часто приводит к изменениям во всей диаграмме, затрагивая другие блоки и ссылки. При работе с кодом вам не нужно беспокоиться о визуальном аспекте; вы имеете дело с текстом, а PlantUML позаботится о его графическом представлении за вас.


  2. Вы можете работать и хранить простые текстовые файлы вместо изображений.

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


Еще одним существенным преимуществом является то, что ChatGPT понимает PlantUML и может генерировать код , что позволяет вам пользоваться преимуществами генерации кода и легко интегрировать их с UML. Ниже я поделюсь некоторыми примерами из своего личного опыта.


Вы можете использовать любые редакторы кода для PluntUML. Лично я предпочитаю Visual Studio Code и расширение PlantUML. Другой способ — использовать онлайн-редакторы, такие как https://plantuml.com или другие.

ChatGPT, напишите для меня код PluntUML

Пример 1. Я не хочу начинать с чистого листа

Давайте создадим диаграмму вариантов использования для приложения «Такси».


Сначала я использую подсказку:

используйте синтаксис из https://plantuml.com/ru/use-case-diagram, создайте диаграмму вариантов использования для приложения такси


ChatGPT генерирует код:

 @startuml left to right direction actor "Passenger" as passenger actor "Driver" as driver rectangle "Taxi App" { usecase "Request Ride" as request usecase "Cancel Ride" as cancel usecase "Track Ride" as track usecase "Payment" as payment passenger -- (request) passenger -- (cancel) passenger -- (track) passenger -- (payment) driver -- (track) driver -- (payment) (request) --> (cancel) (request) --> (track) (track) --> (payment) } @enduml

Визуальный вид:


Идея хороша, но иметь только четыре случая кажется недостаточным. Прошу добавить дополнительные случаи и дополнить примерами синтаксиса, так как в PlantUML подобных нет. Быстрый:

добавьте больше случаев, вы можете использовать различные типы ссылок, такие как включение, расширение и обобщение, синтаксис:

(case1) .> (case2_includes_case1): <<include>>

(родительский) <|-- (дочерний)

(case1 расширяет случай 2) .> (case2): <<extends>>


Затем я несколько раз прошу

добавить больше дел


еще раз и сделайте несколько конкретных запросов по исправлению ошибок.


Вот окончательный результат ChatGPT:

 @startuml left to right direction actor "Passenger" as passenger actor "Driver" as driver rectangle "Taxi App" { usecase "Request Ride" as request usecase "Cancel Ride" as cancel usecase "Track Ride" as track usecase "Payment" as payment usecase "Rate Driver" as rate usecase "View Ride History" as history usecase "Select Ride Type" as selectType usecase "Provide Feedback" as feedback usecase "View Driver Information" as driverInfo usecase "Update Profile" as updateProfile usecase "Promo Code" as promoCode usecase "Emergency Assistance" as emergencyAssistance passenger -- (selectType) passenger -- (request) passenger -- (cancel) passenger -- (track) passenger -- (payment) passenger -- (rate) passenger -- (history) passenger -- (feedback) passenger -- (driverInfo) passenger -- (updateProfile) passenger -- (promoCode) passenger -- (emergencyAssistance) driver -- (track) driver -- (payment) driver -- (rate) (request) ---> (cancel) (request) ---> (track) (track) ---> (payment) (track) ---> (rate) (history) --> (payment) (rate) --> (payment) (rate) ---> (track) (cancel) --> (request) (selectType) --> (request) (feedback) --> (rate) (driverInfo) ---> (track) (updateProfile) --> (track) (promoCode) --> (payment) (emergencyAssistance) --> (track) } @enduml 

Мне нравятся случаи, но не связи между ними. Итак, я немного редактирую этот код.


Вот окончательный результат:

 @startuml actor "Passenger" as passenger actor "Driver" as driver rectangle "Taxi App" { usecase "Request Ride" as request usecase "Cancel Ride" as cancel usecase "Track Ride" as track usecase "Payment" as payment usecase "Rate Driver" as rate usecase "View Ride History" as history usecase "Select Ride Type" as selectType usecase "Provide Feedback" as feedback usecase "View Driver Information" as driverInfo usecase "Update Profile" as updateProfile usecase "Promo Code" as promoCode usecase "Emergency Assistance" as emergencyAssistance passenger -- (selectType) passenger - (request) passenger -- (track) passenger -- (payment) passenger -- (history) passenger -- (rate) passenger -- (updateProfile) passenger -- (emergencyAssistance) driver - (request) driver - (payment) driver - (rate) (request) --> (track) (track) --> (payment) (track) --> (rate) (selectType) --> (request) (cancel) .> (request) : <<extends>> (rate) <.. (feedback) : <<include>> (payment) <..(promoCode) : <<include>> (driverInfo) .> (track) : <<extends>> } @enduml 


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

Пример 2. Мне нужно проверить и улучшить диаграмму

У меня есть простая версия диаграммы последовательности для решения для хранения изображений с обратным прокси-сервером:

 @startuml participant Client boundary "Reverse Proxy" as Proxy participant Back participant FileStorage participant Admin actor Editor Editor -> Admin: Add picture Admin -> FileStorage: Add picture Client -> Proxy: Get picture Proxy -> Proxy: Check cache alt cash is not empty Proxy -->> Client: Return picture else cash is empty Proxy -> FileStorage: Recieve picture FileStorage --> Proxy: Picture Proxy -> Proxy: Save to cache Proxy -->> Client: Return picture end @enduml 


Давайте улучшим его. Моя подсказка:

Я разрабатываю решение для хранения и использования изображений, проверьте эту схему и при необходимости отредактируйте ее.


Предложение ChatGPT:

 1. **Participant Name Clarification:** - Consider renaming "Back" to something more descriptive, like "Application Server" or a similar term that better represents the functionality. 2. **Actor Placement:** - Move the "Editor" actor to a more standard position, usually at the top. @startuml participant Client actor Editor boundary "Reverse Proxy" as Proxy participant ApplicationServer participant FileStorage participant Admin Editor -> Admin: Add picture Admin -> FileStorage: Add picture Client -> Proxy: Get picture Proxy -> Proxy: Check cache alt cache is not empty Proxy -->> Client: Return picture else cache is empty Proxy -> ApplicationServer: Receive picture ApplicationServer --> Proxy: Picture Proxy -> Proxy: Save to cache Proxy -->> Client: Return picture end @enduml


Мне не нравится пункт о размещении актеров, поэтому я вернул его обратно; все остальное в порядке.


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

проверьте эту диаграмму и при необходимости улучшите ее


и напишите подсказки:

покажите, как ApplicationServer получает картинку из базы данных


добавить фокус контроля


добавить несколько угловых случаев


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

 @startuml participant Client boundary "Reverse Proxy" as Proxy participant ApplicationServer database FileStorage participant Admin actor Editor Editor -> Admin: Add picture activate Admin deactivate Admin Admin -> FileStorage: Add picture activate FileStorage deactivate FileStorage Admin -> ApplicationServer: Store metadata activate ApplicationServer Client -> Proxy: Get picture activate Proxy Proxy -> Proxy: Check cache alt cache is not empty Proxy -->> Client: Return picture else cache is empty Proxy -> ApplicationServer: Receive picture request activate FileStorage ApplicationServer -> FileStorage: Retrieve picture from database alt picture not found in database FileStorage --> ApplicationServer: Picture not found deactivate FileStorage ApplicationServer -> Proxy: Notify picture not found Proxy -->> Client: Picture not found else FileStorage --> ApplicationServer: Picture data deactivate FileStorage ApplicationServer -> Proxy: Send picture to Proxy Proxy -> Proxy: Save to cache Proxy -->> Client: Return picture end end deactivate Proxy deactivate ApplicationServer deactivate Admin deactivate Editor @enduml 

Недостатки

Прежде всего, вам придется все проверить, потому что «ChatGPT может допускать ошибки». Он не предназначен для вас, а скорее является инструментом для оптимизации вашей работы.


Наиболее распространенные ошибки связаны с синтаксисом PlantUML. Иногда это происходит в середине разговора, и мне нужно это исправить и вернуть ChatGPT на правильный путь.


Во-вторых, я использую бесплатную версию ChatGPT 3.5, и у нее есть свои плюсы и минусы. Иногда он работает хуже и дает несколько случайных ответов на одно и то же приглашение.


В-третьих, ChatGPT понимает некоторые диаграммы лучше, чем другие. Например, он гораздо лучше работает с диаграммами последовательности, чем с диаграммами вариантов использования.


Однако, несмотря на эти ограничения, ChatGPT остается ценным инструментом и отличным помощником, способным повысить вашу эффективность и сэкономить время.

Заключение

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


Надеюсь, мой опыт будет вам полезен и вдохновит. Спасибо!