Sinh dữ liệu kiểm thử từ các hàm vị từ

Một phần của tài liệu (LUẬN án TIẾN sĩ) các kỹ thuật sinh tự động dữ liệu kiểm thử dựa trên các biểu đồ UML luận án TS máy tính 624801 (Trang 79 - 92)

3.3 Phương pháp sinh dữ liệu kiểm thử cho biến kiểu dữ liệu số và

3.3.6 Sinh dữ liệu kiểm thử từ các hàm vị từ

Phương pháp dựa trên quá trình tìm kiếm giá trị nhỏ nhất của hàm vị từ từ phương thức thay thế giá trị biến, so với phương pháp [97, 83] thì luận án phát triển cho kiểu dữ liệu cấu trúc động. Từ tập hợp các hàm vị từ trên đường dẫn kiểm thử được sinh ra, việc tìm kiếm các giá trị dữ liệu thỏa mãn các hàm vị từ (cũng như các ràng buộc) để có thể thực thi kịch bản kiểm thử đó. Các dữ liệu kiểm thử được sinh ra từ mỗi vị từ tương ứng với giá trị đúng hoặc sai của các vị từ thỏa mãn trên một luồng T trong CFG. Phương pháp này được dựa trên việc tính giá trị hàm F nhỏ nhất với lần lượt thay đổi giá trị đầu vào. Giá trị dữ liệu đầu vào ban đầu có thể chọn ngẫu nhiên, và ở mỗi bước các giá trị dữ liệu này được tăng hoặc giảm trong khi các giá trị dữ liệu khác được giữ nguyên. Giả sử có hai giá trị dữ liệu Iin (trong miền biên giới hạn) vàIout (ngoài miền biên giới hạn) được sinh ra bằng cách sử dụng cách tìm kiếm như sau:

ˆ Hai điểm dữ liệu này nằm ở hai phía khác nhau của đường biên giới hạn.

ˆ Để tìm kiếm hai điểm dữ liệu này, một loạt các bước di chuyển được tạo ra trong cùng một chiều xác định bởi thủ tục tìm kiếm và giá trị của hàm F được tính tốn lại sau mỗi lần di chuyển.

ˆ Kích thước của từng bước di chuyển sẽ tăng gấp đôi sau khi di chuyển thành cơng, việc này nhằm cho phương thức tìm kiếm dữ liệu kiểm thử

nhanh hơn. Mỗi lần di chuyển thành cơng thì giá trị của các hàm vị từ được giảm xuống.

Khi hàm F đạt được giá trị âm (hoặc bằng0) thì giá trị dữ liệu đưa raIin và Iout

được ghi lại. Các điểm này được lọc để tạo ra dữ liệu kiểm thử tương ứng với việc làm giá trị của hàm vị từ nhỏ nhất. Việc lọc được thực hiện bởi việc giảm kích thước của mỗi bước và so sánh giá trị của hàm F với giá trị trước đó. Do vậy, khoảng cách giữa các điểm dữ liệu cũng nhỏ nhất bởi việc giảm kích thước này. Với từng vị từ trong luồng kịch bản của CFG, sẽ sinh ra dữ liệu kiểm thử tương ứng. Phương pháp này được lặp lại với các vị từ khác, kịch bản và các dữ liệu tương ứng được lưu vào trong một tệp.

Giả sử, mục đích đầu tiên là tìm giá trị của a trên đường dẫnTi đểFi(a)có giá trị âm hoặc bằng 0 tại nki. Điều đó có nghĩa là, tìm giá trị a∈D thỏa mãn:

Fi(a) cmpi 0 mà đường dẫn Ti được thực thi với giá trịa (trong đó: cmpi là một trong các phép so sánh <, ≤, =). Vấn đề này tương tự với việc tìm hàm Fi(a)có giá trị nhỏ nhất sử dụng các kỹ thuật hàm nhỏ nhất cho các ràng buộc số [97];

a1 là giá trị tìm được cho việc tìm kiếm đầu tiên, đường dẫn T được duyệt (a1

là giá trị tìm được trên T), hoặc nếu khơng thỏa mãn thì tìm kiếm giá trị thỏa mãn trên đường dẫn con của T. Giả sử T2 =<nk1, nk2, ..., nki, ..., nkm> là đường dẫn con của T được duyệt trên a.

