PineLab
Test case & bug

Kỹ thuật thiết kế test case: phân vùng tương đương, giá trị biên, bảng quyết định

Không thể kiểm thử mọi tổ hợp đầu vào — nên câu hỏi thực sự của nghề kiểm thử là: chọn tập nhỏ nào để đại diện tốt nhất cho tập vô hạn? Các kỹ thuật dưới đây là câu trả lời có hệ thống, và cũng chính là chương chiếm nhiều điểm nhất trong đề thi ISTQB Foundation.

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

Ba nhóm kỹ thuật thiết kế test case

NhómDựa trênKỹ thuật tiêu biểuKhi nào dùng
Hộp đen (Black-box)Đặc tả, yêu cầu — không cần biết codePhân vùng tương đương, giá trị biên, bảng quyết định, chuyển trạng tháiPhần lớn công việc của tester
Hộp trắng (White-box)Cấu trúc mã nguồnĐộ phủ câu lệnh, độ phủ nhánhKhi cần đo mức độ code được kiểm thử
Dựa trên kinh nghiệmTrực giác, hiểu biết về lỗi thường gặpĐoán lỗi, kiểm thử khám phá, checklistKhi yêu cầu thiếu, hoặc bổ sung cho hai nhóm trên

Phân vùng tương đương (Equivalence Partitioning)

Ý tưởng: chia miền dữ liệu đầu vào thành các nhóm mà hệ thống được kỳ vọng xử lý giống nhau. Nếu một giá trị trong nhóm chạy đúng, các giá trị còn lại trong nhóm đó nhiều khả năng cũng đúng — nên chỉ cần chọn một đại diện.

Ví dụ

Một ô nhập tuổi để đăng ký dịch vụ, chấp nhận từ 18 đến 65.

Phân vùngKhoảng giá trịLoạiGiá trị đại diện
P1Nhỏ hơn 18Không hợp lệ10
P2Từ 18 đến 65Hợp lệ30
P3Lớn hơn 65Không hợp lệ80
P4Không phải số: "abc"Không hợp lệabc
P5Bỏ trốngKhông hợp lệ(rỗng)

Từ vô hạn giá trị, ta rút xuống 5 test case đại diện. Đây là bước giảm quy mô đầu tiên và mạnh nhất.

Phân tích giá trị biên (Boundary Value Analysis)

Kinh nghiệm thực tế cho thấy lỗi tập trung ở ranh giới chứ không ở giữa phân vùng — vì đó là nơi lập trình viên dễ viết nhầm dấu lớn hơn thành lớn hơn hoặc bằng. Kỹ thuật này bổ sung cho phân vùng tương đương bằng cách kiểm tra chính xác tại các ranh giới.

Biến thể hai giá trị (2-value BVA)

Với mỗi ranh giới, lấy giá trị tại biên và giá trị liền kề bên ngoài. Với khoảng 18 – 65: kiểm 17, 18, 65, 66 — tổng cộng 4 giá trị.

Biến thể ba giá trị (3-value BVA)

Với mỗi ranh giới, lấy giá trị tại biên cùng hai giá trị liền kề hai bên. Với khoảng 18 – 65: kiểm 17, 18, 19, 64, 65, 66 — tổng cộng 6 giá trị.

Ranh giới không chỉ là số

  • Độ dài chuỗi: 0 ký tự, 1 ký tự, độ dài tối đa, độ dài tối đa cộng một.
  • Ngày tháng: ngày cuối tháng, 29/2 năm nhuận, giao thừa năm mới, chuyển múi giờ.
  • Số lượng bản ghi: 0 bản ghi (trạng thái rỗng), 1 bản ghi, đúng một trang, một trang cộng một bản ghi.
  • Thời gian: hết hạn phiên đúng thời điểm, token hết hạn trong lúc đang thao tác.
  • Tiền tệ: số 0, số âm, giá trị làm tròn ở chữ số thập phân cuối.

Bảng quyết định (Decision Table)

Dùng khi hành vi hệ thống phụ thuộc vào tổ hợp của nhiều điều kiện. Phân vùng tương đương xử lý từng đầu vào riêng lẻ rất tốt, nhưng bất lực khi các quy tắc nghiệp vụ đan xen nhau.

Ví dụ: quy tắc giảm giá

Quy tắc: khách hàng thành viên được giảm 10%. Đơn hàng trên 5 triệu được giảm thêm 5%. Có mã khuyến mãi hợp lệ thì giảm thêm 50 nghìn. Với 3 điều kiện nhị phân, ta có 2³ = 8 tổ hợp.

