Chuyển đổi LF sang FSP

Một phần của tài liệu Nghiên cứu khả năng chuyển đổi giữa các đặc tả hình thức và ứng dụng trong kiểm chứng phần mềm (Trang 45 - 50)

4 Chuyển đổi giữa các dạng biểu diễn của LTS

4.2 Chuyển đổi LF sang FSP

4.2.1 Ý tưởng

Hệ thống sẽ cài đặt một thành phần được gọi là LF2FSP. Thành phần này có

chức năng chuyển đổi dữ liệu từ LF sang FSP. Bài toán chuyển đổi từ LF sang FSP được mô tả như Hình 4.5.

Hình 4.5: Cấu trúc thành phần chuyển đổi từ LF sang FSP.

AGTool sinh ra giả định dưới dạng LF và được thành phần LF2FSPxử lý.

Kết quả đầu ra của thành phầnLF2FSPlà dữ liệu FSP. Thành phần LF2FSPcài

Chương 4.Chuyển đổi giữa các dạng biểu diễn của LTS

Thuật toán 4.2Thuật toán chuyển đổi LF sang FSP.

Đầu vào: list_transitions là danh sách các hàm chuyển trạng thái, list_states là danh sách các trạng thái.

Đầu ra: fsp_str là chuỗi kí tự biểu diễn một FSP.

1: Khởi tạo fsp_str = null, count = 0, i = 0, tmp = empty

2: {khởi tạo xâu fsp_str rỗng, khởi tạo biến đếm count và i bằng 0, khởi tạo xâu tmp rỗng}

3: for allstate in list_statesdo

4: count := 0

5: tmp := null

6: for all(start_state, transition_label, stop_state) in list_transitionsdo

7: {Phương thức ReplaceCharInString dùng để thay thế một kí tự trong một

xâu bằng kí tự khác}

8: {Phương thức GetStopState dùng để kiểm tra xem một trạng thái có phải

là trạng thái kết thúc hay không?}

9: ifstart_state = state then

10: ifcount = 0then

11: tmp := tmp + (String.Uppercase start_state) + " = ({" + ReplaceCharIn- String transition_label ’=’ ’_’) + "} -> " + (GetStopState list_transitions stop_state)

12: else

13: tmp := tmp + "\n | {" + ReplaceCharInString transition_label ’=’ ’_’) + "} -> " + (GetStopState list_transitions stop_state)

14: end if 15: count++ 16: end if 17: end for 18: ifcount > 0then 19: i++ 20: ifi > 1then 21: fsp_str := fsp_str + ",\n" + tmp + ")" 22: else 23: fsp_str := fsp_str + tmp + ")" 24: end if 25: end if 26: end for 27: fsp_str fsp_str + ".\n"; 28: return fsp_str

Chương 4.Chuyển đổi giữa các dạng biểu diễn của LTS

Danh sáchlist_transitionsbao gồm các phần tử có định dạng là (start_state, transition_label, stop_state). Tại dòng 11 của Thuật toán 4.2 sẽ tìm ra các hàm chuyển có cùng trạng thái bắt đầu startstates. Nếu biến đếm count = 0 thì tạo mới một tiến trình con cho FSP. Ngược lại, tiến trình con sẽ được thêm vào FSP trước đó. Tại các dòng từ 20 đến 27, Thuật toán 4.2 xác định một tiến trình có phải là tiến trình bắt đầu của FSP hay không? Và FSP sẽ được thêm kí hiệu kết thúc vào cuối tại dòng 29.

Đầu vào:

Danh sách list_transitions: [(S0, "in", S1), (S1, "send", S2), (S2, "ack", S0)] Danh sách list_states: [S0, S1, S2]

Các bước thực hiện: 1: Bước 1:

2: Khởi tạo các biến:

3: fsp_str = null: là xâu rỗng

4: tmp = empty: là xâu rỗng

5: count = 0, i = 0: là các biến đếm 6: Bước 2:

7: Duyệt danh sách list_states 8: Gán count = 0, tmp = null 9: Phần tử S0:

