Xây dựng FSM mô tả biểu đồ trạng thái UML

Một phần của tài liệu LUẬN VĂN:KIỂM CHỨNG ĐẶT TẢ UML CHO TÁC TỬ PHẦN MỀM docx (Trang 48 - 50)

Như ta đã biết, để chuyển từ trạng thái này, sang trạng thái kia thì cần có hàm chuyển trạng thái. Trong nghiên cứu của tôi, hàm chuyển trạng thái được mô tả trong các cạnh của biểu đồ trạng thái. Tập hợp các hàm chuyển trạng thái sẽ tạo thành giao thức mô tả hoạt động của đối tượng. FSM được xây dựng cần phải mô tả được giao thức này. Mặt khác, trong mã nguồn của chương trình, các trạng thái hầu như không

có ý nghĩa, các đoạn mã chỉ mô tảcác phương thức được thực hiện – chính là các cạnh của biểu đồ, và mục đích của việc kiểm chứng ởđây chính là kiểm tra xem các phương

thức trong mã nguồn của chương trình có được gọi theo đúng giao thức đã được chỉ ra

hay không. Để kiểm tra việc này, công cụ tự sinh aspect cần phải biết phương thức nào

được gọi trước, phương thức nào được gọi sau từđó sẽ kiểm tra được các vi phạm các giao thức ràng buộc đối tượng. FSM được xây dựng cần phải mô tả được điều này. Dựa vào bài báo [5] tôi xây dựng FSM gồm các thành phần dữ liệu sau:

HashMap<String, Set<String>> fsm = null; HashSet<String> entrySigs, exitSigs;

41

HashMap<String, Set<String>> stateMap = null;

Trong đó:

- entrySigs: Mô tả các cạnh đi ra từ trạng thái bắt đầu. - exitSigs: Mô tả các cạnh đi vào trạng thái kết thúc.

- fsm: Là một HashMap, với key chính là một cạnh đi ra từ một trạng thái trung gian. Value chính là các cạnh đi vào trạng thái này.

- stateMap: Biểu diễn các trạng thái và các cạnh đi vào trạng thái.

Hashmap này sẽđược dùng đểđánh số các trạng thái của biểu đồ. Thuật toán xây dựng FSM như sau:

- Input: tài liệu XMI mô tả biểu đồ trạng thái UML - Output: FSM nếu xây dựng được, nếu không sẽ báo lỗi. - Các bước thực hiện:

o Khởi tạo fsm, entrySigs, exitSigs, stateMap.

o Đọc file XMI, lấy ListStates và ListTransitions. o Duyệt từng State trong ListStates

 Tạo giá trị cho stateMap:

• Nếu nó là trạng thái bắt đầu: thêm một phần tử mới với

key là “START”, value = null.

• Ngược lại thêm vào stateMap một phần tử với với key

là tên trạng thái hiện tại, value là tên của các cạnh đi vào đỉnh.

 Nếu nó là trạng thái bắt đầu, lấy tên + precondition cho vào

entrySigs và cho vào fsm (biến fsm) với key là tên +

precondition còn value là: “START”.

 Nếu nó là trạng thái kết thúc, lấy tên + precondition cho vào

exitSigs.

 Nếu nó là trạng thái trung gian.

• Lấy tên của tất cả các cạnh đi vào trạng thái cho vào cấu trúc dữ liệu dạng “Set” trong Java.

• Duyệt từng cạnh đi ra từ trạng thái. Lấy tên +

precondition. Thêm vào fsm key là tên + precondition

của cạnh đi ra và value là “Set” chứa các cạnh đi vào ở

42

Một phần của tài liệu LUẬN VĂN:KIỂM CHỨNG ĐẶT TẢ UML CHO TÁC TỬ PHẦN MỀM docx (Trang 48 - 50)