Gọi Fm(a) là hàm nhánh của nhánh (nkm, nkm+1). Mục đích thứ hai là tìm giá

trị đầu vàoa để thỏa mãn Fm(a)cmpm 0, đối tượng là các ràng buộc và T2 duyệt qua a. Quá trình này được giải quyết lặp đi lặp lại cho đến khi giá trị đầu vào

tìm được thỏa mãn. Trong trường hợp khơng tìm được, khơng có giá trị đầu vào thỏa mãn đường dẫn T.

3.3.6.1 Thuật tốn tìm kiếm cơ bản

Giả sử với hệ các hàm vị từ (được chuyển từ các ràng buộc), luận án chọn phương pháp tìm kiếm trực tiếp. Quá trình sử dụng chiến lược dựa trên việc so sánh giá trị các hàm vị từ. Thuận lợi chính của các phương pháp tìm kiếm là không yêu cầu sự liên tục của các hàm vị từ. Chiến lược là dùng phương pháp biến thay thế, làm giá trị của hàm vị từ nhỏ nhất với lần lượt các giá trị biến đầu vào. Việc bắt đầu tìm kiếm giá trị nhỏ nhất với biến đầu vào đầu tiên a1, giữ nguyên tất cả các giá trị hằng, giá trị đầu vào cho đến khi giải pháp được

tìm thấy (hàm vị từ có giá trị âm) hoặc hàm vị từ được xác định giá trị dương nhỏ nhất. Việc tìm kiếm tiếp tục ở bước tiếp theo với giá trị biến đầu vào a2. Tiến trình tìm kiếm tiếp tục cho đến khi tất cả giá trị biến đầu vào a1, a2,...,an lần lượt được tìm thấy. Sau khi hồn thành vịng đời của một tiến trình, thủ tục tiếp tục sang các tiến trình khác với các biến đầu vào cho đến khi giải pháp được tìm thấy. Trong trường hợp, q trình tìm kiếm khơng tìm được giá trị đầu vào thỏa mãn thì sẽ xác định tại điểm làm cho hàm vị từ nhỏ nhất.

Trong giai đoạn đầu việc tìm kiếm thăm dò, giá trị biến đầu vào lựa chọn là aj được tăng lên hoặc giảm một khoảng cách nhỏ, trong khi các biến đầu vào khác giữ nguyên không thay đổi. Cho mỗi thay đổi biến, đường dẫn được thực thi và ràng buộc được kiểm tra việc thỏa mãn trên đường dẫn con Ti. Nếu

đường dẫn Ti được duyệt, hàm vị từ Fi(x) được đánh giá cho các giá trị biến đầu vào mới. Mặt khác, nếu Ti không được đi qua, các biến không thỏa mãn các ràng buộc và hàm vị từ. Trong những bước di chuyển, giá trị của các hàm vị từ được so sánh với giá trị của các hàm vị từ trước đó. Trong cách này, nó có thể chỉ ra một hướng tiến hành và bước di chuyển tiếp theo sẽ thực hiện lớn hơn bước trước đấy. Nếu hàm vị từ giảm khi aj giảm, việc thực hiện tìm kiếm được tiến hành theo chiều giảm của aj. Mặt khác, nếu hàm vị từ được cải tiến

khi aj tăng lên thì quá trình tìm kiếm sẽ thực hiện theo chiều tăng của aj. Nếu việc tăng lên hoặc giảm đi của aj khơng cải tiến hàm vị từ thì việc thăm dị lỗi trong xác định chiều của tiến trình tìm kiếm. Trong trường hợp này, biến đầu vào tiếp theo được chọn để xem xét.

