# 🐛 BUG REPORT TEMPLATE - Dành cho Tester Fresher

---

## 📌 HƯỚNG DẪN SỬ DỤNG TEMPLATE

> **Mục đích:** Template này giúp bạn viết bug report đầy đủ, rõ ràng, dễ hiểu để developer có thể reproduce và fix bug nhanh nhất có thể.
> **Nguyên tắc vàng:** Một bug report tốt = Developer có thể reproduce bug mà KHÔNG cần hỏi lại bạn.

---

# ═══════════════════════════════════
# 📋 PHẦN 1 — TEMPLATE TRỐNG (COPY NÀY)
# ═══════════════════════════════════

---

## 🏷️ TITLE

```
[Tên tính năng] + [Hành động thực hiện] + [Kết quả sai xảy ra]
```

**Format gợi ý:**
```
[Login] - Đăng nhập với email hợp lệ - Hiển thị thông báo lỗi sai
[Checkout] - Áp dụng mã giảm giá - Giá không được cập nhật
[Profile] - Upload ảnh đại diện > 2MB - App bị crash
[Search] - Tìm kiếm với ký tự đặc biệt - Trả về trang trắng
```

> 💡 **Mẹo đặt title:**
> - Đủ ngắn để đọc lướt hiểu ngay (dưới 100 ký tự)
> - Không dùng "Bug", "Lỗi" ở đầu — đã biết là bug rồi
> - Không mơ hồ như: *"Login bị lỗi"* ❌
> - Nên cụ thể như: *"[Login] - Đăng nhập đúng password - Vẫn báo sai mật khẩu"* ✅

---

## 📝 DESCRIPTION

```
<!-- Mô tả tổng quan về bug trong 2-4 câu -->
<!-- Trả lời: Bug này là gì? Xảy ra ở đâu? Ảnh hưởng gì đến người dùng? -->

Bug xảy ra tại: [Tên màn hình / URL / Tính năng cụ thể]

Tóm tắt: [Mô tả ngắn gọn hành vi sai của hệ thống]

Ảnh hưởng: [Người dùng bị ảnh hưởng như thế nào? Có block workflow không?]
```

> 💡 **Mẹo viết Description:**
> - Viết như đang giải thích cho người chưa biết gì về bug này
> - Đề cập tần suất xảy ra nếu biết: *"Luôn luôn"* / *"50% số lần thử"* / *"Thỉnh thoảng"*
> - Không cần chi tiết ở đây — phần Steps to Reproduce sẽ làm việc đó

---

## 🔢 STEPS TO REPRODUCE

```
<!-- Liệt kê TỪNG BƯỚC cụ thể để tái hiện bug -->
<!-- Quan trọng nhất trong toàn bộ bug report! -->
<!-- Developer sẽ làm đúng từng bước này để thấy bug -->

Điều kiện tiên quyết (Pre-condition):
- [ ] Đã có tài khoản: [loại tài khoản, ví dụ: user thường / admin / chưa verify email]
- [ ] Trạng thái ban đầu: [ví dụ: chưa đăng nhập / đang ở trang chủ]
- [ ] Dữ liệu cần chuẩn bị: [ví dụ: email test@gmail.com, password: Test@123]

Các bước thực hiện:

1. Mở [URL / App / Màn hình cụ thể]
2. Click / Nhập / Chọn [hành động cụ thể + đối tượng cụ thể]
3. Nhập [giá trị cụ thể] vào trường [tên trường]
4. Click nút [tên nút]
5. Quan sát kết quả
```

> 💡 **Mẹo viết Steps:**
> - **Mỗi bước = 1 hành động duy nhất** — đừng gộp nhiều việc vào 1 bước
> - **Dùng động từ cụ thể:** Click, Nhập, Chọn, Scroll, Hover, Double-click
> - **Ghi rõ giá trị:** Thay vì *"nhập email"* → viết *"nhập email: abc@test.com"*
> - **Test lại steps của mình** trước khi submit — đảm bảo làm đúng steps thì ra đúng bug
> - **Tối thiểu 3 bước, thường từ 5-10 bước** là hợp lý

---

## ✅ EXPECTED RESULT

