Conditions Rule 1 Rule 2 Rule 3 Rule 4
Married? Yes Yes No No Good student? Yes No Yes No
Action
Discount($) 60 25 50 0
Bốn thành phần cơ bản của một bảng quyết định được mô tả chi tiết trong bảng 3.9 bao gồm: Phần bên trái đường dọc đậm là phần gốc – (stub); bên phải là phần điểm vào. Phần bên trên dòng ngang đậm là phần điều kiện và bên dưới là phần hành động tương ứng. Do đó chúng ta có thể xét gốc điều kiện, các điểm vào điều kiện, gốc hành động, và các điểm vào hành động. Một cột trong phần điểm vào là một luật. Các luật biểu diễn mối tương quan giữa điều kiện của luật và các hành động tương ứng. Trong bảng 3.9, khi điều kiện c1, c2 và c3 đều là đúng (T), các hành động a1 và a2 xảy ra. Khi c1 và c2 đều đúng và c3 sai, thì các hành động a1 và a3 xảy ra. Điểm vào cho c3 trong luật mà c1 và c2 đúng là điểm vào “không quan tâm”. Điểm vào “không quan tâm” có hai cách hiểu chủ yếu: là điều kiện không liên quan, hoặc điều kiện không áp dụng.
Khi chúng ta có các điều kiện nhị phân (true/false, yes/no, 0/1), phần điều kiện của bảng quyết định là một bảng chân lý. Cấu trúc này đảm bảo rằng chúng ta xem xét mọi sự kết hợp có thể của các giá trị điều kiện đầu vào. Khi chúng ta sử dụng các bảng quyết định cho việc kiểm tra sự xác minh trường hợp, thuộc tính toàn vẹn này của một bảng quyết định đảm bảo một dạng của kiểm thử toàn vẹn. Các DT trong đó tất cả các điều kiện là nhị phân được gọi là bảng quyết định điểm vào được giới hạn. Nếu các điều kiện được phép có nhiều giá trị, các bảng kết quả này được gọi là bảng quyết định điểm vào mở rộng.
Để phân biệt các trường hợp kiểm thử với bảng quyết định, chúng ta cần làm sáng tỏ các điều kiện đầu vào và các hành động đầu ra. Đôi khi các điều kiện cuối cùng lại đề cập đến các lớp tương đương của các yếu tố đầu vào, và các hành động ám chỉ các phần xử lý chức năng chủ yếu của các mục được kiểm thử. Các luật được hiểu như là các trường hợp được kiểm thử. Bởi vì bảng quyết định có thể được thực hiện một cách máy móc cho đầy đủ, nên chúng ta thường xây dựng được một tập toàn vẹn các trường hợp kiểm thử.
Sau khi xây dựng xong bảng quyết định, chúng ta sẽ tiến hành tạo các ca kiểm thử dựa trên cấu trúc bảng quyết định. Thông thường tương ứng với mỗi luật sẽ có ít nhất một ca kiểm thử được sinh ta. Nếu điều kiện của các luật là giá trị nhị phân (True/False), cần xây dựng ca kiểm thử cho từng điều kiện. Nếu điều kiện của luật là một vùng, phạm vi giá trị, chúng ta cần phải chú ý xem xét và viết ca kiểm thử cho cả trường hợp biến đầu vào nhận giá trị thấp nhất (min) và cao nhất (max) tương ứng với vùng giá trị đó. Ở bước này, kiểm thử viên cần kết hợp cả phương pháp kiểm thử giá trị biên và bảng quyết định để tạo ra bộ kiểm thử đầy đủ và chính xác [3].
3.3.2. Áp dụng bảng quyết định cho bài toán Tam giác
Trong bảng quyết định 3.11 bên dưới, chúng ta xem một ví dụ của các điểm vào “không quan tâm” và cách sử dụng các luật không xảy ra. Bài toán đặt ra là cho 3 số nguyên dương a, b và c. Yêu cầu, hãy xác định xem 3 số đó có tạo thành 3 cạnh của một tam giác hay không. Trong trường hợp nếu các số nguyên a, b và c không tạo thành ba cạnh của một tam giác, thì chúng ta không cần quan tâm xem xét các đẳng thức có thể xảy ra với từng cặp cạnh, như được chỉ ra trong luật đầu tiên ở bảng 3.11. Ngược lại, nếu ba số nguyên a, b, c thỏa mãn điều kiện tạo thành 3 cạnh của một tam giác thì chúng ta xét đến các điều kiện tiếp theo. Ví dụ trong bảng 3.11, xét luật 3, 4 và 6, nếu 2 cặp số nguyên lần lượt bằng nhau, bằng cách suy diễn ta suy ra ba cặp cạnh này phải bằng nhau, do đó điểm vào phủ định làm cho các luật này không xảy ra.
Bảng 3.11 Bảng quyết định cho bài toán “Tam giác” [6]
c1: a,b,c từ một tam giác N Y Y Y Y Y Y Y Y c2: a = b? - Y Y Y Y N N N N c3: a = c? - Y Y N N Y Y N N c4: b = c? - Y N Y N Y N Y N a1: Không phải một tam giác X
a2: Lệch X
a3: Cân X X X
a4: Đều X
a5: Không xảy ra X X X
Việc sử dụng các điểm vào “không quan tâm” có một ảnh hưởng rất lớn trên cách tiếp cận trong đó các bảng quyết định đầy đủ có thể được chấp nhận. Với các bảng quyết định điểm vào được giới hạn, nếu n điều kiện tồn tại, phải có 2n
luật. Khi các điểm vào “không quan tâm” thực sự chỉ ra rằng điều kiện là không thích hợp, thì chúng ta có thế phát triển một số luật như sau. Các luật trong đó không có điểm vào “không quan tâm” xảy ra chỉ với một luật. Mỗi điểm vào “không quan tâm” trong một luật làm gấp đôi tổng số luật đó. Có tổng số 64 luật cho bảng quyết định 3.12 được thể hiện trong bảng 3.13.
Bảng 3.12 Bảng quyết định được làm mịn cho bài toán “Tam giác” [6] c1: a < b + c? F T T T T T T T T T T c2: b < a + c? - F T T T T T T T T T c3: c < a + b? - - F T T T T T T T T c4: a = b? - - - T T T T F F F F c5: a = c? - - - T T F F T T F F c6: b = c? - - - T F T F T F T F a1: Không phải là tam giác X X X
a2: Lệch X
a3: Cân X X X
a4: Đều X
a5: Không xảy ra X X X
Bảng 3.13 Bảng quyết định với tổng số các luật [6]
c1: a < b + c? F T T T T T T T T T T c2: b < a + c? - F T T T T T T T T T c3: c < a + b? - - F T T T T T T T T c4: a = b? - - - T T T T F F F F c5: a = c? - - - T T F F T T F F c6: b = c? - - - T F T F T F T F Số luật 32 16 8 1 1 1 1 1 1 1 1 a1: Không phải là tam giác X X X
a2: Lệch X
a3: Cân X X X
a4: Đều X
a5: Không xảy ra X X X
Với việc sử dụng bảng quyết định 3.12, chúng ta thu được 11 trường hợp kiểm thử chức năng, trong đó: ba trường hợp không xảy ra, ba giả định sai thuộc tính của tam giác, và một giả định nhận được một tam giác đều, một giả định nhận được một tam giác thường (lệch) và ba giả định nhận được một tam giác cân. Nếu chúng ta mở rộng bảng quyết định để thể hiện cả hai giả định để phá vỡ bất đẳng thức thì chúng ta sẽ phải bổ sung thêm ba trường hợp kiểm thử nữa (ứng với các trường hợp thỏa mãn một cạnh bằng tổng hai cạnh còn lại). Như vậy sẽ phát sinh các luật theo hàm mũ. Trong trường hợp này, chúng ta thấy rằng với một số điểm vào “không quan tâm” sẽ có nhiều luật không xảy ra. Bảng 3.14 bên dưới là danh sách các trường hợp kiểm thử sinh ra tương ứng với bảng quyết định 3.13.
Bảng 3.14 Các trường hợp kiểm thử cho bài toán “Tam giác” [6]
TC_ID a b c Đầu ra mong đợi
TC_01 4 1 2 Không phải tam giác TC_02 1 4 2 Không phải tam giác TC_03 2 2 4 Không phải tam giác TC_04 5 5 5 Tam giác đều
TC_05 ? ? ? Không xảy ra TC_06 ? ? ? Không xảy ra TC_07 2 2 3 Tam giác cân TC_08 ? ? ? Không xảy ra TC_09 2 3 2 Tam giác cân TC_10 3 3 2 Tam giác cân TC_11 3 4 5 Tam giác thường
3.3.3. Áp dụng bảng quyết định cho bài toán Next Date
Hàm “NextDate” có thể được coi là một ví dụ lý tưởng để minh họa sự phụ thuộc của các biến đầu vào. Chính điều này đã làm cho bài toán “NextDate” trở thành một ví dụ điển hình cho việc kiểm thử bằng bảng quyết định, bởi vì đặc trưng của bảng quyết định là làm nổi bật sự phụ thuộc logic của các biến đầu vào. Trước khi xây dựng bảng quyết định cho bài toán này, chúng ta cần xác định các lớp tương đương trong miền giá trị đầu vào của hàm “NextDate”. Những hạn chế mà chúng ta tìm được khi sử dụng các phương pháp khác để sinh ca kiểm thử như phân tích giá trị biên, phân hoạch tương đương (các phương pháp này sẽ được triển khai áp dụng thực tế trên bài toán “NextDate” được trình bày cụ thể trong chương 4) là do sự lựa chọn ngẫu nhiên của các giá trị đầu vào từ các lớp tương đương đã tạo ra những trường hợp kiểm thử không hợp lý. Vấn đề này phát sinh từ sự giả định các biến đầu vào là độc lập. Nếu chúng là độc lập thì một tích đề các của các lớp tương đương có ý nghĩa. Nhưng khi sự phụ thuộc tồn tại giữa các biến trong miền giá trị đầu vào, thì những phụ thuộc này bị mất trong một tích đề các. Định dạng bảng quyết định cho phép chúng ta nhấn mạnh thí dụ những sự phụ thuộc sử dụng khái niệm của “hành động không xảy ra” để biểu thị sự kết hợp không xảy ra của các điều kiện đầu vào. Trong phần này, chúng ta sẽ làm ba phép thử với một công thức bảng quyết định của hàm “NextDate” để chứng minh hiệu quả của bảng quyết định đối với các biến đầu vào có quan hệ phụ thuộc nhau.
Chúng ta sẽ tiến hành khảo sát phương pháp sinh ca kiểm thử dựa trên bảng quyết định áp dụng cho bài toán “NextDate” với nội dung như sau: “NextDate” là một hàm cho phép người dùng nhập vào một ngày bất kì (gọi là Current date) và hệ thống sẽ trả về
ngày tiếp theo (gọi là Next date) tương ứng với ngày nhập vào. Current date và Next date sẽ được biểu diễn qua 3 biến ngày, tháng, năm (tương ứng Day, Month, Year). Hệ thống yêu cầu các giá trị đầu vào phải đúng định dạng, hợp logic và với giả thiết chỉ khảo sát các năm nằm trong khoảng 1812<= Year <=2012.
Khi các điều kiện đầu vào ám chỉ các lớp tương đương, các bảng quyết định có một hình thức đặc trưng nhất định. Các điều kiện trong bảng quyết định 3.15 từ bài toán NextDate, chúng ám chỉ các khả năng loại trừ lẫn nhau cho biến tháng. Bởi vì một tháng nằm trong một lớp tương đương chính xác, chúng ta không thể có một luật trong đó hai đầu vào đều đúng. Các điểm vào “không quan tâm” thực sự phải là false, cụ thể ở bảng 3.15 nếu 1 tháng thuộc tháng M1 thì chúng không thể đồng thời thuộc tháng M2 hoặc M3.