Xây dựng các miền kiểm thử từ chƣơng trình

Một phần của tài liệu 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 25)

Dựa vào các tài liệu đặc tả chƣơng trình và mã nguồn tác giả chỉ ra việc xác định các miền của một chƣơng trình theo các bƣớc sau:

- Bước 1: từ mã nguồn, vẽ một biểu đồ luồng điều khiển chƣơng trình;

- Bước 2: tìm tất cả các diễn giải khác nhau của các vị từ trong chƣơng trình. Lƣu ý rằng một vị từ trong một chƣơng trình có thể có nhiều cách giải thích, bởi vì điều khiển có thể đi đến một nút vị từ thông qua các con đƣờng khác nhau.

- Bước 3: Phân tích những giải thích về các vị từ để xác định các miền.

*) Ví dụ 04: Tác giả đã đƣa ra một ví dụ đơn giản sau đây để minh họa cho việc xác định các miền của một chƣơng trình: xây dựng một hàm codedomain() chấp nhận hai yếu tố đầu vào là x và y và trả về một số nguyên.

Bảng 1.5: Mã chương trình codedomain

int codedomain(int x, int y){ int c, d, k;

c = x + y;

if (c > 5) d = c - x/2; else d = c + x/2;

if (d >= c + 2) k = x + d/2; else k = y + d/4;

return(k); }

Một biểu đồ dòng điều khiển đại diện của codedomain() đƣợc thể hiện trong Hình 1.7. Hai vị từ trong hai tuyên bố if() đã đƣợc đại diện bởi các nút 3 và 6 nhƣ trong Hình 1.7

Hình 1.7: Đồ thị dòng điều khiển mô tả các chức năng trong Bảng 1.53

Xét vị từ đầu tiên:

P1: c > 5

Trong phát biểu if() đầu tiên chỉ có một giải thích, cụ thể là:

P1 : x +y > 5

bởi vì chƣơng trình điều khiển đạt đến tuyên bố if() chỉ thông qua một đƣờng đi từ nút đầu tiên. Tuy nhiên, ở vị từ thứ 2:

P2 : d ≥ c + 2

trong phát biểu if() thứ hai có hai giải thích. Vì khi đó điều khiển chƣơng trình có thể tới đƣợc nút if() thứ 2 theo hai con đƣờng: (i) khi đánh giá if () lần đầu là đúng và (ii) khi đánh giá if () lần đầu tiên là sai.

Hai giải thích đƣợc tóm tắt trong Bảng 1.6:

Bảng 1.6: Hai giải thích của tuyên bố if() thứ 2 trong hình 1.7

P1: c > 5 (x+y > 5)

False: thực hiện lệnh d = c + x/2 True: thực hiện lệnh d = c – x/2

P2: d>= c + 2 P2: d>= c + 2

False True False True

d = c + x/2 d < c + 2 d = c + x/2 d >= c + 2 d = c – x/2 d < c + 2 d = c – x/2 d >= c + 2 x < 4 x >=4 x > -4 x <= -4

Chi tiết hơn, chúng ta đi giải thích các thủ tục để có đƣợc các miền từ giải thích của P1 và P2 (Hình 1.7) và theo dõi cụ thể trong Hình 1.8 bên dƣới đây:

Xem xét các nút phát biểu của biểu đồ dòng điều khiển từng cái một (Hình 1.7). Đầu tiên vị từ P1 chia toàn bộ miền vào hai khu vực. Biên P1 đƣợc thể hiện bằng một đƣờng thẳng đƣợc xây dựng từ biểu thức x + y = 5: Mọi điểm nằm bên trên đƣờng thằng (không thuộc đƣờng thẳng) đáp ứng điều kiện P1 là True, các điểm thuộc đƣờng thẳng và các điểm nằm phía dƣới đƣờng thẳng sẽ thỏa mãn P1 là False

Tiếp theo, chúng ta xem xét hai cách giải thích của vị từ P2. Cho P1 = True, P2 có giải thích sau đây: (adsbygoogle = window.adsbygoogle || []).push({});

Vì vậy, P2 tiếp tục phân chia miền đƣợc xác định bởi giá trị P1 = True thành hai bộ tƣơng ứng với hai giá trị của nó. Biên P2 chia ra, khi P1 là True, đƣợc đại diện bởi các đƣờng thẳng x = -4. Khu vực bên trái của biên P2 và trên biên P1 tƣơng ứng với P1P2 = TT, và khu vực bên phải của biên P2 và trên biên P1 tƣơng ứng với P1P2 = TF.

Hình 1.8: Các miền thu được từ các giải thích vị từ trong hình 1.74

Khi P1 = False, P2 có giải thích nhƣ sau:

P2 : x >4

Nói cách khác, P2 tiếp tục phân chia miền đƣợc xác định khi P1 = False thành hai bộ tƣơng ứng với hai giá trị thật của nó. Biên P2, khi P1 = True, đƣợc phân chia bởi đƣờng thẳng x = 4. Khu vực bên phải của biên P2 và dƣới biên P1 tƣơng ứng với P1P2

= FT, và khu vực bên trái của biên P2 và dƣới biên P1 tƣơng ứng với P1P2 = FF trong Hình 1.8.

Chúng ta có thể lƣu ý rằng nếu một chƣơng trình có chứa k vị từ trong đó, số lƣợng tối đa các miền thu đƣợc là 2k. Trong thực tế, số lƣợng các miền thu đƣợc là nhỏ hơn nhiều so với 2k,

*)Ví dụ 05: Chƣơng trình nhập vào điểm và xét điểm tổng kết môn học

Bảng 1.7: Hàm tính điểm tổng kết môn học trong ví dụ 05

string tongket(int x){

if (x < 0 || x > 10) return “không hợp lệ”; else if ( x >= 0 && x < 5) return “trƣợt”; else return “đỗ”;

return(k); }

Ta xây dựng đƣợc các miền vào của biến nhƣ sau:

Hình 1.9: Miền vào cho chương trình ở Bảng 1.7

Từ mã nguồn xác định đƣợc 4 vị từ nhƣng số miền xác định là 4 miền. Tƣơng tự cho các trƣờng hợp áp dụng với không gian 2 chiều và 3 chiều…

Một phần của tài liệu 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 25)