Sinh các kịch bản kiểm thử

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 71 - 74)

3.3 Phương pháp sinh dữ liệu kiểm thử cho biến kiểu dữ liệu số và

3.3.3 Sinh các kịch bản kiểm thử

Từ Phần 3.3.2, phương pháp đưa ra thuật toán sinh một CFG, giả sử gọi là đồ thị G gồm: (A, E, in, F); định nghĩa các thành phần của G đã được đưa

ra ở trên. Mỗi đỉnh Ai∈A của G là một bộ có cấu trúc như sau:<noId, noT ype, noDetails, outEdge>, trong đó: noId là nhãn duy nhất gắn trong từng nút;

noT ypelà một trong các loại nút in, BN, DN, MN, FN, JN và f ni;noDetails=<

m1, m2, ..., mq> với q là số các thông điệp trong Bi ∈ BN. Mỗi nút Bi biểu diễn thông điệp mi. Mỗi thông điệp mi trong một đỉnh của đồ thị G đều có tiền điều kiện: preCi (pre–condition) và hậu điều kiện: postCi (post–condition).

Thuật toán miêu tả chi tiết với đầu vào bao gồm các thơng tin của đồ thị dịng điều khiển G, đầu ra là tập các kịch bản kiểm thửT mà mỗi kịch bản thỏa mãn các độ bao phủ từng thơng điệp, độ bao phủ dịng thông điệp và độ bao phủ tiền và hậu điều kiện. Thuật toán sinh các kịch bản kiểm thử từ đồ thị dòng điều khiển G được mơ tả bằng giả mã như Thuật tốn 3.11.

Trong Thuật tốn 3.11, từ đồ thị dịng điều khiển G sẽ sinh ra các kịch bản kiểm thử tức là sinh ra tất cả các đường đi có thể từ đỉnh bắt đầu đến đỉnh kết thúc mà vẫn thỏa mãn tiền và hậu điều kiện của mỗi thông điệp và ràng buộc của nó. Từ dịng 1, EnummerateAllP aths (được chi tiết trong Thuật toán 3.12) là hàm duyệt đồ thị theo chiều sâu với P là tập tất cả các đường dẫn tìm được. Với mỗi đường dẫn pi trong tập P (dòng 2), xét lần lượt từ điểm bắt đầu của

đường dẫn pi (dịng 3). Tại dịng 4, biến preCi chính là tiền điều kiện tại nút nj

của đường dẫn kiểm thử pi. Xét từng nút nj trên đường dẫn pi (dòng 6), từng

nút bao gồm thông tin về sự kiện, đối tượng nhận, đối tượng gửi và điều kiện (nếu có). Trong trường hợp khơng có điều kiện của sự kiện tương ứng (dịng 8)

thì t bao gồm tiền và hậu điều kiện, tập các đối tượng vào và ra của thông điệp trước và sau khi thực thi. Trường hợp ngược lại có điều kiện (dịng 15) thì t bao gồm cả tập hợp các điều kiện trên đường dẫn pi . Kịch bản kiểm thử Ti là tập hợp tất cả thông tin các sự kiện và điều kiện (nếu có) của tất cả các nút trên

Thuật toán 3.11 Sinh các kịch bản kiểm thử từ đồ thị dòng điều khiển G

Input: Đồ thị dòng điều khiển G

Output: Tập các kịch bản kiểm thử T, mà mỗi kịch bảnTi thỏa mãn độ bao phủ mỗi thông điệp, độ bao phủ dịng thơng điệp và độ bao phủ tiền và hậu điều kiện.

1: P= EnumerateAllPaths (G); // list all the paths from the starting node to ending nodes in G

2: for each path pi ∈P do

3: nj =in //current node start from in

4: preCi =F indP reCond(nj); //preCi is pre-condition at the nj node of the tra- versed test path

5: Ti ← ∅; //initialize test scenarios Ti empty

6: for each node nj of path pi do

7: ej = (m, a, b, c) //the event ej corresponds to the node nj and is given the messagem from the sending object a to the receiver b and the condition c

8: if (c==∅) then

9: t ={preC, I(a1, a2, ..., an), O(d1, d2, ..., dm), postC};

10: preC is pre-condition of message m;

11: I(a1, a2, ..., an) is set of input in message m from sender object

12: O(d1, d2, ..., dm) is set of output in message m from receiver object

13: postC is post-condition of message m;

