TÓM TẮT

1. Giới thiệu chung về DFD

1.1. DFD là gì?

DFD (Data Flow Diagram) – còn gọi là sơ đồ luồng dữ liệu – là một công cụ mô hình hoá quan trọng trong phân tích và thiết kế hệ thống phần mềm. Mục tiêu chính của DFD là mô tả cách dữ liệu di chuyển trong hệ thống, từ nguồn dữ liệu (external entities) qua các quá trình xử lý (processes) đến kho lưu trữ (data stores) và ngược lại. Nhờ việc tách biệt rõ ràng giữa “dữ liệu” và “xử lý”, DFD giúp các nhà phân tích, nhà phát triển, và cả người dùng cuối cùng có thể hiểu được kiến trúc thông tin của hệ thống một cách trực quan.

1.2. Lợi ích khi sử dụng DFD

  • Giao tiếp hiệu quả: DFD là ngôn ngữ chung, giúp các bên liên quan (business analyst, developer, tester, manager) đồng thuận về cách hệ thống hoạt động.
  • Phát hiện lỗi thiết kế sớm: Khi vẽ DFD, các lỗi logic như thiếu dữ liệu, vòng lặp vô nghĩa, hoặc quá trình không được định nghĩa rõ ràng thường được phát hiện ngay trong giai đoạn phân tích.
  • Tài liệu hoá hệ thống: DFD là một phần quan trọng của tài liệu thiết kế, hỗ trợ bảo trì và nâng cấp hệ thống trong tương lai.
  • Tiện lợi cho việc tái cấu trúc: Khi muốn cải tiến, mở rộng hoặc tích hợp hệ thống mới, DFD cung cấp cái nhìn tổng quan giúp đưa ra quyết định nhanh chóng.

1.3. Các thành phần cơ bản của DFD

  1. Process (Quá trình) – biểu thị bằng hình chữ nhật tròn góc hoặc hình tròn, mô tả một hoạt động biến đổi dữ liệu.
  2. Data Flow (Luồng dữ liệu) – mũi tên chỉ hướng, cho biết dữ liệu di chuyển từ đâu đến đâu.
  3. Data Store (Kho dữ liệu) – biểu thị bằng hai đường song song hoặc hình chữ nhật mở, lưu trữ dữ liệu tạm thời hoặc lâu dài.
  4. External Entity (Thực thể bên ngoài) – biểu thị bằng hình chữ nhật, là nguồn hoặc đích của dữ liệu nằm ngoài hệ thống.

2. Các mức độ chi tiết của DFD

2.1. DFD mức 0 (Context Diagram)

Cách Vẽ Mô Hình Dfd
Cách Vẽ Mô Hình Dfd
  • Mục đích: Cung cấp cái nhìn tổng quan nhất về hệ thống, chỉ có một process duy nhất đại diện cho toàn bộ hệ thống và các external entities liên quan.
  • Khi nào dùng: Khi bắt đầu phân tích yêu cầu, muốn giới thiệu hệ thống cho người không chuyên hoặc các nhà quản lý cấp cao.

2.2. DFD mức 1 (Level 1 Diagram)

  • Mục đích: Phân rã process duy nhất ở mức 0 thành các subprocess chi tiết hơn (thường từ 3‑7 subprocess).
  • Khi nào dùng: Khi đã có sự đồng thuận về phạm vi hệ thống, cần đi sâu vào các chức năng chính.

2.3. DFD mức 2, 3, … (Level n Diagram)

  • Mục đích: Tiếp tục chi tiết hoá các subprocess ở mức trước, đến mức mỗi process chỉ thực hiện một tác vụ đơn giản, có thể chuyển thành pseudocode hoặc flowchart.
  • Khi nào dùng: Khi thiết kế chi tiết, chuẩn bị cho giai đoạn lập trình và kiểm thử.

