# 📋 Mẫu Câu Hỏi Dành Cho Tester Khi Đọc Requirement

> **Mục đích:** Giúp Tester chủ động phát hiện điểm mơ hồ trong requirement trước khi viết test case.
> Sử dụng file này mỗi khi nhận tài liệu mới từ BA/PO.

---

## 🧭 Hướng Dẫn Sử Dụng

| Bước | Hành động |
|------|-----------|
| 1️⃣ | Đọc toàn bộ requirement ít nhất **1 lần** trước khi điền |
| 2️⃣ | Đánh dấu ✅ vào câu hỏi **phù hợp** với tính năng đang phân tích |
| 3️⃣ | Ghi câu trả lời vào ô `→ Trả lời:` sau khi trao đổi với BA/PO |
| 4️⃣ | Đánh dấu ⚠️ nếu câu hỏi **chưa được giải đáp** để theo dõi |
| 5️⃣ | Lưu file theo tên: `questions_[tên-tính-năng]_[ngày].md` |

> 💡 **Tip cho Tester mới:** Không cần hỏi tất cả câu. Hãy chọn những câu **liên quan trực tiếp** đến tính năng. Mục tiêu là hiểu rõ trước khi viết test case, không phải hỏi cho xong.

---

## 📌 Thông Tin Chung

```
Tên tính năng  : _______________________________________________
Tài liệu tham chiếu (US/Ticket) : _______________________________________________
Tester thực hiện : _______________________________________________
Ngày trao đổi  : _______________________________________________
BA/PO phụ trách : _______________________________________________
```

---

## 🗂️ NHÓM 1 — Dữ Liệu Đầu Vào (Input Data)

> **Khi nào dùng:** Tính năng có form nhập liệu, upload file, tìm kiếm, bộ lọc, API nhận tham số.

---

### Câu 1.1 — Giới hạn độ dài / kích thước

- [ ] ❓ Trường `[tên trường]` cho phép nhập tối đa bao nhiêu ký tự?
  Nếu vượt quá giới hạn thì hệ thống xử lý như thế nào — cắt bớt tự động hay hiển thị lỗi?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 1.2 — Định dạng hợp lệ

- [ ] ❓ Trường `[tên trường]` chấp nhận những định dạng nào?
  Ví dụ: số điện thoại có chấp nhận dạng `+84`, `0084`, `084...`? Email có phân biệt chữ hoa/thường không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 1.3 — Giá trị đặc biệt & ký tự đặc biệt

- [ ] ❓ Hệ thống xử lý thế nào nếu người dùng nhập ký tự đặc biệt như `<`, `>`, `'`, `"`, `&`, emoji, hoặc khoảng trắng ở đầu/cuối?
  Có cần sanitize / escape không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 1.4 — Trường bắt buộc và tùy chọn

- [ ] ❓ Trong form này, những trường nào là **bắt buộc**, những trường nào là **tùy chọn**?
  Nếu để trống trường tùy chọn thì hệ thống lưu giá trị gì — `null`, `""`, hay giá trị mặc định?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 1.5 — Giá trị biên (Boundary Values)

- [ ] ❓ Với các trường nhập số (tuổi, giá tiền, số lượng...), giá trị hợp lệ nằm trong khoảng nào?
  Giá trị `0`, số âm, số thập phân có được chấp nhận không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 1.6 — Dữ liệu phụ thuộc / liên kết

- [ ] ❓ Có trường nào mà giá trị hợp lệ **phụ thuộc vào trường khác** không?
  Ví dụ: "Ngày kết thúc phải sau Ngày bắt đầu", "Tỉnh/Thành phải khớp với Quận/Huyện đã chọn".

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

## 🗂️ NHÓM 2 — Xử Lý Lỗi (Error Handling)

> **Khi nào dùng:** Bất kỳ tính năng nào — đây là nhóm quan trọng nhất, luôn hỏi.

---

### Câu 2.1 — Lỗi từ phía người dùng (Client-side error)

- [ ] ❓ Khi người dùng nhập sai định dạng hoặc bỏ trống trường bắt buộc, thông báo lỗi hiển thị **ở đâu** và **khi nào**?
  Ngay lúc rời khỏi ô nhập (onBlur) hay khi bấm Submit?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 2.2 — Lỗi từ phía hệ thống (Server-side error)

