Chƣơng 2 TỔNG QUAN KIỂM THỬ DỰA TRÊN MÔ HÌNH
3.6. Thuật toán sinh tự động các đƣờng kiểm thử
3.6.1. Thuật toán phân tích biểu đồ tuần tự
Thuật toán 1: Thuật toán phân tích biểu đồ tuần tự
Đầu vào: Biểu đồ tuần tự biểu diễn bằng file xmi
Đầu ra: Danh sách các phân đoạn và mối quan hệ giữa chúng 1: create stack with an operand on top
2: create array lifelineList and array messageList 3: for all element in xmi file do
4: if meet open tag then
5: switch element
6: case Lifeline:
7: create new lifeline and add to lifelineList; 8: break;
9: case Fragment:
10: create new fragment and push to stack; 11: break;
12: case Guard:
13: create new guard and push to stack; 14: break;
15: case Option:
16: create new option and push to stack; 17: break;
18: case Operand:
19: create new operand and push to stack; 20: break;
21: case Message:
22: create new message and add to messageList; 23: break;
24: case EventOccurence:
26: break;
27: case Constraint:
28: create new constraint and add to the Fragment on the top of stack; 29: break;
30: end switch
31: else if meet close tag then
32: if element is Operand then
33: op = stack.pop()
34: add op to the Fragment on the top of stack 35: else if element is Fragment then
36: fm = stack.pop() esle
37: add fm to the Operand on the top of stack 38: end if
39: end if
40: end for
Thuật toán 1 mô tả quá trình phân tích biểu đồ tuần tự biểu diễn bằng file xmi. Dữ liệu thu đƣợc gồm một mảng chứa các phân đoạn (Fragment) hoặc thông điệp (Message) đƣợc sắp xếp theo trình tự thời gian thực thi và một mảng chứa các chu kỳ sống(Lifeline). Ban đầu, thuật toán khởi tạo một ngăn xếp (stack) chứa một toán hạng(Operand) (dòng 1), toán hạng này dùng để chứa mảng lƣu các phân đoạn hoặc thông điệp trong cấu trúc dữ liệu. Tiếp theo, thuật toán khởi tạo một mảng chứa các chu kỳ sống và một mảng chứa các thông điệp (dòng 2). Mảng chứa các thông điệp dùng lƣu tạm thời các thông điệp để về sau thay các thông điệp này vào các cặp sự kiện (EventOccurence) tƣơng ứng. Khi đọc file xmi, gặp thẻ mở (dòng 4), thuật toán sẽ căn cứ vào kiểu của thẻ để xử lý. Thuật toán sẽ tạo ra các đối tƣợng tƣơng ứng, nếu kiểu của thẻ là phân đoạn (dòng 9) hay toán hạng (dòng 12) thì thêm các đối tƣợng này vào ngăn xếp. Nếu kiểu của thẻ là chu kỳ sống (dòng 6) hay thông điệp (dòng 21) thì thêm các đối tƣợng này vào các mảng tƣơng ứng. Nếu kiểu của
thẻ là sự kiện (dòng 24) hay điều kiện của phân đoạn (Constraint) (dòng 27) thì thêm các đối tƣợng này vào các đối tƣợng 20 trên đỉnh stack. Nếu gặp thẻ đóng (dòng 31) là toán hạng (dòng 32) hay phân đoạn (dòng 35) thì lấy các đối tƣợng này ra khỏi đỉnh ngăn xếp rồi thêm chúng vào phần tử ở đỉnh ngăn xếp. Đến khi đọc hết các phần tử trong file xmi, dữ liệu thu đƣợc gồm một mảng chứa các phân đoạn và các sự kiện nằm trong toán hạng trên đỉnh ngăn xếp, một mảng chứa các chu kỳ sống và một mảng chứa các thông điệp. Các cặp sự kiện sẽ đƣợc thay thế bằng các thông điệp tƣơng ứng.