paint-brush
ChatGPT: UML Diyagramı Oluşturmada Zaman Kazandıran Yardımcınızile@nastyakostina
5,366 okumalar
5,366 okumalar

ChatGPT: UML Diyagramı Oluşturmada Zaman Kazandıran Yardımcınız

ile Anastasiia Kostina9m2024/02/07
Read on Terminal Reader

Çok uzun; Okumak

PlantUML kod oluşturmayı kullanarak ChatGPT ile UML diyagramlarını zahmetsizce oluşturun ve geliştirin. Zamandan tasarruf edin, süreçleri kolaylaştırın ve çalışmanızı optimize ederek diyagram oluşturmayı daha verimli ve keyifli hale getirin.
featured image - ChatGPT: UML Diyagramı Oluşturmada Zaman Kazandıran Yardımcınız
Anastasiia Kostina HackerNoon profile picture

ChatGPT ile ilk karşılaşmam, piyasaya sürüldüğünde tamamen meraktan kaynaklandı. Şahsen kod yazmasam da özellikle kod oluşturmayı tartışan makaleler ilgimi çekti. Başlangıçta bu özelliğin benimle alakalı olmayacağına inandım.


Ancak öyle bir an geldi ki kendimi, yaratmaya pek hevesli olmadığım bir UML diyagramı üzerinde çalışırken buldum.


Süreci basitleştirme veya hızlandırma arayışımda çeşitli yöntemlere yöneldim. Genellikle PlantUML kodunu kullanarak UML diyagramları hazırlarım... Burada şunu fark ettim: Bu bir kod biçimidir ve kod üretilebilir.


Böylece ChatGPT, diyagram oluşturmam için değerli bir araca dönüştü ve şimdi deneyimlerimi sizinle paylaşmanın heyecanını yaşıyorum.

UML Hakkında Birkaç Söz

UML, Birleşik Modelleme Dili anlamına gelir ve yazılım sistemlerinin yapıtlarını belirlemek, görselleştirmek, oluşturmak ve belgelemek için bir dil görevi görür. UML, nesne yönelimli programlama dillerindeki kavramlardan yararlanır; UML modelleme için geliştirme bilgisine sahip olmak faydalıdır ancak zorunlu değildir.


Öncelikle yazılım tasarımının yönlerini tanımlamak için tasarlanmıştır, ancak aynı zamanda iş veya kullanıcı gereksinimlerini modellemek için bir dizi davranış şeması da sunar.


Görevim gereği BT iş süreçleriyle ilgileniyorum, özellikle analiz ve optimizasyon için bunları modellemeye ve geliştiricilerin uygulayabileceği net bir formata dönüştürmeye odaklanıyorum.

Modelleme söz konusu olduğunda çeşitli yaklaşımlar ve araçlar kullanıyorum, bunlardan biri UML.


İşin güzelliği şu; UML'yi kullanmak için yazılım mühendisi olmanıza gerek yok. Bunu yazılımla uygulanan iş süreçlerinde gezinmek için kullanıyorum, ancak bunun da ötesine geçiyor; son derece çok yönlü ve farklı geliştirme aşamalarındaki çeşitli roller tarafından uygulanabilir. Sonuç olarak, bir deneyin; kendinizi onu severken bulabilirsiniz.

Çizim ve Kod

Herhangi bir diyagram gibi onu da kolayca çizebilirsiniz; basit, kullanışlı, hızlıdır ve süreç ile sonucun net bir görünümünü sağlar. Bu amaç için çok sayıda grafik aracı mevcut ve ben bunları kullanıyorum. Ancak PlantUML sayesinde çoğu zaman "kod" yaklaşımını seçiyorum.


Açık kaynaklı bir modelleme dili ve aracı olan PlantUML , düz metin diline dayalı diyagramlar oluşturmanıza olanak tanır. Daha basit bir ifadeyle, diyagramlar oluşturmak için PlantUML'de kod yazabilirsiniz.


'Yaratıcı modumda' diyagramlar çizmeyi seviyorum, ancak çoğu zaman bunları ya daha sonra koda dönüştürüyorum ya da kodu doğrudan yazıyorum. Bunun iki ana nedeni var:

  1. Diyagramlarınıza blokları çok daha verimli şekilde ekleyebilir, taşıyabilir ve silebilirsiniz

    Çizilen diyagramlardaki blokların sırasının değiştirilmesi çoğu zaman diyagramın tamamında değişikliklere yol açarak diğer blokları ve bağlantıları etkiler. Kodla çalışırken görsel açıdan endişelenmenize gerek yok; bir metinle uğraşıyorsunuz ve PlantUML sizin için grafiksel gösterimi hallediyor.


  2. Resimlerle uğraşmak yerine basit metin dosyalarıyla çalışabilir ve bunları saklayabilirsiniz

    Bu özellikle dokümantasyonda diyagram görselleriyle karşılaşıldığında faydalıdır. Kalite tehlikeye girebilir. Bu tür diyagramlarla çalışmaya devam etmek imkansızdır ve bunlar yalnızca yeniden çizilebilir, düzenlenemez veya genişletilemez.


