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 CHỨNG ĐẶT TẢ UML CHO TÁC TỬ PHẦN MỀM (Trang 57 - 58)

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

50

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 pointcut

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

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

Một phần của tài liệu KIỂM CHỨNG ĐẶT TẢ UML CHO TÁC TỬ PHẦN MỀM (Trang 57 - 58)