Các quy tắc giảm [114]

Một phần của tài liệu (LUẬN án TIẾN sĩ) các kỹ thuật sinh tự động dữ liệu kiểm thử dựa trên các biểu đồ UML luận án TS máy tính 624801 (Trang 145 - 147)

Tên quy tắc Quy tắc giảm Điều kiện

Head-Const- Rmv s1·x1·Y1 =s2·Y2 → x1·Y1 =s3·Y2 s1·x1·Y1 =s2·Y2 → ¬(s1·x1·Y1 =s2·Y2) if s1 ·s3 =s2 if s1 is not a prefix of s2 Tail-Const- Rmw Y1·x1·s1 =Y2·s2 → Y1·x1 =Y2·s3 Y1·x1·s1 =Y2·s2 → ¬(Y1·x1·s1 =Y2·s2) if s3 ·s1 =s2 if s1 is not a suffix of s2 Split x1 ·Y1 = Y2 → Y(Yh,Yt,C)∈split(Y2)(x1 = Yh)∧ (Y1 =Yt)∧C Concretize (x=s)∧(Y1·x·Y2) → Y1·s·Y2 if x=s Stringlen Y1 =Y2 → len(Y1) =len(Y2)

Free-Var Context → x= “00Yx= “@00Yx= “@@00... x a free variable

chúng cũng thêm ràng buộc mới C cho hệ thống trong suốt q trình tách, nó có thể tăng tính kết thúc của việc chia tách.

Quy tắc (Concretize) thay thế biến x trong Y1 ·x·Y2 với a là hằng chuỗi khi chúng trở thành tương đương. Chú ý rằng để đảm bảo công thức chèn vào là một tiên đề, chúng ta có liên kết x=s với biểu thức ban đầu.

Phương trình chuỗi: Khi việc giảm khơng thể thực hiện được nữa, nếu mỗi lớp tương đương là một hằng số, quá trình giải kết thúc với một giải pháp SAT. Ngược lại, mô đun ghép nối xây dựng một đồ thị phụ thuộc của các biến bao gồm trong các phương trình đơn giản, là các phương trình dưới dạng x =Y và lớp tương đương của x khơng có nhiều hơn một cụm các chuỗi phức hợp (tức là không phải là một hằng số hoặc một biến). Ví dụ, trong x=Y, xphụ thuộc vào tất cả các biến bên trongY. Chú ý rằng công thức phức tạp sẽ làm giảm và tạo ra các công thức đơn giản. Từ đồ thị phụ thuộc, chúng ta xác định các biến tự do, nghĩa là các biến không phụ thuộc vào những biến khác và khơng có hằng số trong các lớp tương đương của nó. Sau đó, gán các giá trị cụ thể cho các biến tự do bằng cách thêm các tiên đề mới.

Độ dài chuỗi: Chiều dài chuỗi là một toán tử nguyên thủy quan trọng như các tốn tử khác có thể thực hiện giảm. Vì mơ đun lõi Z3 khơng hiểu được ngữ nghĩa của toán tử, nó xử lý đơn giản như một biến số nguyên. Do đó, Z3–str cần để đảm bảo sự tương quan giữa biến chiều dài và chuỗi tương ứng. Thiết kế cơ bản để tạo ra độ dài của các ràng buộc tương ứng (trong miền số nguyên) khi mô đun ghép nối được gọi bởi mô đun lõi dựa trên sự kiện mới trong miền

chuỗi. Nếu độ dài các ràng buộc mới gây ra bất kỳ xung đột nào trong miền số nguyên, mô đun lõi sẽ quay lui và thử giải pháp khác nhau trong miền chuỗi.

Quy tắc (StringLen) miêu tả cách Z3–str tạo ra độ dài của các ràng buộc theo sự kiện mới Y1 =Y2. Nó gọi hàm len()(được định nghĩa trong Bảng 5.4) để dịch hai chuỗi phức hợp sang biểu thức nguyên và xác định sự tương đương của chúng. Nó dịch một hằng chuỗi với chiều dài của nó và giới thiệu một chiều dài biến length(x) cho biến chuỗi x.

Ví dụ. Xem xét ba mệnh đề sau đây:

x1 = “a00 ; x2 =x1·“ef g00∨x2 =x1·“e00 ; length(x2)<3

Giả sử rằng việc gán true cho x1 = “a00. Thực tế này cho phép Z3–str thêm tiên đề(x1= “a00)→(length(x1) = 1). Giả sử mô đun lõi cố gắng lựa chọn đầu tiên của

mệnh đề thứ hai. Z3-str thêm tiên đềx2 =x1·“ef g00→length(x2) =length(x1)+3.

Nó gây ra mâu thuẫn với mệnh đề thứ ba trong miền số ngun. Sau đó, mơ đun lõi quay lại lựa chọn thứ hai là x2 =x1·“e00 và tìm giải pháp SAT.

Trong quy tắc của phép nối, Z3–str đưa ra việc gán bất kỳ giá trị nào cho một biến tự do. Tuy nhiên, một biến x tự do trong miền chuỗi có thể bị hạn chế bởi xác định chiều dài (trong miền số ngun) về chính biến đó hoặc trong biến khác mà nó phụ thuộc vào x. Vì độ dài của các ràng buộc không hạn chế

giá trị chuỗi mà đúng hơn là chiều dài chuỗi, Z3–str giới thiệu quy tắc biến tự do (Free-Var) để cho phép mô đun lõi gán các hằng chuỗi được xác định trước các độ dài khác nhau với biến chuỗi tự do để thỏa mãn ràng buộc độ dài chuỗi. Theo quy tắc, nếu mô đun ghép nối dị tìm một biến chuỗi xlà biến tự do trong ngữ cảnh hiện tại thì nó thêm một tiên đề mà các trạng thái trong ngữ cảnh đó ngầm định rằng x có thể là các hằng chuỗi của các độ dài khác nhau. Ngữ cảnh là sự kết hợp của tất cả các sự kiện bởi mô đun lõi tại điểm này. Z3–str sử dụng ngữ cảnh như một tiên đề ví dụ x không thể là biến tự do trong các ngữ cảnh khác nhau. Bất kỳ sự xung đột nào bởi độ dài các ràng buộc sẽ gây ra thì mơ đun lõi cố gắng thử các hằng chuỗi có độ dài khác nhau. Khi có sự xung đột đó thực hiện quay lui tìm giải pháp khác.

b) Cải tiến quy tắc giảm

Các quy tắc giảm trong Z3–str tập trung vào xử lý với các toán tử nguyên thủy phép nối, độ dài chuỗi và phương trình chuỗi. Trong ngữ pháp ràng buộc của Z3–str ngồi các tốn tử ngun thủy trên thì hỗ trợ các tốn tử chuỗi sau:

Một phần của tài liệu (LUẬN án TIẾN sĩ) các kỹ thuật sinh tự động dữ liệu kiểm thử dựa trên các biểu đồ UML luận án TS máy tính 624801 (Trang 145 - 147)