File xmi sau khi chuẩn hóa mơ tả dữ liệu của biểu đồ tuần tự

Một phần của tài liệu (LUẬN án TIẾN sĩ) các kỹ thuật sinh tự động dữ liệu kiểm thử dựa trên các biểu đồ UML luận án TS máy tính 624801 (Trang 57 - 62)

Thuật tốn 3.1 Sinh đồ thị dịng điều khiển (CFG), phát triển từ [72]

Input: D: Biểu đồ tuần tự; CD: Biểu đồ lớp.

Output: Đồ thị G: (A, E, in, F) ở đó A là một tập các nút (gồm BN, DN, MN, FN

và JN); in là nút khởi tạo và F là tập hợp các nút kết thúc của đồ thị; E là tập các cạnh của đồ thị G.

1: create initial node in, node x;

2: create empty queue;

3: create curP os point at start element of sequence diagram inxmi;

4: repeat

5: curP os read each element of sequence diagram to add to queue //used in [70]

6: curP os move to next Element;

7: until curP os meets end element of xmi file

8: x = processElement(queue,CD,in);

9: if x6=f inalN odethen

10: create final Node f n∈F;

11: Connect edge fromx to f n;

12: end if

13: return G;

Đầu vào của Thuật toán 3.1 là biểu đồ tuần tự và biểu đồ lớp tương ứng. Khởi tạo nút bắt đầu in, nút x và hàng đợi queue rỗng (dòng 1, 2). Con trỏ

curP os trỏ đến phần tử đầu tiên của biểu đồ tuần tự trong file xmi (dòng 3).

Vòng lặp từ dòng 4đến7là con trỏcurP os lần lượt trỏ đến các phần tử và thêm vào hàng đợi queue. Kết thúc của vòng lặp (dòng7) là cấu trúc dữ liệu hàng đợi

tương ứng với file đầu vào xmi. Hàm processElement trả về nút ra tương ứng x

(dòng 8). CFG được sinh ra từ nút bắt đầu in kết nối theo thứ tự các nút ra được trả về từ hàm processElement, cạnh cuối cùng được tạo ra từ nút ra x nối với nút kết thúc fn (dòng11). Đầu ra của thuật tốn là đồ thị G.

Thuật tốn 3.2 phân tích từng phần tử của hàng đợi và trả về các nút khác nhau. Nút bắt đầu in được coi như nút hiện tại curN ode, mỗi phần tử của hàng

đợi được lấy ra từ hàm queue.pop(). Phụ thuộc vào các phần tử được bao gồm

trong hàng đợi này, hàm đưa ra được gọi đệ quy tương ứng. Do đó, có năm loại nút tương ứng trong đồ thị đó là BN, DN, M N, F N và J N. Ngoài ra, mỗi phần tử của biểu đồ tuần tự phân biệt hai loại nút: nút vào và nút ra. Nút vào là nút hiện tại nơi được kết nối từ ngồi bởi cạnh vào và do đó có các tham số đầu vào cho hàm. Nút ra là nút được kết nối bởi các cạnh đi ra, do đó có giá trị trả về của hàm đó. Khi phần tử được đưa ra từ biểu đồ tuần tự là một thơng điệp m

Thuật tốn 3.2 Phân tích hàng đợi tạo các nút tương ứng trong CFG, phát triển [72]

Input: Biểu đồ lớp: CD, Hàng đợi: queue, Nút hiện tại: curN ode∈A

Output: exitN ode∈A

1: function processElement(queue, CD: classdiagram, curNode:A): A;

2: while (queue!= empty) do

3: x = queue.pop();

4: if (x==message) then

5: BN = CreateBlockNode(); //create BN is message or a set of message

6: for each message m ∈B do

7: get receiver class in r.className;

8: msg = returnMsgStructure(CD,r.className,m);

9: attr =returnAttributeStructure(CD,r.className);

10: for (all variables in m) do

11: attachAttributeInfor(attr,m);//attach constraint c[i] to m

12: end for

13: ConnectEdge(curNode,BN); curN ode=BN

14: exitNode =BN;

15: end for

16: else if (x is ‘alt’ or ‘opt’ fragment) then

17: exitNode= processAltOpt(x,curNode);

18: else if (x is ‘loop’ or ‘break’ fragment) then

19: exitNode= processLoopBreak(x,curNode);

20: else if (x is ‘parallel’ or ‘sequencing’ fragment) then