- [ ] ❓ Nếu server trả về lỗi (timeout, lỗi 500, lỗi mạng...), hệ thống xử lý thế nào?
  Có tự retry không? Dữ liệu người dùng đang nhập có bị mất không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 2.3 — Lỗi trùng dữ liệu (Duplicate)

- [ ] ❓ Nếu người dùng tạo bản ghi đã tồn tại (email trùng, mã sản phẩm trùng...), hệ thống báo lỗi hay tự ghi đè?
  Thông báo cụ thể là gì?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 2.4 — Hành động trên dữ liệu không tồn tại

- [ ] ❓ Nếu người dùng cố truy cập / chỉnh sửa / xóa một bản ghi **đã bị xóa hoặc không tồn tại**, hệ thống phản hồi thế nào?
  Redirect về đâu? Hiển thị thông báo gì?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 2.5 — Xử lý khi mất kết nối / phiên hết hạn

- [ ] ❓ Nếu session người dùng hết hạn trong lúc đang thao tác (ví dụ đang điền form), hệ thống xử lý thế nào?
  Dữ liệu đang nhập có được giữ lại không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 2.6 — Giới hạn số lần thử

- [ ] ❓ Có giới hạn số lần thực hiện hành động không? (Ví dụ: đăng nhập sai 5 lần, gửi OTP 3 lần...)
  Sau khi vượt giới hạn thì điều gì xảy ra? Có mở khóa tự động sau bao lâu không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

## 🗂️ NHÓM 3 — Quyền Truy Cập (Access Control & Permission)

> **Khi nào dùng:** Hệ thống có nhiều vai trò người dùng (Admin, User, Guest...) hoặc tính năng nhạy cảm.

---

### Câu 3.1 — Ai được phép làm gì?

- [ ] ❓ Tính năng này áp dụng cho **vai trò nào**? (Admin / Manager / User thường / Guest)
  Mỗi vai trò được thực hiện những hành động nào? Có bảng phân quyền chưa?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 3.2 — Truy cập trực tiếp qua URL

- [ ] ❓ Nếu người dùng **không có quyền** nhưng biết đường dẫn URL và truy cập trực tiếp, hệ thống xử lý thế nào?
  Redirect về trang nào? Hiển thị lỗi 403 hay 404?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 3.3 — Phân quyền theo dữ liệu (Data-level permission)

- [ ] ❓ User A có thể xem / sửa dữ liệu của User B không?
  Ví dụ: nhân viên A có thể xem đơn hàng của nhân viên B không? Giới hạn theo phòng ban, chi nhánh, hay không giới hạn?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 3.4 — Quyền thay đổi theo trạng thái

- [ ] ❓ Quyền thực hiện hành động có thay đổi tùy **trạng thái của bản ghi** không?
  Ví dụ: Admin vẫn có thể xóa đơn hàng đã hoàn thành không? Người tạo có thể tự xóa bài đã được duyệt không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 3.5 — Người dùng chưa đăng nhập (Unauthenticated)

- [ ] ❓ Tính năng này có cho phép người dùng **chưa đăng nhập** truy cập không?
  Nếu không, redirect về trang nào? URL hiện tại có được lưu lại để redirect sau khi đăng nhập không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

## 🗂️ NHÓM 4 — Trạng Thái Và Luồng (Status & Flow)

> **Khi nào dùng:** Tính năng có nhiều bước, có trạng thái thay đổi, có quy trình phê duyệt.

---

### Câu 4.1 — Sơ đồ trạng thái (State diagram)

- [ ] ❓ Bản ghi này có những **trạng thái** nào? (Draft → Pending → Approved → Rejected → Archived...)
  Từ trạng thái A có thể chuyển sang trạng thái nào? Có thể quay lại trạng thái trước không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 4.2 — Ai được phép đổi trạng thái?

- [ ] ❓ Hành động **chuyển trạng thái** (approve, reject, cancel, archive...) chỉ dành cho vai trò nào?
  Người tạo có thể tự hủy không? Admin có thể bỏ qua một bước trong quy trình không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 4.3 — Dữ liệu có thể sửa theo trạng thái

- [ ] ❓ Khi bản ghi đang ở trạng thái `[X]`, những trường nào vẫn có thể chỉnh sửa?
  Ví dụ: đơn hàng đang xử lý có thể thay đổi địa chỉ giao hàng không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 4.4 — Luồng khi có nhiều người tham gia

