Dự án cuối 1: đặc tả và chia module
Khởi động dự án cuối khóa: chốt đề tài, viết đặc tả yêu cầu, chia module và hợp đồng giao tiếp giữa các nhóm.
Chuyên giaThuật toán ~120 phút
Ôn lại trước khi học
Giới thiệu
Bạn khởi động dự án cuối khóa. Viết rõ trước khi code.
Kiến thức cần nhớ
Chốt đề tài
- Đề tài dùng ít nhất 3 kỹ thuật đã học.
- Có dữ liệu thật hoặc giả lập thực tế.
- Ví dụ đời thường: giống chọn món nấu được trong 4 ngày.
- Demo được trong 10 phút.
Đặc tả yêu cầu
- Yêu cầu hàm là hệ thống làm gì.
- Yêu cầu phi hàm là nhanh và chịu tải bao nhiêu.
- Ví dụ đời thường: giống đơn đặt hàng ghi món và giờ giao.
- Mỗi yêu cầu có mã số để truy vết.
Chia module và kế hoạch
- Chia thành module nhỏ có sơ đồ phụ thuộc.
- Hợp đồng ghi rõ request và response mỗi cặp.
- Ví dụ đời thường: giống chia việc bếp theo món.
- Lập mốc kiểm chứng cho 3 ngày còn lại.
# ví dụ hợp đồng giữa hai module
hop_dong = { # thỏa thuận giao tiếp
"gui": {"user": "u1"}, # bên gửi tạo đúng
"nhan": {"top10": []}, # bên nhận trả đúng
}
Ví dụ
- 3 yêu cầu hàm -> mỗi yêu cầu truy tới module và ngày kiểm chứng.
- Hai module kề nhau -> request mẫu đi qua cả hai phía đúng.
💻 Bài tập
Dự án cuối kéo dài 4 ngày (167-170). Hôm nay chỉ viết đặc tả và dựng khung. Nộp vào repo riêng final-project/.
Bài 1: Chọn đề và đặc tả
Đề tài phải dùng ít nhất 3 kỹ thuật đã học (ví dụ: trie + cache + rate limiter; đồ thị + heap + SA; recsys + MapReduce + stream). Gợi ý: công cụ tìm tài liệu nội bộ, hệ gợi ý bài tập, bản đồ giao hàng, chat có kiểm duyệt.
SPEC.md gồm:
| Mục | Nội dung |
|---|---|
| Vấn đề | 3-5 câu, ai dùng, vì sao cần |
| Yêu cầu chức năng | Đánh mã F1, F2..., mỗi cái kiểm chứng được |
| Yêu cầu phi chức năng | Đánh mã N1, N2... với con số: độ trễ p95, thông lượng, bộ nhớ, kích thước dữ liệu |
| Ngoài phạm vi | Những gì không làm |
| Dữ liệu | Nguồn, kích thước, cách sinh nếu giả lập |
| Tiêu chí demo | Kịch bản demo 10 phút |
Bài 2: Kiến trúc và hợp đồng
ARCHITECTURE.md: sơ đồ module (Mermaid), mỗi module 1 trách nhiệm, sơ đồ phụ thuộc không có vòng.- Hợp đồng giữa các module: chữ ký hàm hoặc định dạng request/response, kèm ví dụ.
- Bảng truy vết: yêu cầu nào do module nào đảm nhận.
Bài 3: Khung dự án (nâng cao)
- Repo có cấu trúc thư mục theo module, build 1 lệnh, test 1 lệnh (dù chưa có test thật).
- CI chạy build và test mỗi lần push.
- Mỗi module có 1 test "khói" gọi hàm giả (stub) trả dữ liệu cố định.
PLAN.md: mốc cho ngày 168, 169, 170, và rủi ro lớn nhất cùng cách giảm.
✅ Tiêu chí hoàn thành
-
SPEC.mdđủ 6 mục, yêu cầu phi chức năng có con số. -
ARCHITECTURE.mdcó sơ đồ và bảng truy vết. - Repo build và test 1 lệnh, CI xanh.
-
PLAN.mdcó mốc và rủi ro.
❓ Câu hỏi ôn tập
- Đề tài cần thỏa mấy điều kiện?
- Yêu cầu hàm khác phi hàm ở đâu?
- Hợp đồng module ghi gì?
- Vì sao cấm code sản phẩm hôm nay?
🌕 Bạn đã hoàn thành ngày 167. Làm hết bài tập phía trên rồi sang ngày tiếp theo.