Data Flow Diagram(DFD)
Sơ đồ theo dõi đường đi của dữ liệu trong hệ thống: vào từ đâu, được xử lý ở đâu, lưu vào kho nào. Phân cấp theo tầng, bắt đầu từ context diagram rồi tách dần.
Định nghĩa
Sơ đồ này ra đời từ thập niên 1970 và nhiều bạn trẻ coi nó là đồ cổ. Cũng có lý. Nhưng khi phải trả lời "dữ liệu khách hàng vào hệ thống từ đâu, bị biến đổi ở chỗ nào, cuối cùng nằm trong kho nào", tới giờ vẫn chưa có gì gọn hơn.
DFD bám theo đường đi của dữ liệu, không bám theo thứ tự thao tác. Đó là khác biệt gốc so với flowchart.
Bốn ký hiệu, hai trường phái
Bốn thôi, và ba cái đầu học trong mười phút.
External entity là nguồn hoặc đích của dữ liệu, nằm ngoài hệ thống, vẽ hình vuông. Process là chỗ dữ liệu bị biến đổi — hình tròn nếu theo trường phái Yourdon, chữ nhật bo góc nếu theo Gane–Sarson. Data store là nơi dữ liệu nằm lại: hai vạch song song, hoặc hình chữ nhật hở một đầu.
Cái thứ tư, data flow, chỉ là một mũi tên. Nhưng nhãn của nó bắt buộc phải là danh từ chỉ dữ liệu. "Hồ sơ đã duyệt", chứ đừng ghi "gửi hồ sơ". Đặt nhãn bằng động từ là dấu hiệu bạn đang vẽ flowchart mà tưởng mình vẽ DFD.
Hai trường phái ký hiệu đều dùng được. Chọn một và giữ nguyên cả tài liệu, đừng trộn.
Phân tầng
Level 0 chính là context diagram: cả hệ thống gói trong một process, xung quanh là các bên ngoài. Level 1 tách thành ba tới bảy process chính. Level 2 tách tiếp từng process nếu còn phức tạp. Xuống sâu hơn hiếm khi đáng công.
Quy tắc quan trọng nhất là balancing: mọi luồng vào và ra ở sơ đồ con phải khớp với luồng vào ra của process cha. Sơ đồ không balance là dấu hiệu bạn bỏ sót hoặc bịa thêm dữ liệu ở đâu đó.
Hai lỗi nữa còn dễ soi hơn, nhìn mắt thường một phút là ra. Process chỉ có mũi tên vào mà không có mũi tên ra, dân trong nghề gọi là black hole: dữ liệu chui vào rồi biến mất. Ngược lại là miracle, process chỉ có mũi tên ra, dữ liệu tự sinh ra từ hư không. Gặp cái nào cũng có nghĩa là bạn chưa hỏi hết.
Khác flowchart chỗ nào
| DFD | Flowchart | |
|---|---|---|
| Bám theo | Dữ liệu đi đâu | Thứ tự thao tác |
| Có trục thời gian | Không | Có |
| Rẽ nhánh if/else | Không vẽ | Vẽ bằng hình thoi |
| Kho dữ liệu | Có ký hiệu riêng | Không quan tâm |
| Câu hỏi trả lời | Dữ liệu này ở đâu ra, ai giữ | Làm cái gì trước, cái gì sau |
Ví dụ thực tế
Rà soát hệ thống thu hộ tiền điện của một ví điện tử. DFD level 1 có năm process (Nhận yêu cầu, Tra cứu mã khách hàng, Gọi nhà cung cấp, Ghi nhận thanh toán, Đối soát cuối ngày) và ba data store (giao dịch, cache mã khách hàng, file đối soát).
Vẽ tới process cuối thì thấy vấn đề: file đối soát nhà cung cấp gửi lúc 23 giờ, còn job đối soát của hệ thống chạy 22 giờ 30. Nghĩa là mỗi ngày đang đối soát bằng file của hôm trước. Cả team sống chung với chuyện đó bốn tháng mà không thấy, vì trước giờ chưa ai vẽ luồng dữ liệu ra giấy.
Còn dùng được vào việc gì
- Mô tả luồng dữ liệu giữa nhiều hệ thống trong doanh nghiệp, nhất là khi làm tích hợp hoặc thay thế hệ thống cũ.
- Chuẩn bị data migration: biết dữ liệu gốc nằm ở đâu, ai còn ghi vào đó.
- Rà soát dữ liệu cá nhân: ai chạm vào, lưu ở kho nào, giữ bao lâu. Phần này ngày càng hay bị hỏi khi hệ thống có dữ liệu người dùng.
Còn nếu mục tiêu là giải thích nghiệp vụ cho người dùng cuối, bỏ DFD đi, vẽ swimlane hoặc BPMN cho họ dễ đọc. DFD là sơ đồ để phân tích, không phải để thuyết trình.