Bảng quyết định cho quy tắc giảm giá
Quy tắcThành viênĐơn > 5 triệuCó mã KMKết quả mong đợi
R1Giảm 15% và trừ thêm 50.000đ
R2KhôngGiảm 15%
R3KhôngGiảm 10% và trừ thêm 50.000đ
R4KhôngKhôngGiảm 10%
R5KhôngGiảm 5% và trừ thêm 50.000đ
R6KhôngKhôngGiảm 5%
R7KhôngKhôngTrừ 50.000đ
R8KhôngKhôngKhôngKhông giảm

Kiểm thử chuyển trạng thái (State Transition Testing)

Dùng khi đối tượng có vòng đời gồm nhiều trạng thái và hành vi phụ thuộc vào trạng thái hiện tại: đơn hàng, hồ sơ vay, phiếu nghỉ phép, tài khoản người dùng.

Ví dụ một đơn hàng: Chờ xác nhận → Đã xác nhận → Đang giao → Hoàn tất, cùng nhánh Đã huỷ có thể xảy ra từ hai trạng thái đầu.

Hai loại test case cần viết

  • Chuyển tiếp hợp lệ: từ "Đã xác nhận" sang "Đang giao" phải thành công.
  • Chuyển tiếp không hợp lệ — nhóm quan trọng hơn và hay bị bỏ sót: từ "Hoàn tất" quay lại "Đang giao" phải bị từ chối; huỷ một đơn đã giao xong phải bị từ chối.

Kỹ thuật hộp trắng: độ phủ câu lệnh và độ phủ nhánh

Hai chỉ số này xuất hiện thường xuyên trong đề ISTQB và trong báo cáo chất lượng của đội phát triển.

IF (a > 0) THEN
    x = 1          -- câu lệnh S1
END IF
y = 2              -- câu lệnh S2
  • Độ phủ câu lệnh (Statement coverage): tỉ lệ câu lệnh được thực thi ít nhất một lần. Chỉ cần 1 test case với a = 5 là đạt 100% — cả S1 và S2 đều chạy.
  • Độ phủ nhánh (Branch/Decision coverage): tỉ lệ nhánh quyết định được đi qua theo cả hai hướng đúng và sai. Cần 2 test case: a = 5 (đúng) và a = -1 (sai).

Bài tập tự luyện có lời giải

Đặc tả: hệ thống tính phí giao hàng. Đơn dưới 300.000đ tính phí 30.000đ. Đơn từ 300.000đ đến dưới 700.000đ tính phí 15.000đ. Đơn từ 700.000đ trở lên miễn phí. Hãy xác định các phân vùng tương đương và các giá trị biên theo biến thể hai giá trị.

Lời giải

  • Phân vùng hợp lệ: P1 = [0; 300.000), P2 = [300.000; 700.000), P3 = [700.000; +∞).
  • Phân vùng không hợp lệ: số âm, giá trị không phải số, giá trị rỗng.
  • Giá trị biên theo biến thể hai giá trị: 299.999 và 300.000 tại ranh giới thứ nhất; 699.999 và 700.000 tại ranh giới thứ hai. Bổ sung biên dưới của miền: -1 và 0.
  • Tổng cộng: 3 test case đại diện phân vùng cộng 6 test case biên, cộng các test case cho đầu vào không hợp lệ.
HỎI ĐÁP

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

Phân vùng tương đương và phân tích giá trị biên khác nhau thế nào?

Phân vùng tương đương chia dữ liệu thành các nhóm được xử lý giống nhau và chọn một giá trị đại diện cho mỗi nhóm. Phân tích giá trị biên tập trung vào các giá trị nằm tại và sát ranh giới giữa các nhóm đó. Hai kỹ thuật luôn được dùng cùng nhau: phân vùng để giảm số lượng, giá trị biên để tăng khả năng tìm ra lỗi.

Khi nào nên dùng bảng quyết định thay vì phân vùng tương đương?

Khi hành vi của hệ thống phụ thuộc vào tổ hợp của nhiều điều kiện chứ không phải từng đầu vào riêng lẻ. Ví dụ quy tắc tính giảm giá dựa trên loại khách hàng, giá trị đơn hàng và mã khuyến mãi cùng lúc. Bảng quyết định đảm bảo bạn không bỏ sót tổ hợp nào.

Đạt 100% độ phủ câu lệnh có nghĩa phần mềm không còn lỗi không?

Không. Độ phủ câu lệnh chỉ đo tỉ lệ dòng code đã được thực thi, không đo việc kết quả có được kiểm chứng đúng hay không, cũng không phát hiện được logic bị thiếu. Một chức năng quên xử lý trường hợp nào đó sẽ không có dòng code tương ứng để đo độ phủ.

Tester không biết code có dùng được kỹ thuật hộp trắng không?

Ở mức đọc hiểu chỉ số thì có. Bạn cần hiểu độ phủ câu lệnh và độ phủ nhánh nghĩa là gì để đọc báo cáo chất lượng và trao đổi với lập trình viên. Việc thiết kế test case hộp trắng thường do lập trình viên thực hiện ở tầng unit test.