Chương 15: Mô hình hoá yêu cầu: Use Case, Activity, Sequence Diagram, BPMN cơ bản

Mục tiêu học

15.1 Vì sao cần mô hình hoá bằng sơ đồ?

Văn bản thuần (như tài liệu Chương 14) tốt để mô tả chi tiết, nhưng kém hiệu quả để thể hiện cấu trúc tổng thể, luồng đi, hoặc tương tác giữa nhiều bên. Não người xử lý thông tin trực quan nhanh hơn nhiều so với đọc văn bản dài — một sơ đồ tốt giúp stakeholder (kể cả người không rành kỹ thuật) nhìn thấy ngay lỗ hổng logic mà đọc văn bản khó phát hiện ra.

15.2 Use Case Diagram — tổng quan chức năng và actor

Dùng để trả lời: "hệ thống có những chức năng gì, ai (actor) tương tác với chức năng nào" — phù hợp cho tài liệu ở mức tổng quan (BRD, phần đầu SRS), trước khi đi vào chi tiết từng use case (Chương 22).

flowchart LR
    KhachHang((Khách hàng))
    NhanVien((Nhân viên chi nhánh))
    NguoiGiao((Người giao hàng))

    subgraph HeThong["Hệ thống FoodNow App"]
        UC1["Đặt món"]
        UC2["Thanh toán"]
        UC3["Theo dõi đơn hàng"]
        UC4["Xác nhận đơn hàng"]
        UC5["Cập nhật trạng thái giao hàng"]
    end

    KhachHang --> UC1
    KhachHang --> UC2
    KhachHang --> UC3
    NhanVien --> UC4
    NguoiGiao --> UC5

Lưu ý: sơ đồ trên dùng ký hiệu đơn giản hoá (flowchart) thay vì ký hiệu UML Use Case chuẩn (hình que biểu diễn actor, hình elip biểu diễn use case) vì công cụ Mermaid dùng trong sách chưa hỗ trợ đầy đủ ký hiệu UML Use Case. Khi làm việc thực tế, bạn có thể dùng draw.io/Lucidchart/Visio để vẽ đúng ký hiệu UML chuẩn nếu công ty yêu cầu — nhưng giá trị nằm ở nội dung (actor nào, chức năng nào), không nằm ở việc tuân thủ ký hiệu 100% đúng chuẩn UML.

Actor là bất kỳ ai/hệ thống nào tương tác với hệ thống từ bên ngoài — có thể là người (Khách hàng, Nhân viên) hoặc hệ thống khác (ví dụ: cổng thanh toán VNPay, hệ thống SMS gửi mã OTP).

15.3 Activity Diagram — luồng nghiệp vụ có rẽ nhánh

Dùng để mô tả các bước tuần tự, có điều kiện rẽ nhánh, có thể có nhánh song song — phù hợp mô tả một quy trình nghiệp vụ cụ thể, chi tiết hơn Use Case Diagram.

flowchart TD
    Start([Bắt đầu]) --> ChonMon["Khách chọn món,<br/>thêm vào giỏ hàng"]
    ChonMon --> XacNhanGio{"Xác nhận giỏ hàng?"}
    XacNhanGio -->|Sửa lại| ChonMon
    XacNhanGio -->|Đồng ý| NhapDiaChi["Nhập địa chỉ giao hàng"]
    NhapDiaChi --> ChonThanhToan{"Chọn phương thức<br/>thanh toán"}
    ChonThanhToan -->|Online| ThanhToanOnline["Xử lý qua cổng<br/>thanh toán"]
    ChonThanhToan -->|Tiền mặt| GhiNhanCOD["Ghi nhận<br/>thanh toán khi giao"]
    ThanhToanOnline --> KetQua{"Thanh toán<br/>thành công?"}
    KetQua -->|Không| ThongBaoLoi["Thông báo lỗi,<br/>quay lại chọn thanh toán"]
    ThongBaoLoi --> ChonThanhToan
    KetQua -->|Có| TaoDon["Tạo đơn hàng,<br/>gửi cho chi nhánh"]
    GhiNhanCOD --> TaoDon
    TaoDon --> End([Kết thúc])

Activity Diagram đặc biệt hữu ích để phát hiện các trường hợp ngoại lệ (exception) chưa được tính đến — ví dụ, khi vẽ sơ đồ trên, BA buộc phải trả lời câu hỏi "nếu thanh toán online thất bại thì sao?" — một câu hỏi dễ bị bỏ sót nếu chỉ mô tả bằng văn bản liệt kê các bước "thành công".

