Meu encontro inicial com o ChatGPT foi motivado por pura curiosidade quando ele foi lançado. Fiquei particularmente atraído por artigos que discutiam a geração de código, embora eu não escreva código pessoalmente. E inicialmente acreditei que esse recurso não seria relevante para mim.
Entretanto, chegou um momento em que me vi trabalhando em um diagrama UML que não estava muito ansioso para criar.
Na minha busca para simplificar ou agilizar o processo, recorri a vários métodos. Eu normalmente crio diagramas UML usando código PlantUML... aqui, a constatação me ocorreu: esta é uma forma de código, e código pode ser gerado.
Assim, o ChatGPT evoluiu para uma ferramenta valiosa para a criação de diagramas e agora estou animado para compartilhar minhas experiências com você.
UML significa Linguagem de Modelagem Unificada e serve como uma linguagem para especificar, visualizar, construir e documentar artefatos de sistemas de software. A UML baseia-se em conceitos de linguagens de programação orientadas a objetos; ter conhecimento de desenvolvimento é benéfico para a modelagem UML, mas não é obrigatório.
Ele foi projetado principalmente para descrever aspectos do design de software, mas também oferece um conjunto de diagramas comportamentais para modelar requisitos de negócios ou de usuários.
Em minha função, eu me envolvo com processos de negócios de TI, focando especificamente em modelá-los para análise, otimização e traduzi-los em um formato claro para implementação pelos desenvolvedores.
Quando se trata de modelagem, utilizo diversas abordagens e ferramentas, uma das quais é a UML.
Aqui está a beleza disso: você não precisa ser um engenheiro de software para utilizar UML. Eu o uso para navegar pelos processos de negócios implementados com software, mas ele vai além disso: é extremamente versátil e pode ser aplicado por diversas funções em diferentes estágios de desenvolvimento. Resumindo, experimente; você pode acabar adorando.
Como qualquer diagrama, você pode desenhá-lo facilmente — é simples, conveniente, rápido e fornece uma visão clara do processo e do resultado. Inúmeras ferramentas gráficas estão disponíveis para esse fim e eu as uso. No entanto, na maioria das vezes, escolho a abordagem de “código”, graças ao PlantUML.
PlantUML , uma linguagem e ferramenta de modelagem de código aberto, permite gerar diagramas baseados em linguagem de texto simples. Em termos mais simples, você pode escrever código em PlantUML para criar diagramas.
Gosto de esboçar diagramas no meu 'modo criativo', mas na maioria das vezes, eu os converto em código posteriormente ou escrevo o código diretamente. Existem duas razões principais para isso:
Você pode inserir, mover e excluir blocos em seus diagramas com muito mais eficiência
Alterar a ordem dos blocos nos diagramas desenhados muitas vezes leva a modificações em todo o diagrama, afetando outros blocos e links. Ao trabalhar com código, você não precisa se preocupar com o aspecto visual; você está lidando com um texto e o PlantUML cuida da representação gráfica para você.
Você pode trabalhar e armazenar arquivos de texto simples em vez de lidar com imagens
Isto é particularmente benéfico ao encontrar imagens de diagramas na documentação. A qualidade pode ficar comprometida. É impossível continuar trabalhando com tais diagramas, e eles só podem ser redesenhados, não editados ou ampliados.
Outra vantagem significativa é que o ChatGPT entende o PlantUML e pode gerar código , permitindo que você aproveite os benefícios da geração de código e integre-os perfeitamente à UML. Compartilharei alguns exemplos de minha experiência pessoal abaixo.
Você pode usar qualquer editor de código para PluntUML. Eu pessoalmente prefiro o Visual Studio Code e a extensão PlantUML nele. Outra forma é usar redatores online como https://plantuml.com ou outros.
Vamos criar um diagrama de Caso de Uso para uma aplicação Táxi.
Primeiro, uso um prompt:
use a sintaxe de https://plantuml.com/ru/use-case-diagram, crie um diagrama de caso de uso para um aplicativo de táxi
ChatGPT gera um código:
@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
Visão visual:
A ideia é boa, mas ter apenas quatro casos parece insuficiente. Solicito adicionar casos adicionais e aprimorá-los com alguns exemplos de sintaxe, pois não há nenhum semelhante no PlantUML. Incitar:
adicionar mais casos, você pode usar diferentes tipos de links, como inclusão, extensão e generalização, sintaxe:
(case1).> (case2_includes_case1): <<incluir>>
(pai) <|-- (filho)
(case1 estende caso 2).> (case2): <<estende>>
Então eu peço várias vezes para
adicione mais casos
novamente e faça algumas solicitações específicas para corrigir erros.
Aqui está o resultado final do 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
Gosto dos casos, mas não das conexões entre eles. Então, eu edito esse código um pouco.
Aqui está o resultado 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
Certamente, você pode incorporar mais cenários. Por exemplo, não há informações sobre registro e login do usuário. Além disso, você pode orientar o ChatGPT para criar um diagrama relacionado aos seus projetos. A chave é que você tenha uma base que possa usar.
Eu tenho uma versão simples de um diagrama de sequência para solução de armazenamento de imagens com proxy reverso:
@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
Vamos melhorar isso. Meu prompt:
Estou projetando uma solução para armazenamento e utilização de imagens, verifique este diagrama e edite-o se necessário
Sugestão do 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
Não gosto da questão do posicionamento dos atores, então coloquei de volta; todo o resto está bem.
Então repeti várias vezes um prompt:
verifique este diagrama e melhore-o se necessário
e escreva instruções:
mostre como o ApplicationServer obtém a foto do banco de dados
adicionar foco de controle
adicione alguns casos de canto
Para finalizar, ajusto o foco do controle e faço algumas alterações na nomenclatura. Aqui está o resultado 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
Em primeiro lugar, é preciso verificar tudo porque “ChatGPT pode cometer erros”. Não pretende ser um substituto para você, mas sim uma ferramenta para agilizar e otimizar seu trabalho.
Os erros mais comuns estão relacionados à sintaxe PlantUML. Às vezes, isso acontece no meio de uma conversa e tenho que consertar e colocar o ChatGPT de volta no caminho certo.
Em segundo lugar, eu uso uma versão gratuita do ChatGPT 3.5, e ela tem altos e baixos. Às vezes, funciona pior e fornece algumas respostas aleatórias para o mesmo prompt.
Terceiro, o ChatGPT entende alguns diagramas melhor do que outros. Por exemplo, funciona muito melhor com diagramas de sequência do que com diagramas de casos de uso.
No entanto, apesar destas limitações, o ChatGPT continua a ser uma ferramenta valiosa e um excelente assistente capaz de aumentar a sua eficiência e poupar-lhe tempo.
Eu uso ChatGPT de forma permanente em meu trabalho. Se você é gerente, analista, desenvolvedor, testador ou qualquer outra função, pode usar UML. Se for esse o caso, considere escrever e gerar código PlantUML — isso economizará seu tempo e aumentará sua eficiência.
Espero que minha experiência seja útil e inspire você. Obrigado!