Mutation testing
Mutation testing Mutation testing là 1 loại kiểm thử phần mềm, nơi mà chúng ta thay đổi câu lệnh trong source code và check xem test case có thể tìm thấy lỗi hay không. Là một kiểu white box testing được sử dụng chủ yếu trong unit testing. Những thay đổi này là ...
Mutation testing
Mutation testing là 1 loại kiểm thử phần mềm, nơi mà chúng ta thay đổi câu lệnh trong source code và check xem test case có thể tìm thấy lỗi hay không.
- Là một kiểu white box testing được sử dụng chủ yếu trong unit testing. Những thay đổi này là những thay đổi nhỏ để đảm bảo không ảnh hưởng tới tổng thể hệ thống.
- Mutation testing dùng để kiểm tra hiệu năng và độ chính xác của chương trình test. Phương pháp này giúp kiểm tra những thiếu sót của chương trình trong khi test. Nó cũng giúp cho việc ước lượng và hoàn thiện bộ test case.
Why It Is Named As Mutation Testing?
- Mutation testing được gọi như vậy vì nó có chứa các đột biến, những thay đổi nhỏ trong code được cố ý đưa vào chương trình.
- Chiến lược này còn được gọi là fault-based testing method vì các đột biến được tạo ra để đưa vào một lỗi nhỏ vào trong code chương trình gốc.
Why mutation testing need to be performed
- Độ bao phủ của test case, được cho là một nhân tố quan trọng trong kiểm thử phần mềm.
- Mutation testing giúp trong việc phân tích xem một bộ chiến lược test có đủ để đảm bảo sản phẩm đầu ra có đạt các yêu cầu hay không. Nếu ta không thể nắm giữ được bất kì vấn đề nào, ta cũng không thể chắc chắn rằng hệ thống sẽ không có bug.
- Trong Mutation testing, một thay đổi nhỏ sẽ được đặt vào trong code. Sau đó, một bộ test case sẽ được triển khai trên phần mềm đã được thay đổi. Một bộ unit testing tốt sẽ có khả năng nhận diện ra lỗi trong chương trình.
How To Perform Mutation Testing?
- Tạo phần mềm biến đổi: Một đột biến cần phải được cố ý tạo ra để đưa một lỗi vào trong AUT. QA tester có thể đưa ra số lượng các đột biến tùy ý. Cần phải chắc chắn rằng các đột biến là duy nhất trong hệ thống. - Chuẩn bị test case: Team QA cần phải tạo ra các test case có thể nhận diện được các lỗi tạo ra bởi đột biến. - Test trên phần mềm gốc: QA tester cần kiểm tra xem kết quả trả về của các test case đưa ra trên phần mềm gốc đúng như dự đoán. Nếu không, các lỗi cần được fix và test lại cho đến khi AUT không còn lỗi. - Test trên phần mềm biến đổi: Phần mềm biến đổi cần được test trên các bộ test case giống với phần mềm gốc. Nếu kết quả trả về trên phần mềm biến đổi khác với phần mềm gốc, đột biến sẽ được đánh dấu là chết và nó sẽ không được test lại nữa. QA tester có thể lặp lại các bước test cho đến khi đạt kết quả mong muốn. - Tính toán Mutation score: Mutation score được định nghĩa là tỉ lệ của các đột biến đã chết trên tổng số các đột biến đưa ra. Giá trị lý tưởng của Mutation score là 1. Mutation Score = (Killed Mutants / Total number of Mutants)
Mutation Testing Types:
Mutation testing có thể phân loại ra thành 3: Value mutation, decision mutation và statement mutation. - Value mutation : giá trị của một hằng số hoặc tham số được thay đổi. Ví dụ như một giá trị thêm vào vòng lặp hay giá trị khởi tạo đối tượng. - Decision mutation : là thay đổi một biểu thức logic trong chương trình, ví dụ như đổi từ a > b thành a < b. - Statement mutation: trong kiểu test này, thay đổi một đoạn code, có thể là thay đổi vị trí, xóa hoặc lặp code.
Các phép toán thay đổi:
Các thao tác được đưa vào chương trình gốc để tạo ra các đột biến được gọi là các phép toán thay đổi. Các phép toán thay đổi được chia làm hai loại
- Các phép toán thay đổi cơ bản
- Các phép toán thay đổi lớp
Các phép toán thay đổi cơ bản: Các phép toán thay đổi cơ bản được pháp triển cho cho các ngôn ngữ lập trình hướng thủ tục. Mặc dù có thể dùng các phép toán này để tạo ra một số lượng lớn các đột biến, phần lớn các phép toán đều không quả hiệu quả mà thường sẽ trùng lặp lên nhau. Dưới đây là các phép toán biến đổi cơ bản:
- Các phép toán số học (+, -, *, /,...)
- Các phép toán quan hệ (>, <, ==,...)
- Các phép toán điều kiện (if..then..else,...)
- Các phép toán logic (AND, OR, NOT,...)
- Các phép gán
- Các phép dịch chuyển (<<, >>,...)*
Các đột biến được tạo ra bằng cách thêm, sửa, xóa các phép biến đổi.
Các phép toán thay đổi lớp: Các phép toán được sử dụng để tao ra các đột biến cho các chương trình hướng đối tượng: - Đóng gói – Encapsulation: Các đột biến được tạo ra bằng cách thêm, sửa hoặc xóa các tầng truy cập đến các hàm và biến của một instance. - Kế thừa – Inheritance: Các đột biến được tạo ra bằng cách xóa các biến của một lớp cha để kiểm tra xem nó có được định nghĩa và truy cập ở các class con có đúng không. - Đa hình – Polymorphism: Các đột biến được tạo ra bằng phương pháp đa hình để kiểm tra các hàm có cùng tên và cách nhập biến có được truy cập đến đúng hay không.
Mutation Testing Tools:
Có một số công cụ Mutation testing phổ biến. Trong đó, Jumble và Insure++ là các công cụ phổ biến nhất. Jumble:
- Jumble là một công cụ mã nguồn mở đơn giản và không có giao diện đồ họa. Nó chuyển đổi các file text thành một phiên bản có thể đọc được dễ dàng hơn đối với QA tester.
- Công cụ này vận hành ở mức source code giúp tăng tốc đáng kể cho quá trình Mutation testing. Các phép toán biến đổi được hỗ trợ bởi Jumble bao gồm: các phép điều kiện, các phép tính nhị phân, phép tăng biến, thay đổi hằng số, thay đổi cấu trúc lớp, thay đổi giá trị trả về và thay đổi khối lệnh switch..case.
Insure++:
- Đây là một phần mềm thương mại thực hiện Mutation testing tự động cho các phần mềm viết bằng ngôn ngữ C và C++.
- Thay vì tạo ra tất cả các đột biến có thể, Insure++ tập trung vào các “đột biến tiềm năng tương đương”. Động lực chính đằng sau ý tưởng này là nếu một test case có thể giết được các “đột biến tiềm năng tương đương”, thì nó cũng có thể tìm ra các lỗi tương tự ở chương trình gốc.
Challenges Of Mutation Testing:
Mutation testing có thể đánh giá một cách hiệu quả về độ bao phủ và chất lượng của một bộ test nhưng nó cũng có những khó khăn như ở dưới đây:
- Mutation testing tốn nhiều tài nguyên tính toán khi phải thực thi một số lượng lớn các đột biến trên một bộ test.
- Phải kiểm tra output của tất cả các test case và so sánh với output trên phần mềm gốc, có thể là một vấn đề khó khăn và dẫn đến việc tăng đột biến số lượng test case.
Trên đây là bài viết tìm hiểu về mutation testing của tôi. Link tham khảo http://www.softwaretestingclass.com/what-is-mutation-testing-tools-testing-types-and-its-challenges/ . Tuy mutation testing là kiểu white box testing và được sử dụng chủ yếu trong unit testing, nhưng đó cũng là một kiểu test đều giúp ích cho cả QA và Dev. Mong là bài viết bổ ích cho mọi người.