paint-brush
ChatGPT: Người bạn đồng hành tiết kiệm thời gian của bạn để tạo sơ đồ UMLtừ tác giả@nastyakostina
3,971 lượt đọc
3,971 lượt đọc

ChatGPT: Người bạn đồng hành tiết kiệm thời gian của bạn để tạo sơ đồ UML

từ tác giả Anastasiia Kostina9m2024/02/07
Read on Terminal Reader

dài quá đọc không nổi

Dễ dàng tạo và nâng cao sơ đồ UML bằng ChatGPT, sử dụng tính năng tạo mã PlantUML. Tiết kiệm thời gian, hợp lý hóa quy trình và tối ưu hóa công việc của bạn, giúp việc tạo sơ đồ trở nên hiệu quả và thú vị hơn.
featured image - ChatGPT: Người bạn đồng hành tiết kiệm thời gian của bạn để tạo sơ đồ UML
Anastasiia Kostina HackerNoon profile picture

Cuộc gặp gỡ đầu tiên của tôi với ChatGPT được thúc đẩy bởi sự tò mò tuyệt đối khi nó được phát hành. Tôi đặc biệt bị thu hút bởi các bài viết thảo luận về việc tạo mã, mặc dù cá nhân tôi không viết mã. Và ban đầu tôi tin rằng tính năng đó sẽ không phù hợp với tôi.


Tuy nhiên, đã có lúc tôi thấy mình đang làm việc trên một sơ đồ UML mà tôi không mấy hào hứng để tạo ra.


Để đơn giản hóa hoặc đẩy nhanh quá trình, tôi đã sử dụng nhiều phương pháp khác nhau. Tôi thường tạo sơ đồ UML bằng cách sử dụng mã PlantUML... ở đây, tôi nhận ra rằng: đây là một dạng mã và mã có thể được tạo ra.


Do đó, ChatGPT đã phát triển thành một công cụ có giá trị cho việc tạo sơ đồ của tôi và giờ tôi rất vui được chia sẻ kinh nghiệm của mình với bạn.

Đôi lời về UML

UML là viết tắt của Ngôn ngữ mô hình hóa thống nhất và nó đóng vai trò là ngôn ngữ để chỉ định, trực quan hóa, xây dựng và ghi lại các tạo phẩm của hệ thống phần mềm. UML rút ra từ các khái niệm trong ngôn ngữ lập trình hướng đối tượng; có kiến thức phát triển có lợi cho việc lập mô hình UML nhưng không bắt buộc.


Nó được thiết kế chủ yếu để mô tả các khía cạnh của thiết kế phần mềm, nhưng nó cũng cung cấp một bộ sơ đồ hành vi để mô hình hóa các yêu cầu của người dùng hoặc doanh nghiệp.


Trong vai trò của mình, tôi tham gia vào các quy trình kinh doanh CNTT, đặc biệt tập trung vào việc lập mô hình chúng để phân tích, tối ưu hóa và chuyển chúng sang định dạng rõ ràng để các nhà phát triển triển khai.

Khi nói đến mô hình hóa, tôi sử dụng nhiều cách tiếp cận và công cụ khác nhau, một trong số đó là UML.


Đây là điểm hay của nó - bạn không cần phải là kỹ sư phần mềm để sử dụng UML. Tôi sử dụng nó để điều hướng qua các quy trình kinh doanh được triển khai bằng phần mềm, nhưng nó còn vượt xa hơn thế - nó cực kỳ linh hoạt và có thể được áp dụng bởi nhiều vai trò khác nhau ở các giai đoạn phát triển khác nhau. Nói chung, hãy thử xem; bạn có thể thấy mình yêu thích nó.

Vẽ vs Mã

Giống như bất kỳ sơ đồ nào, bạn có thể dễ dàng vẽ nó — nó đơn giản, thuận tiện, nhanh chóng và cung cấp cái nhìn rõ ràng về quy trình cũng như kết quả. Nhiều công cụ đồ họa có sẵn cho mục đích này và tôi sử dụng chúng. Tuy nhiên, tôi thường chọn cách tiếp cận "mã" nhờ PlantUML.


PlantUML , một ngôn ngữ và công cụ mô hình hóa nguồn mở, cho phép bạn tạo sơ đồ dựa trên ngôn ngữ văn bản thuần túy. Nói một cách đơn giản hơn, bạn có thể viết mã trong PlantUML để tạo sơ đồ.


Tôi thích phác thảo sơ đồ trong 'chế độ sáng tạo' của mình, nhưng thường thì tôi chuyển chúng thành mã sau đó hoặc viết mã trực tiếp. Có hai lý do chính cho việc này:

  1. Bạn có thể chèn, di chuyển và xóa các khối trong sơ đồ của mình hiệu quả hơn nhiều

    Việc thay đổi thứ tự các khối trong sơ đồ vẽ thường dẫn đến việc sửa đổi trên toàn bộ sơ đồ, ảnh hưởng đến các khối và liên kết khác. Khi làm việc với mã, bạn không cần quan tâm đến khía cạnh trực quan; bạn đang xử lý một văn bản và PlantUML sẽ đảm nhiệm việc trình bày đồ họa cho bạn.


  2. Bạn có thể làm việc và lưu trữ các tệp văn bản đơn giản thay vì xử lý ảnh

    Điều này đặc biệt có lợi khi gặp hình ảnh sơ đồ trong tài liệu. Chất lượng có thể bị tổn hại. Không thể tiếp tục làm việc với những sơ đồ như vậy mà chúng chỉ có thể được vẽ lại chứ không được chỉnh sửa hay mở rộng.


