phƣơng pháp hiệu quả cho việc xác minh phần mềm hƣớng thành phần, đƣợc thực hiện bằng cách tách nhiệm vụ xác minh một phần mềm hƣớng thành phần thành các công việc nhỏ hơn trên các thành phần độc lập. Trong phƣơng pháp này, giả định đƣợc xem nhƣ là môi trƣờng của các thành phần. Tuy nhiên, giải thuật này chƣa đƣa ra cho chúng ta một giả định tối thiểu. Chúng ta sẽ xét một ví dụ cụ thể để minh chứng cho điều này. Xét hệ thống gồm các thành phần sau:
Hình 3.1: Các thành phần của hệ thống trong ví dụ đƣợc xét
Áp dụng giải thuật L* tại chƣơng 4 ta sẽ thu đƣợc giả định A nhƣ sau:
Hình 3.2: Giả định đƣợc tạo ra sau khi sử dụng giải thuật L*
Tuy nhiên, tồn tại một giả định A’ nhƣ sau:
Hình 3.3: Giả định đƣợc tạo ra bởi giải thuật tạo giả định tối thiểu. in in Input ack send 0 1 2 Output send ack out send out Ordererr in in a b out π ack,out,send ack send out ack send send 0 1 ack send send out
Dễ dàng kiểm tra đƣợc các biểu thức sau là đúng:
<A’> Input <Order>
<true> Output <A’>.
Mặt khác, ta có |A’| = 2 < 4 = |A|. Nhƣ vậy, giả định đƣợc tạo ra bởi giải thuật L* chƣa phải là giả định tối thiểu. Theo lý thuyết của nhóm NASA, giải thuật L* thực hiện huấn luyện và sẽ đƣa ra Otomat tối thiểu. Vậy, nguyên nhân nào làm cho giải thuật L* không cho chúng ta giả định tối thiểu.
Giải thuật L* sử dụng một phƣơng pháp thực hiện học ngôn ngữ của giả định yếu nhất AW với bảng chữ cái (M1p)M2 và đƣa ra một DFA chấp nhận nó. Để học đƣợc ngôn ngữ này, giải thuật L* xây dựng một bảng quan sát (S, E, T) trong đó S và E tƣơng ứng là tập tiền tố và hậu tố. T là một hàm thực hiện ánh xạ tập (S S. ).E sang tập {true, false}, trong đó toán tử “.” đƣợc định nghĩa nhƣ sau: Cho hai tập các chuỗi hành động P và Q, khi đó P Q. {pq| pP q, Q}, trong đó pq thể hiện sự ghép nối của hai chuỗi hành động p và q. Kỹ thuật này thực hiện trả lời câu hỏi kiểm tra thành viên nhƣ sau: với mỗi chuỗi s (S S. ).E, T(s) = true nếu s L(AW) và bằng false nếu ngƣợc lại.Trong phản ví dụ trên, ta nhận thấy nếu s L(AW) nhƣng s
L(A(p)), khi đó T(s) đƣợc gán giá trị true (trong trƣờng hợp này, T(s) nên là giá trị false). Vì lý do này, giả định A(p) đƣợc tạo ra bởi giải thuật đƣa ra trong [1] chứa một số chuỗi/dẫn xuất mà không thuộc vào ngôn ngữ của giả định đƣợc huấn luyện. Do đó, A(p) không phải là giả định tối thiểu.
Trong chƣơng này, chúng tôi đã đề xuất phƣơng pháp tạo giả định tối thiểu cho việc xác minh đảm bảo giả định của các phần mềm hƣớng thành phần. Chúng tôi cũng định nghĩa một kỹ thuật mới để trả lời câu hỏi kiểm tra thành viên nhằm khắc phục vấn đề gặp phải của giải thuật tạo giả định sử dụng thuật toán học L*. Giả định tối thiểu đƣợc tạo ra bằng cách kết hợp giải thuật học L* và tƣ tƣởng tìm kiếm trên cây tìm kiếm theo chiều rộng.
3.3 Giải thuật tạo giả định tối thiểu
3.3.1 Tƣ tƣởng của giải thuật
trả lời câu hỏi kiểm tra thành viên đã đƣợc đƣa ra trong giải thuật đó. Nhƣ đã đề cập ở trên, để học ngôn ngữ của giả định, giải thuật học L* sử dụng trong [1] đã xây dựng một bảng quan sát (S, E, T) trong đó T là một hàm thực hiện ánh xạ tập (S S. ).E
sang tập {true, false}. Với mỗi chuỗi s (S S. ).E, T(s) = true nếu s L(AW) và bằng false nếu ngƣợc lại. Trong trƣờng hợp s L(AW), chúng ta không chắc chắn đƣợc rằng s có nằm trong giả định đƣợc huấn luyện hay không (tức là, s L(A(p))?). Nếu s
L(A(p)) khi đó T(s) phải nhận giá trị false. Tuy nhiên, giải thuật trong [1] đặt T(s) là true trong trƣờng hợp này. Vì lý do này, giả định đƣợc tạo ra của giải thuật trong [1] không phải là giả định tối thiểu. Để giải quyết đƣợc hạn chế này, chúng tôi sử dụng một giá trị mới gọi là “?” để gán cho giá trị của T(s) trong trƣờng hợp trên. Chúng tôi định nghĩa một kỹ thuật cải tiến để trả lời câu hỏi kiểm tra thành viên nhƣ sau. Để tạo một giả định tối thiểu, giải thuật học L* cải tiến sẽ xây dựng một bảng quan sát (S, E, T), trong đó S và E tƣơng ứng là tập tiền tố và hậu tố. T là một hàm thực hiện ánh xạ tập (S S. ).E sang tập {true, false, “?”}, trong đó “?” có thể đƣợc xem nhƣ là một giá trị “chƣa xác định rõ”. Giá trị “chƣa xác định rõ” có nghĩa là với mỗi chuỗi
( . ).
s S S E, thậm chí s L(AW), chúng ta không biết s có nằm trong giả định đƣợc huấn luyện hay không. Chúng có thể nhận giá trị true hoặc false. Nếu nhận giá trị là true, tức là nó sẽ thuộc vào L(A(p)) còn nhận giá trị là false, tức là nó không thuộc vào L(A(p)). Câu trả lời cho câu hỏi kiểm tra thành viên đƣợc cải tiến nhƣ sau:
Một chuỗi s = a1, a2, ..., an (S S. ).E.
Nếu s = λ (chuỗi rỗng), khi đó T(s) = true.
Nếu s L(AW), thì T(s) = false.
Ngƣợc lại, T(s) = “?”.
3.3.2 Chi tiết giải thuật tạo giả định tối thiểu
Dựa trên tƣ tƣởng của giải thuật, ta có thể xem quá trình tìm kiếm một giả định có kích thƣớc nhỏ nhất thoả mãn luật ghép nối nhƣ là một bài toán tìm kiếm trong một không gian của các bảng quan sát. Chúng ta sử dụng chiến lƣợc duyệt theo chiều rộng bởi vì chiến lƣợc này đảm bảo chắc chắn rằng giả định đƣợc tạo ra là giả định tối thiểu (mục 3.4). Chi tiết của giải thuật tạo giả định tối thiểu đƣợc minh hoạ dƣới dạng giả mã trong hình (Hình 3.4). Trong thủ tục này chúng tôi sử dụng một cấu trúc dữ liệu hàng đợi để chứa các bảng quan sát đƣợc tạo ra. Những bảng quan sát này đƣợc sử
dụng để tạo ra các giả định ứng cử viên cho luật ghép nối. Ban đầu, thủ tục thực hiện đặt hàng đợi là tập rỗng (dòng 1). Chúng ta sẽ đƣa bảng quan sát đầu tiên OT0 = (S0, E0, T0) chính là gốc của cây tìm kiếm vào trong hàng đợi, trong đó S0 = E0 = {λ} (λ đƣợc thể hiện nhƣ là một chuỗi rỗng) (dòng 2). Tiếp đó, thủ tục sẽ lấy một bảng quan sát OTi từ đỉnh của hàng đợi q (dòng 4). Nếu bảng quan sát OTi chứa giá trị “?” (dòng 5), chúng ta sẽ thu đƣợc tất cả các bảng quan sát con của bảng quan sát OTi bằng cách thay tất cả “?” trong OTi bởi giá trị false hoặc true (dòng 6). Tất cả các bảng quan sát thu đƣợc sau đó sẽ đƣợc đẩy vào hàng đợi q (dòng 7). Ngƣợc lại, tức là bảng quan sát OTi không chứa giá trị “?”. Trong trƣờng hợp này, nếu OTi không phải là bảng đóng (dòng 10), giải thuật thực hiện cập nhật bảng quan sát OTi bằng cách gọi thủ tục make_closed(OTi) (dòng 11) ta thu đƣợc OT. Sau đó, OT sẽ đƣợc đƣa vào hàng đợi q chờ xử lý (dòng 12). Trong trƣờng hợp ngƣợc lại, bảng quan sát OTi là bảng đóng, một giả định ứng cử viên Ai đƣợc tạo ra từ OTi (dòng 14). Nếu giả định Ai không thoả mãn bƣớc thứ nhất của luật ghép nối. Giải thuật sẽ thực hiện phân tích phản ví dụ cex để tìm ra một hậu tố e của cex để minh chứng cho sự khác nhau giữa L(Ai) và ngôn ngữ của giả định đƣợc huấn luyện. Sau đó, e sẽ đƣợc thêm vào tập Ei của bảng quan sát OTi (dòng 16). Tiếp theo, giải thuật thực hiện cập nhật bảng quan sát OTi bằng cách sử dụng hàm Update(OTi) (dòng 17), kết quả thu đƣợc là bảng OT. OT sau đó đƣợc đƣa vào hàng đợi q chờ xử lý (dòng 18). Nếu ngƣợc lại, tức là bƣớc thứ nhất của luật ghép nối đƣợc thoả mãn, giải thuật sẽ thực hiện kiểm tra bƣớc thứ hai của luật ghép nối. Nếu bƣớc thứ hai không thoả mãn (dòng 20). Giải thuật sẽ thực hiện phân tích phản ví dụ cex để xác định xem có phải hệ thống không thoả mãn thuộc tính p hay là giả định Ai đƣa ra là quá mạnh để M2 thoả mãn. Nếu cex vi phạm thuộc tính p (dòng 21), giải thuật sẽ trả lại lỗi và kết thúc (dòng 22). Ngƣợc lại, tức là giả định Ai là quá mạnh để M2 thoả mãn. Giải thuật thực hiện phân tích phản ví dụ cex để tìm ra hậu tố e. Sau đó, e sẽ đƣợc thêm vào tập Ei của bảng quan sát OTi (dòng 24). Tiếp đó, giải thuật thu đoợc một bảng quan sát OT đƣợc cập nhật từ bảng quan sát OTi bằng cách sử dụng hàm Update(OTi) (dòng 25). OT sau đó đƣợc đƣa vào hàng đợi q chờ xử lý (dòng 26). Thủ tục lặp lại toàn bộ quá trình bằng cách lặp từ dòng 3 đến dòng 34 cho đến khi hàng đợi q rỗng hoặc một giả định tối thiểu đƣợc tạo ra.
Input: M1, M2, p: hai mô hình thành phần M1 và M2, và thuộc tính đƣợc yêu cầu p.
Output: Am(p) hoặc cex: một giả định Am(p) với kích thƣớc nhỏ nhất nếu M1||M2 thoả mãn p hoặc một phản ví dụ nếu ngƣợc lại.