# 📋 TEMPLATE TEST CASE & BUG REPORT
## Dành cho người mới học Testing

---

# PHẦN 1: TEMPLATE TEST CASE

## 📌 Giới thiệu

Test Case là tài liệu mô tả **các bước kiểm thử** một tính năng cụ thể, bao gồm điều kiện đầu vào, các bước thực hiện và kết quả mong đợi.

---

## 🗂️ Template Bảng Test Case

| STT | Tên Test Case | Precondition | Steps | Expected Result | Actual Result | Status | Ghi chú |
|-----|--------------|--------------|-------|-----------------|---------------|--------|---------|
| 1 | | | | | | | |
| 2 | | | | | | | |
| 3 | | | | | | | |

---

## ✅ Ví dụ mẫu — Tính năng: Đăng nhập (Login)

---

### TC-001: Đăng nhập thành công với tài khoản hợp lệ

| Trường | Nội dung |
|--------|----------|
| **STT** | 1 |
| **Tên Test Case** | TC-001 — Đăng nhập thành công với email và mật khẩu hợp lệ |
| **Precondition** | - Người dùng đã có tài khoản đã đăng ký thành công |
| | - Tài khoản chưa bị khóa hoặc vô hiệu hóa |
| | - Trình duyệt đang mở trang đăng nhập: `https://example.com/login` |
| **Steps** | **Bước 1:** Mở trình duyệt, truy cập `https://example.com/login` |
| | **Bước 2:** Nhập email hợp lệ vào ô "Email": `user@example.com` |
| | **Bước 3:** Nhập mật khẩu đúng vào ô "Password": `Password@123` |
| | **Bước 4:** Nhấn nút **"Đăng nhập"** |
| **Expected Result** | - 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 |
| | - Không hiển thị thông báo lỗi |
| **Actual Result** | *(Điền vào sau khi thực hiện test)* |
| **Status** | ☐ Pass &nbsp;&nbsp; ☐ Fail |
| **Ghi chú** | Đây là happy path — luồng chính của tính năng đăng nhập |

---

### TC-002: Đăng nhập thất bại với mật khẩu sai

| Trường | Nội dung |
|--------|----------|
| **STT** | 2 |
| **Tên Test Case** | TC-002 — Đăng nhập thất bại khi nhập sai mật khẩu |
| **Precondition** | - Người dùng đã có tài khoản hợp lệ |
| | - Trình duyệt đang mở trang đăng nhập: `https://example.com/login` |
| **Steps** | **Bước 1:** Mở trình duyệt, truy cập `https://example.com/login` |
| | **Bước 2:** Nhập email hợp lệ vào ô "Email": `user@example.com` |
| | **Bước 3:** Nhập mật khẩu **SAI** vào ô "Password": `WrongPass999` |
| | **Bước 4:** Nhấn nút **"Đăng nhập"** |
| **Expected Result** | - Hệ thống **KHÔNG** cho đăng nhập |
| | - Hiển thị thông báo lỗi: _"Email hoặc mật khẩu không đúng"_ |
| | - Trang vẫn ở màn hình đăng nhập |
| | - Ô mật khẩu được xóa trắng |
| **Actual Result** | *(Điền vào sau khi thực hiện test)* |
| **Status** | ☐ Pass &nbsp;&nbsp; ☐ Fail |
| **Ghi chú** | Kiểm tra bảo mật — hệ thống không được để lộ thông tin tài khoản có tồn tại hay không |

---

### TC-003: Đăng nhập với ô Email để trống