- [ ] ❓ Nếu tính năng có nhiều người cùng thao tác (ví dụ: 2 người cùng chỉnh sửa một bản ghi), hệ thống xử lý conflict thế nào?
  Ai được lưu? Có cảnh báo không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 4.5 — Điều kiện tiên quyết (Precondition)

- [ ] ❓ Để thực hiện hành động này, hệ thống cần **điều kiện gì trước**?
  Ví dụ: phải có ít nhất 1 sản phẩm trong giỏ hàng mới được Checkout; phải xác nhận email mới được đăng bài.

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 4.6 — Tác động dây chuyền (Cascade effect)

- [ ] ❓ Khi thực hiện hành động này (xóa, cập nhật, hủy...), những dữ liệu **liên quan** nào cũng bị ảnh hưởng?
  Ví dụ: xóa Category thì các Product thuộc Category đó xử lý thế nào?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

## 🗂️ NHÓM 5 — Giao Diện Và Thông Báo (UI & Notifications)

> **Khi nào dùng:** Tính năng có giao diện người dùng, gửi email/SMS/push notification.

---

### Câu 5.1 — Nội dung thông báo lỗi

- [ ] ❓ Thông báo lỗi hiển thị theo ngôn ngữ nào? (Tiếng Việt / Tiếng Anh / Cả hai?)
  Nội dung thông báo do BA định nghĩa hay Dev tự viết? Có file copy chuẩn không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 5.2 — Thông báo thành công (Success message)

- [ ] ❓ Sau khi thao tác thành công, hệ thống làm gì?
  Hiển thị toast / popup / redirect sang trang khác? Redirect về trang nào? Sau bao nhiêu giây?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 5.3 — Trạng thái màn hình khi loading

- [ ] ❓ Trong lúc chờ kết quả từ server, giao diện thay đổi thế nào?
  Có disable nút bấm không? Có loading spinner không? Tránh trường hợp user bấm double-submit.

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 5.4 — Giao diện khi không có dữ liệu (Empty state)

- [ ] ❓ Khi danh sách trống (chưa có bản ghi nào, hoặc tìm kiếm không có kết quả), màn hình hiển thị gì?
  Có hình ảnh minh họa không? Có nút hướng dẫn người dùng bước tiếp theo không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 5.5 — Email / SMS / Push notification

- [ ] ❓ Tính năng này có gửi thông báo tự động không? (Email xác nhận, SMS OTP, push notification...)
  Gửi đến ai? Khi nào gửi? Nội dung mẫu như thế nào? Có template chưa?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

### Câu 5.6 — Responsive và thiết bị

- [ ] ❓ Tính năng này cần chạy trên những thiết bị / trình duyệt nào?
  Có yêu cầu responsive mobile không? Có độ phân giải màn hình nào cần đặc biệt lưu ý không?

```
→ Trả lời:


→ Trạng thái: [ ] Đã rõ  [ ] Chờ xác nhận  [ ] Chưa hỏi
```

---

## 📊 Bảng Tổng Kết Câu Hỏi Chưa Giải Quyết

> Sau khi trao đổi với BA/PO, điền các câu hỏi còn ⚠️ vào đây để theo dõi.

| # | Nhóm | Câu hỏi tóm tắt | Người phụ trách | Deadline |
|---|------|-----------------|-----------------|----------|
| 1 | | | | |
| 2 | | | | |
| 3 | | | | |
| 4 | | | | |
| 5 | | | | |

---

## 📝 Ghi Chú Thêm

```
Các điểm cần lưu ý đặc biệt cho tính năng này:




Assumption (giả định tạm thời nếu chưa có câu trả lời):




Rủi ro nếu không làm rõ các điểm trên:


```

---

## ✅ Checklist Trước Khi Viết Test Case

- [ ] Tất cả câu hỏi quan trọng đã được trả lời hoặc có assumption rõ ràng
- [ ] Đã hiểu sơ đồ trạng thái (nếu có)
- [ ] Đã xác nhận bảng phân quyền
- [ ] Đã có nội dung thông báo lỗi / thành công cụ thể
- [ ] Đã xác nhận boundary values cho tất cả trường nhập liệu
- [ ] BA/PO đã review và đồng ý với các assumption

---

> 📌 **Lưu ý cuối:** File này là công cụ hỗ trợ tư duy, không phải checklist phải điền đủ 100%.
> Tester giỏi biết **chọn đúng câu hỏi** cho đúng tính năng, không phải hỏi nhiều nhất.
>
> *Template version 1.0 — Cập nhật theo kinh nghiệm dự án của bạn!*