21: exitNode= processParSequence(x,curNode);

22: else if (x is ‘strict’ or ‘critical’ fragment) then

23: processStrictCritical(x,curNode);

24: else if (x is ‘consider’ fragment)then

25: processConsider(x,curNode);

26: else if (x is ‘assert’ fragment) then

27: processAssert(x,curNode);

28: else if (x is ‘negative’ fragment)then

29: processNegative(x,curNode);

30: else if (x is ‘ignore’ fragment) then

31: processIgnore(x,curNode);

32: end if

33: return exitNode;

34: end while

thì lớp nhận của thơng điệp m được xem xét. Phương thức tương ứng là phương thức gọi được sử dụng hàm returnM sgStructure. Cho các ràng buộc

được cập nhật vào thông điệp mi và hàm returnAttributeStructure() là hàm trả về các thuộc tính của lớp tương ứng với thơng điệp mi đang xét. Hàm để thực hiện lấy các ràng buộc là attachAttributeInf o(). Sau khi tạo nút tương ứng, nút

hiện tại sẽ được nối với nút vừa tạo và sau đó nút này lại được xem xét như nút hiện tại. Theo thuật toán này, CFG được sinh ra từ biểu đồ tuần tự có thể bao gồm các loại tốn tử lồng nhau ở nhiều mức.

Khi phân tích file xmi, hàng đợi queue được tạo ra tương ứng theo đúng trình tự của biểu đồ tuần tự đưa vào. Lần lượt lấy các phần tử của hàng đợi (dòng3) cho đến khi hàng đợi queuerỗng (vòng lặp từ dòng2đến34). Nếu phần

tử lấy ra từ hàng đợi là thơng điệp (dịng 4) thì tạo BN và thơng tin của BN

chính là thơng điệp hoặc tuần tự các thơng điệp. Với mỗi thơng điệp m (dịng

6) thì lấy thơng tin về lớp nhận và tham số của phương thức (về kiểu dữ liệu

và các ràng buộc tương ứng trong biểu đồ lớp) được gắn vào từng thông điệp m

(dịng 7 đến dịng 12). Sau đó, nối nút hiện tại curN ode với BN được tạo ra và

BN được coi như nút hiện tại (dòng 13); dòng 14 chỉ ra việc thực hiện gán BN

cho exitN ode (là nút để trả về cho Thuật toán 3.1).

Nếu phần tử lấy ra từ hàng đợi là toán tử alt hoặc opt thì thực hiện gọi hàm

processAltOptđể xử lý tốn tửalthayopttương ứng (dịng16và dịng17). Tương

tự việc xử lý với mười tốn tử cịn lại thì gọi các hàm xử lý tương ứng (từ dòng

18 đến dòng 31). Đối với một số tốn tử alt, opt, loop, break, par và seq có nút

ra của các toán tử (là loại nút M N, J N trong CFG được chuyển đổi) nên các hàm có giá trị trả về là các nút đó. Sau mỗi lần tạo ra nút đầu ra thì đều trả nút exitN ode đó cho Thuật tốn 3.1 (dịng 33).

Độ phức tạp của thuật toán: Trong Thuật toán 3.1, giả sử hàng đợiqueuecó

n phần tử khi đó độ phức tạp của thuật tốn là: max{O(n), O(processElement)}.

Do đó, chúng ta quan tâm đến O(processElement). Trong Thuật toán 3.2 tất cả

các hàm gọi xử lý cho từng tốn tử đều có nhiều nhất một vịng lặp m phần tử, do đó độ phức tạp của các hàm con lớn nhất là O(m)độ phức tạp tuyến tính. Vì vậy, độ phức tạp của Thuật tốn 3.2 chính là độ phức tạp của đoạn dòng lệnh từ6 đến15. Độ phức tạp của đoạn dịng lệnh đó được tính gồm ba vịng lặp lồng

nhau: vòng lặp trong cùng tối đa x biến của một thơng điệp, vịng lặp thứ hai duyệt tối đa số lượng thơng điệp m và vịng lặp ngoài cùng duyệt tối đa n phần tử của hàng đợi queue. Vì vậy, độ phức tạp của thuật tốn là O(n∗m∗x). Như

vậy, tính dừng của Thuật tốn 3.2 như sau: trong trường hợp lặp nhiều nhất là