3. Quy tắc và chuẩn mực khi vẽ DFD

  1. Mỗi luồng dữ liệu phải có tên duy nhất và mô tả ngắn gọn (ví dụ: “Yêu cầu đặt hàng”, “Kết quả kiểm tra”).
  2. Mỗi process phải có ít nhất một luồng dữ liệu vào và một luồng dữ liệu ra. Process không được chỉ có “đầu vào” hoặc “đầu ra” mà không có hoạt động biến đổi.
  3. Không cho phép dữ liệu đi thẳng từ external entity vào data store mà không qua process. Điều này bảo đảm mọi dữ liệu đều được xử lý.
  4. Không cho phép luồng dữ liệu cắt nhau (crossing) trong cùng một mức độ; nếu cần, có thể dùng “bridge” hoặc vẽ lại để tránh nhầm lẫn.
  5. Số lượng process trong một DFD không nên quá 7 ± 2 để đảm bảo tính dễ hiểu (theo nguyên tắc Miller).
  6. Tên các data store phải ở dạng danh từ số nhiều (ví dụ: “Đơn hàng”, “Khách hàng”) để phân biệt với process (động từ).
  7. Giữ tính nhất quán về ký hiệu: Nếu dùng hình tròn cho process, toàn bộ diagram phải dùng cùng kiểu; không nên trộn lẫn hình chữ nhật và hình tròn trong cùng một mức.

4. Các bước thực hiện vẽ DFD chi tiết

Bước 1: Thu thập và phân tích yêu cầu

  • Phỏng vấn người dùng, đọc tài liệu nghiệp vụ, trình bày các use case.
  • Liệt kê các thực thể bên ngoài (khách hàng, nhà cung cấp, hệ thống khác) và các loại dữ liệu họ trao đổi với hệ thống.

Bước 2: Xác định các luồng dữ liệu chính

Cách Vẽ Mô Hình Dfd
Cách Vẽ Mô Hình Dfd
  • Đánh dấu tên luồng dữ liệu (vd: “Đơn đặt hàng”, “Xác nhận thanh toán”).
  • Kiểm tra độ đầy đủ: Mỗi yêu cầu nghiệp vụ phải có ít nhất một luồng dữ liệu mô tả.

Bước 3: Xác định các process chính

  • Dựa trên các yêu cầu, tách ra các chức năng độc lập có thể thực hiện biến đổi dữ liệu (ví dụ: “Xử lý đơn hàng”, “Kiểm tra tồn kho”, “Gửi email xác nhận”).
  • Đặt tên process bằng động từ + danh từ (vd: “Xác nhận thanh toán”).

Bước 4: Xác định các data store

  • Ghi lại các bộ dữ liệu cần lưu trữ lâu dài (ví dụ: “Bảng khách hàng”, “Lịch sử giao dịch”).
  • Đảm bảo mỗi data store có ít nhất một luồng vào và một luồng ra thông qua process.

Bước 5: Vẽ sơ đồ mức 0 (Context Diagram)

  • Vẽ một process duy nhất đại diện cho toàn bộ hệ thống.
  • Kết nối các external entity với process qua các luồng dữ liệu.
  • Kiểm tra tính đầy đủ và đúng: Mọi yêu cầu nghiệp vụ đã được biểu diễn?

Bước 6: Phân rã thành DFD mức 1

  • Chia process mức 0 thành các subprocess chi tiết hơn (3‑7 process).
  • Đặt các data store thích hợp để hỗ trợ các subprocess.
  • Vẽ các luồng dữ liệu giữa các subprocess và giữa subprocess với external entity.

Bước 7: Kiểm tra và tối ưu hoá

  • Kiểm tra vòng lặp vô nghĩa: Không để một process nhận dữ liệu và trả lại cùng một luồng mà không thực hiện biến đổi.
  • Kiểm tra tính cân bằng: Tổng luồng vào một process phải bằng tổng luồng ra (theo mức độ logic).
  • Đánh giá độ phức tạp: Nếu một process có quá nhiều luồng (hơn 7), cân nhắc tách ra thành các process con.

Bước 8: Phân rã tiếp tục (Level 2, 3 …) nếu cần

  • Đối với các process phức tạp, tiếp tục phân rã cho đến khi mỗi process chỉ thực hiện một thao tác đơn giản.
  • Khi đạt mức chi tiết này, có thể chuyển sang flowchart hoặc pseudocode để lập trình.

Bước 9: Ghi chú và tài liệu hoá

Cách Vẽ Mô Hình Dfd
Cách Vẽ Mô Hình Dfd
  • Ghi chú: Thêm mô tả ngắn gọn ở mỗi process, data store, luồng dữ liệu để người đọc nhanh chóng hiểu.
  • Phiên bản: Đánh số phiên bản DFD để quản lý thay đổi.
  • Bảng tra cứu: Tạo bảng danh sách các ký hiệu, tên luồng, mô tả chi tiết.