```
<!-- Kết quả ĐÚNG mà hệ thống PHẢI làm theo spec/yêu cầu -->
<!-- Trả lời: Lẽ ra phải xảy ra điều gì? -->

Sau khi thực hiện bước [số bước cuối], hệ thống phải:
- [Hành vi đúng 1]
- [Hành vi đúng 2 nếu có]

Hoặc: Người dùng được [điều gì đó xảy ra đúng theo yêu cầu]
```

> 💡 **Mẹo viết Expected Result:**
> - Dựa vào: **Spec / Acceptance Criteria / Common sense / Behavior đúng trên env khác**
> - Luôn bắt đầu bằng: *"Hệ thống phải..."* hoặc *"Người dùng được..."*
> - **Chỉ 1 Expected Result** cho 1 bug — nếu có nhiều vấn đề thì tách thành nhiều bug

---

## ❌ ACTUAL RESULT

```
<!-- Kết quả SAI đang thực sự xảy ra -->
<!-- Trả lời: Thực tế điều gì đã xảy ra (sai)? -->

Thực tế, hệ thống:
- [Hành vi sai 1 — mô tả chính xác, khách quan]
- [Hành vi sai 2 nếu có]

Thông báo lỗi hiển thị (nếu có):
> "[Copy nguyên văn thông báo lỗi vào đây]"

Error code (nếu có): [Ví dụ: HTTP 500 / Error code: AUTH_001]
```

> 💡 **Mẹo viết Actual Result:**
> - **Mô tả khách quan, không phán xét:** *"Hệ thống hiển thị màn hình trắng"* ✅ thay vì *"Hệ thống bị lỗi nặng"* ❌
> - **Copy nguyên văn** thông báo lỗi — đừng paraphrase
> - **Kèm error code / HTTP status** nếu thấy trong Network tab hoặc log

---

## 🔴 SEVERITY & PRIORITY

### Severity — Mức độ nghiêm trọng kỹ thuật
*(Bug này phá vỡ hệ thống đến mức nào?)*

```
Severity: [ ] Critical  [ ] High  [ ] Medium  [ ] Low
```

| Mức | Ký hiệu | Khi nào chọn | Ví dụ |
|-----|---------|--------------|-------|
| **Critical** | 🔴 | App crash, mất data, lỗ hổng bảo mật, không thể dùng được gì | App crash khi mở, không login được, payment bị lỗi |
| **High** | 🟠 | Tính năng chính bị broken, không có workaround | Không thể tạo đơn hàng mới, không upload được file |
| **Medium** | 🟡 | Tính năng phụ bị lỗi, có workaround | Filter không hoạt động, sort bị sai thứ tự |
| **Low** | 🟢 | UI lỗi nhỏ, typo, cosmetic issue | Nút bị lệch 2px, màu sai, typo trong label |

---

### Priority — Mức độ ưu tiên xử lý
*(Bug này cần fix sớm đến mức nào về mặt business?)*

```
Priority: [ ] Urgent  [ ] High  [ ] Medium  [ ] Low
```

| Mức | Khi nào chọn | Ví dụ |
|-----|--------------|-------|
| **Urgent** | Cần fix trong vài giờ, ảnh hưởng production ngay | Server down, payment failed trên production |
| **High** | Cần fix trong sprint này / trước release | Feature chính của sprint bị broken |
| **Medium** | Fix trong 1-2 sprint tới | Feature phụ, ít user dùng |
| **Low** | Backlog, fix khi có thời gian | Typo, UI nhỏ, edge case hiếm gặp |

> 💡 **Severity vs Priority — Dễ nhầm lẫn nhất:**
> - **Severity cao + Priority thấp:** Lỗi crash app nhưng xảy ra ở tính năng ít ai dùng
> - **Severity thấp + Priority cao:** Typo ở tên công ty trên homepage — kỹ thuật nhẹ nhưng business quan trọng
> - **Fresher tip:** Nếu không chắc → để **Medium/Medium** rồi hỏi senior tester

---

## 💻 ENVIRONMENT

```
<!-- Môi trường bạn phát hiện bug — CỰC KỲ QUAN TRỌNG để reproduce -->

**Môi trường test:**
- [ ] Development (Dev)
- [ ] Staging / UAT
- [ ] Production

**Thông tin thiết bị:**
| Thông tin | Giá trị |
|-----------|---------|
| OS | [Windows 11 / macOS 13 / iOS 16.5 / Android 13] |
| Browser | [Chrome 119 / Firefox 120 / Safari 17 / Edge 119] |
| Browser version | [Xem tại: Menu → Help → About] |
| App version | [Xem tại: Settings → About / Package version] |
| Screen resolution | [1920x1080 / 1366x768 / Mobile 390x844] |
| Device | [PC / MacBook / iPhone 14 / Samsung S23] |

**URL tại thời điểm xảy ra bug:**
`https://[url-cụ-thể-ở-đây]`

