PineLab
Test case & bug

Bug report là gì? Cách viết báo cáo lỗi và phân biệt Severity với Priority

Tìm ra bug mới là nửa công việc. Nửa còn lại là mô tả nó đủ tốt để người khác tái hiện được mà không phải hỏi lại bạn câu nào. Một bug report kém thường kết thúc bằng trạng thái "Cannot reproduce" — và con lỗi đó vẫn nằm nguyên trong sản phẩm.

9 phút đọc Cập nhật 07/09/2026 PineLab

Bug report là gì?

Bug report (báo cáo lỗi, defect report) là tài liệu ghi nhận một khiếm khuyết được phát hiện trong phần mềm, mô tả đủ thông tin để người khác tái hiện, đánh giá mức độ ảnh hưởng và sửa chữa nó.

Hãy nghĩ về bug report như một lời đề nghị: bạn đang xin thời gian của lập trình viên. Report càng rõ, chi phí để họ bắt đầu càng thấp, và khả năng lỗi được sửa sớm càng cao.

Các thành phần của một bug report

Thành phầnVì sao cầnVí dụ
Tiêu đềĐọc là hiểu ngay lỗi gì, ở đâu — quyết định report có được mở ra đọc hay không[Checkout] Tổng tiền không cập nhật khi xoá sản phẩm cuối cùng khỏi giỏ hàng
Môi trườngLỗi thường chỉ xảy ra trên một cấu hình nhất địnhChrome 141, Windows 11, môi trường Staging, build 2.14.3
PreconditionTrạng thái cần có trước khi tái hiệnĐã đăng nhập, giỏ hàng có đúng 1 sản phẩm
Các bước tái hiệnPhần quan trọng nhất — đánh số, mỗi bước một hành động1. Mở /cart 2. Bấm icon xoá trên sản phẩm duy nhất 3. Quan sát vùng Tổng tiền
Kết quả thực tếĐiều bạn thực sự nhìn thấyTổng tiền vẫn hiển thị 450.000đ dù giỏ hàng đã trống
Kết quả mong đợiĐiều đáng lẽ phải xảy ra, kèm căn cứTổng tiền hiển thị 0đ và hiện trạng thái giỏ hàng trống (REQ-CART-008)
Bằng chứngẢnh chụp màn hình, video, log, response APIẢnh chụp kèm tab Network cho thấy API trả về total = 450000
SeverityMức ảnh hưởng kỹ thuậtMajor
PriorityMức khẩn cấp cần sửaHigh
Tần suấtLỗi xảy ra luôn hay thỉnh thoảng5/5 lần thử

Phân biệt Severity và Priority

Đây là cặp khái niệm bị nhầm nhiều nhất, và cũng gần như chắc chắn xuất hiện trong đề thi ISTQB. Cách nhớ đơn giản: Severity là "hỏng nặng đến đâu", Priority là "sửa gấp đến mức nào".

Tiêu chíSeverity (Mức nghiêm trọng)Priority (Độ ưu tiên)
Trả lời câu hỏiLỗi ảnh hưởng tới hệ thống nặng đến đâu?Cần sửa gấp đến mức nào?
Góc nhìnKỹ thuậtNghiệp vụ, khách hàng, thị trường
Ai quyết địnhTesterQuản lý sản phẩm, test lead, khách hàng
Thang đo thường dùngCritical / Major / Moderate / MinorUrgent / High / Medium / Low

Bốn tổ hợp và ví dụ thực tế

Tổ hợpVí dụVì sao
Severity cao — Priority caoKhông thanh toán được đơn hàng trên môi trường productionHỏng chức năng cốt lõi và đang mất doanh thu từng phút
Severity cao — Priority thấpỨng dụng sập khi đổi ngôn ngữ sang tiếng Nhật, nhưng thị trường Nhật chưa mởVề kỹ thuật rất nặng, nhưng chưa ai dùng tới nên chưa gấp
Severity thấp — Priority caoLogo công ty bị sai chính tả trên trang chủKhông ảnh hưởng chức năng, nhưng ảnh hưởng hình ảnh thương hiệu ngay lập tức
Severity thấp — Priority thấpKhoảng cách giữa hai nút lệch 2 pixel ở trang cài đặt nâng caoKhông ảnh hưởng chức năng, ít người nhìn thấy