15.4 Sequence Diagram — tương tác giữa các thành phần theo thời gian

Dùng để mô tả thứ tự trao đổi thông điệp (message) giữa các đối tượng/hệ thống theo trục thời gian — hữu ích khi cần làm rõ tương tác giữa nhiều hệ thống (ví dụ: app FoodNow, cổng thanh toán, hệ thống quản lý chi nhánh).

sequenceDiagram
    participant App as App FoodNow
    participant CongTT as Cổng thanh toán
    participant HeThong as Hệ thống FoodNow (backend)
    participant ChiNhanh as Hệ thống chi nhánh

    App->>CongTT: Gửi yêu cầu thanh toán
    CongTT-->>App: Xác nhận thành công
    App->>HeThong: Tạo đơn hàng
    HeThong->>ChiNhanh: Gửi thông báo đơn hàng mới
    ChiNhanh-->>HeThong: Xác nhận đã nhận đơn
    HeThong-->>App: Cập nhật trạng thái "Đã xác nhận"

Sequence Diagram thường được BA dùng khi làm việc gần với đội kỹ thuật hơn (ví dụ khi viết SRS chi tiết — Chương 20), vì nó thể hiện rõ ai gọi ai, theo thứ tự nào — thông tin quan trọng để Dev thiết kế API/tích hợp hệ thống.

15.5 BPMN cơ bản — quy trình nghiệp vụ liên phòng ban

BPMN (Business Process Model and Notation) là chuẩn ký hiệu chuyên dùng để mô tả quy trình nghiệp vụ, đặc biệt khi quy trình đi qua nhiều phòng ban/vai trò khác nhau — dùng "làn bơi" (swimlane) để phân tách trách nhiệm của từng bên.

flowchart TD
    subgraph KhachHang["Làn: Khách hàng"]
        A1["Đặt đơn hàng"]
    end
    subgraph HeThong["Làn: Hệ thống"]
        A2["Kiểm tra tồn kho món ăn"]
        A3{"Còn món?"}
        A5["Gửi đơn cho chi nhánh"]
    end
    subgraph ChiNhanh["Làn: Chi nhánh"]
        A4["Thông báo hết món<br/>cho khách"]
        A6["Chuẩn bị món ăn"]
    end

    A1 --> A2 --> A3
    A3 -->|Hết| A4
    A3 -->|Còn| A5 --> A6

Khác biệt với Activity Diagram thông thường: BPMN nhấn mạnh ai làm gì qua các làn bơi, phù hợp khi cần trình bày cho nhiều phòng ban thấy rõ ranh giới trách nhiệm của mình trong một quy trình chung — rất hữu ích trong workshop có nhiều phòng ban tham gia (Chương 33).

15.6 Chọn đúng loại sơ đồ cho đúng mục đích

Câu hỏi cần trả lời Dùng sơ đồ nào
Hệ thống có những chức năng gì, ai dùng? Use Case Diagram
Luồng thao tác chi tiết, có rẽ nhánh điều kiện? Activity Diagram
Thứ tự trao đổi thông tin giữa các hệ thống/thành phần? Sequence Diagram
Quy trình đi qua nhiều phòng ban, cần rõ ai chịu trách nhiệm đoạn nào? BPMN (swimlane)

Bài tập

  1. Vẽ Use Case Diagram cho tính năng "Quản lý chương trình khách hàng thân thiết" của FoodNow, với ít nhất 2 actor và 3 use case.
  2. Vẽ Activity Diagram mô tả luồng "khách hàng huỷ đơn hàng" — bao gồm ít nhất một điều kiện rẽ nhánh (ví dụ: huỷ được hay không tuỳ trạng thái đơn hàng hiện tại).

Sai lầm thường gặp

Tóm tắt & tiếp theo

Bốn loại sơ đồ (Use Case, Activity, Sequence, BPMN) phục vụ các mục đích khác nhau — chọn đúng loại sơ đồ giúp giao tiếp hiệu quả hơn văn bản thuần, và giúp BA tự phát hiện lỗ hổng logic khi vẽ. Chương 16 sẽ học cách dùng Requirements Traceability Matrix (RTM) để theo dõi mọi yêu cầu đã thu thập và mô hình hoá được, đảm bảo không yêu cầu nào "biến mất" trong quá trình dự án.