BAHUB.VN
Glossary

Sequence Diagram

Process ModelingSơ đồ tuần tự

Sơ đồ UML mô tả thứ tự trao đổi thông điệp giữa các thành phần theo trục thời gian dọc. Là công cụ số một khi dự án có tích hợp nhiều hệ thống và cần chốt ai gọi ai trước.

Định nghĩa

Khi hệ thống chỉ có một cục thì không cần tới nó. Đến lúc có app, backend, cổng thanh toán và một service gửi thông báo, câu hỏi "ai gọi ai trước, chờ bao lâu, lỗi thì rơi về đâu" bắt đầu tốn tiền thật. Sequence diagram trả lời đúng câu đó.

Đọc từ trên xuống là trục thời gian, từ trái sang phải là các thành phần tham gia.

Đọc một sequence diagram

Lifeline là đường đứt nét chạy dọc dưới mỗi thành phần — actor, hệ thống, service, cái nào tham gia thì có một đường. Trên đường đó thỉnh thoảng phình ra một hộp mảnh: activation bar, nghĩa là lúc ấy thành phần đang bận xử lý.

Mũi tên thì phải nhìn kỹ đầu và nét. Nét liền, đầu đặc: gọi đồng bộ, bên gọi đứng chờ. Nét đứt: giá trị trả về. Nét liền nhưng đầu hở: bắn đi rồi đi tiếp, không chờ ai cả.

Còn alt, opt, loop, par là các khung combined fragment, lần lượt cho rẽ nhánh, phần tuỳ chọn, vòng lặp và việc chạy song song.

Chỉ cần phân biệt được đồng bộ với bất đồng bộ là đã đọc được phần lớn sơ đồ trong tài liệu kỹ thuật.

Ví dụ thực tế

Luồng thanh toán QR ở một ví trả sau — bên thứ ba cấp hạn mức, nên mỗi giao dịch phải hỏi thêm một hệ thống nữa trước khi cho qua. Sơ đồ có năm lifeline: App khách, Backend merchant, Cổng ví, Hệ thống cấp hạn mức, Service thông báo. Ba thứ chỉ lộ ra khi vẽ:

  1. Backend gọi cổng ví đồng bộ với timeout 30 giây. Quá hạn thì trạng thái là "chờ đối soát", không phải "thất bại". Hai cái đó khác nhau về tiền.
  2. Callback từ cổng ví có thể về trước cả response của lời gọi ban đầu, nên phải xử lý idempotent theo mã giao dịch.
  3. Thông báo đẩy là bất đồng bộ. Gửi lỗi cũng không được rollback giao dịch.

Ba dòng đó viết bằng văn xuôi thì ai đọc cũng gật, tới lúc code là mỗi người hiểu một kiểu.

BA có cần tự vẽ không

Tuỳ dự án. Nếu có tích hợp và bạn là người ngồi họp với đội bên kia thì nên tự vẽ bản nháp, dù xấu, rồi để tech lead sửa lại. Giá trị của bản nháp nằm ở chỗ nó ép cả phòng trả lời câu hỏi thứ tự, timeout và xử lý lỗi ngay tại buổi họp. Còn sequence diagram mô tả nội bộ code, class nào gọi hàm nào, thì để dev, BA không cần đụng vào.

Mẹo khi đi làm

Vẽ luôn nhánh lỗi. Phần lớn tranh cãi sau này nằm ở nhánh lỗi, mà nhánh lỗi thì thường không ai buồn vẽ. Cứ thêm một khung alt với nhánh "hệ thống bên kia không phản hồi" là đủ để lòi ra vài yêu cầu mới.

Ghi số cụ thể lên sơ đồ: timeout bao nhiêu giây, retry mấy lần, cách nhau bao lâu. Sơ đồ có số thì QC test được, sơ đồ không có số thì chỉ để nhìn cho đẹp.

Muốn vẽ nhanh, gõ bằng Mermaid hoặc PlantUML thay vì kéo thả. Sửa một bước ở giữa luồng chỉ mất một dòng, còn kéo thả thì phải dời cả sơ đồ.