Các toán tử đột biến trong ngôn ngữ Promela

Một phần của tài liệu (LUẬN văn THẠC sĩ) kết hợp phương pháp kiểm chứng mô hình và các kỹ thuật kiểm thử phần mềm làm tăng độ tin cậy của hệ thống phần mềm (Trang 56 - 58)

Tên toán tử Toán tử ban đầu (Original operators)

Toán tử đột biến (Mutant operators)

Toán tử phủ định ! (biểu thức) (biểu thức)

(biểu thức) ! (biểu thức)

Các toán tử tăng, giảm ++ --

-- ++ Các toán tử số học - + + - * / / * % * Các toán tử dịch bit << >> >> << Các toán tử quan hệ số học <= > >= < < >= > <= < <= <= < > >= >= > Các toán tử bằng == != != ==

Các toán tử làm việc với từng bit

& |

| &

^ &

Các toán tử logic && ||

|| &&

Ví dụ về việc sử dụng đột biến trong toán tử là: int sum = a + b;

Sau khi dùng đột biến với toán tử số học ta có: int sum = a – b;

Đột biến trong hằng và trong các câu lệnh cũng tương tự như đột biến trong biến, ngĩa là ta cũng thay đổi hằng, giá trị của hằng và các câu lệnh để làm sai khác chương

trình và tạo ra các đột biến. Ví dụ như chèn các câu lệnh assert, thay đổi điều kiện trong điều kiện if, do, … và các phép biến đổi khác để làm chương trình sai khác.

Trường hợp mà chương trình gốc/ mô hình gốc và chương trình đột biến/ mô hình đột biến hầu như không có sự khác nhau, các ca kiểm thử không phát hiện ra các lỗi được gieo vào chương trình thì ta gọi nó là các đột biến tương đương (equivalent mutants). Theo giáo sư Grün và các đồng sự nghiên cứu [5] thì có bốn nguyên nhân sinh ra các đột biến tương đương: (1) các đột biến nằm trong phần code không được gọi đến (dead code); (2) các đột biến ngăn chặn việc tăng tốc độ xử lý của chương trình, nhưng không làm thay đổi cấu trúc của chương trình; (3) các đột biến tương đương chỉ làm thay đổi trạng thái riêng của một lớp hoặc trả về giá trị của các lời gọi hàm riêng mà không ảnh hưởng đến hành vi chung của cả chương trình; (4) đột biến không được thực hiện (trigger) – các đột biến này có thể làm cho chương trình bị lỗi, nhưng điều kiện để xảy ra các đột biến này là hệ thống đã bị lỗi ở chỗ khác, nên vì thế nó không thể xảy ra được nữa. Các đột biến tương đương chiếm một phần lớn trong tổng số các đột biến được sinh ra, các kỹ thuật để phát hiện đột biến tương đương vẫn đang được nghiên cứu với mục tiêu làm giảm số đột biến tương đương và tăng chất lượng cho chương trình.

Số lượng các đột biến của mô hình, và đặc tả hệ thống là rất lớn, việc kiểm chứng với tất cả các đột biến là một việc khó thực hiện. Vì vậy, ta cần áp dụng các kỹ thuật để làm giảm số lượng các đột biến cần kiểm thử, nhưng vẫn đảm bảo được tỷ lệ đột biến (mutation score) ở mức độ chấp nhận được. Một kỹ thuật có thể được xem xét và cân nhắc đến là phương pháp phân hoạch tương đương. Ở đây, ta sẽ đưa các trường hợp đột biến có cùng miền giá trị đầu vào, có cùng miền giá trị đầu ra thành một vùng tương đương, và sau đó ta tiến hành việc kiểm thử trên các vùng tương đương đó. Việc kiểm thử trên các vùng tương đương được chứng minh là mang lại hiệu quả cao, tiết kiệm thời gian, công sức thực hiện.

5.3. Tính đúng đắn của cách tiếp cận

Sau khi áp dụng hai kỹ thuật trên thì sẽ có câu hỏi đặt ra là: Tính đúng đắn của kết quả trả về sau khi kiểm chứng?

Các phản ví dụ được sinh ra có thể coi là ca kiểm thử hợp lệ của chương trình hay không?

Để trả lời cho câu hỏi thứ nhất “Tính đúng đắn của kết quả trả về sau khi kiểm chứng?”. Với hệ thống ban đầu được đặc tả là đúng, và mô hình được cho là đúng. Ta có bảng 5.2 mô tả mối quan hệ giữa đặc tả, mô hình hệ thống và kết quả kiểm chứng mô hình.

Một phần của tài liệu (LUẬN văn THẠC sĩ) kết hợp phương pháp kiểm chứng mô hình và các kỹ thuật kiểm thử phần mềm làm tăng độ tin cậy của hệ thống phần mềm (Trang 56 - 58)

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

(79 trang)