Sinh aspect từ FSM mô tả biểu đồ trạng thái UML

Một phần của tài liệu Kiểm tra ràng buộc thời gian sử dụng phương pháp AOP (Trang 47 - 49)

Mô tả giao thức bằng biểu đồ trạng thái, ta quan tâm tới các trạng thái và các hành vi chuyển trạng thái. Hành vi chuyển trạng thái chỉ được thực hiện khi nó thỏa mãn hai điều kiện:

- Trạng thái trước đó có gọi được hàm chuyển trạng thái hay không. - Điểu kiện chuyển trạng thái được thỏa mãn.

Khi thỏa mãn hai điều kiện này, hàm chuyển trạng thái được thực thi và trạng thái của chương trình sẽ thay đổi sang một trạng thái mới. Như vậy, các join point được xác định chính là điểm gọi các hàm chuyển trạng thái; before advice sẽ chứa mã kiểm tra vi phạm hai điều kiện chuyển trạng thái; after advice chứa mã thay đổi trạng thái. Cấu trúc tổng quát sẽ có dạng:

pointcut pc_METHOD: ARGS && call (METHOD_RETURN METHOD_NAME(METHOD_ARG_TYPE))

before(METHOD_ARG): pc_METHOD_NAME(METHOD_ARG_NAME) {

if (PRE-CONDITIONS){

// Định nghĩa các hành động khi vi phạm điều kiện }

}

after(METHOD_ARG): pc_METHOD_NAME(METHOD_ARG_NAME) {

// Thay đổi trạng thái }

Để tiện cho việc quản lý các trạng thái, ta đặt giá trị cho các trạng thái đặc tả trong giao thức bằng các số tự nhiên bắt đầu từ 0 – HashMap stateMap sẽ được dùng vào việc này. Và dùng một biến khác để lưu giá trị của trạng thái hiện thời (int state).

Before advice sẽ kiểm tra xem giá trị của biến state hiện thời có bằng giá trị của các trạng thái trước đó có thể sẽ được chuyển trạng thái khi gọi phương thức hiện thời hay không? Nếu vi phạm, sẽ báo lỗi. Giá trị của biến state sẽ được đặt bằng 0 khi trạng thái hiện tại là “START”.

After advice sẽ đặt lại giá trị mới cho biến state sau khi hàm thay đổi trạng thái được gọi. giá trị của biến state sẽ được đặt bằng 0 nếu sau khi thay đổi trạng thái, trạng thái mới là “FINAL”.

Thuật toán sinh mã aspect sẽ được cài đặt như sau:

- Duyệt lần lượt các key trong FSM – đây chính là các hàm chuyển trạng thái

- Nếu key không phải là “START” hay “FINAL”

o Dùng các hàm xử lý xâu, cắt chuỗi key thành các phần như: tên hàm, kiểu trả về, kiểu tham số truyền vào, tên tham số truyền vào, điều kiện chuyển trạng thái.

o Duyệt từng thành phần trong value của FSM, tạo ra các điều kiện kiểm tra vi phạm.

o Tạo ra các pointcut, advice bằng cách thay thế các xâu vừa được tạo ra ở trên vào các vị trí đã được định nghĩa sẵn trong mẫu pointcutadvice

được định nghĩa trước đó.

- Kết hợp các pointcut, advice lại thành aspect.

4.4 Kết luận

Trong chương này, chúng tôi đã trình bày thuật toán xây dựng máy trạng thái mô tả biểu đồ trình tự UML, phương pháp tự động sinh mô-đun aspect từ FSM mô tả biểu đồ UML. Nội dung chính của phương pháp chính là duyệt các trạng thái trong FSM, phân tích vào các vị trí thích hợp trong xâu aspect mẫu được khai báo từ trước. Xâu aspect mẫu sẽ tuân theo cú pháp của một aspect cơ bản, bao gồm tên aspect, vùng pointcut và vùng

advice. Thuật toán duyệt các trạng thái trong máy trạng thái thực chất là việc duyệt các

key của FSM, lấy dữ liệu của từng trạng thái, sử dụng các phương thức thao tác với xâu ký tự để tạo ra các aspect.

Chương 5. Thực nghiệm

Một phần của tài liệu Kiểm tra ràng buộc thời gian sử dụng phương pháp AOP (Trang 47 - 49)