Giả sử việc thăm dò di chuyển để xác định chiều trong tiến trình tìm kiếm, sau mỗi lần di chuyển bước di chuyển sẽ thực hiện lớn hơn (mơ hình tìm kiếm). Sau mỗi lần di chuyển, đường dẫn được duyệt và các ràng buộc được kiểm tra xem có thỏa mãn khơng. Nếu ràng buộc khơng thỏa mãn đối với nhánh (nki,nki+1), hàm vị từ được xác định và giá trị của nó được so sánh với giá trị của hàm vị từ trước đó. Nếu hàm vị từ Fi(x) được cải tiến trong từng bước di chuyển đưa ra thì giá trị mới của hàm đó thay thế giá trị cũ, và bước di chuyển lớn hơn được thực hiện theo cùng một hướng di chuyển trước đó. Một loạt các bước di chuyển được thực hiện theo hướng này khi các hàm vị từ được cải tiến theo từng bước di chuyển. Tuy nhiên, nếu các hàm vị từ không được cải tiến, giá trị cũ của hàm vị từ được giữ lại. Nếu sau khi một loạt các di chuyển thành công

Thuật toán 3.13 Sinh dữ liệu kiểm thử từ hàm vị từ, phát triển từ [97]

Input: Tập các kịch bản T và hàm vị từ cho từng Ti.

Output: Các dữ liệu kiểm thử sinh ra từ các hàm vị từ.

1: while true do 2: −→a =random(), j=1, c=0; 3: while (c < size(−→a))do 4: f 7→f((−→a \a j)∪ {a}) 5: −→ a0 =local_search(f, ai) 6: if f(−→ a0)< f(−→a)then 7: −→a =−→a0, c =0 8: else 9: c = c+1 10: end if 11: j =j mod(size(−→a)) + 1 12: end while 13: end while

đến một thời điểm bước di chuyển bị lỗi vì giá trị của hàm vị từ khơng được cải tiến, bước thăm dị giá trị sẽ tạo ra để xác định chiều di chuyển mới. Nếu bước di chuyển lỗi vì vi phạm ràng buộc, các tìm kiếm sẽ tiếp tục theo hướng này với việc giảm kích thước của bước di chuyển cần thiết cho đến khi việc di chuyển thành công được tạo ra. Tại điểm này, phương pháp sẽ được thực hiện theo chiều tìm kiếm mới. Quá trình được tiếp tục thực hiện cho đến khi hàm vị từ có giá trị âm (hoặc bằng 0) hoặc khơng có tiến trình nào có thể được tạo ra

cho bất kỳ biến đầu vào trong suốt quá trình thực hiện tìm kiếm. Trong trường hợp sau, thủ tục tìm kiếm lỗi và khơng tìm ra các dữ liệu kiểm thử thỏa mãn. Tác giả biểu diễn cụ thể thuật toán trong Thuật toán 3.13. Giả sử, tập các biến đầu vào là ai trong một vector; hàm vị từ f đưa ra trong thuật tốn tìm kiếm cục bộ gọi là local_search với giá trị ai là điểm bắt đầu tìm kiếm.

Trong hàm tìm kiếm cục bộ (local_search): bắt đầu từ a, hàm thực hiện đánh giá điểm a-1 và a+1 lần đầu tiên để xác định chiều. Trừ khi a là một tối ưu cục bộ, nó sẽ thực hiện tìm kiếm mẫu, di chuyển theo hướng giảm giá trị hàm f. Kích thước bước tăng gấp đơi theo từng bước, do đó mỗi lần di chuyển được tăng lên theo chỉ số hàm duyệt qua các điểm. Tìm kiếm mẫu dừng lại nếu điểm tiếp theo không cải tiến hàm f. Các điểm là:

Vì Ptj=02t = 2t+1−1 nên tuần tự trên tương ứng là:

a; a+ 21−1; a+ 22−1; a+ 23−1; ...; a+ 2t+1−1.

Thuật tốn 3.14 Hàm tìm kiếm lặp trên local_search

Input: Hàm vị từ f.

Output: Giá trị dữ liệu biến a∈D sao cho thỏa mãn hàm vị từ f

1: while true do

2: if (f(a−1)≥f(a)) and (f(a+ 1) ≥f(a)) then

3: return (a); 4: end if 5: if (f(a−1)< f(a+ 1)) then 6: k =−1 7: else 8: k = 1 9: end if 10: while (f(a+k)< f(a)) do 11: a=a+k, k = 2∗k 12: end while 13: end while

Độ phức tạp của thuật toán:Trong Thuật tốn 3.13 thực hiện gọi hàmlocal_search

