Lý thuyết Kiểm thử Phần mềm: Bảng quyết định Decision Table

Khám phá kỹ thuật kiểm thử Bảng quyết định (Decision Table). Hướng dẫn chi tiết cách lập bảng, ví dụ minh họa và ứng dụng thực tế trong kiểm thử phần mềm.

bảng quyết địnhdecision table testingkiểm thử phần mềmkỹ thuật kiểm thửblack box testinglogic kiểm thử

 
info

1. Tổng quan về Kỹ thuật

Kiểm thử Bảng quyết định là một kỹ thuật kiểm thử hộp đen (Black-box testing) mạnh mẽ và có tính hệ thống cao. Kỹ thuật này được thiết kế đặc biệt để giải quyết các hệ thống có logic nghiệp vụ phức tạp, nơi mà đầu ra (kết quả) phụ thuộc chặt chẽ vào sự kết hợp của nhiều đầu vào (điều kiện) khác nhau.

Trong thực tế phát triển phần mềm, các kỹ thuật đơn giản như Phân vùng tương đương (Equivalence Partitioning) hay Phân tích giá trị biên (Boundary Value Analysis) thường thất bại hoặc không đủ độ bao phủ khi phải đối mặt với các quy tắc nghiệp vụ đan chéo nhau. Bảng quyết định ra đời để lấp đầy khoảng trống này bằng cách liệt kê toàn bộ các tổ hợp có thể xảy ra.

Kỹ thuật này còn được gọi là Bảng Nguyên nhân - Kết quả (Cause-Effect Table). Nguyên nhân chính là các điều kiện đầu vào mà người dùng hoặc hệ thống cung cấp. Kết quả chính là những hành động mà phần mềm phải thực thi tương ứng với tổ hợp nguyên nhân đó.

2. Các thành phần cấu trúc của Bảng quyết định

Một bảng quyết định tiêu chuẩn luôn được chia thành 4 phần tư (quadrants) rõ rệt. Sự phân chia này giúp tách biệt rõ ràng giữa "Những gì chúng ta có thể thay đổi" (Điều kiện) và "Những gì hệ thống phải phản hồi" (Hành động).

input

2.1. Nhóm Điều kiện (Conditions)

Cuống điều kiện (Condition Stub)

Nằm ở góc trên bên trái của bảng. Đây là danh sách liệt kê tất cả các điều kiện, tiêu chí đầu vào hoặc các biến số ảnh hưởng đến quy trình. Nó trả lời câu hỏi: "Hệ thống cần kiểm tra những yếu tố nào?".

Mục điều kiện (Condition Entry)

Nằm ở góc trên bên phải của bảng. Phần này chứa các giá trị cụ thể mà các điều kiện có thể nhận. Thông thường, trong bảng quyết định nhị phân, các giá trị này là Đúng (True - T) hoặc Sai (False - F), hoặc Có (Yes - Y) / Không (No - N).

bolt

2.2. Nhóm Hành động (Actions)

Cuống hành động (Action Stub)

Nằm ở góc dưới bên trái. Danh sách tất cả các hành động có thể xảy ra, các kết quả đầu ra hoặc thông báo lỗi mà hệ thống có thể sinh ra. Nó trả lời câu hỏi: "Hệ thống có thể làm những gì?".

Mục hành động (Action Entry)

Nằm ở góc dưới bên phải. Nó chỉ ra liệu một hành động cụ thể có được thực thi hay không ứng với một cột tổ hợp điều kiện cụ thể. Thường được đánh dấu bằng dấu tích (X) để biểu thị sự thực thi, hoặc bỏ trống (hoặc đánh dấu -) nếu không thực thi.

Sơ đồ Cấu trúc Bảng quyết định
Cuống điều kiện
(Danh sách các điều kiện)
Mục điều kiện
(Tổ hợp các giá trị T/F)
Cuống hành động
(Danh sách kết quả)
Mục hành động
(Đánh dấu X cho kết quả tương ứng)

3. Quy trình từng bước xây dựng Bảng quyết định

