Phương pháp tạo lược đồ đột biến

Một phần của tài liệu Kỹ thuật kiểm thử đột biến và ứng dụng để kiểm thử các chương trình Java (Trang 39)

Phương pháp tạo lược đồ đột biến (MSG) [29] là một trong những phương pháp giúp khắc phục vấn đề tắc nghẽn. Tất cả các đột biến của chương trình được mã hóa vào một mức mã nguồn duy nhất gọi là chương trình siêu đột biến

(metamutant). Các điểm đột biến trong PUT (chẳng hạn như một phép toán số học) được thay thế bằng các lời gọi hàm có cú pháp hợp lệ được gọi là siêu thủ tục (metaprocedure). Mỗi metaprocedure mã hóa toán tử đột biến và thay đổi

đầu ra của nó tùy thuộc vào các đối số. Ví dụ, tùy thuộc vào các đối số của nó, metaprocedure số học sẽ thực hiện cộng, trừ, nhân, chia, hoặc module. Sau đó, các đột biến được biểu diễn dưới dạng một tập các đối số metaprocedure được áp dụng lúc thực thi metamutant. Bằng cách chỉ thay đổi một đối số

metaprocedure duy nhất từ tập các đối số metaprocedure (của PUT) ban đầu, đột biến thích hợp có thể được thực hiện. Điều này có nghĩa là các đột biến không được biên dịch hoặc thông dịch riêng rẽ và được thực hiện trong môi trường đích với tốc độ chương trình biên dịch.

Một metamutant đơn giản của đoạn chương trình ở hình 3.3 được mô tả ở hình 3.4. Metamutant này được tạo ra bằng cách chỉ sử dụng toán tử đột biến toán tử quan hệ thay thế mọi trường hợp của toán tử quan hệ bằng một metaprocedure toán tử quan hệ thích hợp, trong trường hợp này ROR:op() được

biểu diễn ở dòng 2- hình 3.4. ROR:op() có ký hiệu: ROR:op(int lhs; int rhs; int mutantNumber).

Metaprocedure được định nghĩa dòng 1- hình 3.4. Trong quá trình thực hiện metamutant này, các đối số thích hợp được cung cấp cho metaprocedure

ROR cho phép bất kỳ toán tử quan hệ được áp dụng hai giá trị.

// phương thức PUT gốc

public boolean sumIsPositive (int n, int m){

z=0;

sum= n + m;

return (sum > z);

}

Hình 3.3- Ví dụ phương thức PUT gốc

// phương thức PUT đột biến bằng toán tử ROR

1 import MTAIS.Operators.ROR; ...

public boolean sumIsPositive (int n, int m){

z=0;

sum= n + m;

2 return (ROR.op(sum, z, 0));

}

Mỗi đột biến được biểu diễn bằng một dãy các giá trị biểu diễn toán tử cho mỗi metaprocedure. MutantNumber là chỉ số metaprocedure trong dãy đột biến.

Ví dụ: mutantNumber trong đoạn mã 3.2 là 0, biểu diễn giá trị ở chỉ số 0 trong

dãy đột biến thiết lập toán tử được sử dụng trong ROR:op(). Tất cả các toán tử

quan hệ được đánh số, ví dụ: < là 0,  là 1, == là 2, > là 3 và v.v... Giá trị chỉ số

mutantNumber xác định toán tử quan hệ để áp dụng, trong ví dụ này, câu lệnh sum > z sẽ được thực hiện bởi một dãy đột biến với chỉ số 0 chứa 3 (số cho toán

tử quan hệ >). Để thực hiện sum == z, giá trị ở chỉ số 0 sẽ được sửa đổi bằng 2 (số cho toán tử quan hệ ==). Bằng cách sử dụng phương pháp này, tất cả các đột biến đều xuất hiện trong metamutant, từng đột biến được chọn lúc thực thi bằng cách áp dụng các giá trị thích hợp từ dãy đột biến vào các metaprocedure.

Untch và các đồng nghiệp cho biết rằng việc thực hiện thủ tục tìm nghiệm theo phương pháp Niutơn bằng cách sử dụng sản sinh lược đồ đột biến thì nhanh hơn 4,1 lần sử dụng phương pháp thông dịch [29]. Họ lập luận rằng đây “ là một

tín hiệu tốt cho thấy MSG có thể tăng đáng kể khả năng thực thi của kiểm thử đột biến ".

Một phần của tài liệu Kỹ thuật kiểm thử đột biến và ứng dụng để kiểm thử các chương trình Java (Trang 39)

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

(76 trang)