10: Duyệt danh sách list_transitions 11: Phần tử (S0, in, S1): 12: count = 0 13: tmp = "S0 = (in -> S1" 14: count = 1 15: Phần tử (S1, send, S2): 16: S0 != S1 -> bỏ qua 17: Phần tử (S2, ack, S0): 18: S0 != S1 -> bỏ qua 19: (count = 1) > 0 -> i = 1

Chương 4.Chuyển đổi giữa các dạng biểu diễn của LTS

20: fsp_tmp = "S0 = ({in} -> S1)"

21: Tương tự đối với 2 phần tử S1 và S2, ta được:

22: fsp_tmp = "S0 = ({in} -> S1), S1 = ({send} -> S2),S2 = ({ack} -> S0)" 23: Bước 3:

24: Trả về chuỗi fsp_tmp biểu diễn một FSP

4.2.2 Phân tích đánh giá

Thuật toán 4.2 có tính dừng. Điều này có nghĩa là thuật toán kết thúc sau một khoảng hữu hạn thời gian thực thi. Tham số đầu vào của Thuật toán 4.2 là hai danh sách list_transitions và list_states. Trong Thuật toán 4.2, chương trình sẽ dừng khi duyệt hết toàn bộlist_transitionsvàlist_states. Các danh sách này đều là danh sách hữu hạn phần tử.

Luận văn đã trình bày phương pháp chuyển từ LF sang FSP. Tuy nhiên, kết quả thu được chưa được tối ưu hóa và phương pháp này chỉ mới được sinh ra FSP ở dưới dạng đơn giản nhất. Để giải quyết được bài toán này, cần phải dựa vào đặc tả và cú pháp của FSP. Sau đó cải tiến Thuật toán 4.2 để thu được xâu biểu diễn FSP được tối ưu hóa tốt hơn.

Chương 5

Thực nghiệm

5.1 Cài đặt chương trình

Chương trình được cài đặt dựa trên phần nhân của AGTool. Dựa vào đó, luận văn sẽ cài đặt các thành phần có chức năng chuyển đổi giữa các phương pháp biểu diễn của LTS. Trong quá trình nghiên cứu và phát triển chương trình, các thành phần này được kết hợp với công trình khóa luận tốt nghiệp của sinh viên

Vũ Hồng Long [9] để cài đặt một chương trình GUI-AGTool có giao diện người

dùng trên Ubuntu. Luận văn cũng đã tích hợp với LTSA thông qua một cầu nối để hỗ trợ chuyển đổi từ FSP sang LF. GUI-AGTool được cài đặt bằng ngôn ngữ

OCaml và các thành phần mới sử dụng công cụocamllex và ocamlyacc để đọc,

phân tích tập tin dữ liệu đầu vào. Ocamllex là bộ sinh dùng để sinh ra chương trình phân tích đoán nhận các mẫu từ vựng trong tập tin đầu vào. Các biểu thức chính quy và các luật được đặc tả trong tập tin từ vựng.Ocamllexsẽ sinh ra tập tin mã nguồn OCaml dựa vào tập tin đặc tả này. Tập tin mã nguồn được sinh ra sẽ định nghĩa các hàm xử lý từ vựng [15].Ocamlyacc là bộ sinh dùng để sinh ra

chương trình phân tích cú pháp của tập tin đầu vào [16]. Chương trình OCaml

sẽ có chức năng phân tích cú pháp cho tập tin dữ liệu đầu vào.

5.2 Giới thiệu về chương trình

Chương trình GUI-AGTool đã được cài đặt và cung cấp miễn phí tại địa chỉ 1.

Chương trình yêu cầu cài đặt các gói thư viện sau: • OCaml 3.12 được cung cấp tại địa chỉ2.

1http://uet.vnu.edu.vn/~hungpn/GUI-AGTool/

Một phần của tài liệu Nghiên cứu khả năng chuyển đổi giữa các đặc tả hình thức và ứng dụng trong kiểm chứng phần mềm (Trang 45 - 50)

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

(59 trang)