Chƣơng 1 : GIỚI THIỆU
3.5 Giải hệ sử dụng SMT-Solver
SMT-Solver là một chƣơng trình đƣợc phát triển để giải các hệ ràng buộc dựa trên nền tảng Z3. Đƣợc phát triển bởi một nhóm sinh viên trƣờng Đại học Công Nghệ - Đại học Quốc Gia Hà Nội [2]. Đầu vào của SMT-Solver là 2 mảng nhƣ mục 3.4. Đầu ra sẽ là giá trị ngẫu nhiên thỏa mãn các điều kiện trong hệ ràng buộc. SMT-Solve hỗ trợ các loại dữ liệu về số. Mã nguồn SMT solver sẽ đƣợc nhúng vào chƣơng trình để giải các ràng buộc trong các đƣờng kiểm thử và đƣa ra dữ liệu kiểm thử cho các ca kiểm thử tƣơng ứng.
Với đặc thù không đòi hỏi giải ra tất cả các kết quả thỏa mãn đƣờng đi mà chỉ lấy một kết quả thỏa mãn dùng làm dữ liệu kiểm thử. Kỹ thuật sinh ngẫu nhiên đƣợc xem nhƣ
một phƣơng pháp truyền thống để giải hệ ràng buộc. Với những bài toán phức tạp với những biểu thức logic phức tạp thƣờng kỹ thuật sinh ngẫu nhiên sẽ bộc lộ nhƣợc điểm về thời gian giải ra kết quả. Tuy nhiên trong bài toán này, các thiết kế thƣờng chia làm các mô hình nhỏ, các ca kiểm thử không quá phức tạp (kiểm thử đơn vị) nhƣ trong toán học nên kỹ thuật sinh ngẫu nhiên là hoàn toàn phù hợp.
SMT Solver (Z3) SAT UNSAT Hệ ràng buộc {defineList, testConstraint}
Hình 3.19 Mô tả công cụ SMT Solver
Hiện nay, công cụ SMT-Solver đã giải quyết đƣợc với rất nhiều dạng dữ liệu bao gồm cả dữ liệu tuyến tính và phi tuyến tính trong đó dữ liệu phi tuyến tính bao gồm các biểu thức số học, mảng, ma trận, v.v. biểu thức phi tuyến tính nhƣ các hàm lƣợng giác. Hình 3.19 mô tả qui trình giải hệ sử dụng trong bài nghiên cứu, đầu vào là hai mảng:
defineList: chứa thông tin khai báo kiểu dữ liệu đầu vào của các biến.
testConstraint:chứa thông tin hệ ràng bucc cần giải.
Công cụ SMT solver đƣợc thiết kế để giải ra kết quả từ hai mảng đầu vào, nếu có nghiệm thỏa mãn hệ ràng buộc ta thu đƣợc kết quả đầu ra (SAT). Ngƣợc lại, nếu hệ vô
nghiệm sẽ không có kết quả trả về (UNSAT). Nhƣợc điểm duy nhất và cũng là vấn đề
phức tạp nhất với tất cả các phƣơng pháp giải hệ đó là dữ liệu dạng ký tự, chuỗi kí tự (String, ArrayString..). Đây là hạn chế chung của các phƣơng pháp giải hệ tại thời điểm hiện tại. Đối với dữ liệu này để thực hiện đƣợc cần phải biến đổi, mã hóa các kí tự về các dạng dữ liệu quen thuộc trƣớc khi đi vào giải.