nên chúng ta tính độ phức tạp của Thuật toán 3.14 trước. Xem xét việc lặp đi lặp lại tìm kiếm trong hàm f trong đó b biểu thị số bước di chuyển từ điểm bắt đầu đến điểm tối ưu. Sau đó, local_search tìm kiếm tối ưu sau truy vấn nhiều nhất là: (4 + 8logb+ (logb)2) giá trị. Nó giữ hàm f có kết quả từ giá trị ban đầu

f0 và gán hàm giá trị nhỏ nhất đến điểm xa nhất. Vì vậy, thời gian thực thi thuật toán trong trường hợp xấu nhất là: O(logb)2). Trong Thuật tốn 3.13, giả

sử vectơ a có n biến, vịng lặp sẽ thực hiện với từng biến một. Do đó, độ phức tạp của Thuật tốn 3.13 là: O((logb)2∗n).

Tính dừng của Thuật tốn 3.13: trong trường hợp xấu nhất là thực hiện((logb)2∗

n) lần trong vòng lặp, tuy nhiên với b là số bước di chuyển từ điểm ban đầu đến điểm tối ưu và n là số biến trong vectơ a (tức là số biến tối đa trong một ràng buộc). Các giá trị của b và n đều là các số hữu hạn, vì vậy sau một số hữu hạn các bước thì thuật tốn sẽ dừng.

Ví dụ 3.1: Trong ví dụ minh họa phương pháp và thuật toán đề xuất bằng bài toán máy bán hàng tự động. Trong máy bán hàng tự động bán các loại nước uống, khách hàng sẽ thực hiện cho các đồng xu vào máy. Hình 3.11 minh họa biểu đồ tuần tự UML 2.0 của máy bán hàng tự động. Khi máy bán hàng tự động

bật lên, khách hàng bắt đầu thực hiện giao dịch, thông tin các loại sản phẩm khác nhau có sẵn được hiển thị trên màn hình của máy, ở đây giả sử có hai loại nước uống là nước ngọt và cafe. Khi khách hàng chọn một loại trên màn hình thì các chi tiết về sản phẩm đó như giá thành, số lượng tối đa được mua trong một giao dịch được hiển thị. Khách hàng có thể chọn loại sản phẩm cũng như số lượng sản phẩm cần mua. Giả sử điều kiện số lượng mỗi sản phẩm trong một lần mua không quá 10 sản phẩm (N oOf P ro ≤10 trong biểu đồ lớp Hình 3.12), máy sẽ khơng phân phối nhiều hơn 10 sản phẩm mỗi loại trong một giao dịch. Khi lựa chọn xong về loại sản phẩm và số lượng yêu cầu thì khách hàng phải cho đồng xu vào máy.

Chuyển biểu đồ tuần tự của máy bán hàng tự động thành CFG và sinh các kịch bản kiểm thử: theo thuật toán trong Phần 3.3.2, chuyển đổi biểu đồ tuần tự UML máy bán hàng tự động thành CFG như Hình 3.13. Bảng 3.4 miêu tả năm kịch bản được sinh ra từ CFG. Các ràng buộc OCL là các tiền và hậu điều kiện của các phương thức, các ràng buộc trong biểu đồ lớp được gắn với các đỉnh tương ứng của các thông điệp.

Bảng 3.4: Các kịch bản kiểm thử được sinh ra của máy bán hàng tự động Kịch bản1 (Start, B1, B2, B5, End)

Kịch bản2 (Start, B1, B2, B3, B4, B5, End)

Kịch bản3 (Start, B1, B6, B7, B8, B9, B12, End)

Kịch bản4 (Start, B1, B6, B7, B8, B9, B10, B11, B12, End)

Kịch bản5 (Start, B1, B6, B7, B8, B9, B10, B11, End)

