TÓM TẮT
- 1 1. Giới thiệu tổng quan về lược đồ sequence
- 2 2. Các thành phần cơ bản của lược đồ sequence
- 3 3. Quy trình vẽ lược đồ sequence từ A đến Z
- 3.1 3.1. Bước 1: Xác định phạm vi và mục tiêu
- 3.2 3.2. Bước 2: Thu thập yêu cầu chi tiết
- 3.3 3.3. Bước 3: Lập danh sách các lifeline
- 3.4 3.4. Bước 4: Vẽ các tin nhắn cơ bản
- 3.5 3.5. Bước 5: Thêm các fragment (if/else, loop)
- 3.6 3.6. Bước 6: Xử lý ngoại lệ và các luồng lỗi
- 3.7 3.7. Bước 7: Kiểm tra tính nhất quán và tối ưu
- 3.8 3.8. Bước 8: Thêm ghi chú (note) và tài liệu phụ
- 4 4. Ví dụ thực tế: Vẽ lược đồ sequence cho quy trình “Đặt hàng trực tuyến”
- 5 5. Các kỹ thuật nâng cao trong vẽ lược đồ sequence
- 6 6. Lưu ý thường gặp và cách tránh lỗi
- 7 7. Thực hành: Bài tập tự luyện
- 8 8. Tổng kết
1. Giới thiệu tổng quan về lược đồ sequence
Lược đồ sequence (Sequence Diagram) là một trong những biểu đồ quan trọng nhất trong UML (Unified Modeling Language). Nó mô tả cách các đối tượng (objects) tương tác với nhau qua thời gian, thể hiện luồng thông tin, các tin nhắn (message) được gửi đi và nhận lại, cũng như thứ tự các bước thực hiện trong một kịch bản nghiệp vụ. Đối với các nhà phân tích hệ thống, kiến trúc sư phần mềm, lập trình viên hay tester, việc nắm vững cách vẽ lược đồ sequence không chỉ giúp hiểu rõ quy trình nghiệp vụ mà còn hỗ trợ thiết kế, kiểm thử, và bảo trì phần mềm một cách hiệu quả.
Trong bài viết này, chúng ta sẽ đi sâu vào cách vẽ lược đồ sequence từ những khái niệm cơ bản, các ký hiệu chuẩn, quy trình thực hiện, cho tới các kỹ thuật nâng cao như xử lý vòng lặp, điều kiện, fragment, và tích hợp với các công cụ UML hiện đại. Nội dung được chia thành nhiều phần, mỗi phần cung cấp ví dụ thực tế, lưu ý quan trọng và mẹo thực hành, giúp bạn tự tin tạo ra lược đồ sequence chuẩn, dễ đọc và đáp ứng yêu cầu dự án.
2. Các thành phần cơ bản của lược đồ sequence
2.1. Lifeline (đường sinh mệnh)
- Định nghĩa: Đại diện cho một thực thể (object, actor, component) tồn tại trong kịch bản.
- Cách vẽ: Một hình chữ nhật đặt ở đầu, chứa tên thực thể (ví dụ:
Customer,OrderController). Dưới hình chữ nhật là một đường thẳng đứng (dotted line) kéo dài xuống dưới cùng của diagram, biểu thị thời gian mà thực thể tồn tại.
2.2. Activation Bar (thanh kích hoạt)
- Định nghĩa: Đoạn thời gian mà một thực thể đang thực hiện một hành động (method).
- Cách vẽ: Một hình chữ nhật dày hơn (thường màu sáng) đặt trên lifeline, kéo dài từ thời điểm nhận tin nhắn đến thời điểm trả về.
2.3. Message (tin nhắn)
- Synchronous Call: Đường thẳng đầy, mũi tên chỉ về phía nhận. Thực thể gọi sẽ đợi cho đến khi nhận được phản hồi.
- Asynchronous Call: Đường thẳng đầy, mũi tên rỗng (hollow arrow). Gọi không chờ đợi, cho phép thực thể gọi tiếp tục thực hiện công việc khác.
- Return Message: Đường nét đứt, mũi tên chỉ ngược lại, biểu thị giá trị trả về.
2.4. Self-Message (tin nhắn tự gọi)