| Trường | Nội dung |
|--------|----------|
| **STT** | 3 |
| **Tên Test Case** | TC-003 — Đăng nhập thất bại khi để trống trường Email |
| **Precondition** | - Trình duyệt đang mở trang đăng nhập: `https://example.com/login` |
| | - Không yêu cầu tài khoản cụ thể |
| **Steps** | **Bước 1:** Mở trình duyệt, truy cập `https://example.com/login` |
| | **Bước 2:** Để trống ô "Email" (không nhập gì) |
| | **Bước 3:** Nhập bất kỳ ký tự vào ô "Password": `anypassword` |
| | **Bước 4:** Nhấn nút **"Đăng nhập"** |
| **Expected Result** | - Hệ thống **KHÔNG** cho phép submit form |
| | - Hiển thị thông báo lỗi ngay dưới ô Email: _"Email không được để trống"_ |
| | - Con trỏ tự động focus vào ô Email |
| **Actual Result** | *(Điền vào sau khi thực hiện test)* |
| **Status** | ☐ Pass &nbsp;&nbsp; ☐ Fail |
| **Ghi chú** | Kiểm tra validation đầu vào — boundary test |

---

## 📝 Bảng tổng hợp kết quả (Test Summary)

| STT | Tên Test Case | Status | Ghi chú |
|-----|--------------|--------|---------|
| 1 | TC-001 — Đăng nhập thành công | ☐ Pass / ☐ Fail | |
| 2 | TC-002 — Đăng nhập sai mật khẩu | ☐ Pass / ☐ Fail | |
| 3 | TC-003 — Để trống Email | ☐ Pass / ☐ Fail | |
| | **Tổng Pass** | | |
| | **Tổng Fail** | | |

---

## 💡 Ghi nhớ khi viết Test Case

> **P — Precondition:** Trước khi test, điều kiện nào phải đúng?
>
> **S — Steps:** Các bước thực hiện phải đủ chi tiết để người khác làm theo được
>
> **E — Expected Result:** Kết quả mong đợi phải rõ ràng, đo lường được — không viết chung chung
>
> **A — Actual Result:** Điền vào SAU KHI thực hiện test — ghi chính xác những gì xảy ra
>
> **S — Status:** Pass nếu Actual = Expected / Fail nếu có sai lệch

---
---

# PHẦN 2: TEMPLATE BUG REPORT

## 📌 Giới thiệu

Bug Report là tài liệu mô tả **lỗi phát hiện được** trong quá trình kiểm thử, giúp developer hiểu rõ vấn đề để sửa lỗi chính xác và nhanh chóng.

---

## 🗂️ Template Bug Report (Rỗng — sẵn sàng điền)

```
==================================================
BUG REPORT
==================================================
Bug ID        : BUG-[XXX]
Ngày báo cáo  : DD/MM/YYYY
Người báo cáo : [Tên của bạn]
--------------------------------------------------
TIÊU ĐỀ BUG   :
--------------------------------------------------
MÔI TRƯỜNG
  - OS          :
  - Browser     :
  - Version App :
  - Device      :
--------------------------------------------------
STEPS TO REPRODUCE (Các bước tái hiện lỗi)
  Bước 1:
  Bước 2:
  Bước 3:
  ...
--------------------------------------------------
ACTUAL RESULT   :
(Kết quả thực tế — điều gì đang xảy ra)

EXPECTED RESULT :
(Kết quả mong đợi — điều gì phải xảy ra)
--------------------------------------------------
SEVERITY  : ☐ Critical  ☐ High  ☐ Medium  ☐ Low
PRIORITY  : ☐ P1        ☐ P2    ☐ P3      ☐ P4
--------------------------------------------------
ĐÍNH KÈM  :
  - Screenshot  : [Tên file / Link]
  - Video       : [Link record màn hình]
  - Log file    : [Tên file log]
--------------------------------------------------
GHI CHÚ THÊM  :
==================================================
```

---

## 🐛 Ví dụ mẫu Bug Report #1

