# 📋 TEMPLATE TEST SCENARIO — HƯỚNG DẪN DÀNH CHO TESTER MỚI

---

## 📌 PHẦN 1: GIẢI THÍCH CẤU TRÚC TEST SCENARIO

### Test Scenario là gì?

Test Scenario là một **câu mô tả ngắn gọn** về tình huống cần kiểm thử. Mỗi scenario trả lời câu hỏi:

> **"Nếu [điều kiện này] xảy ra → hệ thống có làm đúng [kết quả mong đợi] không?"**

---

### 🔑 Cấu trúc chuẩn: `[Hành động] + [Điều kiện] + [Kết quả mong đợi]`

| Thành phần | Ý nghĩa | Ví dụ |
|---|---|---|
| **Hành động** | Người dùng làm gì? | Nhấn nút "Đăng nhập" |
| **Điều kiện** | Dữ liệu đầu vào / trạng thái hệ thống | Email đúng + mật khẩu đúng |
| **Kết quả mong đợi** | Hệ thống phải phản hồi như thế nào? | Chuyển đến trang Dashboard |

---

### 💡 Quy tắc viết tốt

- ✅ **Rõ ràng, cụ thể** — Tránh viết chung chung như *"hệ thống hoạt động đúng"*
- ✅ **Một scenario = một mục tiêu kiểm thử** — Không gộp nhiều tình huống vào một dòng
- ✅ **Dùng ngôn ngữ trung lập** — Mô tả hành vi, không mô tả cách cài đặt kỹ thuật
- ✅ **Bao phủ đủ loại**: Happy path *(đúng)*, Negative *(sai)*, Edge case *(biên)*
- ❌ **Tránh**: "Test login", "Kiểm tra mật khẩu" — quá mơ hồ

---

### 🗂️ Phân loại Scenario phổ biến

```
Happy Path      → Dữ liệu hợp lệ, luồng thành công
Negative Test   → Dữ liệu sai, hệ thống phải từ chối đúng cách
Edge Case       → Dữ liệu ở ranh giới giới hạn (0 ký tự, 255 ký tự...)
Security Test   → Thử các trường hợp bảo mật (SQL injection, brute force...)
UI/UX Test      → Giao diện hiển thị đúng không?
```

---

## 📊 PHẦN 2: BẢNG MẪU TEST SCENARIO — TÍNH NĂNG LOGIN

> **Module:** Đăng nhập hệ thống  
> **Người tạo:** `[Tên Tester]`  
> **Ngày tạo:** `[DD/MM/YYYY]`  
> **Phiên bản:** `v1.0`  
> **Trạng thái:** `[ ] Draft  [ ] Review  [ ] Approved`

---

| STT | Tên Scenario | Điều kiện đầu vào | Kết quả mong đợi | Mức độ ưu tiên | Ghi chú |
|:---:|---|---|---|:---:|---|
| 01 | Đăng nhập thành công với thông tin hợp lệ | Email đúng định dạng + mật khẩu chính xác + tài khoản đang hoạt động | Hệ thống chuyển hướng đến trang Dashboard, hiển thị tên người dùng ở góc phải màn hình | 🔴 High | Happy Path — Ưu tiên kiểm thử đầu tiên |
| 02 | Đăng nhập thất bại khi nhập sai mật khẩu | Email đúng + mật khẩu **sai** + tài khoản đang hoạt động | Hiển thị thông báo lỗi: *"Email hoặc mật khẩu không đúng"*. Không tiết lộ trường nào sai | 🔴 High | Lỗi không được nói rõ "sai mật khẩu" vì lý do bảo mật |
| 03 | Đăng nhập khi để trống trường Email | Trường Email **bỏ trống** + mật khẩu bất kỳ → nhấn Đăng nhập | Hiển thị thông báo validation: *"Email không được để trống"*. Không gửi request lên server | 🔴 High | Validate ở phía client trước |
| 04 | Đăng nhập khi để trống trường Mật khẩu | Email hợp lệ + trường Mật khẩu **bỏ trống** → nhấn Đăng nhập | Hiển thị thông báo validation: *"Mật khẩu không được để trống"*. Không gửi request lên server | 🔴 High | Kiểm tra cả hai trường trống riêng lẻ |
| 05 | Đăng nhập với Email sai định dạng | Nhập email không đúng cú pháp (vd: `abc@`, `testgmail.com`, `test @gmail.com`) | Hiển thị thông báo: *"Email không đúng định dạng"*. Nút Đăng nhập không thực hiện gửi form | 🟡 Medium | Thử nhiều kiểu sai định dạng khác nhau |
| 06 | Tài khoản bị khóa sau nhiều lần đăng nhập sai | Nhập sai mật khẩu **5 lần liên tiếp** với cùng một email | Hệ thống khóa tài khoản, hiển thị: *"Tài khoản đã bị tạm khóa. Vui lòng thử lại sau 15 phút"* | 🔴 High | Xác nhận số lần tối đa với BA/Dev. Kiểm tra có gửi email thông báo không |
| 07 | Đăng nhập với tài khoản chưa được kích hoạt | Email đúng + mật khẩu đúng + tài khoản **chưa verify email** | Hiển thị thông báo: *"Tài khoản chưa được kích hoạt. Vui lòng kiểm tra email để xác nhận"* | 🟡 Medium | Kèm link gửi lại email xác nhận |
| 08 | Đăng nhập với email không tồn tại trong hệ thống | Nhập email chưa đăng ký (vd: `notexist@gmail.com`) + mật khẩu bất kỳ | Hiển thị thông báo lỗi chung: *"Email hoặc mật khẩu không đúng"* (giống TC02, không phân biệt) | 🟡 Medium | Tránh để hacker biết email có tồn tại không |
| 09 | Chức năng "Ghi nhớ đăng nhập" hoạt động đúng | Đăng nhập thành công + **tích vào ô "Ghi nhớ tôi"** → đóng trình duyệt → mở lại | Hệ thống tự động đăng nhập lại, không yêu cầu nhập thông tin lần nữa. Phiên kéo dài theo cấu hình | 🟢 Low | Xác nhận thời gian lưu cookie với Dev |
| 10 | Kiểm tra bảo mật: Ngăn chặn SQL Injection qua form Login | Nhập vào trường Email: `' OR '1'='1` hoặc `admin'--` + mật khẩu bất kỳ | Hệ thống **không đăng nhập được**, hiển thị thông báo lỗi thông thường. Không bị lỗi hệ thống | 🔴 High | Security Test — Bắt buộc kiểm tra |