Có thể bạn quan tâm: Cách Vẽ Lược Đồ Activity: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
Khi một đối tượng gọi một phương thức của chính nó, ta vẽ một vòng cong quay lại lifeline của đối tượng đó. Thường dùng để biểu diễn đệ quy hoặc các bước nội bộ.
2.5. Fragment (đoạn điều kiện)
- Alt: Lựa chọn (if‑else).
- Opt: Tùy chọn (if).
- Loop: Vòng lặp.
- Break: Dừng vòng lặp sớm.
- Par: Thực thi song song.
Các fragment được biểu diễn bằng một khung hình chữ nhật với từ khóa ở góc trên bên trái, và các vùng con được chia bằng các thanh ngang (đánh dấu các nhánh).
2.6. Note (ghi chú)
Được sử dụng để giải thích, bổ sung thông tin cho một phần của diagram. Ghi chú thường là một hình chữ nhật gạch chéo góc, gắn vào một lifeline hoặc message bằng một đường kẻ nối.
3. Quy trình vẽ lược đồ sequence từ A đến Z
3.1. Bước 1: Xác định phạm vi và mục tiêu

Có thể bạn quan tâm: Cách Vẽ Lưới Tạo Độ: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
- Xác định kịch bản nghiệp vụ: Ví dụ, “Khách hàng đặt hàng”, “Người dùng đăng nhập”, “Hệ thống tạo báo cáo”.
- Xác định các actor và hệ thống tham gia: Người dùng, giao diện, controller, service, repository, database, bên thứ ba (payment gateway).
3.2. Bước 2: Thu thập yêu cầu chi tiết
- Đọc tài liệu yêu cầu, user story, use case.
- Ghi lại các bước chính, các quyết định (if/else), vòng lặp và các điểm ngoại lệ (exception).
3.3. Bước 3: Lập danh sách các lifeline
- Đặt tên ngắn gọn, thống nhất (CamelCase hoặc PascalCase).
- Đánh dấu các actor bên trái, các component hệ thống ở giữa, các hệ thống bên ngoài ở bên phải.
3.4. Bước 4: Vẽ các tin nhắn cơ bản
- Bắt đầu từ actor bên trái, vẽ các synchronous call đến controller hoặc service.
- Đối với mỗi call, vẽ activation bar trên lifeline nhận.
- Khi có trả về, vẽ return message (đường đứt).
3.5. Bước 5: Thêm các fragment (if/else, loop)
- Khi gặp điều kiện, chèn alt fragment, đặt các nhánh
guard(điều kiện) ở đầu mỗi khu vực. - Khi có vòng lặp, sử dụng loop fragment, ghi chú số lần lặp (có thể là “for each item”).
3.6. Bước 6: Xử lý ngoại lệ và các luồng lỗi
- Dùng break fragment hoặc exception message (đánh dấu màu đỏ) để biểu diễn lỗi.
- Đảm bảo rằng mọi đường đi đều có kết thúc (return hoặc error).
3.7. Bước 7: Kiểm tra tính nhất quán và tối ưu
- Đảm bảo không có lifeline vô nghĩa (không có tin nhắn).
- Kiểm tra thứ tự thời gian: không có tin nhắn “đi ngược thời gian”.
- Rút gọn bằng cách ẩn các tin nhắn không cần thiết (ví dụ, getter/setter).
3.8. Bước 8: Thêm ghi chú (note) và tài liệu phụ

