CHƢƠNG 2 CƠ SỞ LÝ THUYẾT
3.3. Tạo các ca kiểm thử cho ứng dụng Web
3.3.4. Thuật toán sinh ca kiểm thử
Thuật toán sau đây đƣợc phát triển và sử dụng để di chuyển qua mô hình máy trạng thái đảm bảo rằng mỗi trạng thái và chuyển đổi đƣợc bao phủ. Thuật toán sinh ca kiểm thử đảm bảo những yêu cầu sau:
Độ phức tạp không lớn, thời gian chạy nhanh
Đảm bảo tất cả các đỉnh và các cạnh của đồ thị đều phải đƣợc duyệt qua Kết quả trả về là nhiều đƣờng kiểm thử không trùng nhau, mỗi đƣờng kiểm
thử có trạng thái bắt đầu chính là trạng thái bắt đầu của máy hữu hạn trạng thái, và có trạng thái kết thúc, đan xen mỗi trạng thái là những bộ chuyển. Trƣớc hết thuật toán là sự mở rộng của thuật toán duyệt đồ thị theo chiều sâu, sau khi duyệt đồ thị theo chiều sâu tất cả các đỉnh của đồ thị sẽ đƣợc duyệt qua, những cạnh còn lại chƣa đƣợc duyệt sẽ tiếp tục đƣợc thêm vào một phần của đƣờng kiểm thử đã duyệt từ trƣớc và sinh ra đƣờng kiểm thử mới.
Thuật toán duyệt đồ thị theo chiều sâu và lƣu lại đƣờng kiểm thử khi quay lui. Hình 3.5 mô tả thuật toán duyệt đồ thị theo chiều sâu với đầu vào là hai tham số tham số thứ nhất là độ sâu của đỉnh và tham số thứ hai là đƣờng kiểm thử, đầu ra
t_login_link
của thuật toán là một đƣờng kiểm thử. Các bƣớc chi tiết của thuật toán đƣợc giải thích nhƣ sau:
Dòng 1: là tên hàm với hai tham số truyền vào. Tham số thứ nhất là độ sâu, tham số thứ hai đƣờng đi.
Dòng 2: khai báo một biến theo dõi quay lui và nhận giá trị là true nếu quay lui.
Dòng 3: duyệt qua tất cả các đỉnh chƣa đƣợc duyệt.
Dòng 4: kiểm tra những đỉnh nào chƣa duyệt và cạnh nào chƣa duyệt. Dòng 5: gán biến quay lui là false.
Dòng 6: thông báo đỉnh đã đƣợc duyệt qua. Dòng 7: thông báo cạnh đã đƣợc duyệt qua.
Dòng 8: thêm đỉnh vào mảng lƣu đƣờng kiểm thử tạm thời.
Dòng 9: gọi đệ qui lại hàm và hàm đệ qui này sẽ dừng khi tất cả các cạnh và các đỉnh của đồ thị đã đƣợc duyệt.
Dòng 10: bỏ đỉnh ra khỏi mảng lƣu đƣờng kiểm thử tạm thời.
Dòng 11-12: nếu biến thông báo quay lui là true thì thêm mảng vào PATH.
Dòng 13: khởi tạo lại mảng lƣu đƣờng kiểm thử tạm thời.
Hình 3.6 Thuật toán duyệt đồ thị theo chiều sâu
1. Depth_First_Search: int i, path PATH{ 2. Bool backTrack = true;
3. for {
4. if (đỉnh chƣa duyệt và cạnh chƣa duyệt){ 5. backTrack = false;
6. Thông báo đỉnh đã duyệt qua; 7. Thông báo cạnh đã duyệt qua;
8. Thêm đỉnh vào mảng lƣu đƣờng kiểm thử tạm thời; 9. Depth_First_Search: i+1, PATH;
10. Bỏ đỉnh khỏi mảng;}} 11. if (backTrack == true){
12. Thêm mảng vào PATH; 13. Khởi tạo lại mảng;}}