Một ưu điểm đáng kể khác là ChatGPT hiểu PlantUML và có thể tạo mã , cho phép bạn tận hưởng những lợi ích của việc tạo mã và tích hợp liền mạch chúng với UML. Tôi sẽ chia sẻ một số ví dụ từ kinh nghiệm cá nhân của tôi dưới đây.


Bạn có thể sử dụng bất kỳ trình soạn thảo mã nào cho PluntUML. Cá nhân tôi thích phần mở rộng Visual Studio Code và PlantUML hơn trong đó. Một cách khác là sử dụng các công cụ biên tập trực tuyến như https://plantuml.com hoặc các công cụ khác.

ChatGPT, Viết mã PluntUML cho tôi

Ví dụ 1 – Tôi không muốn bắt đầu với một bảng trống

Hãy tạo sơ đồ Use Case cho ứng dụng Taxi.


Đầu tiên, tôi sử dụng lời nhắc:

sử dụng cú pháp từ https://plantuml.com/ru/use-case-diagram, tạo sơ đồ ca sử dụng cho ứng dụng taxi


ChatGPT tạo mã:

 @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

Chế độ xem trực quan:


Ý tưởng thì ổn, nhưng chỉ có bốn trường hợp thì có vẻ không đủ. Tôi yêu cầu thêm các trường hợp bổ sung và nâng cao nó bằng một số ví dụ về cú pháp, vì không có trường hợp nào tương tự trong PlantUML. Lời nhắc:

thêm nhiều trường hợp hơn, bạn có thể sử dụng các loại liên kết khác nhau như bao gồm, mở rộng và khái quát hóa, cú pháp:

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

(cha mẹ) <|-- (con)

(case1 mở rộng trường hợp 2) .> (case2) : <<extends>>


Sau đó tôi yêu cầu nhiều lần để

thêm nhiều trường hợp


lại và đưa ra một số yêu cầu cụ thể để sửa lỗi.


Đây là kết quả cuối cùng từ 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 

Tôi thích các vụ án, nhưng không thích mối liên hệ giữa chúng. Vì vậy, tôi chỉnh sửa mã đó một chút.


Đây là kết quả cuối cùng:

 @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 


Chắc chắn, bạn có thể kết hợp nhiều kịch bản hơn. Ví dụ: không có thông tin về đăng ký và đăng nhập của người dùng. Hơn nữa, bạn có thể hướng dẫn ChatGPT tạo sơ đồ liên quan đến thiết kế của mình. Điều quan trọng là bạn có một nền tảng mà bạn có thể sử dụng.

Ví dụ 2 - Tôi cần kiểm tra và nâng cao sơ đồ

Tôi có một phiên bản đơn giản của sơ đồ trình tự cho giải pháp lưu trữ ảnh bằng proxy ngược:

 @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 


Hãy cải thiện nó. Lời nhắc của tôi:

Tôi đang thiết kế một giải pháp lưu trữ và sử dụng hình ảnh, hãy kiểm tra sơ đồ này và chỉnh sửa nếu cần thiết


Đề xuất 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


Tôi không thích quan điểm về vị trí diễn viên nên tôi đặt nó lại; mọi thứ khác đều ổn.


Sau đó tôi lặp lại nhiều lần lời nhắc:

kiểm tra sơ đồ này và cải thiện nó nếu cần


và viết lời nhắc:

chỉ ra cách Máy chủ ứng dụng lấy ảnh từ cơ sở dữ liệu


thêm trọng tâm kiểm soát


thêm một số trường hợp góc


Để hoàn thiện nó, tôi điều chỉnh trọng tâm điều khiển và thực hiện một số thay đổi trong cách đặt tên. Đây là kết quả cuối cùng:

 @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 

Hạn chế

Trước hết, bạn phải kiểm tra mọi thứ vì "ChatGPT có thể mắc lỗi". Nó không nhằm mục đích thay thế bạn mà là một công cụ giúp hợp lý hóa và tối ưu hóa công việc của bạn.


Các lỗi phổ biến nhất liên quan đến cú pháp PlantUML. Đôi khi, sự cố này xảy ra giữa cuộc trò chuyện và tôi phải khắc phục và đưa ChatGPT trở lại đúng hướng.


Thứ hai, tôi sử dụng phiên bản ChatGPT 3.5 miễn phí và nó có những thăng trầm. Đôi khi, nó hoạt động tệ hơn và đưa ra một số câu trả lời ngẫu nhiên cho cùng một lời nhắc.


Thứ ba, ChatGPT hiểu một số sơ đồ tốt hơn những sơ đồ khác. Ví dụ, nó hoạt động tốt hơn nhiều với sơ đồ tuần tự so với sơ đồ ca sử dụng.


Tuy nhiên, bất chấp những hạn chế này, ChatGPT vẫn là một công cụ có giá trị và một trợ lý xuất sắc có khả năng nâng cao hiệu quả và tiết kiệm thời gian của bạn.

Phần kết luận

Tôi sử dụng ChatGPT thường xuyên trong công việc của mình. Nếu bạn là người quản lý, nhà phân tích, nhà phát triển, người thử nghiệm hoặc ở bất kỳ vai trò nào khác, bạn có thể sử dụng UML. Nếu đúng như vậy, hãy cân nhắc việc viết và tạo mã PlantUML - nó sẽ giúp bạn tiết kiệm thời gian và nâng cao hiệu quả.


Tôi hy vọng kinh nghiệm của tôi sẽ hữu ích và truyền cảm hứng cho bạn. Cảm ơn!