```
==================================================
BUG REPORT
==================================================
Bug ID        : BUG-001
Ngày báo cáo  : 15/01/2025
Người báo cáo : Nguyễn Văn An (Tester)
--------------------------------------------------
TIÊU ĐỀ BUG   :
[Login] Không hiển thị thông báo lỗi khi đăng nhập
với mật khẩu sai
--------------------------------------------------
MÔI TRƯỜNG
  - OS          : Windows 11 Home 64-bit
  - Browser     : Google Chrome 120.0.6099.130
  - Version App : v2.1.3 (Staging environment)
  - Device      : PC Desktop
--------------------------------------------------
STEPS TO REPRODUCE (Các bước tái hiện lỗi)
  Bước 1: Mở trình duyệt Chrome
  Bước 2: Truy cập https://staging.example.com/login
  Bước 3: Nhập email hợp lệ: user@example.com
  Bước 4: Nhập mật khẩu SAI: WrongPass999
  Bước 5: Nhấn nút "Đăng nhập"
--------------------------------------------------
ACTUAL RESULT   :
Trang đứng yên, không có phản hồi gì sau khi nhấn
nút "Đăng nhập". Không hiển thị thông báo lỗi,
không chuyển hướng, nút đăng nhập bị vô hiệu hóa
và trang bị "đơ" trong khoảng 30 giây.

EXPECTED RESULT :
Hệ thống phải hiển thị ngay thông báo lỗi màu đỏ
dưới form: "Email hoặc mật khẩu không đúng. Vui
lòng kiểm tra lại." trong vòng tối đa 3 giây.
--------------------------------------------------
SEVERITY  : ☐ Critical  ✅ High  ☐ Medium  ☐ Low
PRIORITY  : ✅ P2        ☐ P3    ☐ P4      ☐ P1
--------------------------------------------------
ĐÍNH KÈM  :
  - Screenshot  : bug001_login_no_error_msg.png
  - Video       : https://drive.google.com/xxx
  - Log file    : console_log_15012025.txt
--------------------------------------------------
GHI CHÚ THÊM  :
- Đã test lại 3 lần, lỗi xảy ra 100% số lần thử
- Lỗi chỉ xảy ra trên Chrome, Firefox hoạt động bình thường
- Liên quan đến TC-002 — FAIL
- Assign to: Dev Team / Nguyễn Văn B
==================================================
```

---

## 🐛 Ví dụ mẫu Bug Report #2

```
==================================================
BUG REPORT
==================================================
Bug ID        : BUG-002
Ngày báo cáo  : 15/01/2025
Người báo cáo : Trần Thị Mai (Tester)
--------------------------------------------------
TIÊU ĐỀ BUG   :
[Login] Ô mật khẩu hiển thị text dạng plain text
thay vì dạng ẩn (***) mặc định
--------------------------------------------------
MÔI TRƯỜNG
  - OS          : macOS Ventura 13.5
  - Browser     : Safari 17.0
  - Version App : v2.1.3 (Staging environment)
  - Device      : MacBook Air M2
--------------------------------------------------
STEPS TO REPRODUCE (Các bước tái hiện lỗi)
  Bước 1: Mở Safari trên macOS
  Bước 2: Truy cập https://staging.example.com/login
  Bước 3: Click vào ô "Password"
  Bước 4: Gõ bất kỳ ký tự nào vào ô Password
           (VD: gõ chữ "abc")
  Bước 5: Quan sát ô mật khẩu
--------------------------------------------------
ACTUAL RESULT   :
Ô mật khẩu hiển thị các ký tự đã nhập dưới dạng
chữ thường (plain text) — ví dụ: nhập "abc" thì
thấy "abc" rõ ràng trên màn hình.
Người đứng gần có thể nhìn thấy mật khẩu.

EXPECTED RESULT :
Ô mật khẩu phải ẩn các ký tự đã nhập thành dấu
chấm hoặc dấu hoa thị (•••) theo chuẩn bảo mật
UX. Chỉ hiện rõ khi người dùng nhấn icon "mắt"
để xem mật khẩu.
--------------------------------------------------
SEVERITY  : ☐ Critical  ☐ High  ✅ Medium  ☐ Low

  >> Giải thích chọn Medium:
     Lỗi ảnh hưởng đến bảo mật nhưng chỉ xảy ra
     trên Safari, các trình duyệt khác hoạt động
     bình thường. Người dùng vẫn có thể đăng nhập.

PRIORITY  : ☐ P1  ✅ P2  ☐ P3  ☐ P4

  >> Giải thích chọn P2:
     Cần sửa trước khi release vì liên quan bảo mật.
--------------------------------------------------
ĐÍNH KÈM  :
  - Screenshot  : bug002_password_plaintext_safari.png
                  (Chụp màn hình rõ ký tự hiển thị)
  - Video       : https://drive.google.com/yyy
  - Log file    : N/A
--------------------------------------------------
GHI CHÚ THÊM  :
- Lỗi chỉ tái hiện trên Safari 17.0 / macOS
- Đã kiểm tra Chrome (OK), Firefox (OK), Edge (OK)
- Có thể liên quan đến CSS input type="password"
  không được apply đúng trên Safari
- Suggest fix: Kiểm tra lại CSS webkit prefix cho
  Safari: -webkit-text-security
==================================================
```

