Xây dựng tập đường kiểm thử từ đồ thị dòng điều khiển

Một phần của tài liệu XÂY DỰNG CÔNG cụ KIỂM THỬ tự ĐỘNG CHO các CHƯƠNG TRÌNH c (Trang 28 - 32)

Chương 2. 2.1. Tổng quan kĩ thuật kiểm thử hộp trắng dòng điều khiển

3.3. Xây dựng tập đường kiểm thử từ đồ thị dòng điều khiển

Hình 3.6 mô tả thuật toán sinh tập đường đi độc lập dựa trên ý tưởng sinh tập đường đi độc lập do MC-Cabe đề xuất nêu trong [8]. Đầu vào thuật toán là CFG được lưu bởi biến graph, đầu ra là tập đường đi độc lập P. Bước đầu tiên, quá trình tìm đường đi ngắn nhất shortestPath được tiến hành bằng cách duyệt đồ thị graph theo nhánh false (dòng 1), sau đó lưu shortestPath vào tập đường đi độc lập (dòng 2). Tiếp theo, các đỉnh quyết định trên shortestPath được thêm vào tập S (dòng 3), biến visited dùng lưu các đỉnh quyết định đã duyệt cả hai nhánh đúng-sai được khởi tạo bằng rỗng (dòng 4). Vòng lặp while lặp lại đến khi hai nhánh đúng-sai của mọi đỉnh quyết định tồn tại trong tập đường đi độc lập (dòng 5). Trong vòng while, một đỉnh bất kì u trong tập S được lấy ra (dòng 6) và tìm cạnh (u,v) chưa tồn tại trong tập đường đi độc lập (dòng 7). Từ cặp cạnh này, chúng tôi tìm đường đi ngắn nhất nextPath đi qua cặp cạnh (u,v) để thêm vào tập đường đi độc lập (dòng 8). Tập S được cập nhật bằng cách thêm vào các đỉnh không thuộc tập visited trên

F

F

F F

T

T T

T

a+b+c >= 0 b+c >= 0 c >= 0

b >= 0 a >= 0

Khối lệnh khi thỏa mãn

T

17

đường đi nextPath (dòng 10) và xóa đỉnh u (dòng 11). Cuối cùng, đỉnh u được lưu vào tập visited (dòng 12).

Hình 3.6. Thuật toán sinh tập đường đi độc lập từ CFG.

3.3.2. Xây dựng đường kiểm thử vòng lặp

Trong thực tế, đa phần các hàm C chứa vòng lặp nên tầm quan trọng của kiểm thử tính đúng đắn vòng lặp là tất yếu. Các đường đi sinh từ CFG chỉ có thể kiểm thử vòng lặp tối đa 1 lần nên chưa đảm bảo tính đúng đắn vòng lặp. Vì thế, khóa luận này đề xuất cách sinh ca kiểm thử cho hàm C chứa hai loại vòng lặp: vòng lặp đơn và hai vòng lặp lồng nhau. Tư tưởng chung của phương pháp đề xuất là viết lại đường đi chứa vòng lặp để tạo đường đi mới lặp nhiều hơn 1 lần, sau đó sinh ca kiểm thử từ đường đi mới đó.

Ba loại đường đi trong tập đường đi độc lập được kiểm thử vòng lặp gồm:

18

Đường đi chứa vòng lặp. Nằm trong tập đường đi độc lập có chứa vòng lặp. Câu lệnh ứng với đỉnh quyết định đi vào vòng lặp và thoát khỏi vòng lặp đó là phủ định của nhau.

Đường đi chứa vòng lặp đơn. Là đường đi có đúng một vòng lặp. Đường đi này chỉ có một đỉnh duy nhất đi vào vòng lặp và thoát khỏi vòng lặp.

Đường đi chứa vòng lặp lồng nhau. Là đường đi có hai vòng lặp: một vòng lặp bên trong và một vòng lặp bên ngoài. Đường đi loại này có hai đỉnh đặc biệt: một đỉnh đi vào và thoát khỏi vòng lặp bên trong, đỉnh còn lại đi vào và thoát khỏi vòng lặp bên ngoài.

3.3.2.1. Kiểm thử đường đi chứa vòng lặp đơn

