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, 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.
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:
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.
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.
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.
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
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.
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!