193 lines
5.9 KiB
Markdown
193 lines
5.9 KiB
Markdown
# AC — Acceptance Criteria — <US-id>
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Version** | 1.0 |
|
||
| **Date** | YYYY-MM-DD |
|
||
| **Author** | <BA> (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 | <Tên ngắn>
|
||
Nhóm: Luồng thành công
|
||
Liên quan: F01, F02 · BR-021 · SCR-03
|
||
|
||
Given <tiền đề: trạng thái hệ thống + vai trò người dùng + dữ liệu có sẵn>
|
||
When <hành động cụ thể, một hành động>
|
||
Then <kết quả quan sát được>
|
||
And <kết quả phụ: dữ liệu lưu gì, log ghi gì, màn hình đi đâu>
|
||
```
|
||
|
||
**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 — <tên>
|
||
|
||
| | |
|
||
|---|---|
|
||
| **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 — <tên>
|
||
|
||
*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 — <tên>
|
||
|
||
*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 | `<script>` → ? | " ABC " → cắt hay giữ? |
|
||
|
||
Ba cột cuối là ba chỗ hay lộ bug nhất:
|
||
|
||
| Cột | Câu hỏi phải trả lời trong spec |
|
||
|---|---|
|
||
| **Rỗng** | Chuỗi rỗng và null có khác nhau không? |
|
||
| **Ký tự đặc biệt** | Emoji có được nhập không? Ký tự có dấu tính 1 hay nhiều? HTML/script xử lý sao? |
|
||
| **Khoảng trắng** | Tự cắt (trim) hay giữ nguyên? Ảnh hưởng tới kiểm tra trùng không? |
|
||
|
||
---
|
||
|
||
## 5. Kịch bản kết hợp
|
||
|
||
*Những đường đi qua nhiều màn hình. Ít nhất một kịch bản đầu-cuối cho luồng chính.*
|
||
|
||
| # | Kịch bản | Các bước | AC liên quan |
|
||
|---|---|---|---|
|
||
| S1 | Tạo mới rồi tìm lại được | SCR-01 → SCR-03 → Lưu → SCR-01 → tìm | AC-01, AC-03 |
|
||
|
||
---
|
||
|
||
## 6. Truy vết
|
||
|
||
| AC | US | BR | Field/Thành phần | Mã lỗi | Test case (QA điền) | Kết quả (QA điền) |
|
||
|---|---|---|---|---|---|---|
|
||
| AC-01 | US-011 | BR-021 | F01, F02 | — | TC-… | |
|
||
|
||
Ô "Test case" do QA điền ở GĐ4. Ô trống sau khi QA đã viết test ⇒ AC bị bỏ sót khi test.
|
||
|
||
---
|
||
|
||
## 7. Xác nhận của QA
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Người xác nhận** | |
|
||
| **Ngày** | |
|
||
| ☐ Mọi AC đều test được (không có AC mô tả cảm tính) | |
|
||
| ☐ Đủ 4 nhóm | |
|
||
| ☐ Bảng dữ liệu biên đủ dùng để viết test case | |
|
||
| ☐ Không có AC nào mâu thuẫn với AC khác | |
|
||
|
||
**AC bị QA từ chối:**
|
||
|
||
| AC | Lý do từ chối | BA sửa thế nào |
|
||
|---|---|---|
|