Các vị từ định nghĩa trong miền TT trong Hình 1.8

Một phần của tài liệu (LUẬN văn THẠC sĩ) tìm hiểu, nghiên cứu các kỹ thuật cho kiểm thử miền và cải tiến các kỹ thuật đó (Trang 29)

P1: x+y>5 ≡ True

Một miền đƣợc xác định, theo phƣơng pháp của hình học, bởi một tập các ràng buộc đƣợc gọi là các biên khác nhau. Các thuộc tính của một miền đƣợc thảo luận trong nhóm của các thuộc tính của các biên đó nhƣ sau:

Biên đóng (Closed Boundary): Một biên đƣợc cho là đóng nếu các điểm trên biên

cũng thuộc trong miền quan tâm.

Ví dụ: Hãy xem xét miền TT trong Hình 1.8 và biên của nó đƣợc xác định bởi:

P2 : x ≤ −4

Biên trên là một biên đóng của miền TT.

Biên mở (Open Boundary): Một biên đƣợc cho là mở nếu các điểm trên biên không

thuộc về miền đƣợc quan tâm.

Ví dụ: Xem xét miền TT trong Hình 1.8 và biên của nó đƣợc xác định bởi biểu thức

P1: x +y > 5

Biên trên là một biên mở của miền TT. Chúng ta có thể nhận thấy rằng ký hiệu dấu "=" trong một toán tử quan hệ xác định có hay không một biên đƣợc đóng lại. Nếu các toán tử quan hệ trong một hàm của biên có biểu tƣợng "=" trong nó, thì khi đó biên là một biên đóng, nếu không nó là một biên mở.

Miền đóng (Closed Domain): Một miền đƣợc cho là miền đóng nếu tất cả các biên

của nó là đóng.

Miền mở (Open Domain): Một miền đƣợc cho là mở nếu một số biên của nó đƣợc

mở.

Điểm cực biên (Extreme Point): Một điểm cực biên là một điểm mà hai hoặc nhiều

biên đi qua.

Miền liền kề (Adjacent Domains): Hai miền đƣợc cho là liền kề nếu chúng có một

biên chung.

b. Các kiểu lỗi miền:

Một đƣờng đi của chƣơng trình sẽ có một lỗi miền nếu ta xây dựng không chính xác một đƣờng đi của vị từ. Từ giải thích không chính xác của một vị từ sẽ sinh ra một con đƣờng khác với con đƣờng chính xác:

- Mập mờ giữa miền đóng và miền mở;

- Bị dịch chuyển một khoảng cách từ vị trí chính xác; - Bị quay nghiêng một góc so với vị trí chính xác. Từ đó tác giả đƣa ra 3 kiểu lỗi miền cơ bản:

+) Lỗi đóng biên (Closure Error):

Một lỗi đóng biên xảy ra nếu một biên mục tiêu là đóng bị thay bằng một biên mở hoặc ngƣợc lại biên mở bị thay bằng biên đóng trong quá trình xây dựng chƣơng trình. Một số ví dụ về lỗi đóng biên:

- Toán tử quan hệ ≤ đƣợc thực hiện nhƣ là <. - Toán tử quan hệ < đƣợc thực hiện nhƣ là ≤. - Toán tử quan hệ ≥ đƣợc thực hiện nhƣ là >. - Toán tử quan hệ > đƣợc thực hiện nhƣ là ≥.

Nguyên nhân chính xuất hiện lỗi đóng biên do sự mập mờ giữa dấu “=” trong các biểu thức của vị từ

Hình 1.11: Minh họa cho lỗi đóng biên

+) Lỗi dịch chuyển biên (Shifted-Boundary Error):

Một lỗi dịch chuyển biên xảy ra khi biên thực hiện song song với biên dự định. Điều này xảy ra khi giá trị bất biến của bất đẳng thức xác định biên chiếm một giá trị khác với giá trị dự kiến. Trong điều kiện cụ thể, một lỗi dịch chuyển biên xảy ra do sự thay đổi về độ lớn hoặc các dấu hiệu của giá trị bất biến của bất đẳng thức.