5. Công cụ hỗ trợ vẽ DFD

Công cụ Ưu điểm Nhược điểm Giá
Microsoft Visio Thư viện ký hiệu đa dạng, tích hợp Office Đòi hỏi giấy phép, không miễn phí Từ $299/năm
Lucidchart Làm việc trực tuyến, cộng tác thời gian thực Giới hạn tính năng trong gói miễn phí Gói miễn phí, trả phí từ $7.95/tháng
draw.io (diagrams.net) Miễn phí, chạy trên trình duyệt, hỗ trợ xuất đa dạng Giao diện không chuyên sâu cho DFD Miễn phí
Visual Paradigm Hỗ trợ nhiều loại diagram, tính năng quản lý dự án Giao diện phức tạp cho người mới Gói miễn phí cho cá nhân, trả phí từ $12/tháng
Enterprise Architect Công cụ mạnh mẽ cho kiến trúc doanh nghiệp Cần thời gian học, chi phí cao Từ $229 (giấy phép vĩnh viễn)

Lưu ý: Khi chọn công cụ, cân nhắc độ phức tạp dự án, số lượng người tham gia và ngân sách. Đối với dự án nhỏ hoặc học tập, draw.io hoặc Lucidchart thường đủ.

6. Ví dụ thực tế: Vẽ DFD cho hệ thống bán hàng trực tuyến

6.1. Bước 1: Xác định các thực thể bên ngoài

  • Khách hàng (Customer)
  • Ngân hàng (Bank)
  • Nhà cung cấp (Supplier)
  • Hệ thống email (Email System)

6.2. Bước 2: Xác định các luồng dữ liệu

  • “Yêu cầu mua hàng”
  • “Thông tin thanh toán”
  • “Xác nhận thanh toán”
  • “Đơn hàng đã giao”
  • “Yêu cầu cấp kho”

6.3. Bước 3: Xác định các process chính (Level 1)

Cách Vẽ Mô Hình Dfd
Cách Vẽ Mô Hình Dfd
  1. Tiếp nhận đơn hàng
  2. Kiểm tra tồn kho
  3. Xử lý thanh toán
  4. Gửi email xác nhận
  5. Cập nhật kho và lịch sử
  6. Xử lý giao hàng

6.4. Bước 4: Xác định data store

  • DS_KhachHang (Customer Database)
  • DS_DonHang (Order Database)
  • DS_Kho (Inventory Database)
  • DS_ThanhToan (Payment Records)

6.5. DFD mức 0 (Context Diagram)

Khách hàng --> (Hệ thống bán hàng) --> Khách hàng
Ngân hàng --> (Hệ thống bán hàng) --> Ngân hàng
Nhà cung cấp --> (Hệ thống bán hàng) --> Nhà cung cấp

6.6. DFD mức 1 (Level 1)

Khách hàng --> (1. Tiếp nhận đơn hàng) --> (2. Kiểm tra tồn kho) --> (3. Xử lý thanh toán) --> (4. Gửi email xác nhận) --> Khách hàng
(2. Kiểm tra tồn kho) --> DS_Kho
(3. Xử lý thanh toán) --> DS_ThanhToan
(5. Cập nhật kho và lịch sử) --> DS_DonHang
Nhà cung cấp --> (6. Xử lý giao hàng) --> DS_Kho
Ngân hàng --> (3. Xử lý thanh toán) --> Ngân hàng

6.7. Kiểm tra

  • Mỗi process đều có ít nhất một luồng vào và một luồng ra.
  • Không có luồng dữ liệu trực tiếp từ external entity vào data store.
  • Số process ở mức 1 là 6, phù hợp với nguyên tắc 7 ± 2.

6.8. Phân rã tiếp (Level 2) – Ví dụ cho Process 3: Xử lý thanh toán

  • 3.1. Gửi yêu cầu thanh toán tới ngân hàng
  • 3.2. Nhận phản hồi thanh toán
  • 3.3. Ghi lại kết quả vào DS_ThanhToan

Mỗi sub‑process này sau đó có thể được mô tả bằng flowchart chi tiết.