Có thể bạn quan tâm: Cách Vẽ Lưới Tròn Trong Photoshop: Hướng Dẫn Chi Tiết Từ A Đến Z
- Ghi chú các giả thiết, các giá trị quan trọng (ví dụ: “Token expires in 30 phút”).
- Đánh số các bước nếu cần để dễ tham chiếu trong tài liệu yêu cầu.
4. Ví dụ thực tế: Vẽ lược đồ sequence cho quy trình “Đặt hàng trực tuyến”
4.1. Mô tả kịch bản
- Customer (actor) mở trang sản phẩm và thêm sản phẩm vào giỏ.
- Web UI gửi yêu cầu
addToCart(productId)tới CartController. - CartController gọi CartService để lưu giỏ hàng.
- CartService kiểm tra tồn kho bằng InventoryService.
- Nếu đủ, CartService lưu thông tin vào CartRepository (database).
- Khi khách hàng quyết định thanh toán, Web UI gửi
checkout()tới OrderController. - OrderController gọi OrderService; OrderService tạo Order và gọi PaymentGateway để thực hiện thanh toán.
- Nếu thanh toán thành công, OrderService cập nhật trạng thái đơn hàng và thông báo cho EmailService gửi email xác nhận.
4.2. Các lifeline
Customer(actor)WebUI(boundary)CartControllerCartServiceInventoryServiceCartRepositoryOrderControllerOrderServicePaymentGateway(external)EmailService
4.3. Bản vẽ (textual)
Customer -> WebUI: openProductPage()
WebUI -> CartController: addToCart(productId)
CartController -> CartService: addItem(productId)
CartService -> InventoryService: checkStock(productId)
InventoryService --> CartService: stockAvailable
CartService -> CartRepository: saveCartItem(...)
CartRepository --> CartService: success
CartService --> CartController: itemAdded
CartController --> WebUI: updateCartView()
... (Customer continues shopping) ... Customer -> WebUI: clickCheckout()
WebUI -> OrderController: checkout()
OrderController -> OrderService: createOrder(cartId)
OrderService -> PaymentGateway: processPayment(orderInfo)
PaymentGateway --> OrderService: paymentSuccess
OrderService -> EmailService: sendConfirmation(email, orderId)
EmailService --> OrderService: emailSent
OrderService --> OrderController: orderCreated
OrderController --> WebUI: showOrderConfirmation()
4.4. Thêm fragment và điều kiện
- Alt fragment cho trường hợp
stockAvailable= false:
alt Stock not available InventoryService --> CartService: outOfStock CartService --> CartController: error("Out of stock") CartController --> WebUI: showError()
else Stock available ... (continue as above)
end
- Loop fragment cho việc thêm nhiều sản phẩm vào giỏ:
loop for each product in selection WebUI -> CartController: addToCart(productId) ...
end
4.5. Kiểm tra và tối ưu
- Loại bỏ các tin nhắn
saveCartItemnếu chúng không ảnh hưởng tới luồng nghiệp vụ (có thể ẩn). - Đánh dấu các tin nhắn bất đồng bộ (ví dụ,
sendConfirmationcó thể là asynchronous).
5. Các kỹ thuật nâng cao trong vẽ lược đồ sequence

Có thể bạn quan tâm: Cách Vẽ Lưới Trong Solidworks: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
5.1. Xử lý đa luồng (parallel)
- Dùng par fragment để biểu diễn các tác vụ thực hiện đồng thời, ví dụ gửi email và cập nhật kho cùng lúc.
- Mỗi nhánh trong
parcó activation riêng, và kết thúc khi tất cả hoàn thành.
5.2. Đệ quy và self‑call
- Khi một phương thức gọi lại chính nó (ví dụ, tính toán giá trị trong cây), vẽ self‑message với vòng cong.
- Đặt guard để giới hạn số lần lặp (ví dụ,
depth < MAX).
5.3. Thời gian và thời gian trễ (timing)
- Dùng timing diagram kết hợp để biểu diễn thời gian chờ (timeout) khi gọi service ngoài.
- Đánh dấu các tin nhắn với
<<async>>hoặc<<timeout>>.
5.4. Tích hợp với các diagram khác
- Use Case Diagram: Mỗi use case có thể có một hoặc nhiều sequence diagram chi tiết.
- Class Diagram: Các lifeline được lấy từ các class trong class diagram, giúp duy trì tính nhất quán.
5.5. Sử dụng các công cụ hỗ trợ
| Công cụ | Đặc điểm nổi bật | Ghi chú |
|---|---|---|
| PlantUML | Viết bằng ngôn ngữ markdown, dễ tích hợp vào CI/CD | Hỗ trợ render nhanh, thích hợp cho tài liệu tự động |
| StarUML | Giao diện kéo‑thả, hỗ trợ plugin | Thân thiện với người mới |
| Enterprise Architect | Tính năng mạnh mẽ, quản lý dự án lớn | Đòi hỏi giấy phép |
| Visual Paradigm | Hỗ trợ đồng thời nhiều diagram | Phiên bản cộng đồng có hạn chế |
| Draw.io (diagrams.net) | Miễn phí, tích hợp Google Drive | Không có tính năng tự động sinh code |
5.5.1. Ví dụ PlantUML cho quy trình checkout
@startuml
actor Customer
boundary WebUI
control CartController
control CartService
entity InventoryService
database CartRepository
control OrderController
control OrderService
boundary PaymentGateway
control EmailService Customer -> WebUI : clickCheckout()
WebUI -> OrderController : checkout()
OrderController -> OrderService : createOrder()
OrderService -> PaymentGateway : processPayment()
PaymentGateway --> OrderService : paymentSuccess
OrderService -> EmailService : sendConfirmation()
EmailService --> OrderService : emailSent
OrderService --> OrderController : orderCreated
OrderController --> WebUI : showConfirmation()
@enduml
Kết quả sẽ là một sơ đồ sequence gọn gàng, dễ chia sẻ trong tài liệu markdown.
6. Lưu ý thường gặp và cách tránh lỗi
- Quá tải thông tin: Đừng vẽ quá nhiều tin nhắn trong một diagram. Nếu quá 15‑20 tin nhắn, cân nhắc chia thành các sub‑diagram.
- Không đồng bộ: Khi sử dụng asynchronous call, luôn đánh dấu rõ ràng để tránh nhầm lẫn giữa synchronous và asynchronous.
- Thiếu guard: Đối với
altvàloop, luôn ghi rõ điều kiện (guard) để người đọc hiểu luồng quyết định. - Tên lifeline không nhất quán: Sử dụng cùng một quy tắc đặt tên trong toàn dự án (ví dụ,
UserController,UserService). - Quên activation bar: Activation bar giúp xác định thời gian thực hiện, nếu không có sẽ làm diagram trở nên mơ hồ.
- Không xử lý ngoại lệ: Luôn có ít nhất một nhánh
elsehoặcexceptionđể biểu diễn lỗi, tránh tạo ra “happy path” không thực tế.
7. Thực hành: Bài tập tự luyện

