CFG của phương thức execute

Một phần của tài liệu (LUẬN văn THẠC sĩ) kiểm tra sự tuân theo giữa thực thi và đặc tả PSM trong mô hình dựa trên thành phần (Trang 37 - 38)

3 Thực nghiệm, đánh giá

2.2 CFG của phương thức execute

Trước khi đưa ra thuật tốn chuyển đổi CFG thành CG, chúng tơi hình thức hóa CG bằng cách mở rộng định nghĩa đồ thị luồng trong Định nghĩa 1 như trong Định nghĩa 4.

Định nghĩa 4 (CG). Cho I là tập các tên phương thức, G là một đồ thị của CFG. Đồ thị

G0= (V0, E0, s0, t0, µ0, ν0, M C0) là một đồ thị giản lược của Gnếu:

• s0 =s∧t0 =t;

• V0 ={vi ∈V ∧M C(vi)∈I} là tập đỉnh;

• E0={(vi, vj)|vi ∈V0∧vj ∈V0} là tập cạnh, thỏa:

– (vi, vj)∈E, hoặc

– (vi, vj)∈/ E∧(vi, vi+1)∈E∧(vi+1, vi+2)∈E, ...,(vj−1, vj)∈E, and vk∈/ V0, k= (i+ 1) . . (j−1)

2.3.2 Thuật toán giản lược CFG

Từ định nghĩa đồ thị giản lược nêu Định nghĩa 4, chúng tơi xây dựng thuật tốn cho phép thu được đồ thị giản lược của một đồ thị CFG, gọi là đồ thị lời gọi phương thức CG (Call Graph) trong đó chỉ chứa các đỉnh là các lệnh gọi phương thức. Thuật tốn được trình bày trong Algorithm 3.

Vì kích thước của tập Rđược tính ở dịng 11 của Algorith 3 là nhỏ nên độ phức tạp thời gian của thuật tốn có thể ước lượng làO(n).

Algorithm 3 Giản lược CFG thành đồ thị CG ReduceGraph(G, G0):

1: InitializeV0=∅,E0=∅

2: foreach vi∈V do {Tìm tất cả lời gọi phương thức} 3: if vi ∈V ∧M C(vi)6=null then 4: V0←vi 5: end if 6: end for 7: foreach vi0 ∈V0 do 8: if (s, vi0)∈E then 9: E0 ←(s0, vi0) 10: end if

11: Tìm tập đỉnh V0 đi từvi0 khơng qua đỉnh trung gian v∈V0, gọi là R 12: foreach r ∈R do

13: E0 ←(vi0, r)

14: end for

15: end for

2.3.3 Ví dụ giản lược CFG

Áp dụng thuật toán Algorith 3, ta thu được đồ thị giản lược của đồ thị CFG cho phương thứcexecute() như cho trong Hình 2.3.

4 DB.open() 70 DB.update() DB.open() 49 DB.close() DB.connect() 61 79 40 DB.close()

Một phần của tài liệu (LUẬN văn THẠC sĩ) kiểm tra sự tuân theo giữa thực thi và đặc tả PSM trong mô hình dựa trên thành phần (Trang 37 - 38)

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

(65 trang)