7. Thực hành: Các lỗi thường gặp và cách khắc phục

Cách Vẽ Mô Hình Dfd
Cách Vẽ Mô Hình Dfd
Lỗi Mô tả Cách khắc phục
Luồng dữ liệu không có tên Dòng mũi tên không có nhãn hoặc nhãn không mô tả rõ ràng Đặt tên ngắn gọn, dùng danh từ hoặc cụm danh từ (vd: “Thông tin khách hàng”)
Process không có luồng ra Process chỉ nhận dữ liệu nhưng không trả về kết quả Thêm luồng dữ liệu ra, có thể là “Kết quả xử lý” hoặc “Thông báo lỗi”
Dữ liệu đi thẳng từ Entity tới Data Store Bỏ qua quá trình xử lý, gây mất tính logic Thêm một process trung gian để biến đổi dữ liệu
Quá nhiều luồng vào một process Gây khó hiểu, có thể là dấu hiệu của quá tải chức năng Tách process thành các process con, mỗi process chịu một phần công việc
Vòng lặp không cần thiết Data flow quay lại cùng process mà không thực hiện biến đổi Xem xét lại logic, có thể chuyển vòng lặp sang một process khác hoặc dùng decision node trong flowchart

8. Mối liên hệ giữa DFD và các mô hình khác

  • UML Activity Diagram: Cũng mô tả luồng công việc, nhưng DFD tập trung vào dữ liệu, còn Activity Diagram tập trung vào hành động và quyết định.
  • Entity‑Relationship Diagram (ERD): Mô tả cấu trúc dữ liệu (bảng, quan hệ), trong khi DFD mô tả cách dữ liệu di chuyển. Thông thường, ERD và DFD được dùng song song: ERD để thiết kế cơ sở dữ liệu, DFD để thiết kế luồng xử lý.
  • BPMN (Business Process Model and Notation): Thích hợp cho mô tả quy trình kinh doanh chi tiết, còn DFD thích hợp hơn cho việc phân tích hệ thống thông tin.

9. Lưu ý khi triển khai DFD trong dự án thực tế

  1. Tham gia đầy đủ các stakeholder: Đảm bảo khách hàng, nhà phân tích nghiệp vụ và developer cùng xem và đồng ý với DFD.
  2. Cập nhật thường xuyên: Khi yêu cầu thay đổi, DFD cũng cần được điều chỉnh để tránh sai lệch tài liệu.
  3. Đào tạo đội ngũ: Không phải ai cũng quen với ký hiệu DFD, nên tổ chức buổi workshop ngắn để mọi người nắm vững.
  4. Kiểm tra tính nhất quán: Sử dụng checklist (như bảng trong phần 4) để rà soát mọi diagram trước khi đưa vào tài liệu chính.
  5. Sử dụng version control: Lưu trữ file DFD (định dạng XML, .vsdx, .drawio) trong hệ thống quản lý mã nguồn (Git) để theo dõi thay đổi.

10. Tổng kết

Việc vẽ mô hình DFD không chỉ là một bước kỹ thuật mà còn là quá trình giao tiếp, hiểu biết và đồng thuận giữa các bên liên quan trong dự án. Khi tuân thủ các quy tắc, chuẩn mực và thực hiện quy trình chi tiết từ thu thập yêu cầu, xác định luồng dữ liệu, phân rã các process, đến việc kiểm tra và tài liệu hoá, bạn sẽ có được một DFD sạch sẽ, dễ hiểu và hỗ trợ tối đa cho các giai đoạn phát triển, kiểm thử và bảo trì hệ thống.

Hãy nhớ rằng sự đơn giản và rõ ràng luôn là mục tiêu hàng đầu. Một DFD quá phức tạp sẽ mất đi giá trị truyền đạt; một DFD quá đơn giản sẽ không phản ánh đầy đủ yêu cầu. Vì vậy, hãy cân bằng, sử dụng công cụ phù hợp và luôn kiểm tra lại với người dùng cuối để đảm bảo mô hình thực sự phản ánh cách hệ thống sẽ hoạt động trong thực tế.

Chúc bạn thành công trong việc thiết kế và triển khai các mô hình DFD cho dự án của mình!

Rate this post
Mục nhập này đã được đăng trong Blog. Đánh dấu trang permalink.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *