Thực thi tƣợng trƣng động và giải pháp

Một phần của tài liệu Kiểm chứng chương trình dựa trên SMT (Trang 26)

a) Vấn đề bùng nổ đƣờng thực thi

Dễ thấy rằng, kỹ thuật thực thi tượng trưng động sinh ra một lượng rất lớn các đường thực thi kể cả các chương trình nhỏ cho tới các chương trình thực tế. Với các chương trình lớn trong các ứng dụng thực tế thì số lượng đường thực thi mà kỹ thuật thực thi tượng trưng sinh ra là rất lớn hoặc có thể là vô hạn.

Hai kỹ thuật chính được sử dụng để giải quyết vấn đề này là:

 Sử dụng kỹ thuật dựa trên kinh nghiệm để lựa chọn những đường thực thi tốt nhất và ưu tiên duyệt qua những đường này.

 Sử dụng kỹ thuật phân tích chương trình để làm giảm độ phức tạp của những đường đang duyệt.

Chi tiết về hai kỹ thuật này được trình bày cụ thể trong [5]. Luận văn không tập trung đi sâu trình bày vấn đề này.

b) Vấn đề giải các ràng buộc

Một trong những thách thức chính khi áp dụng kỹ thuật thực thi tượng trưng động trên quy mô lớn đó là lượng các phép toán của truy vấn cần giải quyết là rất lớn. Làm cho việc giải của solver gặp nhiều khó khăn và có thể dẫn đến thất bại.

Có hai cách thức chính để làm giảm số lượng các ràng buộc đó là:

Loại bỏ các ràng buộc dƣ thừa: Xét ví dụ, cho trước tập ràng buộc

trên một đường thực thi hiện tại của chương trình (kí hiệu là PC) như sau: PC = (x + y > 10) (z > 0) (y < 12). Chương trình tiếp tục duyệt đến câu lệnh điều kiện có ràng buộc (x – y < 2). Trong trường

hợp này tập mới được ra (kí hiệu là PC’) có kết quả như sau:

PC’ = (x + y > 10) (y < 12) (x – y < 2). Trong đó, ràng buộc

z > 0 đã bị loại bỏ vì không liên quan đến ràng x – y < 2.

Giải quyết gia tăng: Trong thực tế, những tập ràng buộc sinh ra trong

suốt quá trình thực thi tượng trưng động đôi khi giống nhau vì thế có cùng một cách giải quyết. Điều này có thể được cải thiện để làm tăng tốc độ giải các ràng buộc bằng cách sử dụng lại các kết quả của các

truy vấn trước đó. Ví dụ, tiến hành giải tập ràng buộc sau: (x + y < 10) ∧ (x > 5) được kết quả là {x = 6, y = 3}. Ta tiến hành lưu

kết quả này vào bộ nhớ phụ. Sau đó, khi gặp các tập con hoặc tập cha của tập này ta có thể sử dụng lại kết quả. Ví dụ {x = 6, y = 3} cũng thỏa mãn: (x + y < 10) ∧( x > 5) ∧ (y ≥ 0).

c) Xử lý truy cập đồng thời: Phần lớn các ứng dụng trên thực tế thường tồn

tại truy cập đồng thời. Đây là vấn đề làm cho việc kiểm thử trở nên khó khăn hơn. Mặc dù vậy, thực thi tượng trưng động đã được sử dụng một cách hiệu quả để kiểm tra chương trình đồng thời, bao gồm: Các ứng dụng với đầu vào phức tạp dữ liệu [19, 22], hệ thống phân tán [13], các chương trình GPGPU [9] (General-Purpose Computation on GPU).

Sau khi đã có kết quả từ thực thi tượng trưng là các biểu thức ràng buộc được tạo thành từ mã chương trình. Các biểu thức này sẽ được đưa vào SMT để giải quyết. Chương tiếp theo sẽ trình bày về lý thuyết SMT solver, một công cụ giải các công thức Logic trên một nền tảng lý thuyết nhất định.

Chƣơng 3. SATISFIABILITY MODULO THEORIES (SMT)

Satisfiability Modulo Theories (SMT) biết đến như là sự mở rộng của SAT đối với từng lý thuyết (Theory) nhất định. Trong việc xây dựng các công cụ kiểm chứng tự động SMT là thành phần được sử dụng nhiều và mang lại hiệu quả to lớn. SMT dựa trên tư tưởng của SAT solving nhưng cho các công thức của lý thuyết vị từ cấp I thay vì Logic mệnh đề của SAT solving. Trong chương này luận văn sẽ trình bày cụ thể hơn về SAT cũng như về SMT. Cụ thể hơn, luận văn sẽ đi sâu trình bày về bài toán SAT, thuật toán để giải bài toán SAT từ đó, mở rộng trình bày cho bài toán SMT và thuật toán để giải bài toán SMT dựa trên tư tưởng của SAT.

Một phần của tài liệu Kiểm chứng chương trình dựa trên SMT (Trang 26)

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

(82 trang)