Dummy Data và Mock Data khác nhau thế nào? Góc nhìn thực tế từ quy trình làm việc của Developer
Dummy Data vs Mock Data: Đừng lẫn lộn nếu không muốn "trả giá" ở giai đoạn Integration Test
Trong quá trình phát triển phần mềm, cụm từ "dùng data giả để test đi" xuất hiện gần như hằng ngày. Tuy nhiên, rất nhiều lập trình viên — đặc biệt là các bạn Junior hoặc Mới chuyển ngành — thường đánh đồng hai khái niệm: Dummy Data và Mock Data.
Việc dùng nhầm lẫn hai loại dữ liệu này không chỉ đơn thuần là sai về mặt thuật ngữ, mà còn dẫn đến những hệ lụy thực tế như: UI bị vỡ khi ghép API thật, logic xử lý lỗi không được test kỹ, hoặc Frontend và Backend tốn hàng giờ đồng hồ chỉ để tranh cãi về cấu trúc dữ liệu khi "ráp hàng".
Hãy cùng bóc tách sự khác biệt bản chất giữa chúng và cách áp dụng chuẩn xác trong dự án.
1. Bản chất vấn đề: Sự khác biệt cốt lõi
Để không bị nhầm lẫn, hãy ghi nhớ mục đích tồn tại của từng loại:
- Dummy Data (Dữ liệu lấp chỗ trống): Chỉ quan tâm đến sự hiện diện của dữ liệu. Nó được tạo ra đơn giản để có cái gì đó hiển thị lên màn hình.
- Mock Data (Dữ liệu mô phỏng behavior): Quan tâm đến cấu trúc và logic của dữ liệu. Nó mô phỏng lại đúng những gì hệ thống thật sẽ trả về.
[Dummy Data] ---> Dùng cho UI/UX ---> "Cần có dữ liệu để xem giao diện có đẹp không"
[Mock Data] ---> Dùng cho Logic ---> "Cần dữ liệu chuẩn schema để test flow và edge cases"
2. So sánh chi tiết
| Tiêu chí | Dummy Data | Mock Data |
|---|---|---|
| Mục đích chính | Làm placeholder cho UI, lấp đầy khoảng trống layout. | Mô phỏng chính xác hành vi, cấu trúc của API/Database. |
| Tính hợp lệ | Thường là ngẫu nhiên, vô nghĩa (chuỗi asdfgh, Lorem Ipsum). |
Tuân theo đúng Data Schema, kiểu dữ liệu và ràng buộc nghiệp vụ. |
| Khả năng test logic | Không dùng để test logic hay edge cases. | Hỗ trợ test đa dạng case: thành công (200), lỗi (404, 500), danh sách rỗng, phân trang. |
| Giai đoạn sử dụng | Prototype, Wireframe, dựng UI ban đầu. | Unit Test, Integration Test, Phát triển FE độc lập với BE. |
3. Câu chuyện thực tế trong Production
Hãy tưởng tượng bạn đang xây dựng tính năng Giỏ hàng & Thanh toán cho một ứng dụng e-commerce:
Khi bạn chỉ dùng Dummy Data
Bạn dùng một mảng đơn giản:
const cartItems = ["Sản phẩm A", "Sản phẩm B"];
Bạn render danh sách này ra màn hình, thấy UI hiển thị đẹp đẽ và nghĩ rằng tính năng đã xong.
Vấn đề xảy ra khi ráp API thật: API trả về một mảng chứa đối tượng phức tạp với ID, giá tiền, số lượng còn lại, trạng thái giảm giá và hình ảnh. Giao diện vỡ hoàn toàn, các hàm tính tổng tiền bị crash do vắng mặt các thuộc tính cần thiết, và bạn phải mất nửa ngày để sửa lại toàn bộ Component.
Khi bạn thiết kế Mock Data chuẩn
Trước khi Backend viết xong API, bạn cùng Backend thống nhất một API Contract và tạo Mock Data:
{
"code": 200,
"message": "Success",
"data": {
"items": [
{
"id": "PROD-102",
"name": "Tai nghe Bluetooth",
"price": 500000,
"quantity": 2,
"is_discounted": true,
"discount_price": 450000
}
],
"total_amount": 900000
}
}
Nhờ có Mock Data này, bạn viết sẵn toàn bộ logic tính toán, xử lý khi mảng items rỗng, hoặc khi is_discounted = false. Đến ngày ghép API thật, công việc của bạn chỉ đơn giản là đổi URL từ Server Mock sang Server thật.
4. Bảng giải thích thuật ngữ chuyên ngành
Dưới đây là bảng tổng hợp các thuật ngữ được sử dụng trong bài viết giúp bạn dễ dàng tra cứu:
| Thuật ngữ | Ý nghĩa đơn giản |
|---|---|
| API Contract | Thỏa thuận giữa Frontend và Backend về cấu trúc dữ liệu (tên trường, kiểu dữ liệu) mà API sẽ nhận và trả về. |
| Placeholder | Giá trị hoặc thành phần tạm thời được đặt vào vị trí trước khi dữ liệu thật xuất hiện. |
| Edge Cases | Các tình huống đặc biệt hoặc ngoại lệ ít khi xảy ra nhưng vẫn có thể làm hỏng ứng dụng (ví dụ: mảng rỗng, chuỗi quá dài, mất kết nối mạng). |
| Unit Test | Việc viết code để tự động kiểm tra tính đúng đắn của từng hàm/module nhỏ độc lập trong dự án. |
| Integration Test | Việc kiểm tra sự tương tác và tích hợp giữa nhiều thành phần/module với nhau (ví dụ: giữa Frontend và API). |
| Schema | Cấu trúc định dạng dữ liệu được quy định sẵn (gồm tên thuộc tính, kiểu dữ liệu như string, number, boolean). |
5. Practical Takeaways: Khi nào nên dùng loại nào?
-
Dùng Dummy Data khi:
-
Bạn đang phác thảo nhanh UI/UX hoặc dựng Prototype cho khách hàng xem thử.
-
Bạn cần test khả năng hiển thị của giao diện với các độ dài văn bản khác nhau (dùng chuỗi quá dài để test tràn khung - text overflow).
-
Dùng Mock Data khi:
-
Frontend và Backend cần làm việc song song để rút ngắn tiến độ dự án.
-
Bạn cần viết Unit Test hoặc Integration Test cho hệ thống.
-
Bạn muốn simulate các tình huống lỗi từ phía Server (như lỗi hết phiên đăng nhập, lỗi server quá tải) mà không cần phải cố tình làm hỏng Server thật.
Xác định đúng loại dữ liệu ngay từ đầu sẽ giúp bạn tiết kiệm hàng giờ debug và giữ cho luồng phát triển dự án luôn mượt mà.
All rights reserved