**Tài khoản test (che password):**
- Email: test_user@company.com
- Role: [User / Admin / Guest]
- Password: [KHÔNG điền — dùng account chung đã có trong TestRail/1Password]
```

> 💡 **Mẹo ghi Environment:**
> - **Luôn luôn ghi version cụ thể** — không chỉ ghi "Chrome mới nhất"
> - **Test lại trên browser/device khác** trước khi submit — nếu chỉ lỗi 1 browser thì ghi rõ
> - **Ghi URL đầy đủ** kể cả query params: `.../search?keyword=test&page=2`
> - **KHÔNG bao giờ ghi password thật** vào bug report

---

## 📎 EVIDENCE

```
<!-- Bằng chứng trực quan — làm bug report "không thể chối cãi" -->

**Screenshot:**
- [Đính kèm ảnh chụp màn hình thể hiện bug]
- Gợi ý tool: Snipping Tool (Windows) / Cmd+Shift+4 (Mac) / Lightshot

**Video recording (nếu bug khó capture bằng ảnh):**
- [Đính kèm video màn hình]
- Gợi ý tool: Loom / OBS / ShareX / QuickTime

**Console log / Network log:**
- [Copy error từ F12 → Console tab]
- [Copy failed request từ F12 → Network tab → XHR]

**Log file (nếu có):**
- [Đính kèm file log hoặc copy đoạn log liên quan]
```

> 💡 **Mẹo chụp Evidence:**
> - **Annotate ảnh** — khoanh đỏ, mũi tên chỉ vào chỗ lỗi để người đọc biết nhìn đâu
> - **Chụp cả URL bar** trong screenshot để biết đang ở trang nào
> - **Với bug UI:** chụp cả before (đúng) và after (sai) nếu có thể
> - **Với bug API:** copy cả Request và Response trong Network tab
> - **Đặt tên file có nghĩa:** `BUG_login_error_message_wrong.png` thay vì `Screenshot_001.png`

---
---
---

# ═══════════════════════════════════
# 📋 PHẦN 2 — VÍ DỤ ĐIỀN SẴN: BUG LOGIN
# ═══════════════════════════════════

---

## 🏷️ TITLE

```
[Login] - Đăng nhập với email và password hợp lệ - Hiển thị thông báo "Sai mật khẩu" thay vì vào được trang chủ
```

---

## 📝 DESCRIPTION

```
Bug xảy ra tại: Màn hình Login — https://staging.app.com/login

Tóm tắt: Người dùng nhập đúng email và password đã đăng ký nhưng hệ thống
vẫn hiển thị thông báo lỗi "Mật khẩu không đúng. Vui lòng thử lại."
thay vì đăng nhập thành công và redirect về trang Dashboard.

Ảnh hưởng: Người dùng KHÔNG THỂ đăng nhập vào hệ thống → Block toàn bộ
workflow → Ảnh hưởng 100% user trên môi trường Staging.

Tần suất: Xảy ra 100% số lần thử (đã test 5 lần với 2 account khác nhau).
```

---

## 🔢 STEPS TO REPRODUCE

```
Điều kiện tiên quyết (Pre-condition):
- [x] Đã có tài khoản active: email: tester01@company.com (đã verify email)
- [x] Trạng thái ban đầu: Chưa đăng nhập, đang ở trang Login
- [x] Password đúng đã được confirm trong LastPass team vault: Test@12345
- [x] Đã clear cache và cookies trước khi test

Các bước thực hiện:

1. Mở trình duyệt Chrome 119, truy cập: https://staging.app.com/login
2. Quan sát trang Login hiển thị với 2 trường: "Email" và "Mật khẩu"
3. Click vào trường "Email", nhập: tester01@company.com
4. Click vào trường "Mật khẩu", nhập: Test@12345
5. Click nút "Đăng nhập" màu xanh dương ở giữa trang
6. Quan sát kết quả hiển thị
```

---

## ✅ EXPECTED RESULT

```
Sau khi thực hiện bước 5, hệ thống phải:
- Hiển thị loading spinner trong khoảng 1-2 giây
- Redirect người dùng đến trang Dashboard: https://staging.app.com/dashboard
- Hiển thị tên người dùng "Tester 01" ở góc phải header
- KHÔNG hiển thị bất kỳ thông báo lỗi nào