---

## 📊 Bảng phân loại Severity & Priority

### 🔴 Severity — Mức độ nghiêm trọng của lỗi

| Mức | Tên | Mô tả | Ví dụ |
|-----|-----|-------|-------|
| S1 | **Critical** | Lỗi làm crash hệ thống, mất dữ liệu, không thể dùng được | App bị crash khi mở, mất toàn bộ dữ liệu người dùng |
| S2 | **High** | Tính năng chính bị lỗi, không có workaround | Không thể đăng nhập, không thể thanh toán |
| S3 | **Medium** | Tính năng bị lỗi nhưng có cách khác để dùng | Nút share lỗi nhưng vẫn copy link được |
| S4 | **Low** | Lỗi nhỏ, không ảnh hưởng chức năng | Sai font chữ, lỗi chính tả, màu sắc sai |

### 🟡 Priority — Mức độ ưu tiên sửa lỗi

| Mức | Tên | Mô tả |
|-----|-----|-------|
| P1 | **Phải sửa ngay** | Sửa trong vòng 24h, cản trở hoàn toàn công việc |
| P2 | **Sửa sớm** | Sửa trong sprint hiện tại, trước khi release |
| P3 | **Sửa khi có thể** | Sắp xếp vào sprint tiếp theo |
| P4 | **Backlog** | Ghi nhận, sửa khi có thời gian rảnh |

> ⚠️ **Lưu ý quan trọng:**
> Severity và Priority **KHÔNG nhất thiết phải cùng mức**!
>
> Ví dụ: Lỗi chính tả tên CEO trên trang chủ → Severity = **Low** nhưng Priority = **P1** (phải sửa ngay vì ảnh hưởng hình ảnh công ty)

---

## 🎯 Checklist Bug Report Tốt

```
Trước khi submit bug, tự kiểm tra:

☐ Tiêu đề bug rõ ràng, có format: [Tính năng] + Mô tả lỗi ngắn gọn
☐ Đã ghi đầy đủ môi trường (OS, Browser, Version)
☐ Các bước tái hiện đủ chi tiết (người khác làm theo được)
☐ Actual Result mô tả CHÍNH XÁC những gì đang xảy ra
☐ Expected Result mô tả RÕ RÀNG điều gì phải xảy ra
☐ Đã chọn Severity và Priority phù hợp
☐ Đã đính kèm screenshot hoặc video minh chứng
☐ Đã kiểm tra lại bug có tái hiện không (ít nhất 2-3 lần)
☐ Đã kiểm tra xem bug này đã được báo cáo trước đó chưa (tránh duplicate)
```

---

## 📁 Quy ước đặt tên file đính kèm

```
Screenshot : bug[ID]_[tính năng]_[mô tả ngắn].[png/jpg]
             Ví dụ: bug001_login_no_error_message.png

Video      : bug[ID]_[tính năng]_record.[mp4/gif]
             Ví dụ: bug002_login_password_plaintext.mp4

Log file   : bug[ID]_console_log_[DDMMYYYY].txt
             Ví dụ: bug001_console_log_15012025.txt
```

---

*📌 Template này được tạo dành cho người mới học Testing. Hãy thực hành điền vào thật nhiều để quen tay!*