3. Bố cục của luận văn
2.5. Thuật toán Tabu-search
2.5.1. Tư tưởng
Từ một lời giải ban đầu, tìm kiếm TABU sẽ lặp đi lặp lại quá trình tìm kiếm nhằm cải thiện dần lời giải tốt nhất hiện có (ta sẽ gọi tắt là kỷ lục) của bài toán. Tại mỗi bƣớc lặp, thuật toán sẽ duyệt trong một miền lân cận (cũng có thể là toàn bộ lân cận) của lời giải hiện tại để chọn ra lời giải tốt nhất, lời giải này sẽ thay thế cho lời giải hiện tại ở bƣớc lặp kế tiếp. Mỗi lời giải trong lân cận của lời giải hiện tại đƣợc gọi là một lân cận (neighborhood) của lời giải hiện tại. Quá trình tác động lên lời giải hiện tại để biến nó thành một lân cận của lời giải hiện tại đƣợc gọi là một bƣớc chuyển (move).
Điểm khác biệt căn bản của tìm kiếm TABU so với các thuật toán tìm kiếm địa phƣơng khác là tại mỗi bƣớc lặp; để tránh việc duyệt trở lại những lời giải đã từng đƣợc khảo sát, tìm kiếm TABU sử dụng một danh sách để lƣu trữ một số bƣớc chuyển đã từng đƣợc sử dụng, gọi là danh sách TABU. Danh sách này sẽ chứa một số bƣớc chuyển vừa đƣợc thực hiện trong một số bƣớc lặp ngay trƣớc đó, các bƣớc chuyển nằm trong danh sách TABU đƣợc gọi là các bƣớc chuyển TABU. Các bƣớc chuyển này sẽ bị cấm sử dụng lại chừng nào nó còn nằm trong danh sách TABU.
Mỗi bƣớc chuyển TABU sẽ nằm trong danh sách TABU trong khoảng thời gian t bƣớc lặp, sau đó bƣớc chuyển này sẽ đƣợc loại khỏi danh sách TABU và nó có thể lại đƣợc sử dụng. Số t vừa nêu đƣợc gọi là giá trị TABU tenure của bƣớc chuyển. Giá trị t có thể cố định cho tất cả các bƣớc chuyển hoặc cũng có thể là một số ngẫu nhiên đƣợc chọn cho từng bƣớc chuyển.
2.5.2. Sơ đồ thuật toán Tabu-search cơ bản
• Khởi tạo lời giải ban đầu s0; s = s0; sbest = s0; • tabulist = ∅; // danh sách TABU cho bằng rỗng
while (điều kiện dừng chƣa thỏa) • M = ∅; // M là tập các bƣớc chuyển • Với ∀ s’ ∈ Ns
(là miền lân cận của s): - p = move (s, s’);
- if (p ∉ tabulist) M = M ∪ p;
- if (p ∈ tabulist và p thỏa tiêu chuẩn mong đợi) M = M ∪ p;
• Chọn bƣớc chuyển p tốt nhất trong tập M. - Tạo s’t từ bƣớc chuyển p của giải pháp s; - s = s’t;
- if (s’t tốt hơn sbest) sbest = s’t; • Cập nhật tabulist;
• Thực hiện đa dạng hóa lời giải; • Thực hiện tăng cƣờng hóa lời giải;
end while return sbest;
2.5.3. Mục tiêu và giải pháp của TSG
Mục tiêu của TSG là sinh dữ liệu kiểm thử mà chứa nhiều nhất các nhánh bao phủ chƣơng trình kiểm thử:
Một nhánh không khả thi nếu ở đó không đƣợc kiểm thử để bao phủ nó. Khi đó nếu đó là tất cả những nhánh không khả thi, thì số nhánh lớn nhất đƣợc bao phủ là 100%. Tuy nhiên, số nhánh lớn nhất đƣợc bao phủ lại không đƣợc biết trƣớc khi kiểm thử. Do đó, cần phải sử dụng điều kiện dừng cho bài toán đó là: tất cả các nhánh đều đƣợc bao phủ hoặc đạt đƣợc số các vòng lặp là MAXIT. Khi kết thúcchƣơng trình, TSG sẽ cho thấy nhánh cuối cùng đƣợc bao phủ, thời gian, các nhánh không đƣợc bao phủ và kiểm thử tốt nhất cần có để đi đến đƣợc nhánh cuối cùng bao phủ.
2.5.4. Hàm đánh giá
Hàm đánh giá đo xem một giải pháp tốt để đạt đƣợc mục tiêu tìm kiếm nhƣ thế nào. TSG sử dụng hai hàm đánh giá khác nhau:
Hàm đánh giá cho một phƣơng án kiểm thử khi nó đi đến một nút nj nhƣng lại không đi qua nút bố ni. Nó đƣợc sử dụng để tăng cƣờng việc tìm kiếm và tính bởi trung bình các hàm đánh giá đƣợc gọi là fnjni ( ̅)
Hàm đánh giá cho một kiểm thử khi nó đi đến nút ni. Nó đƣợc sử dụng để làm đa dạng việc tìm kiếm và đƣợc tính bởi trung bình của các hàm đánh giá đƣợc gọi là fpni( ̅).
Với mỗi việc thực hiện kiểm thử , TSG sử dụng cả hai giá trị đánh giá trên. Kiểm thử tốt nhất đƣợc tìm thấy sẽ lƣu trên CFG. Cụ thể là một nút CFG ni chứa giải BKS - việc cố gắng đi đến nút con nj của nó (đƣợc gọi là BKSnjni - phƣơng án tốt nhất của ni cho việc cố gắng đạt đến nút con nj của nó). Và BS là phƣơng án cho việc đi đến ni. Những phƣơng án tốt nhất đƣợc lƣu trong tất cả các nút CFG ngoại trừ nút gốc (nút mà không chứa BS từ tất cả những kiểm thử không có điều kiện), và những nút lá (nút mà không chứa BKS từ chúng không có nút con nào).
Ví dụ sau thể hiện ví dụ về những kiểm thử tốt nhất đƣợc chứa trong một nút ni mà có hai nút con nj và nk. Trong đó
Condni là quyết định xem có đi đến ni Condnjnilà quyết định xem có đến nj từ ni
Hình 2.3. Ví dụ về những kiểm thử tốt nhất được chứa trong một nút ni mà có hai nút con nj và nk
Trong suốt quá trình tìm kiếm, TSG sẽ thƣờng xuyên sử dụng BKSnsgoalni nhƣ một phƣơng án hiện tại (CS) để cố gắng đi qua nut sgoal nsgoal. Tuy nhiên, nếu việc tìm kiếm không thành công, thuật toán sẽ dùng BSni giống nhƣ CS để đa dạng hóa vùng tìm kiếm.
Hàm đánh giá fnjni( ̅):
Hàm đánh giá fnjni( ̅) đƣợc sử dụng để đánh giá các kiểm thử, mặc dù nó làm cho quyết định Condnjni bị False (không đạt tới node nj). Định nghĩa hàm đánh giá fnjni( ̅) đƣợc thể hiện trong bảng sau:
Loại quan hệ Condnj ni TSGen fnj ni ( ̅) Quan hệ bằng x=y x=y x=y |x-y|+α Quan hệ không bằng x?y x<y x>y |x-y| AND c1c2…cn
OR c1c2…cn Giá trị nhỏ nhất của các fnjni( ̅)cici = FALSE
NOT c Theo luật De Morgan
Bảng 2.1. Định nghĩa hàm đánh giá fnjni( ̅)
Trong đó σ đƣợc sử dụng để tránh trƣờng hợp hàm đánh giá bằng 0. Việc gán một hàm đánh giá thấp để những kiểm thử này gần với nhánh mà quyết định Connj đúng. Mục tiêu của TSG là hàm giá fnjni ( ̅) đạt cực tiểu.
Hàm đánh giá fpni( ̅):
Hàm đánh giá fpni( ̅) đƣợc sử dụng để đánh giá hàm giá của một kiểm thử tại mỗi node ni đƣợc đi qua. Trong suốt quá trình tìm kiếm, việc đánh giá sử dụng hàm đánh giá này sẽ xác định kiểm thử mà đƣợc chứa trong CFG nhƣ BSni. Giải pháp này đƣợc sử dụng nhƣ CS khi giải pháp BKSnsgoalni bị thất bại. Định nghĩa hàm đánh giá fpni( ̅) đƣợc thể hiện trong bảng sau:
Loại quan hệ Condni TSGen fpni( ̅) Quan hệ bằng x=y x=y x=y |x-y|+α Quan hệ không bằng x?y x<y x>y |x-y|
AND c1c2…cn Giá trị nhỏ nhất của cácfpni( ̅)cici = TRUE
OR c1c2…cn
NOT c Theo luật De Morgan
Bảng 2.2. Định nghĩa hàm đánh giá fpni( ̅)
2.5.5. Chọn lựa nút subgoal
Nút subgoal (nsgoal) là một nút mà TSG phải bao phủ trong suốt các vòng lặp. Mục tiêu cuối cùng của TSG là bao phủ toàn bộ các nút của CFG. Trong suốt quá trình tìm kiếm, mục tiêu đƣợc chia nhỏ thành các mục tiêu con mà TSG phải tính một tập các ứng của viên lân cận dựa vào CS. Có nghĩa là nếu một kiểm thử mà bao phủ nút cha nhƣng không bao phủ nút con, một kiểm thử hàng xóm có thể đƣợc tìm thấy mà đạt đến nút con (nó sẽ đi qua node cha) là tốt nhất.
Trong mỗi vòng lặp, TSG sẽ lựa chọn một nút subgoal theo CFG mà bố mẹ nó đã đƣợc bao phủ bởi kiểm thử đƣợc.
Một nút nsgoal đƣợc chọn, TSG sẽ cài đặt CS với BKSnsgoalnparent (hoặc với BSnsparent nếu sử dụng thuật toán quay lui). Nếu nút subgoal có nhiều hơn một nút cha thì CS sẽ là BKSnsgoalnparent với hàm giá thấp nhất. Ví dụ:
Hình 2.4. Ví dụ lựa chọn nút subgoal
Ví dụ trên cho thấy không sử dụng thuật toán quay lui. Các nút không đƣợc bao phủ là 7 và 10. TSG sẽ chọn nút 7 có ba nút bố quyết định là: 2. 3. 5. Do đó, TSG chọn BKS7nparent với hàm đánh giá thấp nhất và không nằm trong Tabu List nhƣ một CS.
2.5.6. Sinh các ứng cử viên hàng xóm
TSG sinh ra 4*n ứng cử viên hàng xóm của CS, n là số lƣợng đầu vào của chƣơng trình. Theo đó, thuật toán sẽ tạo ra 2 kiểm thử hàng xóm gần và 2 kiểm thử hàng xóm xa từ CS. Nói cách khác, nếu CS là (v1, v2, … , v3), TSG sẽ duy trì các giá trị cho tất cả các vk mà đảm bảo k i và sinh ra bốn giá trị mới cho vi
vk’ = vk + s(λ) vk’’ = vk - s(λ) vk’’’ = vk + s(µ) vk’’’’ = vk - s(µ)
Trong đó
s(λ): chiều dài của bƣớc nhảy ngắn s(µ): chiều dài của bƣớc nhảy dài
giá trị s(λ) và s(µ) phụ thuộc vào dạng của biến đầu vào.
Mỗi vòng lặp, TSG sẽ áp dụng một trong bốn trƣờng hợp điều chỉnh tự động của các bƣớc:
Khởi tạo: sử dụng để bắt đầu việc tìm kiếm một vùng mới Tăng: sử dụng để mở rộng việc tìm kiếm một vùng gần CS
Centring: sử dụng để lấy tâm việc tìm kiếm trong một vùng gần CS
Tăng cƣờng: sử dụng để tăng cƣờng việc tìm kiếm trong vùng gần CS nhất. Trong trƣờng hợp này, các giá trị thực, độ dài bƣớc nhỏ hơn 1
Với mỗi hàng xóm Cv đƣợc tạo ra, TSG sẽ xác minh xem nó có là kiểm thử Tabu và từ chối nó. Nếu không phải, nó sẽ thực hiện với chƣơng trình kiểm thử và nếu nó là kiểm thử tốt nhất (BS and/or BKS) cho các nút đến đƣợc, nó sẽ đƣợc chứa trong CFG cùng với giá trị hàm cost.
Nếu các ứng cử viên sinh ra mà bao phủ nút subgoal, TSG sẽ thay đổi nút subgoal trong vòng lặp tiếp theo. Trong bất cứ trƣờng hợp nào, quá trình lựa chọn nút subgoal,sự thành lập CS và sinh các ứng cử viên hàng xóm sẽ đƣợc lặp lại cho đến khi TSG đạt dừng.
2.5.7. Tabu list: bộ nhớ của TSG
Một trong những đặc trƣng chính của tìm kiếm Tabu là bộ nhớ ngắn hạn (Short-term ST) và bộ nhớ dài hạn (Long-term LT).
Trong mỗi vòng lặp, mục tiêu của TSG là đạt đến cực tiểu toàn cục x* tức là sinh ra một kiểm thử x* mà đạt đến đƣợc nút subgoal. Từ những ứng cử viên hàng xóm đƣợc sinh ra dựa trên CS, CS đƣợc lƣu trữ trong ST để tránh trƣờng hợp tìm kiếm lặp lại. Bộ nhớ mà điều khiển bởi tham số TSG mà giá trị của nó đƣợc xác định bằng trung bình của các thử nghiệm với phạm vi đầu vào khác nhau và chƣơng trình kiểm thử khác nhau. Kết quả cho thấy, tham số tốt nhất trong khoảng (nb, 5*nb) với nb là số lƣợng bits của biến đầu vào.
Trong một điều kiện khác, nó có thể xảy ra việc CS là cực tiểu địa phƣơng, có nghĩa là một kiểm thử đƣợc bắt đầu từ cái mà TSG không tìm thấy CS mới trong việc dò xét hàng xóm của nó trong suốt một số lƣợng vòng lặp cụ thể - MAXCS. Thuật toán Tabu sẽ bị ngăn cản bởi cực tiểu địa phƣơng. Bộ nhớ Tabu LT sẽ đƣợc sử dụng tại đây. Những kiểm thử mà là cực tiểu địa phƣơng sẽ đƣợc lƣu trong LT. Một cực tiểu địa phƣơng đƣợc tìm thấy, TSG sẽ áp dụng quá trình quay lui.
LT sẽ chứa một vài kiếm thử. Với lý do này, nó sẽ đƣợc duy trì trong suốt quá trình tìm kiếm.
2.5.8. Quá trình quay lui
TSG sử dụng quá trình quy lui để tìm một nút con subgoal từ một CS tồi và đƣợc xác định bởi hai tham số:
MAXCS: số lớn nhất các vòng lặp để đạt tới một nút con với CS giống nhau. Điều này tránh cho TSG bị mắc kẹt khi cố gắng đi đến một nút mà sử dụng CS xấu.
MAXNS: số lớn nhất các vòng lặp mà một nút trở thành subgoal. Điều này tránh cho TSG bị mắc kẹt khi cố gắng đến một nút không khả thi bởi vì khi đó, một nút chỉ là subgoal nút trong MAXNS lần, TSG đánh dấu nó nhƣ một nút có thể không khả thi và sẽ không bao giờ chọn nó là subgoal của việc tìm kiếm.
Thuật toán quay lui có ba giai đoạn khác nhau:
Giai đoạn 1 đƣợc áp dụng khi đạt đến MAXCS và MAXNS chƣa đạt đến. Ở giai đoạn này, subgoal đƣợc giữ nguyên. TSG cố đạt đến nó và sử dụng CS mới. CS mới này sẽ là BSnparent hoặc BKSnsgoalnotherparent trong trƣờng hợp subgoal không có nhiều hơn một nút cha.
Ví dụ trên mô tả việc chọn BKS73 nhƣ một CS. Nếu việc tìm kiếm sử dụng CS này không đạt đƣợc đến node 7 trong MAXCS vòng lặp, thuật toán TSG áp dụng giai đoạn này của quy trình quay lui:
Hình 2.5. Ví dụ mô tả quá trình quay lui
Theo đó, BKS73
sẽ đƣợc thêm vào LT và CS mới là BKS72 (giả sử f72 (BKS72) < f75 (BKS75))
Giai đoạn 2 đƣợc áp dụng khi giai đoạn một không thành công và MAXNS cho nút subgoal không đƣợc đạt đến. Nút subgoal đƣợc thay đổi, nhƣng TSG không đánh dấu nó là không khả thi. Thuật toán quay lui lây lan trong CFG và TSG cố gắng tạo giải pháp mới. Nếu quá trình quay lui đạt đến nút gốc, TSG sẽ sinh một kiểm thử ngẫu nhiên mới mà có thể tiếp tục tìm kiếm.
Giai đoạn 3 đƣợc áp dụng khi TSG đạt đến MAXNS cho subgoal nút. Subgoal nút sẽ bị thay đổi và TSG đánh dấu nó là không khả thi.
2.6.Kết chƣơng
Chƣơng II đã trình bày đƣợc:
Phương pháp kiểm thử dựa tìm kiếm:
Kiểm thử dựa tìm kiếm là sử dụng kỹ thuật tối ƣu hóa meta-heuristic để tự động hoặc tự động hóa từng phần cho nhiệm vụ kiểm tra.
Kiểm thử dựa tìm kiếm đƣợc xuất hiện vào năm 1976 và là công trình của hai nhà nghiên cứu ngƣời Mỹ, Webb Miller và David Spooner.Năm 1992, Xanthakis áp dụng thuật toán di truyền cho vấn đề này. Kể từ đó đã có sự bùng nổ của công việc, sử dụng thuật giải Meta-Heuristc rộng rãi hơn so với chỉ kiểm thử sinh ra dữ liệu.Và hiện nay,tỷ lệ ứng dụng các kỹ thuật dựa trên tìm kiếm để kiểm thử phần mềm là 70%.
Tìm kiếm Heuristic:
Khái niệm: Trong tìm kiếm không gian trạng thái, Heuristic thực chất là các hàm đánh giá dùng để chọn những nhánh nào có nhiều khả năng nhất dẫn đến một giải pháp chấp nhận đƣợc.
Nguyên lý:
o Nguyên lý vét cạn thông minh.
o Nguyên lý tham lam (Greedy).
o Nguyên lý thứ tự.
o Hàm Heuristic.
Các thuật toán của tìm kiếm Heuristic:
o Thuật toán leo đồi (Hill climbing - Pearl 1984): Chiến lƣợc leo đồi phát triển trạng thái con tốt nhất sẽ đƣợc chọn cho bƣớc tiếp theo, không lƣu giữ lại bất kỳ thông tin gì, chỉ lƣu lại trạng thái tạm thời và các hàng xóm [13]. Quá trình tìm kiếm sẽ dừng lại khi tiếp cận trạng thái tốt hơn so với mọi trạng thái con của nó. Trong tìm kiếm leo đồi việc lựa chọn trạng thái tiếp theo dựa trên một hàm đánh giá.
Thuật toán leo đồi cơ bản: [11]
Là một trƣờng hợp đặc biệt của tìm kiếm theo chiều sâu. Thuật toán thực hiện bằng cách tạo ra hàng xóm cho trạng thái hiện thời và di chuyển sang hàng xóm có hàm đánh giá tốt hơn.
Thuật toán leo đồi dốc đứng: [12]
Về cơ bản thuật toán leo đồi dốc đứng cũng giống leo đồi cơ bản, chỉ khác ở điểm là leo đồi dốc đứng sẽ duyệt tất cả các hƣớng đi có thể và chọn hƣớng đi theo trạng thái tốt nhất trong các trạng thái kế tiếp có thể có (trong khi đó leo đồi chỉ chọn đi theo trạng thái kế tiếp đầu tiên tốt hơn trạng thái hiện thời mà nó tìm thấy).
Đánh giá hai thuật toán leo đồi :
So với leo đồi đơn giản, leo đồi dốc đứng có ƣu điểm là luôn luôn chọn hƣớng có triển vọng nhất để đi. Nhƣng điều này không đảm bảo leo đồi dốc đứng luôn tốt hơn leo đồi cơ bản. Leo đồi dốc đứng chỉ tốt hơn leo đồi cơ bản trong một số trƣờng hợp.
o Thuật toán tìm kiếm Tabu
Từ một lời giải ban đầu, tìm kiếm TABU sẽ lặp đi lặp lại quá trình tìm kiếm nhằm cải thiện dần lời giải tốt nhất hiện có (ta sẽ gọi tắt là kỷ lục) của bài toán. Tại mỗi bƣớc lặp, thuật toán sẽ duyệt trong một miền lân cận (cũng có thể là toàn bộ lân