4.1 Mô tả biểu đồ trình tự UML bằng các đối tượng trong
Java
Ta đã có ba lớp cơ bản: ClassifierRole, Message, TagedValue để mô tả hai thành phần quan trọng của biểu đồ trạng thái UML, đó là đối tượng và thông điệp trao đổi giữa các đối tượng. Trong một biểu đồ trình tự, không chỉ có một đối tượng hay một thông điệp, mà nó chứa mỗi chuỗi các đối tượng và các thông điệp trao đổi giữa các đối tượng, tạo nên giao thức trao đổi thông điệp giữa các đối tượng. Do đó, cũng giống như mô tả biểu đồ trình tự, để mô tả các thành phần có trong biểu đồ trình tự, chúng tôi cũng dùng một danh sách các ClassifierRole để lưu trữ tất cả các đối tượng có trong biểu đồ. Danh sách các Message và danh sách các TagedValue để lưu trữ tất cả các thông điệp trao đổi giữa các đối tượng trong biểu đồ. Các lớp này được mô tả trong hình 4.1.
Hình 4.1 Mô tả các đối tượng trong java
Ngoài ra chúng tôi cũng xây dựng thêm các phương thức giúp truy xuất dữ liệu về từng thành phần trong danh sách các đối tượng trong lớp được dễ dàng hơn thông qua id
4.2 Xây dựng FSM mô tả biểu đồ trình tự UML
4.2.1 Máy trạng thái
Máy trạng thái( Finite state machine ) là một mô hình hành xử với một số lượng trạng thái hữu hạn hoặc vô hạn, và một tập các hành động tương ứng với các trạng thái đó.
Trạng thái là một hoặc một tập thông tin về các thông số của hệ thống tại một thời điểm nào đó. Trạng thái hiện thời được khai báo bởi trạng thái trước đó của hệ thống. Có thể nói là nó ghi lại các thông tin quá khứ. Nó phản chiếu sự thay đổi từ khi hệ thống bắt đầu hoạt động đến thời điểm hiện tại. Sự chuyển tiếp chỉ ra rằng sự thay đổi của một trạng thái được mô tả bởi một điều kiện cần để thỏa mãn việc khởi tạo chuyển đổi. Một hành động là sự diễn tả của một thực thể được thi hành vào thời điểm xử lý. Có một vài kiểu hành động.
- Entry action : Thi thành khi bắt đầu vào trạng thái (Enter vào trạng thái). - Exit action : Thi hành khi thoát khỏi trạng thái
- Input action : Việc thi hành phụ thuộc vào trạng thái hiện thời và các điều kiện đầu vào.
- Transition action : Được thi hành khi khi xử lý một trạng thái chắc chắn.
Hình 4.2 Mô Hình Máy trạng thái
4.2.2 Thuật toán xây dựng máy trạng thái mô tả biểu đồ trình tự UML UML
Giao thức được mô tả bằng biểu đồ trình tự là giao thức liên quan đến nhiều lớp đối tượng khác nhau, nhưng xét cho cùng, nó cũng gần giống với giao thức trên một lớp đối tượng được mô tả bằng biểu đồ trạng thái. Nó cũng quy định dãy các phương thức sẽ được gọi trong chương trình và lập trình viên sẽ phải gọi các phương thức trong các lớp khác nhau đúng theo trình tự như vậy. Việc kiểm chứng, xét cho cùng cũng chính là để kiểm tra xem lập trình viên gọi các phương thức có đúng như giao thức đặc tả ban đầu không. Do đó, Máy trạng thái mô tả biểu đồ trình tự tôi xây dựng cũng tương tự với máy trạng thái mô tả biểu đồ trạng thái. Gồm ba thành phần dữ liệu:
HashMap<String, Set<String>> fsm = null; HashSet<String> entrySigs, exitSigs;
- entrySigs: Mô tả phương thức bắt đầu của giao thức - exitSigs: Mô tả phương thức kết thúc giao thức
- fsm: Là một HashMap, với key một phương thức bất kỳ khác phương thức mở đầu và phương thức kết thúc giao thức. Value chính là phương thức ngay trước nó trong giao thức.
Thuật toán xây dựng FSM mô tả biểu đồ trình tự UML:
- Input: tài liệu XMI
- 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.
o Đọc file XMI, lấy ListMessage, ListClasfierRoles,
ListReturn, ListArgument
o Duyệt từng Message trong ListMessage.
Nếu nó là message đầu tiên, lấy các dữ liệu về tên lớp, kiểu trả về, các tham số truyền vào cho vào entrySigs và cho vào fsm
với key là tên thông điệp hoàn chỉnh, value là “START”.
Nếu nó là message kết thúc, lấy dữ liệu tạo thành message
hoàn chỉnh (bao gồm tên lớp, kiểu trả về…), lưu vào exitSigs. Lưu vào fsm với key là message hoàn chỉnh vừa lưu vào
exitSigs và value là Set chứa hàm ngay hoàn chỉnh ngay trước đó.
Nếu nó là message trung gian, lấy dữ liệu hoàn chỉnh về
message hiện thời và message ngay trước đó. Lưu vào fsm với
key là message hiện thời, value là Set chứa message ngay trước đó.
4.3 Sinh aspect từ FSM mô tả biểu đồ trạng thái UML
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 pointcut và advice
đượ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 5.1 Hệ thống thực nghiệm