Kịch bản kiểm thử cho các phân đoạn song song (Par, Seq)

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp sinh dữ liệu kiểm thử tự động từ biểu đồ tuần tự UML, biểu đồ lớp và ràng buộc OCL (Trang 55 - 57)

Chƣơng 1 : GIỚI THIỆU

3.3 Kỹ thuật sinh kịch bản kiểm thử

3.3.2. Kịch bản kiểm thử cho các phân đoạn song song (Par, Seq)

Đối với phân đoạn song song, ngoài việc tìm ra tất cả các đƣờng đi trong đồ thị dòng điều khiển, chúng ta còn phải tìm hiểu các thông số, các biến ở mỗi nốt. Nếu 2 nốt có sử dụng chung một biến thì đƣợc gọi là có chia sẻ dữ liệu. Khi đó kết quả thực thi và tính toán của đƣờng kiểm thử đơn (đƣờng kiểm thử chỉ chứa một trong các nốt có chia sẻ dữ liệu) có thể sẽ bị ảnh hƣởng vì sẽ có hai hành động có khả năng thực hiện cùng lúc, trƣớc hoặc sau lúc đó làm biến đổi giá trị của biến đang thực thi trong đƣờng kiểm thử dẫn tới sai lệch trong kết quả chƣơng trình hoặc kết quả kiểm thử. Để khắc phục điều này cần phải thực hiện chung các nốt có chia sẻ dữ liệu trong cùng một test case mà chƣơng trình có thể thực hiện.

Ví dụ nốt 3 và nốt 4 trong đồ thị Hình 3.16 là hai nốt có chia sẻ dữ liệu (và là hai nốt song song vì thuộc phân đoạn par: phân đoạn par khi biến đổi sang CFG sẽ bắt đầu từ

một nốt FN và kết thúc bằng nốt JN). Khi đó ngoài 2 đƣờng kiểm thử thông thƣờng: 0-1-

2-3-5-6-End0-1-2-4-5-6 End sẽ có thêm 2 đƣờng đi có thể đƣợc hình thành nhƣ là: 0- 1-2-3-4-5-6-End0-1-2-4-3-5-6-End.

Kỹ thuật áp dụng trong việc sinh các ca kiểm thử song song là đánh dấu các điểm có chia sẻ dữ liệu: Nốt (data.shared = true) nếu phát hiện ra hai nốt có chung một biến bên trong. Sau đó sắp xếp hai nốt này đi chung với nhau (có hoán đổi vị trí) trong một ca kiểm

thử tạo ra các ca kiểm thử mới. Trong trƣờng hợp trƣớc và sau hai nốt này còn có các nốt khác thì thứ tự các nốt trƣớc nó phải đƣợc giữ nguyên.

Thuật toán sinh ca kiểm thử chứa các nốt có chia sẻ dữ liệu nhƣ sau:

Thuật toán 5: Sinh ca kiểm thử cho các toán tử song song.

Đầu vào:sourceList{x}; targetList{y} : là tập các đỉnh đầu và đỉnh cuối của tất cả các

cạnh trong CFG: E = {(x, y) | x, y A F}.

Đầu ra: allTestPath p: là tập tất cả các đƣờng kiểm thử bao gồm đƣờng kiểm thử cho

các phân đoạn song song.

1: Create new String: danhsachke; 2: danhsachke = "-1 0\n";

3: for each element sourceList

4: if (current sourceNode == par or seq)

5: if (current sourceNode is shared data with forwardNode branch(x))

6: danhsachke += sourceNodeId(i) + targetNodeId(i) + startNode in branch(x);

7: elseif (current sourceNode is shared data with backwardNode branch(x))

8: danhsachke += sourceNodeId(i) + targetNodeId(i) + targetNodeId(backwardNodeId());

9: else if

10: danhsachke += sourceNodeId(i) + " " + targetNodeId(i); 11: else

12: danhsachke += sourceNodeId(i) + " " + targetNodeId(i);

13: end if

14: danhsachke += "\n"; 15: end for

16: Create new String maTranKe = danhsachke; // maTranKe = "0 1\n1 2 3\n2 1\n3 4\n4 5\n5 4 6\n6 7 8\n7 9 10\n9 -1\n10 -1\n8 11\n11 8 12\n12 -1"

17: allTestPath p = new getAllPaths(maTranKe); // thuật toán 4 - duyệt theo chiều sâu sinh ca kiểm thử

Thuật toán 5 trình bày qui trình sinh ca kiểm thử cho các toán tử song song chứa điểm chia sẻ dữ liệu. Mục đích của thuật toán 5 là sinh ra một ma trận kề tƣơng tự nhƣ thuật toán 3, sau đó sử dụng thuật toán 4 để tìm ra tất cả các đƣờng đi thỏa mãn là các ca kiểm thử tƣơng ứng. Thuật toán 5 kiểm tra trong quá trình duyệt nếu gặp các phân đoạn par hoặc seq sẽ kiểm tra tất cả các nốt bên trong. Nếu 2 nốt thuộc hai nhánh khác nhau của đồ thị CFG cùng tác động tới một biến dữ liệu chung thì hai nốt đó đƣợc gọi là hai nốt có điểm chia sẻ dữ liệu. Thuật toán 5 sẽ chuyển đổi giữa hai ca kiểm thử có chứa điểm chia sẻ dữ liệu đó để tìm ra đƣờng đi có đi qua cả hai điểm.

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp sinh dữ liệu kiểm thử tự động từ biểu đồ tuần tự UML, biểu đồ lớp và ràng buộc OCL (Trang 55 - 57)

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

(74 trang)