Bài toán
Cho một phần mềm có chứa form nhập dữ liệu. Quá trình thực hiện kiểm thử là ngƣời dùng nhập dữ liệu đầu vào, theo dõi kết quả trả về từ chƣơng trình và báo cáo. Mục tiêu của quá trình thực hiện kiểm thử là cần tìm những dữ liệu đầu vào mà kết quả trả về là lỗi, kiểm thử đến khi nào tìm hết đƣợc các dữ liệu đầu vào mà kết quả trả về là lỗi.
Giải pháp
Đối với những tập dữ liệu lớn và không phải là những dãy có logic, thì việc thực hiện kiểm thử sẽ mất rất nhiều thời gian hoặc không bao giờ kết thúc. Ví dụ nhƣ kiểm thử với các chuỗi SQL Injection, để nghĩ ra đƣợc những chuỗi SQL Injection mà khi thực hiện kiểm thử để chƣơng trình có lỗi là rất khó, phải những ngƣời có kinh
nghiệm mới nghĩ ra đƣợc, hơn thế nữa tập các chuỗi SQL Injection là nhiều, con ngƣời không thể lƣờng hết đƣợc các trƣờng hợp. Chính vì vậy, cần tìm một giải pháp để tối ƣu hóa việc tìm kiếm những dữ liệu mà kết quả trả về là chƣơng trình có lỗi. Nhƣ đã giới thiệu ở trên, giải thuật GA là một giải thuật rất mạnh trong việc tìm kiếm tối ƣu với những không gian tìm kiếm lớn. Vì vậy, để giải quyết bài toán này chúng tôi sử dụng giải thuật GA.
Các bước của giải thuật GA cho bài toán sinh dữ liệu kiểm thử
- Bƣớc 1: Khởi tạo một quần thể ban đầu là một tập dữ liệu đầu vào tƣợng trƣng cho toàn bộ các dữ liệu đầu vào. Một dữ liệu đầu vào để kiểm thử có dạng (x1, x2, …, xN) là một cá thể. Với x1, x2, …, xN là các giá trị để nhập vào form và đƣợc gọi là nhiễm sắc thể.
- Bƣớc 2: Hàm số thích nghi là hàm trả ra kết quả của kiểm thử. Sau khi thực hiện kiểm thử với dữ liệu đầu vào ở bƣớc 1 sẽ xác định đƣợc giá trị của hàm số thích nghi đƣợc gọi là độ thích nghi f(x1, x2, …, xN).
+ Độ thích nghi f(x1, x2, …, xN) = 1 có nghĩa là kiểm thử có lỗi
+ Độ thích nghi f(x1, x2, …, xN) = 0 có nghĩa là kiểm thử không có lỗi
→ Cần xác định các dữ liệu đầu vào (x1, x2, …, xN) sao cho việc thực hiện kiểm thử có lỗi tức là f(x1, x2, …, xN) = 1
- Bƣớc 3: Tạo các cá thể mới dựa trên các toán tử di truyền
- Lựa chọn (Selection): Lựa chọn các cá thể tốt bằng cách
- Sắp xếp các cá thể theo thứ tự độ thích nghi giảm dần
- Loại bỏ các cá thể ở cuối dãy, giữ lại n cá thể tốt nhất.
- Lai ghép (Crossover): Lai ghép các nhiễm sắc thể bằng cách
Chọn ngẫu nhiên một cặp nhiễm sắc thể cha-mẹ trong quần thể. Giả sử, nhiễm sắc thể cha-mẹ x1, x2 có cùng độ dài m.
Tạo một số ngẫu nhiên trong khoảng từ 1 tới m-1 (gọi là điểm ghép chéo)
Tại điểm ghép chéo chia nhiễm sắc thể thành hai chuỗi con có độ dài m1, m2 (m1+m2 = m)
Thực hiện ghép chéo hai chuỗi con của cha mẹ để tạo thành nhiễm sắc thể mới m11+m22 và m21+m12
- Đột biến (Mutation): Đột biến trên nhiễm sắc thể cha mẹ bằng cách
- Chọn ngẫu nhiên một số k từ khoảng 1 ≥ k ≥ m - Thay đổi giá trị gen thứ k của nhiễm sắc thể xi
- Đƣa cá thể con vào quần thể để tham gia quá trình tiến hóa tiếp theo - Bƣớc 4: Đánh giá các các thể mới bằng cách:
- Thực hiện kiểm thử với các giá trị con mới → độ thích nghi cho các cá thể mới.
- Loại bớt các cá thể có độ thích nghi thấp, thay thế bằng các cá thể có độ thích nghi cao
- Bƣớc 5: Kiểm tra nếu chƣa tìm đƣợc lời giải tối ƣu hay tƣơng đối tốt nhất, quay lại bƣớc 3 để tìm lời giải mới
Chƣơng 3. MÔ HÌNH TRIỂN KHAI THỰC TẾ