Ví dụ: Hãy xem xét biên đƣợc xác định bởi vị từ trong Hình 1.8 sau đây:

P1: x + y > 5

Nếu biên đúng mục đích cần lấy đƣợc đại diện bởi vị từ:

P1’: x + y > 4

Thì khi đó biên đƣợc xác định bởi P1 là song song, nhƣng không giống với biên đƣợc xác định bởi P1

Hình 1.12: Minh họa cho lỗi dịch chuyển biên

+) Lỗi nghiêng biên (Tilted-Boundary Error):

Nếu các hệ số bất biến của các biến trong một vị từ xác định một biên lấy giá trị sai, thì lỗi nghiêng biên xảy ra

Ví dụ: Hãy xem xét biên đƣợc xác định bởi vị từ trong Hình 1.8 sau đây:

P1: x + y> 5

Nếu ý định của ngƣời lập trình là xác định một biên đại diện bởi vị từ

P1’’: x + 0.5y> 5

Thì khi đó biên đƣợc xác định bởi P1 nghiêng so với biên đƣợc xác định bởi P1’’

1.2.4 Xây dựng các điểm kiểm tra ON và OFF trong kiểm thử miền

Trong kiểm thử miền cần xác định rõ mục tiêu là để tìm ra các lỗi miền ở nơi mà các ca kiểm thử đƣợc thiết kế với mục đích phát hiện ra các lỗi miền đã đƣợc nêu trong Phần 1.2.3 ở trên.

Một đặc điểm quan trọng của lỗi miền đó là: Các điểm dữ liệu ở trên hoặc gần biên sẽ có khả năng cao để đƣa ra các lỗi miền. Do đó, với mục tiêu xác định các điểm dữ liệu đƣợc cho là nhạy cảm nhất dẫn đến các lỗi miền, thì việc thực hiện các chƣơng trình với những giá trị đầu vào đó sẽ đem đến kết quả khả thi nhất cho quá trình kiểm thử.

Trong kiểm thử miền tác giả sẽ cho chúng ta làm quen với hai khái niệm về điểm ON và OFF, đây chính là những điểm đƣợc xác định trên hoặc gần với biên của miền nhất, và vì vậy chúng là những điểm dễ phát hiện ra lỗi của chƣơng trình.

a. Điểm ON:

*) Định nghĩa: Cho một biên, một điểm ON là một điểm trên biên hoặc "rất gần" biên. Định nghĩa này cho thấy rằng chúng ta có thể chọn một điểm ON theo hai cách phụ thuộc vào vị từ và mục đích lựa chọn. Từ đó chúng ta sẽ biết lựa chọn một điểm ON theo cách nào là phù hợp:

- Nếu một điểm có thể đƣợc lựa chọn nằm chính xác trên biên, khi đó lựa chọn điểm nhƣ vậy sẽ là một điểm ON lý tƣởng nhất.

- Nếu một bất đẳng thức của biên dẫn đến một giải pháp gần đúng, chọn một điểm rất gần với biên. (ví dụ: x < 5 thì chọn giá trị nhỏ và gần 5 nhất để thỏa mãn điều kiện của x)

*) Ví dụ: Hãy xem xét những bất đẳng thức của biên sau đây

PON1: x + 7y ≥ 6

Cho x = -1, vị từ PON1 sẽ đƣa ra một giá trị chính xác của y là = 1. Do đó, điểm (-1, 1) nằm trên biên.

Tuy nhiên, nếu chúng ta chọn x = 0, vị từ PON1 dẫn đến một giải pháp gần đúng của y ở dạng y = 6/7 = 0.8571428. . . Vì y không có một giá trị chính xác, chúng ta có thể cắt nó thành 0.857 hoặc làm tròn nó thành 0.858. Ta nhận thấy rằng điểm (0, 0.857) không đáp ứng các vị từ PON1 (vì 0.857y < 6), trong khi điểm (0, 0.858) thỏa mãn (vì 0.858y > 6). Do đó, điểm (0, 0.858) là một điểm ON nằm rất gần với biên PON1.

