Chuyển từ biểu đồ tuần tự sang CFG (của toán tử break và loop)

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 64 - 69)

Thuật toán xử lý toán tử parallel và weak sequencing: Phát triển và mở rộng thuật toán so với phương pháp trong [72], Thuật toán 3.5 mà luận án cải tiến với toán tử parallel (par) và đề xuất xử lý với toán tử weak sequencing (seq). Với từng loại phần tử tương ứng của tốn tửpar hoặcseq được lấy từ hàng đợi thì tạo ra các loại nút tương ứng. Nếu x lấy ra là tốn tửpar hoặc seq (dịng

1) thì tạo FN tương ứng (dịng 2), sau đó nối FN với nút hiện tại curN ode(dịng

3) và coi FN vừa tạo chính là nút hiện tại (dịng 4). Trong từng toán hạng của

tốn tử par hoặc seq, với mỗi thơng điệp mi sẽ tạo BN tương ứng và gắn thuộc tínhisAsynT oBN vào các nút mà thơng điệp tương ứng của nó có chia sẻ dữ liệu (dịng 5 đến dòng 7). Nếu phần tử x lấy ra là phần tử đóng của hai tốn tử đó thì tạo JN tương ứng (dịng 11), sau đó nối JN với nút hiện tại curN ode (dịng

12); JN vừa tạo được coi là điểm ra của phần CFG vừa sinh ra. Hình 3.7 minh

họa việc chuyển đổi từ biểu đồ tuần tự sang CFG của toán tử par, seq. Bắt đầu

vào của hai toán tử sẽ tạo FN tương ứng (FN1 trong Hình 3.7), với từng tốn hạng tạo một luồng, mỗi thông điệp mi trong luồng tạo nút Bi tương ứng; kết thúc của toán tử là loại JN (là nút ra của CGF vừa tạo), JN1 trong Hình 3.7. Độ phức tạp của Thuật tốn 3.5 phụ thuộc vào vịng lặp từ dịng 5 đến dịng 8.

Tính dừng của thuật tốn: vì thuật tốn có các câu lệnh tuần tự và một vòng lặp với số lần lặp nhiều nhất m và m là số toán hạng của toán tử ln là một số hữu hạn. Do đó, sau một số hữu hạn các bước thì thuật tốn dừng.

Thuật tốn 3.5 Xử lý toán tử par và seq:processP arSequence(x, curN ode)

Input: Toán tử x làpar hoặc seq 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 ==‘par’ or ‘seq’) then

2: Create forkNode FN;

3: ConnectEdge(curNode,FN);

4: curNode = FN;

5: for each operand do

6: create BN to coressponding msg;

7: isAsynToBN(); //attach isAsyn to BN when messages of operands having shar- ing data

8: end for

9: else if (x==‘EOF’) && (x.type ==‘par’ or ‘seq’) then

10: //termination condition of fragment par or seq

11: Create join node JN

12: ConnectEdge(curNode,JN);

13: exitNode =JN;

14: return exitN ode;

15: end if m1() a:A b:B m2() m3() par A:A a:A b:B c:C m1() m2() m3() seq B1 B2 B3 FN1 JN1 B1 B2 B3 FN1 JN1

Thuật toán xử lý toán tử strict và critical: Thuật toán 3.6 mà luận án đề xuất xử lý với từng loại phần tử tương ứng của toán tửstrict hoặc critical

đượ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à toán tử strict hoặc critical (dịng 1) thì với mỗi thơng điệp mi tạo tương ứng với từng BN (đặt nhãn là Bi trong Hình 3.8); mỗi lần tạo BN sẽ nối nút hiện tại curN ode với BN (dịng 3 và dịng 4) và sau đó coi BN là nút hiện tại (dịng 5). Hình 3.8 minh họa việc chuyển đổi từ biểu đồ tuần tự sang CFG của toán tử

strict và critical. Với mỗi toán hạng của toán tử đều thực hiện đúng theo thứ tự đưa ra, vì vậy với mỗi mi sẽ tạo tương ứng với từng Bi. Độ phức tạp của Thuật tốn 3.6 phụ thuộc vào vịng lặp từ dịng 2 đến dòng 6. Giả sử tốn tử strict

và critical có nhiều nhất m thơng điệp thì độ phức tạp là O(m). Tính dừng của

thuật tốn: vì thuật tốn có các câu lệnh tuần tự và một vòng lặp với số lần lặp nhiều nhất m và m là số thông điệp trong biểu đồ tuần tự ln là một số hữu hạn. Do đó, sau một số hữu hạn các bước thì thuật tốn dừng.

Thuật toán 3.6 Xử lý toán tử strictvà critical: processStrictCritical(x, curN ode)

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

Output: CFG tạo ra từ toán tử strict và critical