14: end if

15: if (c6=∅) then

16: c(v) = (c1, c2, ..., cl) // set of constraints in the pi path

17: t ={preC, I(a1, a2, ..., an), O(d1, d2, ..., dm), c(v)postC};

18: end if 19: Ti =Ti∪t 20: end for 21: T ←T ∪Ti 22: end for 23: return (T); Ti (dịng 19). T chính là tập hợp tất cả các kịch bản kiểm thử Ti đã tìm được (dịng21), trong đó Ti gồm tuần tự các phương thức và các điều kiện ràng buộc trên đường dẫn kiểm thử được sinh ra.

Thuật toán 3.12 sử dụng phương pháp tìm kiếm theo chiều sâu, khi đó sẽ duyệt từ đỉnh bắt đầu (từ điểm in, dòng 1) và duyệt cho đến khi hết tất cả các

đỉnh của đồ thị (vòng lặp từ dòng 2 đến 9). Mỗi khi duyệt một đỉnh xong, cập

nhật thơng tin đỉnh đó vào đường dẫnp (dòng3), đánh dấu nút đã duyệt (dòng 4) và sau đó di chuyển sang nút liền kề chưa được gán nhãn (dòng 5). Nếu nút

hiện tại gặp nút kết thúc thì hồn thành đường dẫn pvà thêm đường dẫn pvào tập P. Do đó, các đường đi tạo ra từ đỉnh bắt đầu đến đỉnh kết thúc của đồ thị

Thuật tốn 3.12 EnumerateAllPaths: Tìm tập các đường dẫn P của đồ thị G

Input: Đồ thị dòng điều khiển G, với nút khởi tạo in

Output: Tập P bao gồm các đường dẫn kiểm thử pi

1: current=in //current node start from in

2: while current6=N U LLdo

3: updateNode(p) //update current node to path p

4: traversed(current) //current node is assigned to traversed status

5: current = next current; //point to the adjacent node which has not been tra- versed

6: if (current==f inalN ode)then

7: P =P ∪p

8: end if

9: end while

10: return (P);

nên các kịch bản sinh ra cũng thỏa mãn độ bao phủ dịng thơng điệp và điều kiện. Tất cả các đỉnh được xem như các đỉnh đơn trong q trình duyệt. Nếu có gặp đỉnh phức, việc duyệt sẽ bắt đầu từ đỉnh khởi tạo hoặc đỉnh vào của đồ thị con. Trong suốt quá trình duyệt đồ thị, phương pháp sẽ tìm kiếm ràng buộc tại mỗi đỉnh. Từ các ràng buộc (vị từ) được chọn để chuyển thành các hàm vị từ và sinh dữ liệu kiểm thử tương ứng. Đối với các ràng buộc OCL sẽ được tính hàm vị từ tương ứng trong Phần 3.3.5.

Độ phức tạp của thuật toán: Từ Thuật toán 3.11, độ phức tạp của thuật tốn chính là: max{O(EnumerateAllP aths), O(Đoạn lệnh từ 2đến 22)}. Với hàm

EnumerateAllPaths duyệt đồ thị G theo chiều sâu, EnumerateAllPaths gọi đúng một lần ứng với mỗi đỉnh và mỗi cạnh được xem xét hai lần trong đó mỗi lần từ một đỉnh kề với nó. Giả sử đồ thị G có nA đỉnh và nE cạnh thì Thuật tốn 3.12 sẽ chạy với độ phức tạp O(nA + nE). Đối với đoạn lệnh từ 2đến 22bao gồm hai vòng lặp lồng nhau trong đó vịng lặp ngồi được lặp nhiều nhất là số đường dẫn t trong tập kịch bản kiểm thử và vòng lặp trong lặp nhiều nhất số lượng nút j trong một đường dẫn. Vì vậy, độ phức tạp của đoạn lệnh từ 2 đến22 sẽ là

O(t∗j). Như vậy, độ phức tạp của Thuật toán 3.11 cũng chỉ là độ phức tạp đa

thức.

Tính dừng của thuật tốn: trong thuật tốn thực hiện số lần lặp nhiều nhất là

(t∗j) mà t và j là số đường dẫn kiểm thử và số lượng nút trong một đường dẫn là các số hữu hạn, vì vậy sau một số hữu hạn các bước thì thuật tốn sẽ dừng.

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 71 - 74)

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

(175 trang)