PineLab
Test case & bug

Test case là gì? Cách viết test case chuẩn kèm mẫu và ví dụ

Test case là sản phẩm đầu ra rõ ràng nhất của một tester, và cũng là thứ nhà tuyển dụng dùng để đánh giá bạn nhanh nhất. Một bộ test case tốt không phải bộ dài nhất — mà là bộ mà người khác đọc vào là chạy được, không cần hỏi lại bạn câu nào.

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

Test case là gì?

Test case là một tập hợp gồm điều kiện tiên quyết, dữ liệu đầu vào, các bước thực hiện và kết quả mong đợi, được xây dựng để kiểm tra xem phần mềm có hoạt động đúng như yêu cầu trong một tình huống cụ thể hay không.

Điểm cốt lõi nằm ở hai chữ "kết quả mong đợi". Nếu bạn không xác định trước hệ thống phải phản ứng thế nào, thì thao tác của bạn chỉ là dùng thử, không phải kiểm thử — vì bạn không có cơ sở nào để nói kết quả là đúng hay sai.

Phân biệt Test scenario và Test case

Tiêu chíTest scenarioTest case
Mức độ chi tiếtKhái quát, một câu mô tảChi tiết từng bước
Ví dụKiểm tra chức năng đăng nhậpĐăng nhập với email đúng và mật khẩu sai 5 lần liên tiếp
Mục đíchXác định phạm vi cần kiểm thửHướng dẫn thực thi cụ thể
Số lượngÍt, mỗi scenario sinh ra nhiều test caseNhiều

Một test case gồm những thành phần nào?

Các trường bắt buộc trong một test case
TrườngÝ nghĩaVí dụ
Test Case IDMã định danh duy nhất để tham chiếuTC_LOGIN_007
Tiêu đề / Test SummaryMô tả ngắn gọn tình huống đang kiểm traĐăng nhập thất bại khi mật khẩu sai
PreconditionĐiều kiện phải có trước khi chạyĐã tồn tại tài khoản test@pinelab.vn ở trạng thái active
Test DataDữ liệu đầu vào cụ thểEmail: test@pinelab.vn — Mật khẩu: SaiMatKhau123
StepsCác bước thao tác, đánh số, mỗi bước một hành động1. Mở trang đăng nhập. 2. Nhập email. 3. Nhập mật khẩu. 4. Bấm Đăng nhập
Expected ResultKết quả hệ thống phải trả vềHiển thị thông báo "Email hoặc mật khẩu không đúng", vẫn ở trang đăng nhập
Actual ResultKết quả quan sát được khi chạyĐiền khi thực thi
StatusPass / Fail / Blocked / Not RunFail
PriorityMức độ quan trọng của test caseHigh

Ba nhóm test case cần có: Normal – Abnormal – Boundary

Đây là khung tư duy đơn giản nhất để không bỏ sót. Với bất kỳ chức năng nào, hãy tự hỏi ba câu theo thứ tự này.

1. Normal case — luồng đúng

Người dùng làm đúng mọi thứ thì hệ thống có chạy đúng không. Đây là nhóm ít lỗi nhất nhưng bắt buộc phải có, vì nếu luồng chính hỏng thì không cần test tiếp.

2. Abnormal case — luồng sai

Người dùng nhập sai, bỏ trống, nhập sai định dạng, thao tác sai thứ tự, mất mạng giữa chừng. Đây là nơi phần lớn khiếm khuyết ẩn náu, vì lập trình viên thường code cho luồng đúng trước.

3. Boundary case — giá trị biên

Các giá trị nằm ngay tại và sát ranh giới cho phép. Lỗi lệch một đơn vị là loại lỗi kinh điển của lập trình, nên đây là nhóm cho tỉ lệ tìm ra lỗi trên mỗi test case cao nhất.

Ví dụ: bộ test case cho chức năng đăng nhập

Giả sử yêu cầu: người dùng đăng nhập bằng email và mật khẩu; mật khẩu từ 8 đến 32 ký tự; sai quá 5 lần liên tiếp thì khoá tài khoản trong 15 phút.

