Áp dụng bảng quyết định cho bài toán Tam giác

Một phần của tài liệu Khảo sát một số phương pháp sinh bộ kiểm thử trong kiểm thử hộp đen (Trang 40)

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 (adsbygoogle = window.adsbygoogle || []).push({});

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.

Bảng 3.15 Bảng quyết định với các loại trừ lẫn nhau Các điều kiện R1 R2 R3 c1: tháng là M1 T - - c2: tháng là M2 - T - c3: tháng là M3 - - T a1 a2 a3

Các điểm không quan tâm là các điểm có thể nhận giá trị True hoặc Fasle mà không ảnh hưởng đến tập hành động tương ứng trong luật. Tương ứng với bảng quyết định trong bảng 3.15, chúng ta sẽ nhận được tổng số luật được thể hiện trong bảng 3.16 như sau:

Bảng 3.16 Tổng số luật cho một bảng quyết định với các điều kiện loại trừ lẫn nhau Các điều kiện R1 R2 R3 c1: tháng là M1 T - - c2: tháng là M2 - T - c3: tháng là M3 - - T Số luật 4 4 4 a1

Theo quan điểm tính số luật dựa vào “điểm không quan tâm” thì số luật là 12. Tuy nhiên theo quy tắc tính luật dựa vào số biến đầu vào thì với 3 biến đầu vào (Date, Month, Year) chúng ta sẽ có 23 = 8 luật. Như vậy ở đây có sự sai khác vể tổng số luật sinh ra. Ta sẽ phân tích cụ thể các luật sinh ra như ở bảng 3.17 bên dưới.

Bảng 3.17 Phiên bản mở rộng của bảng quyết định 3.16 [6] Các điều kiện 1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4 3.1 3.2 3.3 3.4 c1: tháng là M1 T T T T T T F F T T F F c2: tháng là M2 T T F F T T T T T F T F c3: tháng là M3 T F T F T F T F T T T T Số luật 1 1 1 1 1 1 1 1 1 1 1 1 a1

Trong bảng 3.17 chúng ta có ba luật trong đó tất cả các điểm vào là T là các luật 1.1, 2.1, và 3.1. Chúng ta cũng có hai luật với các điểm vào có giá trị T, T, F là 1.2 và 2.2. Tương tự cho các luật 1.3 và 3.2, 2.3 và 3.3 là những cặp luật có điểm vào giống nhau. Nếu xóa những luật bị lặp lại, chúng ta sẽ còn lại 7 luật. Như vậy sẽ thiếu 1 luật ứng với trường hợp tất cả các điều kiện đều sai (F). Kết quả của quá trình này được thể hiện trong bảng 3.18. Việc phát triển các bảng quyết định đầy đủ đã tạo ra sự dự dư thừa và không nhất quán. Bảng quyết định 3.19 là dư thừa – 3 điều kiện và 9 luật tồn tại (trong đó luật 9 giống hệt luật 4).

Bảng 3.18 Các điều kiện loại trừ lẫn nhau với các luật không xảy ra [6] Các điều kiện 1.1 1.2 1.3 1.4 2.3 2.4 3.4

c1: tháng là M1 T T T T F F F F c2: tháng là M2 T T F F T T F F c3: tháng là M3 T F T F T F T F Số luật

a1: không xảy ra X X X X X

Các quyết định ở luật số 4 và số 9 trong bảng 3.19 để xử lý một thực hiện trong đó điều kiện c1 đúng và các điều kiện c2 và c3 đều sai thì cả 2 luật 4 và 9 đều áp dụng được, như vậy ở đây có sự dư thừa luật. Bảng 3.19 minh họa cho một bảng quyết định dư thừa.

Bảng 3.19 Một bảng quyết định dư thừa [6] Các điều kiện 14 5 6 7 8 9 c1 T F F F F T c2 - T T F F F c3 - T F T F F a1 X X X - - X a2 - X X X - - a3 X - X X X X

Bảng 3.20 Một bảng quyết định không nhất quán [6] Các điều kiện 14 5 6 7 8 9 c1 T F F F F T c2 - T T F F F c3 - T F T F F a1 X X X - - X a2 - X X X - - a3 X - X X X -

Trong bảng 3.20, các luật 4 và 9 không nhất quán vì tập các hành động tương ứng khác nhau. Bảng 3.20 được coi là không tiền định bởi vì không có cách nào quyết định sẽ áp dụng luật 4 hay luật 9. Vì vậy người kiểm thử cần xem xét cẩn thận khi những điểm vào “không quan tâm” được sử dụng trong bảng quyết định.

3.3.3.1. Phép thử đầu tiên cho bài toán NextDate

Giả sử ta phân lớp tương đương miền giá trị đầu vào cho các biến Date, Month, Year của bài toán Nextdate như dưới đây (nguyên tắc để phân lớp tương đương đã được trình bày trong mục 3.2 – Phương pháp kiểm thử dựa trên lớp đương đương).

M1 = {tháng: tháng có 30 ngày} M2 = {tháng: tháng có 31 ngày} M3 = {tháng: tháng là 2} D1 = {ngày: 1 <= ngày <= 28} D2 = {ngày: ngày = 29} D3 = {ngày: ngày = 30} D4 = {ngày: ngày = 31} (adsbygoogle = window.adsbygoogle || []).push({});

Y1 = {năm: năm là năm nhuận}