Việc xây dựng một bảng quyết định đòi hỏi sự tỉ mỉ trong việc phân tích tài liệu đặc tả yêu cầu (SRS - Software Requirements Specification). Bỏ sót một điều kiện hoặc tính toán sai số lượng quy tắc có thể dẫn đến việc bỏ lọt các lỗi nghiêm trọng trong phần mềm. Dưới đây là 5 bước chuẩn hóa để tạo ra một bảng quyết định hoàn chỉnh.

1

Phân tích và Liệt kê tất cả các Điều kiện

Kỹ sư kiểm thử (Tester) đọc kỹ tài liệu yêu cầu để xác định mọi yếu tố có thể ảnh hưởng đến luồng đi của chức năng. Đây chính là việc tạo ra "Cuống điều kiện".

  • Xác định các input từ người dùng (VD: nhập tên, chọn dropdown).
  • Xác định các trạng thái của hệ thống (VD: tài khoản đang bị khóa).
  • Xác định các yếu tố thời gian (VD: đã quá hạn thanh toán).
2

Xác định tất cả các Hành động có thể xảy ra

Xác định hệ thống sẽ phản hồi như thế nào. Một hành động có thể là việc chuyển trang, lưu dữ liệu vào cơ sở dữ liệu, hoặc hiển thị một thông báo lỗi. Đây là việc xây dựng "Cuống hành động".

Lưu ý: Đừng bỏ qua các hành động ẩn như "Ghi log lỗi" hoặc "Gửi email thông báo", chúng cũng cần được kiểm thử.

3

Tính toán số lượng Quy tắc (Tổ hợp Test Case)

Để đảm bảo độ bao phủ 100% các nhánh logic, chúng ta cần tính số lượng cột trong bảng (hay số lượng Rule). Đối với các điều kiện nhị phân (chỉ có True/False), công thức toán học được áp dụng là:

Số lượng Quy tắc = 2N2^N

Trong đó N là số lượng điều kiện đã xác định ở Bước 1. Ví dụ, nếu có 3 điều kiện, chúng ta sẽ có 23=82^3 = 8 quy tắc tương đương với 8 kịch bản kiểm thử (test cases).

4

Điền các Mục điều kiện và Hành động

Tiến hành điền các giá trị T (True) và F (False) vào phần "Mục điều kiện" sao cho sinh ra đủ các tổ hợp không trùng lặp. Một mẹo nhỏ để điền không bị thiếu là:

  • Dòng điều kiện đầu tiên: Điền xen kẽ một nửa T, một nửa F (Ví dụ: T T T T F F F F).
  • Dòng điều kiện thứ hai: Chia đôi số lượng lại (Ví dụ: T T F F T T F F).
  • Dòng cuối cùng: Đan xen liên tục (T F T F T F T F).

Sau đó, dựa vào logic nghiệp vụ để đánh dấu (X) vào các phần "Mục hành động" tương ứng với mỗi cột.

5

Rút gọn Bảng quyết định (Tùy chọn nhưng Khuyến nghị)