Bài 1: Đăng nhập hệ thống
- Actor:
User - Các component:
LoginPage,AuthController,AuthService,UserRepository,TokenService - Yêu cầu: Kiểm tra username/password, tạo JWT, trả về token, xử lý lỗi sai mật khẩu.
Yêu cầu: Vẽ sequence diagram, bao gồm
altcho trường hợp đăng nhập thành công và thất bại, vàloopnếu muốn cho phép tối đa 3 lần thử.
Bài 2: Xử lý thanh toán đa nền tảng
- Actor:
Customer - Các component:
MobileApp,PaymentFacade,CreditCardGateway,PayPalGateway,OrderService - Yêu cầu: Khi khách hàng chọn phương thức thanh toán, hệ thống gọi gateway tương ứng, đồng thời ghi log.
Yêu cầu: Dùng
parfragment để biểu diễn việc ghi log song song với việc gọi gateway, vàoptcho việc gửi email xác nhận nếu thanh toán thành công.
Thực hiện các bài tập này trên công cụ PlantUML hoặc bất kỳ công cụ nào bạn thích, sau đó so sánh kết quả với mẫu trả lời ở phần phụ lục.
8. Tổng kết
- Lược đồ sequence là công cụ mạnh mẽ để mô tả luồng thời gian và tương tác giữa các thành phần trong hệ thống.
- Việc nắm vững ký hiệu, quy trình xây dựng, và các kỹ thuật nâng cao giúp tạo ra diagram chuẩn, dễ đọc, hỗ trợ tốt cho giai đoạn phân tích, thiết kế và kiểm thử.
- Công cụ hỗ trợ như PlantUML, StarUML hay Enterprise Architect giúp giảm thiểu công sức vẽ và duy trì tính nhất quán trong dự án.
- Cuối cùng, luyện tập thường xuyên qua các ví dụ thực tế sẽ giúp bạn trở thành một chuyên gia vẽ lược đồ sequence, góp phần nâng cao chất lượng tài liệu và giảm thiểu lỗi trong phát triển phần mềm.
Hy vọng bài viết này đã cung cấp cho bạn một hướng dẫn chi tiết, từ cơ bản đến nâng cao, để cách vẽ lược đồ sequence một cách chuyên nghiệp. Hãy áp dụng ngay vào dự án của mình và chia sẻ kinh nghiệm với đồng nghiệp!