Vòng đời của một bug

Tên trạng thái khác nhau giữa các công cụ, nhưng luồng chung thì giống nhau ở hầu hết dự án.

  1. New — tester vừa tạo báo cáo lỗi.
  2. Assigned — lỗi được giao cho một lập trình viên xử lý.
  3. Open / In Progress — lập trình viên đang phân tích và sửa.
  4. Fixed — đã sửa xong, chờ kiểm tra lại.
  5. Retest — tester xác nhận lại trên bản build mới.
  6. Closed — xác nhận đã sửa đúng, đóng lỗi.
  7. Reopened — nếu retest vẫn thấy lỗi, mở lại và ghi rõ bản build nào vẫn còn.

Các trạng thái từ chối và cách xử lý

Trạng tháiNghĩa làTester nên làm gì
Rejected / Not a bugLập trình viên cho rằng đây là hành vi đúngĐối chiếu lại tài liệu yêu cầu; nếu tài liệu mơ hồ thì đưa BA vào cuộc
DuplicateĐã có report khác về cùng lỗi nàyKiểm tra xem có thật sự trùng không, hay chỉ giống triệu chứng nhưng khác nguyên nhân
Cannot reproduceKhông tái hiện được theo mô tảBổ sung video, log, dữ liệu chính xác và thông tin môi trường
DeferredThừa nhận là lỗi nhưng hoãn sang phiên bản sauGhi nhận rủi ro, đảm bảo quyết định hoãn được ghi lại rõ ràng

Mẫu bug report dùng ngay

Tiêu đề: [Giỏ hàng] Tổng tiền không về 0 khi xoá sản phẩm cuối cùng

Môi trường: Staging | build 2.14.3 | Chrome 141 | Windows 11
Tài khoản: buyer_test_02 (đã đăng nhập)
Tần suất: 5/5 lần

Precondition:
- Giỏ hàng có đúng 1 sản phẩm, giá 450.000đ

Các bước tái hiện:
1. Mở trang /cart
2. Bấm biểu tượng thùng rác trên sản phẩm duy nhất
3. Quan sát vùng "Tổng tiền" ở cột bên phải

Kết quả thực tế:
- Danh sách sản phẩm trống, nhưng "Tổng tiền" vẫn hiển thị 450.000đ
- API GET /api/cart/summary trả về { "items": [], "total": 450000 }

Kết quả mong đợi:
- "Tổng tiền" hiển thị 0đ và hiện trạng thái giỏ hàng trống (theo REQ-CART-008)

Bằng chứng: cart-total-bug.mp4, screenshot-network-tab.png
Severity: Major | Priority: High
HỎI ĐÁP

Câu hỏi thường gặp

Severity và Priority khác nhau thế nào?

Severity đo mức độ nghiêm trọng về mặt kỹ thuật của lỗi và thường do tester quyết định. Priority đo mức độ khẩn cấp cần sửa dựa trên yếu tố nghiệp vụ, thường do quản lý sản phẩm hoặc khách hàng quyết định. Một lỗi có thể nghiêm trọng nhưng không gấp, hoặc nhẹ nhưng phải sửa ngay.

Vì sao bug của tôi bị đóng với trạng thái Cannot reproduce?

Thường do thiếu thông tin về môi trường, dữ liệu, quyền tài khoản hoặc thứ tự thao tác. Cách xử lý là tái hiện lại từ trạng thái sạch, quay video toàn bộ quá trình, ghi rõ số hiệu build và đính kèm log hoặc response API để chứng minh lỗi có thật.

Có nên gộp nhiều lỗi vào một bug report không?

Không nên. Mỗi bug report chỉ nên mô tả một khiếm khuyết, vì mỗi lỗi có thể được giao cho người khác nhau, sửa ở thời điểm khác nhau và có mức ưu tiên khác nhau. Gộp lại khiến việc theo dõi trạng thái sửa trở nên bất khả thi.

Tester có quyền quyết định Priority không?

Tester thường đề xuất Priority, nhưng quyết định cuối cùng thuộc về quản lý sản phẩm, test lead hoặc khách hàng, vì nó phụ thuộc vào yếu tố kinh doanh nằm ngoài phạm vi kỹ thuật. Severity thì tester đánh giá và chịu trách nhiệm chính.