paint-brush
ChatGPT : votre compagnon qui vous fait gagner du temps pour la génération de diagrammes UMLpar@nastyakostina
5,366 lectures
5,366 lectures

ChatGPT : votre compagnon qui vous fait gagner du temps pour la génération de diagrammes UML

par Anastasiia Kostina9m2024/02/07
Read on Terminal Reader

Trop long; Pour lire

Créez et améliorez sans effort des diagrammes UML avec ChatGPT, en utilisant la génération de code PlantUML. Gagnez du temps, rationalisez les processus et optimisez votre travail, rendant la création de diagrammes plus efficace et plus agréable.
featured image - ChatGPT : votre compagnon qui vous fait gagner du temps pour la génération de diagrammes UML
Anastasiia Kostina HackerNoon profile picture

Ma première rencontre avec ChatGPT a été motivée par une pure curiosité lors de sa sortie. J'ai été particulièrement attiré par les articles traitant de la génération de code, même si je n'écris pas personnellement de code. Et j’ai d’abord pensé que cette fonctionnalité ne serait pas pertinente pour moi.


Cependant, il est arrivé un moment où je me suis retrouvé à travailler sur un diagramme UML que je n'avais pas trop envie de créer.


Dans ma quête pour simplifier ou accélérer le processus, je me suis tourné vers diverses méthodes. Je crée habituellement des diagrammes UML en utilisant le code PlantUML... ici, la réalisation m'a frappé : il s'agit d'une forme de code, et le code peut être généré.


Ainsi, ChatGPT est devenu un outil précieux pour la création de mes diagrammes, et maintenant je suis ravi de partager mes expériences avec vous.

Quelques mots sur UML

UML signifie Unified Modeling Language et sert de langage pour spécifier, visualiser, construire et documenter les artefacts des systèmes logiciels. UML s'inspire des concepts des langages de programmation orientés objet ; avoir des connaissances en développement est bénéfique pour la modélisation UML mais pas obligatoire.


Il est principalement conçu pour décrire les aspects de la conception de logiciels, mais il propose également un ensemble de diagrammes comportementaux pour modéliser les exigences de l'entreprise ou des utilisateurs.


Dans mon rôle, je m'engage dans les processus métier informatiques, en me concentrant spécifiquement sur leur modélisation à des fins d'analyse, d'optimisation et de traduction dans un format clair que les développeurs peuvent mettre en œuvre.

En matière de modélisation, j'utilise diverses approches et outils, dont UML.


Voici la beauté de la solution : vous n'avez pas besoin d'être un ingénieur logiciel pour utiliser UML. Je l'utilise pour naviguer dans les processus métier mis en œuvre avec des logiciels, mais il va au-delà : il est remarquablement polyvalent et peut être appliqué par différents rôles à différents stades de développement. Dans l’ensemble, essayez-le ; vous pourriez bien vous retrouver à l’adorer.

Dessiner contre Code

Comme n'importe quel diagramme, vous pouvez facilement le dessiner : il est simple, pratique, rapide et offre une vue claire du processus et du résultat. De nombreux outils graphiques sont disponibles à cet effet et je les utilise. Cependant, le plus souvent, je choisis l'approche "code", grâce à PlantUML.


PlantUML , un langage et un outil de modélisation open source, vous permet de générer des diagrammes basés sur un langage de texte brut. En termes plus simples, vous pouvez écrire du code dans PlantUML pour créer des diagrammes.


J'aime dessiner des diagrammes dans mon « mode créatif », mais le plus souvent, soit je les convertis en code par la suite, soit j'écris le code directement. Il y a deux raisons principales pour cela:

  1. Vous pouvez insérer, déplacer et supprimer des blocs dans vos diagrammes beaucoup plus efficacement

    Changer l'ordre des blocs dans les diagrammes dessinés entraîne souvent des modifications sur l'ensemble du diagramme, affectant d'autres blocs et liens. Lorsque vous travaillez avec du code, vous n'avez pas besoin de vous soucier de l'aspect visuel ; vous avez affaire à un texte et PlantUML s'occupe de la représentation graphique pour vous.


  2. Vous pouvez travailler avec et stocker de simples fichiers texte au lieu de gérer des images

    Ceci est particulièrement utile lorsque vous rencontrez des images de diagrammes dans la documentation. La qualité peut être compromise. Il est impossible de continuer à travailler avec de tels diagrammes, et ils ne peuvent être que redessinés, pas modifiés ou étendus.


