1. 4 Cấu trúc khóa luận
3.2. Sinh Aspect từ biểu đồ trình tự
Việc kiểm chứng giao thức trên nhiều lớp đối tượng trong biểu đồ trình tự có thể coi như việc gọi tuần tự các phương thức. Giao thức được mô tả dưới dạng một FSM. Do đó, hành vi chuyển trạng thái là đúng khi:
- Trạng thái trước đó có gọi hàm chuyển trạng thái không. - Điểu kiện chuyển trạng thái có thỏa mãn không.
Khi thỏa mãn các điều kiện trên, thì sự chuyển trạng thái được thực hiện đúng và sẽ chuyển qua trạng thái mới. Như vậy, các join-point được xác định các điểm chuyển
trạng thái; before advice sẽ chứa các hành vi kiểm tra sự chuyển trạng thái này là đúng hay sai. Sau đó, mã trạng thái được thay đổi; after advice chứa các hành vi kiểm tra điều kiện loop,alt, break, opt và kiểm tra điều kiện dừng.
Để tiện cho việc kiểm tra, Trạng thái ban đầu của máy trạng thái ta đặt là “0”, dùng một biến Id để xác định tên các trạng thái hiện tại(ArrayList<String> Id).
Tại before, kiểm tra xem phương thức gây biến đổi trạng thái có phải bắt đầu từ một trạng thái có thể hiện tại hay không? Nếu vi phạm thì thông báo lỗi. Sau đó cập nhật lại trạng thái hiện tại. Trạng thái hiện tại được đặt mặc định ban đầu là “0”.
Tại after advice. Khi này trạng thái hiện tại đã là trạng thái mới. Khi đó ta kiểm tra xem trạng thái này có thuộc alt, loop, opt hay break không, để đưa ra các hướng giải quyết tương ứng. Nếu nó là một trong các trạng thái kết thúc thì đưa ra thông báo tổng quát về qua trình thực hiện.
Thuật toán sinh mã Aspect như sau : Bảng 3.2: Thuật toán sinh mã Aspect
Bước Nội dung
1 Duyệt danh sách các trạng thái FSM, lấy các trạng thái rồi lấy tập các thông điệp gây ra biến đổi trạng thái. Dùng các hàm để xử lý các thông điệp này và đưa nó về dạng @Implement * ten_ham(<danh sach doi so>). Sau đó đưa chúng vào pointcut. Việc này giúp chúng ta chỉ cần một pointcut.
2 Duyệt danh sách các trạng thái trong FSM lấy các trạng thái nguồn và các trạng thái đích tương ứng để tạo ra các điều kiện kiểm tra.
3 Tạo các pointcut, advice bằng cách thay thế các xâu tương ứng vừa được tạo ra ở trên vào vị trí cần thiết.
4 Kết hợp pointcut advice thành Aspect cần thiết
Việc kiểm chứng cho từng thành phần đoạn gộp của biểu đồ trình tự lại có điểm khác nhau.
đó, khi một phương thức nào đó, kích hoạt sự chuyển trạng thái đến trạng thái này thì ta thông báo sự chuyển trạng thái đó.
Đối với loop, nó cũng có trạng thái kích hoạt như trên. Nhưng với loop ta cần đếm số lần xuất hiện của nó. Do đó, ta dùng biến có tên dạng loop+<tên trạng thái> để đếm số lấn. Tại before, khi một trạng thái loop được kích hoạt thì ta tăng số lần đếm nó lên.Ví dụ: ta có một trạng thái kích hoạt loop là “2”. Ta đặt tên cho biến đếm lad loop2 và khởi tạo nó ban đầu là 0.
Đối với alt, Tương tự nó có các trạng thái kích hoạt, nhưng khác với loop, break, opt. Với alt có nhiều trạng thái kích hoạt, do đó ta cần chỉ ra nó kích hoạt theo hướng nào.