Sinh dữ liệu kiểm thử từ các vị từ được chọn từ đồ thị: từ CFG (Hình 3.13) được chuyển đổi từ biểu đồ tuần tự, thực hiện thuật tốn tìm kiếm theo chiều sâu trên đồ thị để chọn các vị từ gắn với các đỉnh của đồ thị. Giả sử từ đồ thị với điều kiện: returnM oney≥0, ở đây returnM oney là số tiền máy tự động sẽ trả lại cho khách hàng nếu số tiền khách hàng cho vào máy bán hàng (amount) nhiều hơn số tiền mua sản phẩm và returnM oney = amount−totalM oney, trong đó totalM oney =N oOf P ro1∗P rice1 +N oOf P ro2∗P rice2 vớiN oOf P ro1là số lượng loại sản phẩm thứ nhất khách hàng yêu cầu;N oOf P ro2là số lượng loại sản phẩm thứ hai khách hàng yêu cầu; P rice1: giá của một sản phẩm trong loại thứ nhất; P rice2: giá của một sản phẩm trong loại thứ hai (giả sử giá của hai loại sản phẩm

b:SelectionPanel c:Controller d:CoinController e:Product beginSession 2: productDetails() 3:checkAvailability() 4:productAvailable() 5:displayPrice() 6:insertCoins() 8: amount() m1() m2() m4() m3() m5() m6() m7() m8() m9() m10() m11() m12() a:Customer 1: selectProduct() 10:changeDispense() 11: getProduct() 9: comparePrice() 7: calculateCoinsDeposited() 12: dispenseProduct()

Hình 3.11: Biểu đồ tuần tự của máy bán hàng tự động.

Controller IDTran: Integer totalMoney: Integer returnMoney:Integer Product name: String quantity: Integer price: Integer CoinController coinPrice: Integer totalCoin: Integer 1 n 1 1 Controller.allInstances.forAll(d|d.product size() 10) Controller.returnMoney 0൒ ч

ϭ ϲ ϳ Ϯ ϱ ϴ ϯ ^ƚĂƌƚ ŶĚ ϰ ϵ ϭϮ ϭϬ ϭϭ

Hình 3.13: Đồ thị dịng điều khiển của máy bán hàng tự động.

I0 = [(5,5),200], trong đó (N oOf P ro1 = N oOf P ro2 = 5 ≤ 10 và amount = 200).

Hàm F được biểu diễn như sau:F =returnM oney=amount−totalM oney, vì vậy F(I0) = 50. Thực hiện thay đổi kết quả của vị từ returnM oney ≥ 0. Đầu tiên,

tăng giá trị của biến N oOf P ro trong các bước khác nhau.

i. Bước đầu tiên,(N oOf P ro1 =N oOf P ro2 = 5, amount= 400), totalM oney = 5∗15 + 5∗15 = 150và returnM oney = 400−150 = 250. Hàm F =amount−

(N oOf P ro1∗P rice1 +N oOf P ro2∗P rice2), khi F giảm thì N oOf P ro tăng.

ii. Bước tiếp theo, tăng kích thước của bước dịch chuyển lên gấp đơi tức là giá trị N oOf P ro lên thêm 2 nữa, bây giờ N oOf P ro là 7. Do vậy, [(N oOf P ro1,

N oOf P ro2), amount] = [(7,7),400)]. Suy ra, F giảm xuống returnM oney = 400−2∗(7∗15) = 190 >0.

iii. Tiếp tục tăng gấp đôi bước dịch chuyển vàN oOf P rosẽ là7+2∗2 = 11, do đó

nó bị vi phạm ràng buộc N oOf P ro≤10 của một loại sản phẩm được chọn trong một giao dịch. Vì vậy, theo thuật tốn chúng ta lại giảm kích thước di chuyển xuống là2. Bây giờ thay thế N oOf P ro= 11, nó sẽ là N oOf P ro = 9,

và [(N oOf P ro1, N oOf P ro2), amount] = [(9,9),400]. Hàm F tính được sẽ là:

returnM oney = 400−2∗(9∗15) = 130, giá trị hàm F vẫn dương. Ta lại tiếp

tục giảm kích thước bước dịch chuyển xuống một nửa thì giá trị giảm sẽ là 1. Vì vậy, N oOf P ro= 9 + 1 = 10 và F = 400−2∗(15∗10) = 100. Nhưng

Một phần của tài liệu (LUẬN án TIẾN sĩ) các kỹ thuật sinh tự động dữ liệu kiểm thử dựa trên các biểu đồ UML luận án TS máy tính 624801 (Trang 79 - 92)