Đường đi chứa vòng lặp đơn được viết lại để tạo đường đi mới bằng cách sao chép vòng lặp một số lần cụ thể. Nếu vòng lặp đơn biết số lần lặp tối đa bằng n thì số lần lặp là 0, 1, 2, một số ngẫu nhiên lần, n - 1, n n + 1 lần. Ngược lại, nếu không biết số lần lặp tối đa của vòng lặp đơn, số lần lặp là 0, 1, 2 và một số ngẫu nhiên lần. Hình 3.7 trình bày các bước tạo đường đi mới với đầu vào là đường đi chứa vòng lặp đơn lưu trong biến PATH, số lần lặp lưu trong biến n; đầu ra là đường đi mới với vòng lặp đơn được lặp lại n lần. Đầu tiên, đỉnh điều kiện của vòng lặp đơn được gán cho biến v (dòng 1). Sau đó, khối lặp vòng lặp khoi_lap được tìm ra (dòng 2). Tiếp theo, khối lặp khoi_lap được nhân bản n lần để tạo đường đi mới và lưu trong biến duong_di_moi (dòng 3). Cuối cùng, nội dung khối lặp đơn trong đường đi PATH được thay thế với nội dung khoi_lap_moi (dòng 4).

Hình 3.7. Thuật toán sinh đường kiểm thử vòng lặp.

19

3.3.2.2. Kiểm thử đường đi chứa hai vòng lặp lồng nhau

Đường đi chứa hai vòng lặp lồng nhau có hai điểm quyết định để đi vào vòng lặp và được kiểm thử qua hai bước. Đường đi mới được sinh ra trong mỗi bước. Bước 1 là bước kiểm thử vòng lặp bên trong bằng cách phá vỡ cấu trúc vòng lặp bên ngoài. Bước 2 là bước kiểm thử vòng lặp bên ngoài bằng cách phá vỡ cấu trúc lặp vòng lặp bên trong.

Hình 3.8. Thuật toán sinh đường kiểm thử vòng lặp trong.

Trong bước 1, quá trình sinh đường đi mới với đầu vào gồm đường đi chứa hai vòng lặp lồng nhau lưu trong biến PATH, số lần lặp của vòng lặp bên trong lưu trong biến n được trình bày trong Hình 3.8. Đầu ra là đường đi chứa vòng lặp trong lặp lại n lần và cấu trúc vòng lặp ngoài bị phá vỡ. Đầu tiên, đỉnh quyết định để đi vào vòng lặp bên ngoài được lưu trong biến u (dòng 1), đỉnh quyết định để thoát khỏi vòng lặp ngoài lưu trong biến v (dòng 2). Sau đó, biến lặp vòng lặp bên ngoài được lưu trong biến i (dòng 3) và tạo một đỉnh mới lưu trong biến dinh_moi lưu lại phép gán này (dòng 4). Để phá vỡ cấu trúc lặp vòng lặp ngoài, đỉnh v sẽ được loại bỏ khỏi đường đi PATH (dòng 5) và chèn thêm đỉnh dinh_moi ngay sau đỉnh u (dòng 6). Đường đi PATH được viết lại để tạo đường đi mới với số lần lặp vòng lặp bên trong bằng n lần (dòng 7).

20

Bước 2 mô tả trong Hình 3.9. Đầu vào thuật toán là đường đi cần viết lại lưu trong biến PATH và số lần lặp vòng lặp ngoài lưu trong biến n, đầu ra là đường đi mới. Bước đầu tiên, tìm đỉnh quyết định u thoát khỏi vòng lặp bên trong (dòng 1). Tiếp theo, loại bỏ đỉnh u khỏi đường đi để phá vỡ cấu trúc lặp vòng lặp trong (dòng 2). Sau bước này, đường đi chỉ còn duy nhất vòng lặp ngoài. Cuối cùng, vòng lặp ngoài được nhân bản lên n lần để tạo ra đường đi mới (dòng 3).

Hình 3.9. Thuật toán sinh đường kiểm thử vòng lặp ngoài.

Một phần của tài liệu XÂY DỰNG CÔNG cụ KIỂM THỬ tự ĐỘNG CHO các CHƯƠNG TRÌNH c (Trang 28 - 32)

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

(59 trang)