Y2 = {năm: năm không phải năm nhuận}

Với yêu cầu của bài toán này thì các năm xét từ năm 1812 đến 2012. Ta xây dựng được bảng quyết định tương ứng như bảng 3.21. Ở đây, với mục đích làm nổi bật những kết hợp không xảy ra, chúng ta có thể tạo ra một bảng quyết định điểm vào hạn chế với các điều kiện và hành động như sau (trong ví dụ này thì lớp tương đương cho biến năm thu lại thành một điều kiện – chỉ có lớp Y1).

Bảng 3.21 Bảng quyết định cho thử nghiệm đầu tiên với 256 luật [6] Các điều kiện c1: tháng trong M1 T c2: tháng trong M2 T c3: tháng trong M3 T c4: ngày trong D1 c5: ngày trong D2 c6: ngày trong D3 c7: ngày trong D4 c8: năm trong Y1 a1: Không xảy ra a2: Ngày tiếp theo

Bảng quyết định này sẽ có 256 luật, trong đó nhiều luật sẽ không xảy ra. Để giải thích tại sao những luật này không xảy ra thì chúng ta phải xem lại một số hành động sau khi xây dựng bảng quyết định. Có một số hành động cần quan tâm như, hành động a1 (có quá nhiều ngày trong một tháng tức là với mỗi một tháng, số ngày lớn nhất trong tháng đó là cố định. Trong trường hợp người dùng nhập ngày hiện tại có giá trị lớn hơn ngày lớn nhất trong tháng thì sẽ xử lý như thế nào); a2 là hành động xử lý các tình huống khi điều kiện vào không thể xảy ra trong một năm không nhuận; hành động a3 thực hiện việc tính ngày tiếp theo khi người dùng nhập đúng định dạng và giới hạn của ngày hiện tại.

3.3.3.2. Phép thử thứ hai cho bài toán NextDate

Phép thử thứ hai sẽ xử lý hạn chế ở phép thử đầu tiên. Để minh họa cho kỹ thuật xây dựng bảng quyết định khác, chúng ta sẽ phát triển một bảng quyết định với điểm vào mở rộng và lấy kết thúc từ gốc hành động. Trong việc tạo ra một bảng quyết định điểm vào mở rộng, chúng ta phải chắc chắn rằng các lớp tương đương được tạo ra phải là thành phần đúng của miền giá trị đầu vào. Tức là khi kết hợp các tập con tách rời của lớp tương đương sẽ tạo thành một tập toàn vẹn, đầy đủ. Vì nếu có bất kì sự “chồng lặp” nào giữa các điểm vào của luật, chúng sẽ sinh ra một trường hợp dư thừa trong đó có nhiều hơn một luật có thể được thỏa mãn. Các lớp tương đương cho các biến đầu vào Date, Month, Year như sau:

M1 = { tháng: tháng có 30 ngày } M2 = { tháng: tháng có 31 ngày } M3 = { tháng: tháng là tháng 2}

D1 = { ngày: 1 ≤ ngày ≤ 28} D2 = { ngày: ngày = 29 } D3 = { ngày: ngày = 30 } D4 = { ngày: ngày = 31 Y1 = { năm: năm = 1900}

Y2 = { năm: 1812 ≤ năm ≤ 2012 AND (năm ≠ 1900) AND (năm = 0 mod 4)} Y3 = { năm: (1812 ≤ năm ≤ 2012 AND năm ≠ 0 mod 4)}

Để đưa ra ngày tiếp theo của ngày hiện tại, chỉ có 5 thao tác có thể được sử dụng bao gồm: tăng ngày, đặt lại ngày, tăng tháng, đặt lại tháng và tăng năm. Ở đây không để cho thời gian đi ngược lại từ đầu nên sẽ không có hành động đặt lại năm. Các điều kiện cho 3 biến đầu vào ngày, tháng, năm sẽ được đưa ra trong một bảng quyết định với 36 luật phù hợp với tích để các của các lớp tương đương (3x4x3=36). Việc kết hợp các luật với các điểm vào “không quan tâm” tạo ra bảng quyết định 3.22 với 16 luật. Chúng ta vẫn có một vấn đề với các luật không xảy ra theo logic, nhưng công thức này giúp chúng ta xác đinh được đầu ra mong đợi của các trường hợp kiểm thử. Nếu chúng ta hoàn thành các điểm vào hành động trong bảng này, thì sẽ tìm được một vấn đề xảy ra với trường hợp tháng 12. Trong luật số 8, nếu là tháng 12 thì sẽ phải đặt lại ngày, đặt lại tháng và tăng năm. Vấn đề này sẽ được giải quyết ở lần thử nghiệm số 3.

Bảng 3.22 Bảng quyết định phép thử thứ 2 với 36 luật [6]

3.3.3.3. Phép thử thứ ba cho bài toán NextDate

Ở lần thử nghiệm số 3 này, chúng ta sẽ làm sáng tỏ những trường hợp liên quan đến miền giá trị cuối năm với ngày hiện tại là ngày 31 tháng 12. Lần này, việc đặc tả cho các ngày, các tháng, xét các điều kiện năm nhuận và năm không nhuận đơn giản hơn phép thử đầu

Một phần của tài liệu Khảo sát một số phương pháp sinh bộ kiểm thử trong kiểm thử hộp đen (Trang 40)