Bộ test case rút gọn cho chức năng đăng nhập
IDNhómTình huốngKết quả mong đợi
TC_01NormalEmail đúng, mật khẩu đúngĐăng nhập thành công, chuyển tới trang dashboard
TC_02AbnormalEmail đúng, mật khẩu saiBáo "Email hoặc mật khẩu không đúng", không tiết lộ trường nào sai
TC_03AbnormalEmail không tồn tạiCùng một thông báo với TC_02 — tránh lộ thông tin tài khoản tồn tại
TC_04AbnormalBỏ trống cả hai trườngBáo lỗi bắt buộc trên từng trường
TC_05AbnormalEmail sai định dạng: "abc@"Báo lỗi định dạng email ngay khi rời khỏi trường
TC_06BoundaryMật khẩu 7 ký tựBáo lỗi độ dài tối thiểu
TC_07BoundaryMật khẩu 8 ký tựChấp nhận, đăng nhập thành công
TC_08BoundaryMật khẩu 32 ký tựChấp nhận, đăng nhập thành công
TC_09BoundaryMật khẩu 33 ký tựBáo lỗi độ dài tối đa
TC_10BoundarySai mật khẩu lần thứ 5Vẫn báo lỗi thường, chưa khoá
TC_11BoundarySai mật khẩu lần thứ 6Khoá tài khoản 15 phút, hiển thị thời gian còn lại
TC_12AbnormalĐăng nhập đúng khi tài khoản đang bị khoáTừ chối đăng nhập dù mật khẩu đúng
TC_13AbnormalNhập chuỗi SQL injection vào ô emailXử lý an toàn, không lỗi máy chủ, không truy vấn bất thường
TC_14AbnormalMật khẩu có khoảng trắng đầu và cuốiTheo đặc tả — nếu chưa quy định, đây là câu hỏi cần hỏi lại BA

7 nguyên tắc viết test case tốt

  1. Mỗi test case kiểm tra đúng một điều. Gộp nhiều mục đích vào một test case khiến bạn không biết chính xác cái gì hỏng khi nó fail.
  2. Viết cho người khác đọc. Giả định người thực thi chưa từng thấy sản phẩm — nếu họ phải hỏi bạn, test case chưa đạt.
  3. Kết quả mong đợi phải cụ thể và kiểm chứng được. Tránh các từ như "đúng", "bình thường", "hợp lý".
  4. Độc lập với nhau. Test case sau không nên phụ thuộc vào trạng thái do test case trước để lại, trừ khi bạn cố tình thiết kế một chuỗi.
  5. Dữ liệu cụ thể, không nói chung chung. Ghi "nhập 100000000" thay vì "nhập số tiền lớn".
  6. Truy vết được về yêu cầu. Mỗi test case nên chỉ ra nó phủ yêu cầu nào — để khi yêu cầu thay đổi bạn biết cần sửa test case nào.
  7. Đặt tên có ý nghĩa. Đọc tiêu đề là hiểu tình huống, không cần mở chi tiết.

Mẫu test case dùng ngay

Nếu đội bạn quản lý test case bằng bảng tính, đây là bộ cột tối thiểu nên có. Thêm cột thì được, bớt cột thì nên cân nhắc kỹ.

Test Case ID   | Module    | Tiêu đề
Precondition   | Test Data | Steps
Expected Result| Actual Result | Status
Priority       | Requirement ID | Ghi chú

Ví dụ một dòng:
TC_LOGIN_007 | Đăng nhập | Khoá tài khoản sau 6 lần sai mật khẩu
Precondition: Tài khoản test@pinelab.vn active, bộ đếm sai = 0
Test Data: email hợp lệ + mật khẩu sai, lặp 6 lần
Steps: 1) Mở /login  2) Nhập email  3) Nhập mật khẩu sai  4) Bấm Đăng nhập  5) Lặp lại bước 3-4 sáu lần
Expected: Từ lần thứ 6, hệ thống khoá tài khoản 15 phút và hiển thị thời gian còn lại
Priority: High | Requirement: REQ-AUTH-012
HỎI ĐÁP

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

Test case và test scenario khác nhau thế nào?

Test scenario là mô tả khái quát về điều cần kiểm thử, ví dụ "kiểm tra chức năng đăng nhập". Test case là hướng dẫn chi tiết cho một tình huống cụ thể trong scenario đó, có dữ liệu đầu vào, các bước và kết quả mong đợi rõ ràng. Một scenario thường sinh ra nhiều test case.

Một chức năng cần viết bao nhiêu test case là đủ?

Không có con số cố định. Tiêu chí đúng là phủ được các phân vùng tương đương, các giá trị biên và các luồng lỗi quan trọng của chức năng đó, ưu tiên theo mức rủi ro. Với một ô nhập đơn giản thường là 6 – 10 test case; với một luồng nghiệp vụ nhiều điều kiện có thể lên vài chục.

Viết test case bằng công cụ gì?

Phổ biến nhất vẫn là Excel hoặc Google Sheets cho đội nhỏ. Đội lớn hơn dùng công cụ quản lý kiểm thử như TestRail, Xray, Zephyr hoặc Qase để liên kết test case với yêu cầu và bug. Công cụ không quan trọng bằng việc test case có rõ ràng và truy vết được hay không.

Có nên viết test case trước khi có sản phẩm không?

Nên. Viết test case dựa trên tài liệu yêu cầu ngay khi có yêu cầu là cách hiệu quả nhất để phát hiện yêu cầu mơ hồ, thiếu hoặc mâu thuẫn. Nếu bạn không viết nổi kết quả mong đợi cho một tình huống, đó là dấu hiệu yêu cầu chưa đủ rõ.