149 lines
5.6 KiB
Markdown
149 lines
5.6 KiB
Markdown
# NFR — Yêu cầu phi chức năng — <US / Module>
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Version** | 1.0 |
|
||
| **Date** | YYYY-MM-DD |
|
||
| **Author** | <BA> (skill ba-3-specification) |
|
||
| **Status** | 🟡 Draft |
|
||
| **Approved by** | Tech Lead: — |
|
||
| **Source** | |
|
||
| **Scope** | |
|
||
|
||
---
|
||
|
||
## Quy tắc
|
||
|
||
Mỗi NFR bắt buộc ba thứ. Thiếu một là khẩu hiệu, không phải yêu cầu:
|
||
|
||
1. **Con số đo được**
|
||
2. **Điều kiện đo** (bao nhiêu dữ liệu, bao nhiêu người dùng, môi trường nào)
|
||
3. **Cách verify** (ai đo, bằng công cụ gì, khi nào)
|
||
|
||
❌ "Hệ thống phải nhanh."
|
||
✅ "Danh sách chênh lệch trả về ≤ 2 giây ở p95, với 100.000 bản ghi và 20 người dùng đồng
|
||
thời, trên staging. Verify: k6 kịch bản S1, chạy trước mỗi release."
|
||
|
||
**Chỉ viết NFR áp dụng cho phạm vi này.** Copy cả bộ tiêu chuẩn công ty vào làm loãng và
|
||
không ai kiểm.
|
||
|
||
---
|
||
|
||
## 1. Hiệu năng — `NFR-PERF-nn`
|
||
|
||
| ID | Yêu cầu | Ngưỡng | Điều kiện đo | Cách verify | Ai chốt |
|
||
|---|---|---|---|---|---|
|
||
| NFR-PERF-01 | Thời gian tải danh sách | ≤ 2s (p95) | 100.000 bản ghi, 20 user đồng thời, staging | k6 kịch bản S1 | |
|
||
| NFR-PERF-02 | Thời gian lưu bản ghi | ≤ 1s (p95) | | | |
|
||
| NFR-PERF-03 | Xuất file | ≤ 30s cho 50.000 dòng | | | |
|
||
|
||
**Hỏi người dùng để lấy ngưỡng, đừng tự đặt:** *"Chậm bao lâu thì anh/chị thấy không chấp
|
||
nhận được?"* — con số họ nói mới là ngưỡng thật.
|
||
|
||
## 2. Dung lượng & tăng trưởng — `NFR-CAP-nn`
|
||
|
||
| Đại lượng | Hiện tại | Sau 1 năm | Sau 3 năm | Nguồn số liệu |
|
||
|---|---|---|---|---|
|
||
| Số bản ghi | | | | |
|
||
| Số giao dịch/ngày | | | | |
|
||
| Số người dùng đồng thời (giờ cao điểm) | | | | |
|
||
| Dung lượng file đính kèm | | | | |
|
||
|
||
🔴 **Điền bảng này trước rồi mới chốt ngưỡng hiệu năng.** Ngưỡng đặt trên khối lượng hôm nay
|
||
sẽ vỡ sau một năm.
|
||
|
||
| Giờ cao điểm | Khi nào | Vì sao |
|
||
|---|---|---|
|
||
| | *(vd: 9–10h sáng, cuối tháng)* | |
|
||
|
||
## 3. Bảo mật & quyền riêng tư — `NFR-SEC-nn`
|
||
|
||
| ID | Yêu cầu | Chi tiết | Căn cứ | Cách verify |
|
||
|---|---|---|---|---|
|
||
| NFR-SEC-01 | Dữ liệu cá nhân được che khi hiển thị | Che 6 số giữa của CCCD | | |
|
||
| NFR-SEC-02 | Chặn quyền ở backend, không chỉ ở giao diện | Mọi endpoint kiểm tra vai trò | RBAC §6 | Test gọi thẳng API |
|
||
| NFR-SEC-03 | Xuất dữ liệu nhạy cảm phải nhập lý do | | | |
|
||
|
||
**Rà bốn câu:**
|
||
|
||
| Câu hỏi | Trả lời |
|
||
|---|---|
|
||
| Có thông tin cá nhân không? Loại nào? | |
|
||
| Lưu bao lâu? Xoá thế nào khi hết hạn? | |
|
||
| Ai được xuất ra ngoài hệ thống? | |
|
||
| Có quy định pháp luật nào áp dụng không? | |
|
||
|
||
## 4. Lưu vết — `NFR-AUD-nn`
|
||
|
||
| Hành động | Ghi vết | Nội dung ghi | Giữ bao lâu | Ai xem được |
|
||
|---|---|---|---|---|
|
||
| Tạo/Sửa/Xoá | ✅ | ai · lúc nào · trước→sau | | |
|
||
| Phê duyệt | ✅ | ai · lúc nào · ghi chú | | |
|
||
| Xuất dữ liệu | ✅ | ai · lúc nào · **lý do** · số bản ghi | | |
|
||
|
||
**Log có phải hiển thị được cho người dùng không, hay chỉ để tra khi có sự cố?** — câu này
|
||
quyết định có cần làm màn hình lịch sử hay không.
|
||
|
||
## 5. Khả dụng & xử lý sự cố — `NFR-AVL-nn`
|
||
|
||
| ID | Yêu cầu | Ngưỡng | Ghi chú |
|
||
|---|---|---|---|
|
||
| NFR-AVL-01 | Thời gian hoạt động | | Trong giờ làm việc: … |
|
||
| NFR-AVL-02 | Cửa sổ bảo trì cho phép | | |
|
||
| NFR-AVL-03 | Hành vi khi hệ thống ngoài lỗi | | Xem bên dưới |
|
||
|
||
**Hệ thống ngoài lỗi thì nghiệp vụ này làm gì?** *(bắt buộc trả lời — đây là chỗ spec hay
|
||
im lặng và dev tự quyết)*
|
||
|
||
| Hệ thống ngoài | Nếu lỗi/chậm | Người dùng thấy gì | Dữ liệu xử lý sao |
|
||
|---|---|---|---|
|
||
| | Chặn hoàn toàn / Cho làm tiếp và đồng bộ sau / Chuyển thủ công | | |
|
||
|
||
## 6. Đa ngữ & định dạng — `NFR-I18N-nn`
|
||
|
||
🔴 **Nhóm hay bị bỏ nhất và gây bug ở môi trường thật nhiều nhất.**
|
||
|
||
| Khía cạnh | Yêu cầu | Ghi chú |
|
||
|---|---|---|
|
||
| Ngôn ngữ hỗ trợ | | Thiếu bản dịch thì hiển thị gì? |
|
||
| Múi giờ lưu trữ | | UTC hay giờ địa phương |
|
||
| Múi giờ hiển thị | | Theo người dùng hay cố định |
|
||
| Định dạng ngày | | |
|
||
| Dấu phân cách số | | `1.234,56` hay `1,234.56` |
|
||
| Đơn vị tiền | | Có đa tiền tệ không |
|
||
| Sắp xếp chuỗi có dấu | | "Ă" đứng trước hay sau "B" |
|
||
| Độ dài text sau khi dịch | | Text tiếng Đức/Hàn dài hơn — giao diện có vỡ không |
|
||
|
||
## 7. Khả năng truy cập & thiết bị — `NFR-ACC-nn`
|
||
|
||
| Khía cạnh | Yêu cầu |
|
||
|---|---|
|
||
| Trình duyệt hỗ trợ | |
|
||
| Kích thước màn hình nhỏ nhất | |
|
||
| Dùng trên điện thoại không | |
|
||
| Thao tác bằng bàn phím | |
|
||
| Tương phản màu | |
|
||
|
||
---
|
||
|
||
## 8. Nhóm không áp dụng
|
||
|
||
*Ghi rõ, đừng xoá — để người đọc biết là đã cân nhắc, không phải đã quên.*
|
||
|
||
| Nhóm | N/A vì |
|
||
|---|---|
|
||
| | |
|
||
|
||
## 9. Open Questions
|
||
|
||
| ID | Câu hỏi | Hỏi ai | Từ ngày | Chặn gì |
|
||
|---|---|---|---|---|
|
||
|
||
## 10. Xác nhận
|
||
|
||
| Vai trò | Người | Nội dung xác nhận | Ngày |
|
||
|---|---|---|---|
|
||
| Tech Lead | | ☐ Ngưỡng khả thi với kiến trúc hiện tại | |
|
||
| QA | | ☐ Mọi NFR đều có cách verify chạy được | |
|
||
| PO | | ☐ Ngưỡng phù hợp với kỳ vọng người dùng | |
|