Kiểm thử đột biến là một quy trình được lặp đi lặp lại để cải tiến dữ liệu thử đối với một chương trình, như ở hình 2.2. Các thông số ban đầu để xử lý là PUT (chương trình được kiểm thử) và bộ dữ liệu thử T.
Trước tiên, bằng cách sử dụng Oracle, PUT phải được hiển thị để cung cấp các đầu ra mong muốn khi thực hiện với các dữ liệu thử trong T. Nếu có bất kỳ kết quả đầu ra nào là không đúng thì T đã chứng minh rằng PUT chứa lỗi. Các lỗi này nên được sửa chữa trước khi tiếp tục quá trình.
Khi đã xác định được tất cả các dữ liệu thử trong T cung cấp các đầu ra chính xác, công đoạn tiếp theo là tạo ra một tập M – các đột biến của PUT. Sau khi tạo ra tập M chứa tất cả các đột biến. Các đột biến này được thực hiện với T và các kết quả đầu ra của chúng được so sánh với các kết quả đầu ra của PUT.
Nếu kết quả đầu ra của đột biến khác so với kết quả đầu ra của PUT thì chứng tỏ lỗi đó (lỗi mà đột biến sửa chữa từ PUT) không xảy ra trong PUT. Khi đó, sẽ làm tăng sự tin tưởng của kiểm thử viên rằng PUT là đúng. Các đột biến như vậy trở nên không cần thiết vì dữ liệu thử hiện có đã phân biệt được chúng, và do đó chúng đã bị biệt (bị loại bỏ) từ tập đột biến M.
Hình 2.2 – Quy trình kiểm thử đột biến
( Lưu ý: Các bước biểu diễn trong hộp liền nét được thực hiện tự động. Còn các bước biểu diễn trong hộp nét dứt được thực hiện bằng tay)
Một khi tất cả các dữ liệu thử trong T đã được thực hiện trên tất cả các đột biến trong M, các đột biến đó vẫn còn sống (vẫn còn tồn tại trong M) cho đến lúc này vẫn không thể phân biệt chúng với chương trình gốc (PUT). Nói cách khác, không tồn tại dữ liệu thử trong T làm cho những đột biến còn sống tính toán kết quả đầu ra khác so với PUT. Những đột biến này trở thành mục tiêu cho
Tất cả các đột biến bị diệt? Đầu vào chương trình P Tạo các
đột biến test cases, T Đầu vào
Chạy T trên P P(T) đúng ? Sửa P Chạy test cases trên từng đột biến còn sống Phân tích và đánh dấu các đột biến tương đương
F T F Kết thúc T Cập nhật T Các toán tử đột biến
lần lặp tiếp theo, trong đó dữ liệu thử mới sẽ được tạo ra với nỗ lực để phân biệt được chúng.
Quá trình này tiếp tục cho đến khi tất cả các đột biến trong M bị diệt. Tuy nhiên, để diệt được các đột biến không phải là một công việc dễ dàng vì một số đột biến có thể có ngữ nghĩa giống với PUT. Những đột biến này được gọi là đột
biến tương đương [18] và sẽ luôn luôn tạo ra kết quả đầu ra giống với PUT
không quan tâm đến dữ liệu thử được áp dụng, ví dụ ở hình 2.3 sẽ minh họa cho điều này.
(Đột biến P’ là đột biến tương đương của PUT vì dữ liệu thử sẽ không thể
phát hiện ra lỗi trong chương trình P do giá trị của z luôn luôn bằng 4)
Như vậy, M không bao giờ rỗng hoàn toàn khi đột biến tương đương tồn tại. Điều này ảnh hưởng không tốt đối với kiểm thử đột biến vì kiểm thử viên không biết liệu các đột biến còn lại trong M là tương đương hay không. Nếu chúng là tương đương thì không có dữ liệu thử nào diệt được chúng, còn nếu chúng không là tương đương thì sẽ có dữ liệu thử có thể phát hiện được chúng nhưng cho đến lúc này vẫn chưa tìm ra. Hơn nữa, việc xác định liệu một đột biến là tương đương hay không là vấn đề không giải được [4], và vì vậy, kiểm thử viên phải xác định một cách thủ công.
Việc giảm tập M xuống còn tập rỗng cung cấp một thước đo hữu ích cho việc đánh giá chất lượng của T đối với PUT. Nếu T diệt được tất cả các đột biến không tương đương thì các dữ liệu thử có khả năng xác định rằng không lỗi nào (lỗi mà các đột biến cố gắng sửa chữa từ PUT) xuất hiện trong PUT. Tuy nhiên, trước khi T đạt được chất lượng này, nó chỉ phân biệt một phần các đột biến được thể hiện bởi số lượng các đột biến không tương đương bị diệt từ M. Phần này được gọi là tỷ lệ đột biến (MS) và được định nghĩa như sau:
100 * ) (N E D MS --- --- if (x = = 2 && y = = 2) z = x + y; --- --- --- if (x = = 2 && y = = 2) z = x * y; ---
Chương trình PUT gốc Đột biến P’
Trong đó, D là số đột biến đã bị diệt; N là tổng số các đột biến; E là số đột biến tương đương. Khi tỷ lệ này tăng (nghĩa là đột biến không tương đương bị diệt nhiều hơn) thì chất lượng của dữ liệu thử và sự tin tưởng của kiểm thử viên vào tính đúng đắn của PUT cũng tăng. Sau đó, lặp lại công việc tạo ra các dữ liệu thử mới để cải tiến chất lượng của T.