Do đó ta thấy: theo bất đẳng thức PON1 thì nếu chọn x=1 sẽ xác định đƣợc chính xác y = 1, khi đó ta sẽ có một điểm chính xác nằm trên biên. Tuy nhiên nếu cho x = 0

thì y = 6/7 và cho một số không chính xác, khi đó chọn một giá trị tƣơng đối của y sẽ cho ta một điểm gần với biên.

*) Ví dụ: Hãy xem xét một miền với biên mở nhƣ sau: PON2: x + 7y < 6

Điểm nằm chính xác trên biên đƣợc xác định bởi vị từ: PON2’ : x + 7y = 6

Nhƣng điểm đó lại không phải là một phần của miền đang đƣợc xem xét. Điểm (- 1, 1) nằm chính xác trên biên PON2 và là một điểm ON. Lƣu ý rằng điểm (-1, 1) không phải là một phần của miền đang đƣợc xem xét. Tƣơng tự nhƣ vậy, các điểm (0, 0.858), trong đó gần nhƣ trên biên, nó nằm rất gần với biên, là một điểm ON và nó nằm ngoài phạm vi quan tâm.

b. Điểm OFF:

*) Định nghĩa: Một điểm OFF của một biên là điểm nằm cách xa biên.

Tuy nhiên, khi lựa chọn một điểm OFF, chúng ta phải xem xét liệu một biên là mở hay đóng đối với một miền:

- Nếu một biên là mở với một miền đang đƣợc xem xét, thì khi đó một điểm OFF của biên đó là một điểm trong nằm bên trong miền với một khoảng cách nhỏ tùy ý từ biên.

- Nếu một biên là đóng so với miền đang đƣợc xem xét, thì sau đó một điểm OFF của biên đó là một điểm ngoài nằm ở phía ngoài của biên với một khoảng cách nhỏ tùy ý.

*) Ví dụ: Hãy xem xét một miền D1 với một biên đóng nhƣ sau: POFF1: x + 7y ≥ 6

Khi biên đƣợc đóng lại, một điểm OFF nằm ngoài miền này có nghĩa là bất đẳng thức biên không đáp ứng. Lƣu ý rằng điểm (-1, 1) nằm chính xác trên biên và nó thuộc về miền. Do đó, (-1, 1) không phải là một điểm OFF. Tuy nhiên, điểm (-1, 0.99) nằm bên ngoài miền, và nó không phải là một phần của miền đang đƣợc xem xét. Điều này có thể dễ dàng kiểm chứng bằng cách thay thế x = -1 và y = 0,99 vào trong bất đẳng thức POFF1, khi đó sẽ sinh ra một giá trị 5.93 < 6. Do đó, (-1, 0.99) là một điểm OFF.

*) Ví dụ: Hãy xem xét một miền D2, đó là miền tiếp giáp với miền D1 trong ví dụ trên với một biên mở nhƣ sau: POFF2: x + 7Y <6

Khi biên POFF2 là mở, một điểm OFF nằm bên trong miền. Có thể dễ dàng xác định điểm (-1, 0.99) nằm bên trong D2, và do đó nó là một điểm OFF cho miền D2 đối với biên POFF2.

c. Tổng quát:

- Trong khi kiểm thử một biên đóng, các điểm ON sẽ thuộc miền đƣợc kiểm tra, và các điểm OFF nằm trong một miền lân cận.

- Trong khi kiểm thử một biên mở, các điểm ON nằm trong một miền lân cận, còn các điểm OFF nằm trong miền đang đƣợc thử nghiệm.

Hình 1.14: Điểm ON và OF

Để hiểu rõ hơn ta có thể xem thêm một ví dụ trong Hình 1.14, trong đó cho thấy hai miền D1 và D2 đƣợc xác định bởi vị từ x < 4 và x ≥ 4 tƣơng ứng. Vì vậy, thực tế biên đƣợc xác định bởi vị từ sau đây:

PON, OFF: x = 4