Trong thực tế, khi số lượng điều kiện lớn, số lượng test case sẽ bùng nổ theo cấp số nhân (Ví dụ 10 điều kiện = 1024 quy tắc). Quá trình rút gọn giúp loại bỏ các điều kiện "Không quan tâm" (Don't Care) - ký hiệu là dấu trừ (-). Nếu một điều kiện có là True hay False cũng không làm thay đổi kết quả cuối cùng trong một ngữ cảnh cụ thể, ta gộp các cột đó lại để tối ưu hóa thời gian kiểm thử mà không làm giảm chất lượng.

login 4. Ví dụ 1: Ứng dụng Bảng quyết định cho Màn hình Đăng nhập

Hãy bắt đầu với một ví dụ kinh điển và dễ hiểu nhất trong kiểm thử phần mềm: Chức năng Đăng nhập (Login Screen). Giả sử hệ thống yêu cầu người dùng nhập Email và Mật khẩu. Logic nghiệp vụ quy định rằng người dùng chỉ được chuyển hướng đến trang chủ (Homepage) nếu cả Email và Mật khẩu đều được nhập chính xác. Bất kỳ đầu vào nào sai đều hiển thị thông báo lỗi.

4.1. Phân tích Bài toán

Các Điều kiện (Conditions):

  • C1: Email chính xác (True/False)
  • C2: Mật khẩu chính xác (True/False)

Các Hành động (Actions):

  • A1: Cho phép đăng nhập thành công & chuyển tới Homepage.
  • A2: Hiển thị thông báo lỗi (Error message).
Tính toán: Số lượng điều kiện (N) = 2. Tổng số quy tắc (Rules) = 22=42^2 = 4.

4.2. Bảng quyết định chi tiết

Thành phần Mô tả chi tiết Rule 1 Rule 2 Rule 3 Rule 4
Điều kiện
(Conditions)
C1: Email đúng F T F T
C2: Mật khẩu đúng F F T T
Hành động
(Actions)
A1: Vào trang chủ - - - X
A2: Báo lỗi X X X -

4.3. Giải thích các kịch bản kiểm thử (Test Cases) từ bảng

Quy tắc 1 (Rule 1)

Tình huống: Người dùng nhập sai Email và sai cả Mật khẩu.

Hệ thống phản hồi: Kích hoạt Hành động A2. Hiển thị thông báo lỗi (VD: "Thông tin đăng nhập không hợp lệ"). Hành động A1 không xảy ra.

Quy tắc 2 (Rule 2)

Tình huống: Nhập đúng Email nhưng sai Mật khẩu.

Hệ thống phản hồi: Kích hoạt Hành động A2. Vì một điều kiện sai, logic bảo mật ngăn chặn đăng nhập và báo lỗi (VD: "Sai mật khẩu").

Quy tắc 3 (Rule 3)

Tình huống: Nhập sai Email nhưng nhập Mật khẩu đúng cú pháp.

Hệ thống phản hồi: Kích hoạt Hành động A2. Dù mật khẩu đúng nhưng tài khoản không tồn tại. Hiển thị thông báo lỗi.

check_circle Quy tắc 4 (Rule 4) - Happy Path

Tình huống: Nhập chính xác cả Email và Mật khẩu.

Hệ thống phản hồi: Kích hoạt Hành động A1. Đăng nhập thành công, session được tạo, chuyển vào giao diện Homepage.

lightbulb Bài học rút ra:

Nhờ có bảng quyết định, Tester có thể tự tin khẳng định rằng mình đã kiểm tra tất cả 100% các trường hợp logic có thể xảy ra của chức năng đăng nhập, không bỏ sót bất kỳ tổ hợp nào giữa Email và Password. Nếu chỉ đoán mò, tester mới vào nghề có thể quên kiểm tra trường hợp Rule 1 (sai cả hai).

shopping_cart 5. Ví dụ 2: Hệ thống Giảm giá Thương mại điện tử (Độ phức tạp cao hơn)

Để thấy rõ sức mạnh của Kỹ thuật Bảng quyết định, chúng ta hãy xét một ví dụ phức tạp hơn, nơi các điều kiện đan xen chặt chẽ. Một nền tảng e-commerce áp dụng quy tắc giảm giá như sau:

Đặc tả yêu cầu nghiệp vụ (Business Rules):

Khách hàng sẽ nhận được chiết khấu 20% nếu thỏa mãn MỘT TRONG CÁC điều kiện kết hợp sau:

  • Khách hàng là thành viên VIP.
  • Hoặc: Là khách hàng thường (Không VIP) NHƯNG có đơn hàng trên 1 triệu VNĐ có nhập mã Coupon hợp lệ.

Nếu không thỏa mãn các điều kiện trên, thanh toán theo giá gốc (Không giảm giá).

5.1. Khởi tạo Thông số

3 Điều kiện (Conditions):

  • C1: Thành viên VIP (Y/N)
  • C2: Đơn hàng > 1 Triệu (Y/N)
  • C3: Mã Coupon hợp lệ (Y/N)

2 Hành động (Actions):

  • A1: Áp dụng giảm giá 20%
  • A2: Không giảm giá (Giá gốc)
Số lượng quy tắc cần thiết = 23=82^3 = 8 Rules

5.2. Xây dựng Bảng quyết định 8 Quy tắc

Tham số R1 R2 R3 R4 R5 R6 R7 R8
C1: Khách VIP Y Y Y Y N N N N
C2: Đơn > 1 Tr Y Y N N Y Y N N
C3: Có Coupon Y N Y N Y N Y N
A1: Giảm 20% X X X X X - - -
A2: Không Giảm - - - - - X X X

5.3. Phân tích kết quả bảng quyết định

Nhìn vào bảng trên, chúng ta dễ dàng diễn dịch các kịch bản sang bài toán thực tế. Điều này rất hữu ích cho lập trình viên (Developer) để viết code (sử dụng lệnh if-else) và cho người kiểm thử (Tester) để tạo dữ liệu test.

R1 đến R4

Khách hàng là VIP (C1 = Y). Dựa theo yêu cầu "Thành viên VIP luôn được giảm giá", hệ thống không cần bận tâm đơn hàng bao nhiêu tiền hay có mã giảm giá hay không. Hành động chắc chắn là A1 (Giảm 20%).

Rule 5

Khách thường (C1 = N), nhưng có đơn hàng trên 1 triệu (C2 = Y) và nhập mã coupon hợp lệ (C3 = Y). Thỏa mãn vế 2 của luật kinh doanh. Hành động là A1 (Giảm 20%).

R6, R7, R8

Khách thường (C1 = N) và thiếu một trong hai điều kiện phụ (hoặc không đủ 1 triệu, hoặc không có mã, hoặc thiếu cả hai). Kết quả: Trượt yêu cầu khuyến mãi. Hành động là A2 (Không giảm giá).

compress 6. Kỹ thuật Rút gọn Bảng quyết định (Table Minimization)

Ở ví dụ E-commerce phía trên, bạn có thể nhận thấy một sự lặp lại về kết quả ở các quy tắc từ R1 đến R4. Dù C2 và C3 thay đổi giá trị như thế nào (Y/Y, Y/N, N/Y, N/N), kết quả cuối cùng vẫn là A1 (Giảm 20%). Tại sao phải viết 4 test case cho cùng một kết quả logic khi yếu tố quyết định chỉ nằm ở C1?

Đây là lúc chúng ta sử dụng khái niệm "Don't Care" (Không quan tâm), thường được ký hiệu bằng dấu gạch ngang (-). Việc rút gọn giúp giảm thiểu số lượng kịch bản kiểm thử trùng lặp, tiết kiệm thời gian thực thi (execution time) mà vẫn đảm bảo độ bao phủ rủi ro.

Bảng sau khi Rút gọn

Tham số R1-R4 R5 R6 R7 R8
C1: Khách VIP Y N N N N
C2: Đơn > 1 Tr - Y Y N N
C3: Có Coupon - Y N Y N
A1: Giảm giá X X

Hiệu quả của việc rút gọn:

  • trending_down
    Giảm số lượng Test Case: Từ 8 kịch bản ban đầu, chúng ta gộp R1, R2, R3, R4 thành 1 kịch bản duy nhất (Khách VIP thì luôn được giảm giá, không cần quan tâm hóa đơn hay coupon). Giảm tổng số test case xuống còn 5.
  • schedule
    Tiết kiệm chi phí thực thi: Thời gian thiết lập dữ liệu (Data Setup) và thời gian chạy test (Test Execution) giảm đi đáng kể.

thumb_up 7. Ưu điểm nổi bật

Bảo đảm tính Hoàn chỉnh (Completeness)

Toán học đảm bảo rằng bằng việc tính 2n2^n, mọi tổ hợp của điều kiện đều được cân nhắc. Rất hiếm khi bỏ sót các trường hợp ngoại lệ (corner cases).

Ngôn ngữ chung cho mọi vai trò

Bảng quyết định cực kỳ trực quan. Business Analyst (BA), Lập trình viên (Dev), Tester và thậm chí Khách hàng đều có thể đọc bảng và thống nhất logic mà không cần hiểu mã nguồn.

Dễ dàng cập nhật

Khi logic nghiệp vụ thay đổi (thêm mới một điều kiện khuyến mãi), việc thêm một hàng vào "Cuống điều kiện" và mở rộng bảng sẽ trực quan và ít gây lỗi hồi quy (regression) hơn là đọc lại hàng đống tài liệu text.

warning 8. Nhược điểm và Thách thức

Bùng nổ trạng thái (State Explosion)

Nếu hệ thống có quá nhiều điều kiện, kích thước bảng trở nên không thể quản lý. Ví dụ: 10 điều kiện = 1024 quy tắc, 20 điều kiện = hơn 1 triệu quy tắc. Khi đó, kỹ thuật rút gọn cũng khó cứu vãn và phải dùng các kỹ thuật chia nhỏ phức tạp hơn.

Không phù hợp kiểm thử Dữ liệu lớn/Vòng lặp

Bảng quyết định chỉ mạnh về mặt logic luận lý (Boolean/Logic Gates). Nó không giúp ích nhiều trong việc kiểm thử các giá trị biên (như nhập số nguyên từ 1 đến 100) hoặc lỗi liên quan đến giao diện người dùng, hiệu năng vòng lặp.

Tốn thời gian tạo lập ban đầu

Phải mất rất nhiều công sức để phân tích rạch ròi các điều kiện độc lập từ một tài liệu nghiệp vụ lộn xộn, viết tay hoặc tài liệu không rõ ràng.

9. Khi nào nên áp dụng Kỹ thuật này?

account_balance

Hệ thống Tài chính

Kiểm thử logic phê duyệt khoản vay, tính lãi suất dựa trên điểm tín dụng, lịch sử trả nợ.

local_mall

Thương mại Điện tử

Quy tắc áp mã giảm giá, tính phí vận chuyển dựa trên khu vực và khối lượng kiện hàng.

health_and_safety

Hệ thống Bảo hiểm

Tính toán mức bồi thường bảo hiểm dựa trên độ tuổi, tiền sử bệnh án và gói dịch vụ.

app_registration

Form Phức tạp

Các biểu mẫu đăng ký đa bước, nơi nội dung trang sau phụ thuộc vào lựa chọn của trang trước.

Kết luận: Không có kỹ thuật kiểm thử nào là hoàn hảo. Một kỹ sư kiểm thử giỏi (Senior QA/QC) luôn biết cách kết hợp Bảng quyết định (để bao phủ logic) cùng với Phân vùng tương đương và Giá trị biên (để bao phủ dữ liệu đầu vào) nhằm tạo ra bộ kịch bản kiểm thử toàn diện nhất.

Mục lục
2. Các thành phần cấu trúc của Bảng quyết định
2.1. Nhóm Điều kiện (Conditions)
2.2. Nhóm Hành động (Actions)
3. Quy trình từng bước xây dựng Bảng quyết định
login 4. Ví dụ 1: Ứng dụng Bảng quyết định cho Màn hình Đăng nhập
4.1. Phân tích Bài toán
4.2. Bảng quyết định chi tiết
4.3. Giải thích các kịch bản kiểm thử (Test Cases) từ bảng
shopping_cart 5. Ví dụ 2: Hệ thống Giảm giá Thương mại điện tử (Độ phức tạp cao hơn)
Đặc tả yêu cầu nghiệp vụ (Business Rules):
5.1. Khởi tạo Thông số
5.2. Xây dựng Bảng quyết định 8 Quy tắc
5.3. Phân tích kết quả bảng quyết định
compress 6. Kỹ thuật Rút gọn Bảng quyết định (Table Minimization)
thumb_up 7. Ưu điểm nổi bật
warning 8. Nhược điểm và Thách thức
9. Khi nào nên áp dụng Kỹ thuật này?
Khoá học liên quan
Kiến thức tương tự