(Theo Acceptance Criteria của ticket AUTH-101: "User với valid credentials
phải được redirect đến Dashboard sau khi login thành công")
```

---

## ❌ ACTUAL RESULT

```
Thực tế, hệ thống:
- Hiển thị loading spinner khoảng 2 giây
- Người dùng KHÔNG được redirect — vẫn ở lại trang Login
- Hiển thị thông báo lỗi màu đỏ ngay dưới trường "Mật khẩu":

  > "Mật khẩu không đúng. Vui lòng kiểm tra lại. (Error: AUTH_INVALID_CREDENTIALS)"

- Trường "Mật khẩu" bị clear, phải nhập lại

Error trong Console (F12 → Console):
> POST https://api.staging.app.com/auth/login 401 (Unauthorized)
> Error: {"code": "AUTH_INVALID_CREDENTIALS", "message": "Invalid password"}

Network tab — Response body:
> {"success": false, "error": "AUTH_INVALID_CREDENTIALS", "status": 401}
```

---

## 🔴 SEVERITY & PRIORITY

```
Severity: [x] Critical  [ ] High  [ ] Medium  [ ] Low

Lý do chọn Critical:
→ Tính năng Login là core feature, bị broken 100% → không ai vào được hệ thống
→ Block toàn bộ test flow của sprint này

Priority: [x] Urgent  [ ] High  [ ] Medium  [ ] Low

Lý do chọn Urgent:
→ Sprint review diễn ra ngày mai, không fix thì không demo được gì
→ Toàn bộ regression test bị block bởi bug này
```

---

## 💻 ENVIRONMENT

```
**Môi trường test:**
- [x] Staging / UAT (https://staging.app.com)

**Thông tin thiết bị:**
| Thông tin | Giá trị |
|-----------|---------|
| OS | Windows 11 Home (Build 22H2) |
| Browser | Google Chrome |
| Browser version | 119.0.6045.105 (Official Build) (64-bit) |
| App version | v2.3.1-staging (xem tại /settings → About) |
| Screen resolution | 1920x1080 |
| Device | PC Desktop |

**URL tại thời điểm xảy ra bug:**
`https://staging.app.com/login`

**Tài khoản test:**
- Email: tester01@company.com
- Role: User thường (không phải Admin)
- Password: [Xem trong LastPass → Folder: Staging Accounts]

**Đã test thêm:**
- [x] Tài khoản tester02@company.com — Kết quả: Lỗi tương tự ✅
- [x] Browser Firefox 120 — Kết quả: Lỗi tương tự ✅
- [x] Sau khi clear cache/cookies — Kết quả: Vẫn lỗi ✅
- [x] Môi trường Dev (https://dev.app.com) — Kết quả: LOGIN ĐƯỢC BÌNH THƯỜNG
  → Bug chỉ xảy ra trên Staging, không xảy ra trên Dev
```

---

## 📎 EVIDENCE

```
**Screenshot:**
1. [BUG_AUTH-LOGIN-001_error-message.png]
   → Ảnh chụp màn hình login với thông báo lỗi đỏ, đã khoanh đỏ vào error message
   
2. [BUG_AUTH-LOGIN-001_console-error.png]
   → Ảnh chụp F12 Console tab hiển thị lỗi 401

3. [BUG_AUTH-LOGIN-001_network-response.png]
   → Ảnh chụp F12 Network tab — Request & Response của API /auth/login

**Video:**
- [BUG_AUTH-LOGIN-001_reproduction-video.mp4]
  → Video 45 giây quay lại toàn bộ steps từ mở trang đến khi thấy lỗi

**Console Log (copy từ F12):**
```
POST https://api.staging.app.com/auth/login 401 (Unauthorized)
Error Response: {
  "success": false,
  "code": "AUTH_INVALID_CREDENTIALS",
  "message": "Invalid password",
  "timestamp": "2024-01-15T08:30:45Z"
}
```

**Note thêm:**
- Đã báo qua Slack channel #dev-team lúc 9:00 AM để alert team
- Bug có thể liên quan đến deploy mới nhất lúc 8:00 AM hôm nay (theo deployment log)
- Suggest dev check: Có thể password hashing algo bị thay đổi trong commit mới nhất?
```

---
---

# ═══════════════════════════════════
# 📋 PHẦN 3 — CHECKLIST TRƯỚC KHI SUBMIT
# ═══════════════════════════════════

```
## ✅ CHECKLIST — Đọc trước khi bấm Submit

BUG CÓ THẬT KHÔNG?
- [ ] Đã reproduce được bug ít nhất 2 lần
- [ ] Đã thử clear cache/cookies/hard refresh (Ctrl+Shift+R)
- [ ] Không phải do dữ liệu test sai hoặc môi trường đang maintenance

TITLE ĐÃ ĐẦY ĐỦ CHƯA?
- [ ] Có đủ 3 phần: [Tính năng] + [Hành động] + [Kết quả sai]
- [ ] Đọc title xong là hiểu bug mà không cần đọc thêm

STEPS TO REPRODUCE ĐÃ ĐỦ CHƯA?
- [ ] Người khác làm theo đúng steps của mình → reproduce được bug
- [ ] Đã ghi rõ Pre-conditions và data test cụ thể
- [ ] Mỗi bước chỉ có 1 hành động

EXPECTED vs ACTUAL ĐÃ RÕ CHƯA?
- [ ] Expected dựa trên spec/requirement có thật (không phải tự đoán)
- [ ] Actual mô tả chính xác, khách quan những gì thấy trên màn hình

ENVIRONMENT ĐÃ ĐỦ CHƯA?
- [ ] Ghi đủ OS + Browser + Version + App version
- [ ] Ghi rõ URL cụ thể

EVIDENCE ĐÃ ĐỦ CHƯA?
- [ ] Có ít nhất 1 screenshot với annotation (mũi tên/khoanh đỏ)
- [ ] Nếu bug liên quan API: có screenshot Network tab

TRÙNG LẶP KHÔNG?
- [ ] Đã tìm kiếm trong Jira/hệ thống — không có bug tương tự đã được report
- [ ] Nếu tương tự → comment vào bug cũ thay vì tạo mới

SEVERITY/PRIORITY ĐÃ HỢP LÝ CHƯA?
- [ ] Đã hỏi senior tester/lead nếu không chắc mức độ
```

---

# ═══════════════════════════════════
# 📋 PHẦN 4 — QUICK REFERENCE CARD
# ═══════════════════════════════════

## ⚡ Bảng tóm tắt nhanh

| Phần | Trả lời câu hỏi | Độ dài lý tưởng |
|------|----------------|-----------------|
| **Title** | Bug này về cái gì? | 1 dòng, < 100 ký tự |
| **Description** | Tổng quan bug là gì? | 3-5 câu |
| **Steps** | Làm sao để thấy bug? | 5-10 bước cụ thể |
| **Expected** | Lẽ ra phải thế nào? | 2-4 bullet points |
| **Actual** | Thực tế đang thế nào? | 2-4 bullet points + error message |
| **Severity/Priority** | Nặng bao nhiêu? Gấp không? | 1 lựa chọn mỗi loại + lý do |
| **Environment** | Xảy ra ở đâu, trên gì? | Bảng thông tin đầy đủ |
| **Evidence** | Bằng chứng ở đâu? | ≥ 1 screenshot có annotation |

## 🚫 Những lỗi fresher hay mắc

| Lỗi thường gặp | Thay bằng |
|----------------|-----------|
| Title: *"Lỗi login"* | *"[Login] - Nhập đúng password - Báo sai mật khẩu"* |
| Steps gộp: *"Mở app và đăng nhập"* | Tách: Bước 1: Mở app → Bước 2: Nhập email → Bước 3: Nhập pass... |
| Expected: *"Phải hoạt động đúng"* | *"Hệ thống redirect đến /dashboard và hiển thị tên user"* |
| Actual: *"Bị lỗi"* | *"Hệ thống hiển thị modal trắng, không load được content"* |
| Không ghi version | Luôn ghi: Chrome 119.0.6045, App v2.3.1 |
| Screenshot không annotation | Dùng mũi tên/khoanh đỏ chỉ vào chỗ lỗi |
| Severity luôn để Critical | Critical chỉ khi app crash hoặc mất data |