Trong hình, chúng ta thấy hai điểm ON là A và B, trong đó A nằm chính xác trên biên và B nằm "rất gần" với biên. Vì vậy, chúng ta có A = 4 và ví dụ B = 4,00001. Chúng ta thấy một điểm OFF C nằm trong D1 và cách biên một khoảng. Điểm C = 3,95 nằm bên trong miền D1 và bên ngoài miền D2.

1.2.5 Xây dựng các chiến lƣợc lựa chọn ca kiểm thử

Trong phần này, chúng ta sẽ tìm hiểu cách tác giả giải thích các phƣơng pháp để lựa chọn các ca kiểm thử với các trƣờng hợp xuất hiện lỗi khác nhau trong kiểm thử miền và chứng minh đƣợc rằng dữ liệu thử nghiệm đã đƣợc lựa chọn sẽ tiết lộ lỗi miền xác định tại Phần 1.2.3.

a. Tổng quan các trƣờng hợp xuất hiện lỗi miền:

Đối với từng miền và cho mỗi biên, chọn hai điểm ON là A, B và một điểm OFF là C. Tiêu chí này tạo ra dữ liệu thử nghiệm cho thấy lỗi miền. Tuy nhiên tùy thuộc vào mỗi loại biên và loại lỗi miền mà các tiêu chí lựa chọn các ca kiểm thử cũng có sự khác nhau, cụ thể nhƣ sau:

+) Trƣờng hợp biên đóng với miền xét (Closed inequality boundary)

- Dịch chuyển biên làm giảm đi độ lớn miền (Boundary shift resulting in a reduced domain)

- Dịch chuyển biên làm mở rộng độ lớn miền (Boundary shift resulting in an enlarged domain)

- Nghiêng biên (Boundary tilt) - Lỗi đóng biên (Closure error)

+) Trƣờng hợp biên mở với miền xét (Open inequality boundary)

- Dịch chuyển biên làm giảm đi độ lớn miền (Boundary shift resulting in a reduced domain)

- Dịch chuyển biên làm mở rộng độ lớn miền (Boundary shift resulting in an enlarged domain)

- Nghiêng biên (Boundary tilt) - Lỗi đóng biên (Closure error) +) Biên bình đẳng(Equality boundary)

Để thuận tiện và tổng quát, tác giả xem xét trƣờng hợp bất đẳng thức chứa 2 biến quan hệ nhau, khi đó sẽ xây dựng miền vào cho các ca kiểm thử mô phỏng trong không gian miền hai chiều. Xem xét hai miền liền kề D1 và D2, giả thiết rằng việc tính toán chƣơng trình tƣơng ứng với D1 và D2 sẽ thu đƣợc f1 và f2, và f1 ≠ f2.

b. Trƣờng hợp biên đóng với miền đang xét

+) Biên dịch chuyển làm cho miền xét bị giảm đi:

Biên giữa hai miền D1 và D2 đã đƣợc dịch chuyển bởi một số lƣợng nhất định (xem Hình 1.15).

Hình 1.15: Biên dịch chuyển làm giảm đi độ lớn miền xét (closed inequality).

Trong hình này ta thấy biên thực tế giữa hai miền và một vị trí tùy ý của biên mong đợi. Cần chú ý rằng tác giả sẽ giả thuyết không biết chính xác vị trí của biên mong đợi. Biên dự kiến đã đƣợc hiển thị chỉ để giải thích rằng biên thực tế đã di chuyển ra khỏi biên dự kiến và để chứng minh phƣơng pháp này sẽ xây dựng các Ca kiểm thử đƣa ra đƣợc lỗi trong trƣờng hợp này.

Biên giữa hai miền là đóng đối với miền D1. Do đó, hai điểm ON là A và B thuộc về miền D1, và điểm OFF C thuộc miền D2. Vì vậy mà kết quả đầu ra thực tế từ chƣơng trình tƣơng ứng để kiểm tra dữ liệu A, B, và C ta sẽ đƣợc f1(A), f1(B), và f2(C) tƣơng ứng.