Un autre avantage important est que ChatGPT comprend PlantUML et peut générer du code , vous permettant de profiter des avantages de la génération de code et de les intégrer de manière transparente à UML. Je partagerai ci-dessous quelques exemples tirés de mon expérience personnelle.


Vous pouvez utiliser n'importe quel éditeur de code pour PluntUML. Personnellement, je préfère Visual Studio Code et l'extension PlantUML. Une autre façon consiste à utiliser des rédacteurs en ligne comme https://plantuml.com ou autres.

ChatGPT, écrivez le code PluntUML pour moi

Exemple 1 – Je ne veux pas commencer avec une ardoise vierge

Créons un diagramme de cas d'utilisation pour une application Taxi.


Tout d'abord, j'utilise une invite :

utilisez la syntaxe de https://plantuml.com/ru/use-case-diagram, créez un diagramme de cas d'utilisation pour une application de taxi


ChatGPT génère un code :

 @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

Vue visuelle :


L’idée est bonne, mais n’avoir que quatre cas semble insuffisant. Je demande d'ajouter des cas supplémentaires et de l'améliorer avec quelques exemples de syntaxe, car il n'y en a pas de similaire dans PlantUML. Rapide:

ajoutez plus de cas, vous pouvez utiliser différents types de liens tels que l'inclusion, l'extension et la généralisation, la syntaxe :

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

(parent) <|-- (enfant)

(case1 étend le cas 2) .> (case2) : <<étend>>


Ensuite, je demande à plusieurs reprises

ajouter plus de cas


à nouveau et faites des demandes spécifiques pour corriger les erreurs.


Voici le résultat final de 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 

J'aime les cas, mais pas les liens entre eux. Donc, je modifie un peu ce code.


Voici le résultat final :

 @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 


Certes, vous pouvez intégrer davantage de scénarios. Par exemple, il n'y a aucune information sur l'enregistrement et la connexion des utilisateurs. De plus, vous pouvez guider ChatGPT pour créer un diagramme lié à vos conceptions. La clé est que vous disposez d’une base que vous pouvez utiliser.

Exemple 2 – J'ai besoin de vérifier et d'améliorer un diagramme

J'ai une version simple d'un diagramme de séquence pour une solution de stockage d'images avec un proxy inverse :

 @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 


Améliorons-le. Mon invite :

Je conçois une solution pour stocker et utiliser des images, vérifiez ce schéma et modifiez-le si nécessaire


Suggestion 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


Je n'aime pas le point sur le placement des acteurs, alors je le remets ; tout le reste va bien.


Ensuite, j'ai répété plusieurs fois une invite :

vérifiez ce schéma et améliorez-le si nécessaire


et écrivez des invites :

montrer comment ApplicationServer obtient une photo de la base de données


ajouter un focus de contrôle


ajouter quelques cas de coin


Pour le finaliser, j'ajuste le focus du contrôle et apporte quelques modifications au nom. Voici le résultat final :

 @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 

Désavantages

Tout d’abord, vous devez tout vérifier car « ChatGPT peut faire des erreurs ». Il n'est pas destiné à vous remplacer mais plutôt à être un outil pour rationaliser et optimiser votre travail.


Les erreurs les plus courantes sont liées à la syntaxe PlantUML. Parfois, cela se produit au milieu d'une conversation, et je dois y remédier et remettre ChatGPT sur la bonne voie.


Deuxièmement, j'utilise une version gratuite de ChatGPT 3.5, et elle présente des hauts et des bas. Parfois, cela fonctionne moins bien et donne des réponses aléatoires pour la même invite.


Troisièmement, ChatGPT comprend mieux certains diagrammes que d’autres. Par exemple, il fonctionne bien mieux avec les diagrammes de séquence qu’avec les diagrammes de cas d’utilisation.


Cependant, malgré ces limitations, ChatGPT reste un outil précieux et un excellent assistant capable d'augmenter votre efficacité et de vous faire gagner du temps.

Conclusion

J'utilise ChatGPT de manière permanente dans mon travail. Si vous êtes gestionnaire, analyste, développeur, testeur ou dans tout autre rôle, vous pouvez utiliser UML. Si tel est le cas, envisagez d'écrire et de générer du code PlantUML : cela vous fera gagner du temps et augmentera votre efficacité.


J'espère que mon expérience vous sera utile et vous inspirera. Merci!