# AC — Acceptance Criteria — | | | |---|---| | **Version** | 1.0 | | **Date** | YYYY-MM-DD | | **Author** | (skill ba-3-specification) | | **Status** | 🟡 Draft | | **Approved by** | QA: — *(QA phải xác nhận mọi AC test được)* | | **Source** | SRS_… v1.0 · BR_… v1.0 | | **Scope** | US-0nn | --- ## 1. Bốn nhóm bắt buộc | Nhóm | Nội dung | Tối thiểu | Số AC đã viết | |---|---|---|---| | 1. Luồng thành công | Đường đi đúng | 1/hành động | | | 2. Validation | Từng rule kiểm tra dữ liệu | 1/rule | | | 3. Lỗi hệ thống | Timeout, 5xx, mất mạng giữa chừng | ≥1 | | | 4. Phân quyền | Không đủ quyền, sai trạng thái | ≥1/vai trò bị chặn | | 🔴 Chỉ có nhóm 1 ⇒ **spec chưa viết xong**, không phải "spec ngắn gọn". --- ## 2. Mẫu viết ``` AC-01 | Nhóm: Luồng thành công Liên quan: F01, F02 · BR-021 · SCR-03 Given When Then And ``` **Ba quy tắc viết AC:** | # | Quy tắc | Sai | Đúng | |---|---|---|---| | 1 | `Given` phải nêu **vai trò** và **dữ liệu cụ thể** | "Given đang ở màn hình danh sách" | "Given tôi đăng nhập với ROLE-01 và có 3 bản ghi trạng thái Nháp" | | 2 | `When` chỉ **một** hành động | "When tôi nhập mã và bấm Lưu và quay lại" | Tách thành nhiều AC | | 3 | `Then` phải **quan sát được** | "Then hệ thống xử lý đúng" | "Then hiện toast 'Đã lưu' và danh sách có thêm 1 dòng ở đầu" | **Phép thử tính test được:** đọc AC và tự hỏi *"tôi ngồi trước màn hình, tôi làm gì để kiểm chứng câu này?"*. Không trả lời được ⇒ AC chưa viết xong. --- ## 3. Danh sách AC ### Nhóm 1 — Luồng thành công #### AC-01 — | | | |---|---| | **Liên quan** | SCR-03 · F01, F02 · BR-021 | | **Vai trò** | ROLE-01 | ``` Given … When … Then … And … ``` **Dữ liệu mẫu để test:** | Field | Giá trị | |---|---| --- ### Nhóm 2 — Validation #### AC-05 — *Một AC cho mỗi rule. Gộp nhiều rule vào một AC làm QA không biết rule nào fail.* ``` Given … When … Then hiện lỗi `E-STL-0001` dưới field F01 với thông điệp "…" And dữ liệu không được lưu And các field khác giữ nguyên giá trị đã nhập ``` --- ### Nhóm 3 — Lỗi hệ thống #### AC-09 — Mất kết nối khi đang lưu ``` Given tôi đã điền đầy đủ form hợp lệ When tôi bấm Lưu và request bị timeout sau 30 giây Then hiện thông báo lỗi "…" And nút Lưu bấm lại được And 🔴 toàn bộ dữ liệu tôi đã nhập được giữ nguyên ``` 🔴 AC "giữ nguyên dữ liệu sau lỗi" là AC hay bị quên nhất và gây bực bội nhất cho người dùng. Viết nó cho **mọi form**. Ba tình huống tối thiểu của nhóm này: | # | Tình huống | AC | |---|---|---| | 1 | Server trả 5xx | | | 2 | Timeout / mất mạng | | | 3 | Dữ liệu bị người khác sửa/xoá trong lúc mình đang mở | | --- ### Nhóm 4 — Phân quyền #### AC-12 — *Một AC cho mỗi vai trò bị chặn, và cho mỗi trạng thái chặn hành động.* ``` Given tôi đăng nhập với ROLE-03 (không có quyền tạo) When tôi mở màn hình danh sách Then nút "Tạo mới" không hiển thị Given tôi gọi thẳng API POST /api/v1/stores với token của ROLE-03 When request được gửi Then nhận HTTP 403 và ghi log truy cập trái phép ``` 🔴 Chặn ở giao diện là trải nghiệm, **chặn ở backend mới là bảo mật**. Viết AC cho cả hai. --- ## 4. Bảng dữ liệu biên *Bảng QA dùng trực tiếp. Một dòng cho mỗi field có ràng buộc.* | Field | Dưới ngưỡng | Ngưỡng dưới | Trong khoảng | Ngưỡng trên | Trên ngưỡng | Rỗng | Ký tự đặc biệt | Khoảng trắng đầu/cuối | |---|---|---|---|---|---|---|---|---| | F01 Mã (3–20) | 2 ký tự → lỗi | 3 ký tự → OK | 10 → OK | 20 → OK | 21 → lỗi | → lỗi bắt buộc | `