Rõ ràng ta thấy trong Hình 1.15 nếu trong trƣờng hợp không có bất kỳ sự thay đổi biên nào (có nghĩa là sẽ không có lỗi xuất hiện trong chƣơng trình) và biên xác định lúc này là d trùng với biên lý tƣởng. Khi đó tất cả các điểm kiểm tra đều thuộc về miền D1. Ta có kết quả đầu ra dự kiến tƣơng ứng để kiểm tra dữ liệu A, B, và C đƣợc f1(A), f1(B), và f1(C). Các kết quả đƣợc liệt kê trong Bảng 1.9 Chúng ta quan sát, bằng cách so sánh cột thứ hai và thứ ba của Bảng 1.9, kết quả thực tế và kết quả dự kiến là không giống hệt nhau cho điểm dữ liệu C. Do đó, điểm dữ liệu C cho thấy lỗi dịch chuyển biên.

Bảng 1.9: Phát hiện lỗi khi biên dịch chuyển làm giảm đi độ lớn miền xét (Closed Inequality)

Ca kiểm thử Kết quả thực tế Kết quả dự kiến Phát hiện lỗi

A f1(A) f1(A) Không

B f1(B) f1(B) Không

Điều quan trọng là chúng ta cần phải hiểu:

 Chúng ta không cần phải biết vị trí chính xác của biên mong đợi. Bởi vì cái mà chúng ta thực sự cần là kết quả chƣơng trình dự kiến để đáp ứng với ba điểm dữ liệu A, B, và C.

 Tất cả ba điểm dữ liệu A, B, và C không cần đồng thời phải tiết lộ các lỗi. Mục đích của chúng ta là để chỉ ra rằng dữ liệu thử nghiệm đƣợc lựa chọn theo các tiêu chí quy định nhƣ trên sẽ có khả năng để lộ các lỗi miền. Vì vậy chỉ cần thỏa mãn ít nhất một điểm dữ liệu cho thấy lỗi, khi đó ta có thể kết luận lỗi chƣơng trình xuất hiện với ca kiểm thử đƣợc lựa chọn.

 Nếu điểm C cách biên một khoảng cách có độ lớn là a, sau đó biên sẽ dịch chuyển một đoạn nhỏ hơn độ lớn a này thì lỗi miền không thể đƣợc phát hiện. Vì khi đó Kết quả dự kiến f2(C) giống hệt với Kết quả thực tế f2(C).

+) Biên dịch chuyển để nhận đƣợc miền rộng hơn:

Để phát hiện lỗi này, chúng ta theo dõi Hình 1.16, nơi mà biên giữa hai miền D1 và D2 đã chuyển từ vị trí dự kiến d của nó đến vị trí thực tế d’ làm cho kích thƣớc của miền D1 đƣợc xem xét đã mở rộng.

Hình 1.16: Biên dịch chuyển làm tăng độ lớn miền xét (closed inequality).

Một lần nữa, chúng ta không biết chính xác vị trí của biên mong đợi. Biên giữa hai miền là đóng đối với miền D1. Do đó, hai điểm ON là A và B thuộc về miền D1, và điểm OFF C thuộc miền D2. Vì vậy mà kết quả đầu ra thực tế từ chƣơng trình tƣơng ứng cho việc để kiểm tra các dữ liệu A, B, và C là f1(A), f1(B), và f2(C).

Từ Hình 1.16 ta thấy, trong trƣờng hợp không có bất kỳ sự thay đổi biên, tất cả các điểm kiểm tra thuộc về miền D2. Và khi đó, kết quả mong đợi tƣơng ứng để kiểm tra dữ liệu A, B, và C là f2(A), f2(B), và f2(C). Chúng ta quan sát từ Bảng 1.10 là Kết quả thực tế và Kết quả dự kiến không giống nhau cho các điểm dữ liệu A và B.

Một phần của tài liệu (LUẬN văn THẠC sĩ) tìm hiểu, nghiên cứu các kỹ thuật cho kiểm thử miền và cải tiến các kỹ thuật đó (Trang 29)

Tải bản đầy đủ (PDF)

(76 trang)