(n∗m∗x) lần, tuy nhiên với các biểu đồ tuần tự luôn xác định được số biến tối đa của một thông điệp, số thông điệp m và số toán hạng và các toán tử của biểu đồ. Do vậy, (n∗m∗x) luôn xác định, nghĩa là sau một số hữu hạn các bước thì thuật tốn sẽ kết thúc.

Sau đây là các hàm xử lý và minh họa cho việc chuyển sang đồ thị dòng điều khiển của mười hai toán tử của biểu đồ tuần tự UML 2.0.

Thuật toán xử lý toán tử alt và opt: Kế thừa từ phương pháp trong [72], Thuật toán 3.3 xử lý với từng loại phần tử tương ứng của toán tửalt hoặcoptđược lấy từ hàng đợi, với từng loại phần tử tạo các loại nút tương ứng. Nếu x lấy ra là toán tử alt hoặc opt (dịng 1) thì tạo DN tương ứng (dịng 2), sau đó nối DN với nút hiện tại curN ode(dòng 3). Trong trường hợp phần tử

lấy ra là tốn hạng và có điều kiện guard (dịng4) thì gán điều kiện vào cạnh ra

từ DN (dòng 5 và dòng 6). Nếu x là phần tử kết thúc của toán tử alt hoặc opt

(dịng7) thì M N được tạo ra (dịng9) và nối nút curN odevà MN vừa tạo (dòng

10), coi MN đó chính là điểm ra của phần đồ thị vừa tạo. Hình 3.5 minh họa

việc chuyển từ biểu đồ tuần tự UML với toán tử opt và alt sang CFG. Với tốn tử opt chỉ ra rằng: thơng điệp m1 tương ứng với loại nút BN lấy nhãn là B1, toán tử opt chuyển đổi tương ứng DN lấy nhãn là D1 và điều kiện [c] được gắn với cạnh ra, thông điệp m2 chuyển thành nút B2 tương ứng và kết thúc toán tử

opt là MN lấy nhãn M1; với toán tửalt tương ứng chỉ ra: chuyển đổi toán tử alt

thành DN nhãn D1, gán tương ứng điều kiện [c] đúng và sai tương ứng với hai nhánh m1 tạo nút B1 và m2 tạo nút B2 và kết thúc toán tử alt là MN lấy nhãn M1. Độ phức tạp của Thuật tốn 3.3 chính là độ phức tạp hằng số O(1). Tính

dừng của thuật tốn: trong thuật tốn chỉ là các câu lệnh tuần tự xác định và khơng có vịng lặp, vì vậy sau một số hữu hạn các bước thì thuật tốn sẽ dừng.

Thuật toán xử lý toán tử break và loop: Kế thừa từ phương pháp trong [72], Thuật toán 3.4 xử lý với từng loại phần tử tương ứng của toán tử

break, loop được lấy từ hàng đợi, với từng loại phần tử tạo các loại nút tương ứng. Nếu x lấy ra là tốn tử break hoặc loop (dịng 1) thì tạo DN tương ứng

(dịng 2), sau đó nối DN với nút hiện tại curN ode (dòng 3). Trong trường hợp

phần tử lấy ra là tốn hạng và có điều kiệnguard (dịng4) thì gán điều kiện vào

Thuật tốn 3.3 Xử lý toán tử alt và opt: processAltOpt(x, curN ode) [72]

Input: Toán tử x là alt hoặc opt lấy từ hàng đợi; nút hiện tại curN ode

Output: Nút ra exitN ode (là điểm ra của một phần CFG vừa sinh ra)

1: if (x==fragment) && (x.type ==‘alt’ or ‘opt’) then

2: Create a DN ;

3: ConnectEdge(curNode,DN);

4: else if (x==operand)&& (x.guard !=null) then

5: attachGuardtoEdge();//attach guard to edge

6: curNode = DN;

7: else if (x==‘EOF’) && (x.type ==‘alt’ or ‘opt’) then

8: //termination condition of fragment alt or opt

9: Create merge node MN;

10: ConnectEdge(curNode,MN);

11: exitN ode = MN;

12: return exitN ode;

13: end if m1() m2() a:A b:Bb:B opt [c] m1() a:A b:Bb:B m2() alt [!c] [c] [c] B2 M1 D1 B1 [!c] B1 [c] M1 B2 D1

Một phần của tài liệu (LUẬN án TIẾN sĩ) các kỹ thuật sinh tự động dữ liệu kiểm thử dựa trên các biểu đồ UML luận án TS máy tính 624801 (Trang 57 - 62)