---

### 🏷️ Chú thích Mức độ ưu tiên

| Ký hiệu | Mức độ | Ý nghĩa |
|:---:|---|---|
| 🔴 **High** | Cao | Phải kiểm thử trước, ảnh hưởng trực tiếp đến chức năng cốt lõi |
| 🟡 **Medium** | Trung bình | Kiểm thử sau High, ảnh hưởng đến trải nghiệm người dùng |
| 🟢 **Low** | Thấp | Kiểm thử khi có thời gian, tính năng phụ hoặc edge case hiếm gặp |

---

## 📖 PHẦN 3: HƯỚNG DẪN SỬ DỤNG TEMPLATE

### 🚀 Bước 1 — Chuẩn bị trước khi viết

```
□ Đọc kỹ tài liệu yêu cầu (BRD / PRD / User Story)
□ Xác định rõ phạm vi tính năng cần test
□ Trao đổi với BA để làm rõ điều kiện chấp nhận (Acceptance Criteria)
□ Hỏi Dev về các giới hạn kỹ thuật (số ký tự tối đa, thời gian timeout...)
```

### ✍️ Bước 2 — Điền vào bảng

```
1. Đặt tên Scenario rõ ràng theo cấu trúc:
   → "[Hành động] khi [điều kiện]"
   → Ví dụ: "Đăng nhập thất bại khi mật khẩu sai"

2. Mô tả Điều kiện đầu vào cụ thể:
   → Ghi rõ giá trị (vd: "nhập 'abc123'", không viết "nhập sai")

3. Kết quả mong đợi phải có thể đo lường được:
   → ✅ "Hiển thị thông báo: 'Email không hợp lệ'"
   → ❌ "Hệ thống báo lỗi" (quá chung)

4. Gán mức ưu tiên dựa trên mức độ ảnh hưởng nghiệp vụ

5. Dùng cột Ghi chú để:
   → Đánh dấu loại test (Happy Path / Negative / Security...)
   → Ghi điều cần hỏi thêm
   → Link đến bug report nếu tìm thấy lỗi
```

### 🔄 Bước 3 — Review và cập nhật

```
□ Nhờ tester senior hoặc BA review bảng scenario
□ Cập nhật trạng thái: Draft → Review → Approved
□ Sau khi test xong, ghi kết quả thực tế vào cột Ghi chú
□ Lưu trữ file theo quy ước: [Module]_TestScenario_v[số]_[ngày].md
```

---

### ⚠️ Những lỗi phổ biến cần tránh

| ❌ Sai | ✅ Đúng |
|---|---|
| Tên scenario: *"Test login"* | *"Đăng nhập thành công với thông tin hợp lệ"* |
| Điều kiện: *"nhập sai"* | *"Nhập mật khẩu 'Abc123' thay vì 'Abc@123'"* |
| Kết quả: *"hệ thống hoạt động tốt"* | *"Hiển thị thông báo lỗi X, không chuyển trang"* |
| Bỏ qua negative test | Luôn kiểm tra cả luồng sai và luồng đúng |
| Một scenario quá nhiều bước | Tách ra nhiều scenario nhỏ hơn |

---

> 📝 **Ghi nhớ cuối:**  
> *"Test Scenario tốt là test scenario mà bất kỳ ai trong nhóm cũng đọc và hiểu được ngay,  
> không cần hỏi thêm người viết."*

---

**📁 Lưu file:** `[TênModule]_TestScenario_v1.0_[DDMMYYYY].md`  
**📬 Liên hệ hỗ trợ:** `[Email QA Lead hoặc link tài liệu nội bộ]`