1: if (x==fragment) && (x.type ==‘strict’ or ‘critical’) then

2: for each message mi do

3: Create a BN;

4: ConnectEdge(curNode,BN);

5: curNode = BN;

6: end for

7: end if

Thuật toán xử lý toán tử ignore: Thuật toán 3.7 mà luận án đề xuất xử lý với phần tử tương ứng của toán tử ignore được lấy từ hàng đợi. Nếu x

được lấy ra là ignore, tham số parF rag của toán tử ignore là thông điệp m và

m là một thơng điệp trong tốn tử đó (dịng 1) thì thơng điệp m đó được xem là khơng có ý nghĩa. Dịng 2 đến dòng 6 là vòng lặp để tạo các nút BN tương ứng với từng mi mà mi là các thông điệp khác tham số m của tốn tử ignore.

Hình 3.9 minh họa việc chuyển đổi từ biểu đồ tuần tự sang CFG của tốn tử

ignore: thơng điệp m1 tạo BN tương ứng (lấy nhãn B1); thông điệp m3 tạo BN tương ứng (lấy nhãn B3), bỏ qua thơng điệp m2 chính là tham số của toán tử

ignore. Độ phức tạp của Thuật tốn 3.7 phụ thuộc vào vịng lặp từ dịng 2 đến dịng 6. Giả sử tốn tửignorecó nhiều nhất m thông điệp, n là số thông điệp bỏ

m2() m3() m1() A:A a:A b:B c:C strict m2() m1() A:Aa:A b:Bb:B critical B1 B2 B3 B1 B2

Hình 3.8: Chuyển từ biểu đồ tuần tự sang CFG (của tốn tử strict và critical).

qua thì vịng lặp sẽ thực hiện m−n lần. Do đó, độ phức tạp là O(m−n) là độ phức tạp tuyến tính. Tính dừng của thuật tốn: vì thuật tốn có các câu lệnh tuần tự và một vòng lặp với số lần lặp nhiều nhất m−n và m−n là hiệu của số thông điệp tối đa và số thông điệp bỏ qua luôn là một số hữu hạn. Do đó, sau một số hữu hạn các bước thì thuật tốn dừng.

Thuật toán 3.7 Xử lý toán tử ignore: processIgnore(x, curN ode)

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

Output: CFG tạo ra từ toán tử ignore

1: if (x==fragment) && (x.type==‘ignore’)&&(parFrag==m) then

2: for each message mi 6=m do

3: Create a BN;

4: ConnectEdge(curNode,BN);

5: curNode = BN;

6: end for

7: end if

Thuật toán xử lý toán tử consider: Thuật toán 3.8 mà tác giả đưa ra với phần tử tương ứng của toán tử considerđược lấy từ hàng đợi. Nếuxđược lấy ra là consider, tham số parF rag của tốn tử consider là mi (dịng 1) thì tạo các

m1() a:A b:B m2() m3() ignore {m2} m1() a:A b:B m2() m3() consider {m1,m3} B1 B3 B1 B3

Hình 3.9: Chuyển từ biểu đồ tuần tự sang CFG (của toán tử ignore và consider).

trong tham số của tốn tử consider. Hình 3.9 minh họa việc chuyển đổi từ biểu

đồ tuần tự sang CFG của toán tử consider: tham số của toán tử consider là m1

và m3 thì thơng điệp m1 tạo BN tương ứng (lấy nhãn B1); thông điệp m3 tạo BN tương ứng (lấy nhãn B3), bỏ qua thông điệp m2 không tạo BN tương ứng. Độ phức tạp của Thuật toán phụ thuộc vào một vịng lặp cũng là độ phức tạp tuyến tính O(m). Tính dừng của thuật tốn: vì thuật tốn có các câu lệnh tuần

tự và một vòng lặp với số lần lặp nhiều nhất m và số các thông điệp m là một số hữu hạn. Do đó, sau một số hữu hạn các bước thì thuật tốn dừng.

Thuật tốn 3.8 Xử lý toán tử consider: processConsider(x, curN ode)

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

Output: CFG tạo ra từ toán tử consider

1: if (x==fragment)&&(x.type==‘consider’)&&(parFrag==mi)then

2: for each message mi do

3: Create a BN;

4: ConnectEdge(curNode,BN);

5: curNode = BN;

6: end for

true false B1 x==y? {x==y} m1() A:Aa:A b:Bb:B assert false true B3 operand==m1? operand==m2? operand==m2? B3 B3 true true false false ŵϭ;Ϳ ͗ Ă͗ ď͗ď͗ ŶĞŐ ŵϮ;Ϳ ď͗ Đ͗ ŵϯ;Ϳ

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 64 - 69)

Tải bản đầy đủ (PDF)

(175 trang)