Bir diğer önemli avantaj ise ChatGPT'nin PlantUML'yi anlaması ve kod oluşturabilmesidir , bu da kod oluşturmanın avantajlarından yararlanmanıza ve bunları UML ile sorunsuz bir şekilde entegre etmenize olanak tanır. Aşağıda kişisel deneyimimden bazı örnekleri paylaşacağım.


PluntUML için herhangi bir kod düzenleyiciyi kullanabilirsiniz. Ben şahsen Visual Studio Code ve PlantUML eklentisini tercih ediyorum. Başka bir yol da https://plantuml.com veya diğerleri gibi çevrimiçi redaktörleri kullanmaktır.

ChatGPT, Benim İçin PluntUML Kodu Yaz

Örnek 1 – Boş Bir Sayfayla Başlamak İstemiyorum

Bir Taksi uygulaması için Kullanım Senaryosu diyagramı oluşturalım.


İlk önce bir istem kullanıyorum:

https://plantuml.com/ru/use-case-diagram adresindeki sözdizimini kullanın, bir taksi uygulaması için kullanım senaryosu şeması oluşturun


ChatGPT bir kod oluşturur:

 @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

Görsel görünüm:


Fikir güzel ama sadece dört vakanın olması yetersiz görünüyor. PlantUML'de benzeri olmadığı için ek durumlar eklemeyi ve bazı sözdizimi örnekleriyle geliştirmeyi talep ediyorum. Çabuk:

daha fazla durum eklemek için içerme, genişletme ve genelleme, sözdizimi gibi farklı bağlantı türlerini kullanabilirsiniz:

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

(ebeveyn) <|-- (çocuk)

(durum1, durum 2'yi genişletir) .> (durum2) : <<uzatılır>>


Sonra defalarca soruyorum

daha fazla vaka ekle


tekrar yapın ve hataları düzeltmek için bazı özel isteklerde bulunun.


İşte ChatGPT'nin nihai sonucu:

 @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 

Vakaları seviyorum ama aralarındaki bağlantıları sevmiyorum. Bu yüzden bu kodu biraz düzenliyorum.


İşte nihai sonuç:

 @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 


Elbette daha fazla senaryoyu dahil edebilirsiniz. Örneğin kullanıcı kaydı ve giriş hakkında hiçbir bilgi yok. Ayrıca ChatGPT'yi tasarımlarınızla ilgili bir diyagram oluşturma konusunda yönlendirebilirsiniz. Önemli olan kullanabileceğiniz bir temele sahip olmanızdır.

Örnek 2 – Bir Diyagramı Kontrol Etmem ve Geliştirmem Gerekiyor

Ters proxy'li resim depolama çözümü için sıra diyagramının basit bir sürümüne sahibim:

 @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 


Geliştirelim. Benim istemim:

Görüntüleri depolamak ve kullanmak için bir çözüm tasarlıyorum, bu şemayı kontrol edin ve gerekirse düzenleyin


ChatGPT önerisi:

 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


Oyuncu yerleştirme fikri hoşuma gitmedi, bu yüzden onu geri koydum; geri kalan her şey yolunda.


Sonra bir istemi birkaç kez tekrarladım:

bu şemayı kontrol edin ve gerekirse geliştirin


ve istemleri yazın:

ApplicationServer'ın veritabanından nasıl resim aldığını göster


kontrol odağı ekle


bazı köşe kasaları ekleyin


Sonlandırmak için kontrolün odağını ayarlıyorum ve isimlendirmede bazı değişiklikler yapıyorum. İşte nihai sonuç:

 @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 

Dezavantajları

Her şeyden önce her şeyi kontrol etmelisiniz çünkü "ChatGPT hata yapabilir." Bu, sizin yerinize geçecek bir araç değil, işinizi kolaylaştırmak ve optimize etmek için bir araçtır.


En yaygın hatalar PlantUML sözdizimi ile ilgilidir. Bazen bir konuşmanın ortasında oluyor ve bunu düzeltmem ve ChatGPT'yi tekrar doğru yola sokmam gerekiyor.


İkincisi, ChatGPT 3.5'in ücretsiz sürümünü kullanıyorum ve bunun inişleri ve çıkışları var. Bazen daha kötü çalışır ve aynı istem için rastgele yanıtlar verir.


Üçüncüsü, ChatGPT bazı diyagramları diğerlerinden daha iyi anlıyor. Örneğin, sıra diyagramlarında kullanım senaryosu diyagramlarından çok daha iyi sonuç verir.


Ancak bu sınırlamalara rağmen ChatGPT, verimliliğinizi artırıp zamandan tasarruf etmenizi sağlayacak değerli bir araç ve mükemmel bir yardımcı olmaya devam ediyor.

Çözüm

ChatGPT'yi işimde kalıcı olarak kullanıyorum. Yönetici, analist, geliştirici, testçi veya başka bir roldeyseniz UML'den yararlanabilirsiniz. Durum buysa, PlantUML kodunu yazıp oluşturmayı düşünün; bu size zaman kazandıracak ve verimliliğinizi artıracaktır.


Umarım deneyimim faydalı olur ve size ilham verir. Teşekkür ederim!