thực thi tượng trung và một số kỹ thuật thực thí lượng trưng hiện đại đang được áp dụng trong các công, cụ kiểm chứng, Chương 3 trình bày về SMIT một công cụ giải các công thức logic t
Trang 1
TRUONG DAI HOC CONG NGHE
LE THI HANG
KIÊM CHỮNG CHƯƠNG TRÌNH DUA TREN SMT
LUAN VAN THAC Si CONG NGHE THONG TIN
Hã Nội - Năm 2014
Trang 2
TRUONG DAI HOC CONG NGHE
Lé TH HÀNG
KIÊM CHỨNG CHƯƠNG TRÌNH DUA TREN SMT
Ngành: Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm
Trang 3Tôi xin cam đoan rằng nội dung và những kết quả của luận văn tốt
nghiệp: “Kiểm chứng chương trình dựa trên SMTT là sản phẩm nghiên cứu của
riêng tôi đưới sự giúp đỡ rất lớn từ TS Tô Văn Khánh Tôi không sao chép của người khác Toàn bộ nội dung được trỉnh bày trong luận văn này hoặc là của
chính tôi hoặc là dược tổng hợp tử nhiều nguồn tải liệu khác Tắt cá các tải liệu
tham khảo đều được trích đẫn rõ ràng ở phần cuối của luận văn
Tôi xin hoàn toàn chịu trách nhiệm và chịu mọi hình thức kỷ luật theo quy
định cho lời cam đoan của mình
TR Nội, tháng 11 năm 2014
Học viên
Lê Thị Hằng.
Trang 4LOT CAM ON
Trude hét, tai xin duge bay té long biét on chan thanh va siu sic dén thay
giáo, TS Tô Văn Khánh người đã dành nhiều tâm huyết và tận tình chỉ bảo giúp
tôi hoàn thiện luận văn này
'Tôi cũng xin pửi lời cám ơn đến tập thể các thầy cô pido trong Khoa
CNTT Trưởng ĐII Công Nghệ - ĐII Quốc Gia Hà Nội Những bài giáng của
thầy cô là nền tăng kiến thức cơ bản giúp tôi hoàn thành luận văn ngày hôm nay
Cuối cùng, tôi xin gửi lời cảm ơn tới gia đình tôi những người thân đã đông viên tồi bằng cả vật chất lẫn tính thần trong suốt thời gian tôi học tập và
thực hiện luận văn này
Tuy rằng, tôi đã cố gắng hết sức trong quá trình làm luận văn nhưng
khéng thể tránh khôi thiếu sót, tôi rất mong nhận được những góp ý của thầy cô
‘va các bạn
TH Nội, thang 11 nim 2014
Học viên
Lê Thị Hằng
Trang 5MUC LUC
LOI CAM DOAN
LOT CAM ON
MUC LUC
BANG CAC THUAT NGU VIET TAT
DANH MUC HINH VE
Chương 1 GIỚI TIIỆU
1.3 Nội dung luận văn
Chương 2 KIỂM CHỨNG CHƯƠNG TRÌNH VÀ THỰC THỊ TƯỢNG TRUNG 3
2.2.1 Téng quan về thực thi tượng trưng
2.2.3 Thực thí tượng trưng dộng và giải pháp
Chương 3 SATISEFTABILITY MODULO THEORIES (SMT)
3.1 SÁT solver
3.1.1 Bải toán SAT
3.3.2 Thuật toán DPLL cho SMT 28
Chuong 4, KLEM CHUNG DUA TREN KLEE
Trang 64.4.2 Tối ưu hóa tập các ràng buộc với KLEE se 2)
1.3 Giải ràng buộc tự động với molaSMT 4§
4.2 Độ bao phú mã nguồn của ca kiểm thử dược sinh bới KI,EE
4.3 Thực thi tương trưng động với KLEE
4.4 Thực thi tượng trưng động và giải pháp của KLEE
4.5 Một số bài toán kiểm chứng và kiểm thử tự động dựa trên KL,EE 57
4.3.1 Kiểm tra lỗi chia cho 0 trong chương trình seen SF 4.3.2 Phat hiện lỗi truy cập ra ngoài kích thước của mảng, 59
4.3.3 Phát hiện lỗi hàm khi đột ngột gọi ham abort "———
4.3.4 Sinh đữ liệu kiểm thử tự động, 63
KET LUAN
Trang 7BANG CAC THUAT NGU VIET TAT
STT | Thuat nga wiét tat | Thuật ngữ đầy đử
1 DPLL Davis Pulnam Logemann Loveland
2 HGT Lxecution Generated Testing
3 | SAT Satisfiability
4 smMr Satisfiability Modulo Theories
5 | AOT Ahead Of Time
6 JIẺ Just In ‘Time
8 CNE Conyunctive Normal Form
9 | FIFO First In First Out
10 |DAG Direcled Acyclic Graph
Trang 8
DANH MỤC HÌNH VẼ
Hình 2.1 Sơ đỗ của hệ thông kiểm chứng [3] 4
Hinh 2.2 Mô hình hóa cách tiếp cân cúa kiểm chứng mồ hình |3| «e 6 Liinh 2.3 Một đoạn mã nguỗn C1 I và thực thi tượng trưng tương ng 10
Hình 2.4 Một đoạn ruã nguồn chứa vùng lặp 12
Hinh 2.5 Công thức biểu diễn thực thi tượng trung cho vòng lặp ]5|, « L2 Hình 2.6 Doạn mã nguồn Ở chửa biểu thức không tuyến tính se, LB Tinh 2.6 Đoạn ma ngnén C két hop đầu vào cụ thể và tượng trmg, 14 Hinh 3.1.a Hình về mẻ tả thú tục DPLL " Hinh 3.1.b Sơ đồ cơ chễ hoạt động của thủ tục DPLL, eho SAT [6] 23 Tình 3.2 Sơ đỗ tông quan của Booleclor [21] 30 Hinh 3.3 Sơ đồ tổng quan của Z3 |15| àSnnnasriaeeoseeooeue,38 Hinh 3.4 Sơ đỗ kiến trắc của ST'P solver [26] 36
Hình 4.1 Kiến trúc tổng quan cia KLEE 40
Hình 4.2 Kiến trúc của melsSMT [10] 46
Hình 4.3 Biểu thức đầu vào đạng đỗ thi [8| ào, đĐỆ
Linh 4.4 Mô hình quá trình giải ràng buộc cửa mefaSMT [10] 49
Hinh 4.6 là đô thủ luòng điễu khiển của chương trình trên << 30
Hinh 4.5 Ví dụ về mã nguỗn hảm ReturnAverage sài cceoseoeeeeeoeoe.SÔ Llinh 4.6 Đã thị luồng điều khiển của hàm RetumAverager [14] 51
Hình 4.7 Minh họa việc loại đường thực thì dư thừa
Hinh 4.3.1.a Hàm phát sinh lỗi chia cho 0
Ilinh 4.3.2.a [làm phát sinh lỗi cập ngoài kích thước của mảng 60 Hình 4.3.2.b Quả trình thực thí lượng inmg eda cheemg trình phái hiện lỗi truy cập ngoài kích
thước của mắng Ha - " ene 0
[inh 4.3.2.c Cay thie thi trong trmg của chương trình phát hiện lỗi truy cập ngoài kích
Hình 4.3.2.4 Cây thực thí tượng trưng của chương trình phát hiện lỗi truy cập ngoài kích
62
thước của mảng
Tình 4.3.3.a Đoạn mế nguồn có gợi hàm aborlÖ 62
Trang 9Llinh 4.3.4.a Đoạn mã nguồn sơ sánh hai ehmỗi
Linh 4.3.4.b Thue hiện tượng trưng hóa cho hàm so sánh chuỗi
Hình 4.3.4.c Cây thực thi Lượng trưng kiểm thử hàm so sảnh chuỗi
Hình 4.3.4.d Mô hình quá trình giải các rằng buộc cúa các solvar
64
64
Trang 101.1 Đám bản chất lượng phần mềm
Máy tính và phần mềm máy tính ngày cảng đóng vai trô to lớn trong
nhiều lĩnh vực của đời sống xã hội như: kinh tế, giao thông, vũ trụ hay các dịch
vụ y tế trong khám chữa bệnh Thông thường các phần mễm máy tính không
đứng riêng lẻ mà chúng được tích hợp hoặc nhúng trong các hệ thống phức lạp
Cho nên việc đảm báo chất lượng phần mềm là hết sức cần thiết Việc đảm báo
chất lượng phần mềm Irong các lĩnh vực như địch vụ y tế hay vũ trụ hàng không
lại càng được cơi trọng Bởi chỉ một sai sót nhỏ của hệ thống cỏ thể
y ra
những tổn thắt to lớn về tỉnh mạng cơn người cũng như về kinh tế
Trong những năm gần đây, chúng La cũng đã chứng kiến nhiều thảm họa
xây ra mà nguyễn nhân lại nằm ở lễ¡ phần mềm chẳng hạn ngay 04/06/1996 tau
vũ trụ Ariane -5 đã nỗ tung chỉ 36 giây sau khi khởi động [3] Nguyên nhân là
do lỗi chuyển đổi một số dạng dấu phẩy dộng 64 - bịt thành số nguyên dương 16-bit Sự việc nảy xây ra dã lâu, nhưng cho đến nay nó vẫn dược nhắc đến như
một thảm họa khủng khiếp nhất do lỗi phần mềm gây ra
Rất nhiều kỹ thuật dược nghiền cứu và sử dựng để khẳng định tỉnh đúng
đắn của hệ thông Hai kỹ thuật truyền thống đã và đang được sử dụng để đảm
bảo chất lượng phần mềm là kiếm thử phần mềm và kiểm chứng phần mềm
(Bofiware verification) 'Iluy nhiên, việc sử dụng các phương pháp kiểm thử chỉ
làm giảm bớt lỗi của hệ thống mà không thể chứng minh được hệ thống không
có lỗi Cáo phương pháp kiểm chứng đang được quan tâm số một trong việc chứng minh tính đúng đắn của hê thống Phương pháp kiểm chứng mô hình
(model checking) là sự lựa chọn hiệu quả trong việc chỉ ra hệ thống hoạt động
đúng Nhưng phương pháp này lại gặp phải vấn dé bung né trang (hai khi thuc
hiện với các hệ thống lớn, phức tạp trong thực tế
Trang 11Luận văn trình bảy phương pháp kiểm chứng dựa trên SMT (SAT Modulo
Theories) stt dung thực thi lượng trưng (symbolie execution) là phương pháp
khác thay thé cho phương pháp kiểm chứng mô hình khi thực hiện với các hệ thống phức tạp
1.2 Mục tiêu của luận văn
Mục liêu của luận văn là tìm hiểu và trình bảy về phương pháp kiểm chứng đựa trên SMT Một phương pháp có nhiều ưu diễm cho vẫn dé bing nd
trạng thái của kiểm chứng mô hình
Tuan vin sé trinh bảy về công cụ KL,EE, một công cụ kiểm chứng tự động
sử dụng thực thi tượng trưng kết hợp với ha SMT solver dược đánh giá là hiệu
quả đó là Z3, Boolector va STP Tiếp theo luận văn sẽ trình bày về ứng dụng của
KLEE trong kiểm chứng một số thuộc tính cúa chương trình như phát hiện lỗi
chia cho 0, lỗi trần vùng đêm, lỗi truy cập ra ngoài kích thước của mảng,
1.3 Nội dung luận văn
Luận văn gồm 4 chương, trong đó phần giới thiệu được trình bày trong
chương I
Chương 2 trình bày về kiểm chứng chương trình thực thi tượng trung và
một số kỹ thuật thực thí lượng trưng hiện đại đang được áp dụng trong các công,
cụ kiểm chứng,
Chương 3 trình bày về SMIT một công cụ giải các công thức logic trên lý
thuyết vi lit cap Iva việc áp dụng SMT, thực thi tượng trưng để kiểm chứng,
chương trình trên một số lý thuyết cụ thể
Chương 4 trình bày về công cụ KLEE, thực nghiệm trên công cụ KLEE
và các ứng dụng của nd trong việc kiểm chứng và phát hiện những lỗi của chương trỉnh
Phần kết luận trình bày kết luận quá trình nghiên cứu, đưa ra các kết quả
đạt dược và hướng nghiên cứu tiếp theo.
Trang 12Chương 2 KIỀM CHUNG CHƯƠI RÌNH VÀ THUC THE
SONG TRU
Kiểm chứng chương trình là một trong những vấn đề quan trọng quyết
định dến chất lượng phần mềm 'Irong chương nay luận văn trình bày về kiểm
chứng chương trình, kỹ thuật kiểm chứng mô hình Dồng thời luận văn cũng trình bày về thực Ứủ tượng trưng (symbolic executon), thực thì tượng trưng đông và một số giải pháp khắc phục những vấn để phát sinh trong thục thi tượng,
trưng
2.1 Kiểm chứng chương trình
Kiểm chứng chương trình là một trong những giai đoạn quan trọng trong
quy trình sản xuất phần mềm Các vẫn để tổng quan vẻ kiểm chứng chương trình, kỹ thuật kiểm chứng mô hình sẽ được trình bày ngay sau đây
2.1.1 Tổng quan về kiểm chứng chương trình
Hai kỹ thuật chủ yếu được áp dụng để đám bảo chất lượng phần mềm hiện
nay đỏ là kỹ thuật kiểm thứ (Software testing) va ky thuật kiểm chứng (Safiware
verification) Trong khi các kỹ thuật kiểm thử chỉ được thực hiện khi đã có mã
nguồn hệ (hồng và cũng chỉ cỏ khả năng phảt hiện những lỗi hoặc khiếm khuyết của hệ thẳng mà không thể khẳng định dược là chương trình không cỏn lỗi Do
đỏ, áp dụng kỹ thuật kiểm thử không thôi thi chưa đủ để đảm bảo chất lượng của
hệ thống Các kỹ thuật kiểm chứng có thể piải quyết dược vấn để này
Kiểm chứng [I] là hoạt động giúp đảnh giá một hệ thông phần mềm bằng
cách xác định sản phẩm ở các pha phát triển có thỏa mãn các đặc tả yêu cầu
phần mềm hoặc các thuộc tính của chương trình có thỏa mãn hay không? Sản
phẩm ở đây có thé hiểu là sân phẩm trung gian như: Đặc tả yêu cầu, thiết kế chỉ
tiết, mã nguồn Những hoạt động kiểm tra Lính đúng đắn của các pha phát triển
được gọi là hoạt động kiểm chứng Kiểm chứng trả lời cho câu hỏi “Hệ thông
Trang 13được xây dụng có đúng với đặc tả” Mục đích của hoạt động kiểm chứng là xác
thưc xem đã xây dựng dang sin phẩm
Vé cơ bản, kiểm chứng hệ thống là kỹ thuật được áp dung để xác minh
tính đúng đắn của một thiết kế, một sân phẩm Dỏ là những đặc tả quy định các
hành vị đã thực hiện của hệ thống và những gì hệ thống không thực hiện từ đó tạo cơ sở cho hoạt động kiểm chứng Hệ thống được coi là đúng nếu nó thỏa
mãn tắt cả các thuộc tính thu được từ các đặc tả cụ thể của nó Sơ đề minh họa
quá trình kiểm chứng dược trình bày trong hình 2.1
Trang 14
trên mọi môi trường được đặc tả Có thể kế đến một số phương pháp như:
Thương pháp suy điễn (deductive methods), kiém chimg m6 hình (model
checking), định kiếu chương trình (program typing), phân tích chương trình tĩnh (static program analysis)
Trong số các phương pháp kể trên, phương pháp kiểm chứng mô hình
(model checking) là phương pháp ra đời khá sớm Tuy nhiên, nó còn hạn chế là chỉ áp dụng được cho các hệ thống nhỏ Phân tiếp theo sẽ tập trung trinh bày về
kỹ thuật này
Kỹ thuật kiểm chứng mô hình [3] là kỹ thuật mô tả những hành vì có thể
có của hệ thống đưới đạng các công thức taán học rõ ràng, chính xác và biểu
diễn hệ thống đưới dạng các trạng thái
Kiểm chứng mô hình là kỹ thuật phát hiện lỗi chương trình theo cách thức
với cạn LAL c& cdc trang thái có thể có của hệ thống Các công oụ kiểm chứng
phần mềm mà sử dụng kỹ thuật kiểm chứng mô hinh sẽ tiến hành kiểm tra tất cả
Những thuộc tỉnh của chương trình được kiểm tra bằng cách sử dụng mô
hình có tính chất định tính như: Kết quả sinh ra liệu có chính xác Liệu hệ thống
có gšp phải tình huỗng deadlock, ví dụ hai tiến trình củng tiên hành chờ đợi
nhau dẫn đến sự bề tắc của hệ thống
Kiểm chứng mô hình dòi hỏi phải có một khẳng định chính xác vỀ các
thuộc tính đã được kiểm tra của hệ thông Việc mô hình hóa hệ thông một cách
chính xác thường phát hiện được những lỗi tiềm ẩn của hệ thông,
Các mỗ hình hệ thống thưởng dược tự động tạo ra từ một mô tả vỀ mô
hình được thể hiện cho từng ngôn ngữ lập trinh như C, Java hoặc ngôn ngữ mô
14 phan cig nhw Verilog Cần lưu ý rằng đặc tả thuộc tính quy định cái gì hệ
thống nên làm và cái gì hệ thống không nên làm rong khi mô hình hóa hệ
thống lại kiểm tra tất cả các trạng thái liên quan để kiểm tra xem chúng có thỏa mẫn cai mà thuộc tính mong muốn Phần vi du (Counterexample) mé tả một đường thuc thi từ trang thái khởi tao của hệ thống tới trang thái vi phạm thuộc
Trang 15có thỄ xem lại kịch bắn vi phạm, theo cách này thu thập thông tin gỡ lỗi hữu ích
và phù hợp với mê hình Cách tiếp cân về kiếm chứng mô hình xem hình 2.2
Hệ thông
(System)
Bac ti (requirements}
+ (Hũnh thức
Hình 2.2 Mô hình hóa cách tiếp cận của kiểm chứng mô hình [3]
Quy trình thực hiện của kiểm chứng mô hình được thể hiện qua các pha
sau đây
Trang 16© Pha mô hình hỏa (modeling phase}: Điễu kiện tiên quyết của cáo đầu
vào của kiếm chứng mô hinh là mô hình của hệ thông dang duoc xem
xét và đặc trưng hỉnh thức hóa của các thuộc tính được kiểm tra Mô
hình của hệ thống rnỗ tả hành vi của hệ thống một cách rõ rằng chỉnh
xác Nó thường thể hiện băng ôtômát hữu hạn bao gồm một tập hữu hạn
các trạng thái và hàm chuyển Lương ứng Trạng thái bao gồm thông tin
về các giá trị hiện tại của các biến, cầu lệnh được thực hiện trước đó,
Hảm chuyển mô tả cách thức để chuyển từ trạng thải hiện thời sang
trạng thái khác Để việc kiểm chứng cho kết quả đứng, các thuộc Linh ở đầu vào cũng nên dược mô tả một cách chính xác và rõ ràng Để làm
được điều này thì sử dụng ngôn ngữ đặc tả thuộc tính Sử dụng logic
thời gian (temporal logic) là cách thức hiệu qua dé dic ti thuộc tính
© Pha thu thì: Chạy hộ công cụ kiểm chứng để kiểm tra tính hợp lệ của
các thuộc tính trong mô hình hệ thống,
© Pha phan tich:
+ Nếu một thuộc tính thỏa mãn thì tiếp tục với thuộc tính tiếp (nếu có)
1 Nếu thuộc tính vi phạm thực hiện:
- Phan tich va sinh ra phan ví dụ bằng mô phông
-_ Cải tiễn mô hình, cải tiến thiết kế hoặc thuộc tính
-_ Lắp lại toân bộ Lhủ tục
+ Nếu truy nhập ngoải bộ nhớ thi cỗ gắng giám thiểu mô hình vả thử lại
Như đã trình bây ở trên, kỹ thuật kiểm chứng mô hình [16] được đánh giá
là kỹ thuật hiệu quả dược sử dụng nhiều trong các công cụ kiểm chứng với
những ưu điểm sau:
-_ Là kỹ thuật có thể thực hiện hoàn toản tự động
- Thuật toản kiểm chứng mỗ hình sẽ kết thúc với câu trá lời đúng và
đưa ra một mô hinh cụ thể Iloặc chỉ ra một phẩn ví dụ
(counterexamples) là lý do tại sao hiểu thức là không thỏa mãn Các
Trang 17phản vi dy déng vai tré dic biét quan trong trong việc phát hiện các
lỗi oũa sáo hệ thống chuyển phức tap
- Thực hiện nhanh, cụ thể nó có thể thực hiện trên từng phần của hệ
thống Da đó, có thế tập trung vào những phần có nguy cơ phát sinh
lỗi cao trước Khi một trường hợp lả không thỏa mãn, các công thức
khác không thuộc trường hợp đó có thể được kiểm tra để xác định
nguồn gốc của lỗi
-_ Cuối cùng, lý thuyết logic dược sử dụng trong kỹ thuật này đóng vai
trò quan trọng, Nó thể hiện nhiều tính chất cần thiết cho lý luận về hệ thắng hiện thời
'Tuy nhiên kiểm chứng mô hình (model checking) cũng có những diễm
hạn chế như sau:
-_ Phương pháp nay chủ yếu thích hợp với cáo ứng đụng điều khiển hơn
la cdc ung dụng hướng dữ liệu bởi vi dữ liêu thường vượt quá các
miền vô hạn
- N6 chỉ kiểm tra các yêu cầu đã được trạng thái hỏa Nó không đấm
bảo tính toàn vẹn Tính hợp lý của các thuộc tinh không được kiểm
chứng có thể không được đấm bản
- Phương pháp nảy găp phải trở ngai lớn nhất đó là vẫn để bùng nỗ
+không gian trạng thái, số các trạng thái cần che mô hình hệ thống cá
thể vượt quá bộ nhớ của máy vì tính
-_ Nó không đấm bảo chọ ra kết quả chính xác hoàn toàn vì cũng như các công cụ khác thì bộ kiểm chứng cũng là một phần mềm và có thể
có lỗi 2.2 Thực thì tượng trưng
“Trong phần này luận văn trình bày các vấn dé của thực thi tượng trưng,
thực thi tượng trưng động củng một số giải pháp để giải quyết các vấn để của thực thi tượng trưng dông
Trang 182.2.1 Tổng quan về thực thi tượng trưng
Trong những năm pẦn đây, vấn dé thực thi tượng trưng |5| (Symbolic
execution) cho kiểm chứng phân mềm rất được quan tâm, do khả năng sinh ra các ca kiểm thử có độ phủ cao và tìm lỗi sâu trong các ứng dụng phức tạp
'Thực thi tượng trưng lả phương pháp chạy chương trình máy tinh bằng, cách sử dụng các biến tượng trưng Thay vì thực thi chương trình với đầu vào cụ
thể Chương trình được thực thi lượng trưng tương ứng một lập cde gid trị đầu
vào (mpuÐ Kiễm chứng mô hình vả kiểm thử là bai kỹ thuật phố biến thường
được sử dụng để đảm bảo tính đúng đắn của hành vi chương trình Các phương
pháp kiểm thử chỉ khẳng định dược chương trính tốt đối với các ca kiểm thử
(test case) cy thé Kiểm chứng mô hình cung cắp một giải pháp toàn diện hơn dé
xác định độ tin cậy cia chương trinh Tuy nhiên, nhược điểm của phương pháp
nay la bing nỗ không gian trạng thái Thực thi tượng trưng cung cấp một cach
để làm giâm bớt vẫn đề bùng nỗ trạng thải Bằng cách thực thi với đầu vào
tượng trưng thay vì với cạn các giá trị cụ thể của đầu vào
Trong kiểm chứng, thực thi tượng trung được sử dụng để sinh ra giá trị đầu vào kiếm thứ (/fesr impwf) cho mỗi đường thực thì (execuion paih) của chương trình Miột dường thực thi là một chuỗi các giả trị dũng (we) hoặc sai (alse) tuong úng Trong đó, một giá trị là đúng ở vị trí thứ ¿ nghĩa là tại vị trí thứ ¡ điều kiện nhận giá trị đúng và đi theo hướng đúng Iloặc ngược lai di theo hướng sai Tập hợp các dường thực thi của một chương trình tạo thành cây thực
thi
Mục đích của thực thi tượng trưng IA sinh ra tất cá các đầu vào có thé có
cho toàn bộ các đường thực thị Xét ví dụ hình 2.3 (đoạn mã nguồn chúa câu
lệnh điều diéu kiện) để thây được cách thức thực hiện của thự thì tượng trưng.
Trang 19chứa câu lệnh điều kiện hình 2.3, quá trình thực thi tượng trưng được thực hiện
qua các bước sau:
— Tao dau vảo tượng trưng cho các biển x và y bằng 2 lễnh tại dòng 14, 15
của đoạn mã hình 2.3 Sau hai câu lệnh nảy một ánh xạ vào hàm trạng thải
tượng trưng ø được bổ sung Kết quả của hàm ø là ø — x =2xe y —ya}
—_ Thực hiện câu lệnh gọi hàm ở đòng 16 Tiếp theo, thực hiện câu lệnh gản
ở dòng 6 được thực hiện Sau lệnh này kết quã cúa hàm ø trở thánh @ — fx
>x¿ y >yn z 226}
— Thue hiện câu lệnh điều kiện ở dòng 7 Lúc này xuất hiện đường điều kiện
ré nhanh (path condition), tùy thuộc vào giá trị của biểu thức điều kiện sẽ
Trang 20
quyết định chương trỉnh thực thi theo nhánh đúng hay nhánh sai Tử đó,
hình thành 2 tập hợp chứa các điều kiện rõ nhánh khác nhau kí hiệu là PŒ
và PC' Sau dòng 7 tập PC;=(Xa= 2yq) va PC2 = ¬(xo = 204)
—_ Thực hiện câu lệnh diễu kiện tại dòng 8 Thực hiện tương tự câu lệnh diều
kiện ở dòng 7 la được 3 tập điều kiện rế nhánh ĐC; — ¬(xe — 2a)
PC,~ (Bq — Byeda fo >> v¿~+ 10)) và PƠI”— (Cu — 2n) A Ga < Yo+ 101)
—_ Giả sử một lỗi được phát sinh ở câu lệnh tại dòng 9 Lỗi ở đây có thể là
chương trình bi treo hoặc v1 phạm một hàm đánh giá (assert) [rường hợp
này xuất hiện một phản ví dụ (counter example) Một phép gán được chỉ 1a dễ chương trinh thực thi theo nhánh này, Kết thúc câu lệnh ở đóng 9 cả
3 nhánh của chương trình đều đã được duyệt với 3 tập rằng buộc sau:
P€› = ¬(xa= 22}
PC.—(a — 2Wa)AfXe >ta+ 19))
PC, '=(Wa = 2w2JAlo S và L 18)
— SMI solver sé gidi lần lượt từng tập ràng buộc này để sinh ra các test case
tương ứng Giả sử kết quả được giải bởi SMT solver lần lượt là fe = 6 v—12(x—2y— 1} và (x— 36, y — 15)
'Irong kiếm chứng tự động nếu áp dụng kỹ thuật sinh đầu vào ngẫu nhiên thì khi áp dụng với chương trình có chứa vòng lắp có thể sẽ gặp phải vẫn đề thực
hiện vô hạn Nhưng trong thực thì tượng trưng van dé nay sẽ được giải quyết
Phan tiếp theo luận văn sẽ trình bảy về thực thi tượng trưng cho chương trình chứa vòng lặp
Thực thi tượng trưng cho chương trinh chứa vòng lặp: Xẻt một ví dụ khác trong hình 2.4 để hiểu rõ hơn quá trình thực hiện của kỹ thuật thực thi tượng trưng, pằm các hước sau:
" Thực thi tượng trưng với thuộc tình đầu vào năm trong điều kiện vòng lặp
Xét câu lệnh lip while (N > 6) 6 dòng 4 hình 2.4 ta thấy điều kiện kết thúc
vỏng lặp này phụ thuộc vào giả trị của biển N Ma biến Ấ lại là dầu vào
tượng trưng Cho nên, chương trỉnh có thể sẽ sinh ra một lượng vô hạn các
Trang 21đường thực thi Trong đó, mỗi đường thực thi hoặc là một tập ngẫu nhiên
các giả trị đúng và kết thúc với giá trị sai hoặc một dãy vô hạn các giá trị
đúng của biểu thức điều kiện
1 void (esLme inf Q 2.intsum 0;
3 inl N~ sym input;
Hình 2 4 Một đoạn mã nguôn chứa vòng lap
"Trong trường hợp biểu thức diễu kiện của vỏng lặp whilc nhận 7 gid tri ding
và một giá trị sai dé kết thúc vòng lặp thì tập rằng buộc cho đường thực thi
này được trình bày trong công thức sau:
Tình 2 5 Công tức biểu diễn thực th lượng trưng cho vòng lặp |5}
‘Trang céng thức này, mỗi giá trị của A, là một giá trị tượng trưng và
tập hợp các trạng thái tượng trưng khi quá trình thực thi kết thúc là {N > Nuis tong > Lican] N;} Trên thực tế, nên giới hạn quá trình tìm kiếm
(chẳng han giới hạn thời gian ché (timcoul), gidi han vé sé lượng dường thực thi, số lượng vỏng lặp hoặc độ sâu dược duyệt )
Một bất lợi chính của kiểu thực thi tượng trưng truyền thống là nó không
thể sinh ra được giá trị dầu vào tương ửng hoặc các ca kiểm thứ trong trường,
hợp tập rang buộc trên đường thực thi chứa biểu thức mả biểu thức này không,
Trang 22thể giải được bởi SMT solver Xét ví dụ trong hình 2.3 nhưng thay thể mã của
hảm twiơe( im v) xem hình 2.6
1 int twice (int v) {
2 return (v<v) % 50;
4, void testme (iat x, int y) { x = sym inputQ;
6 2= twice (y); + y= sym inpulg;
if >y+10) + return 0;
ERHOIE;/Giả sử một lệnh sinh lỗi ỡ đây ¥
Tình 2.6 Đoạn mã nguôn C chúa biêu thức không tuyễn tính
Gia sit, SMT solver không thể xử lý được các phép toán số học không,
tuyến tinh (nonlinear) dẫn đến việc giá trị đầu vào được sinh ra có thể sai hoặc
không thể sinh ra giá trị đầu vào này Trong trường hợp như vậy nên sử đụng
các kỹ thuật thực thi tượng trưng động dược trình bày trong phần tiến theo của
luân vẫn
2.2.2 Kỹ thuật thực thi tượng trưng déng
Ý tưởng chính của các kỹ thuật thực thi tượng trưng động [5| (dynamic symbolic execution) ld sư xen kẽ giữa việc thực thi với các giá trị tượng trưng và thực thi với các giả trị cụ thê Hai kỹ thuật thé hiện khá hiệu quả ý tưởng trên là
Coneolie Testing và Execulion - đeneraled Testing (BQT)
© Cancolic Testing [5] là kỹ thuật kiểm tra theo hướng tự động ngẫu nhiên
Thực hiện việc động hóa thực thì tượng ưưng Trong chương trình thực thì
trên một vài giá trị đầu vào cy thé Concolic Testing sẽ duy trì đồng thời một trạng thái eụ thể và một trạng thải tượng trưng trong đỏ
"Tập trạng thái cụ thể sẽ ánh xa tẤt cả các biển có giả trị cụ thể
Trang 23= Tp trạng thái tượng trưng sẽ ánh xạ tất cả các biển không có giá trị cụ thể
Khác với thưc thi tượng trưng theo kiểu truyền thống vi Concolic Testing duy trỉ tập trạng thái đầu vào cụ thể của chương trình trong quả trình
thực thị Điều này là cân thiết cho việc khởi tạo giá lrị cụ thể cho các biến
đầu vào tượng trưng của nó Concolic Testing bit đầu thực thi với một số
đầu váo nhất định cho trước hoặc ngẫu nhiên Tập các ràng buộc được tạo
bởi dầu vào tượng trưng của câu lễnh diều kiện cũng dược thực hiện Sau đó,
nó sử đụng một SMTT solver để giải ra các giá trị đầu vào tượng trưng trước
đó để quy định việc thực hiện tiếp theo của chương trinh hướng tới một dường thực thi thay thể Quá trình này được lấp di lặp lại một cách có hệ thống hoặc dựa trên kinh nghiệm cho đến khi tất cả các đường thực thi đã
được duyệt qua Xét ví dụ hình 2.6 để thấy được các bước thực hiện cụ thể
của kỹ thuật Concolic Iesting
Kỹ thuật Concolio Testing áp dụng cho đoạn mã hình 2.6 thực hiện lần
lượt các hước sau
= Gia sit Concolic Testng sẽ sinh ngẫu nhiên giá trị đầu vào
íx — 22 và y — 7} và thực thi chương trình theo eã hai hướng cụ thể
hỏa và tượng trưng hóa
Trang 24" Khi thực thi với giá trị đầu vào trên nhánh thực thì được đuyệt là
nhánh sai của biểu thức điều kiện (z —— x) ở dòng 7 Tập ràng buộc (ki hiệu là PC) với giá trị khởi tạo ban đầu là ø) sẽ bễ sung thêm rang
huộc (xạ — 2a) và trỡ thành PƠ; — ¬ (*o — 2ya) cho nhủ hợp với giá
trị đầu vào v = 22 vả y = 74 Trong đó xe, „2 là đầu vào tượng trưng,
của biến x, y
"_ Tiến hành phủ dịnh điều kiện ¬ (%; — 2ya) và tiến hành giải rằng huộc
(% = 2yo) dé sinh giá trị đầu tương ứng ƒx = 2 và y = 1) Giá trị đầu
vào mới này sẽ làm cho chương trình thực thì theo nhánh đúng của
biểu thức điều kiên ở dòng 7 và nhánh sai trong biểu thức điều kiện ở
đồng 8 Một tập rảng buộc mới được hinh thành nhánh này
ĐÓ; — (So — 294) A fSø +10)
" Tiền hành phủ định điều kiện (+ <ya 126) ta được tập rằng buộc trên
đường thực thi này PƠa' = @&¿ = 22) 4 (Xe > ya 110) Tiếp thực thi
đến dòng 9 thì gặp câu lệnh phái sinh lỗi tiến hành đánh dấu đường,
thực thi này và quá trình thực thi kết thúc Sau đó, giải biểu thức trong
PCy’ ta được đầu vào tuong (mg fx — 30 y— 15}
" Công việc này sẽ lặp di lặp lại cho dến khi tất cả các nhánh của biểu
thức điêu kiện đều được duyệt qua hoặc khi gấp một lỗi
xecution Generated 1esting [5] (EGL) là kỹ thuật thực hiện với giá trị đầu vào cụ thể và giá trị đầu vào tượng trung theo hai cách khác nhau của cùng một chương trình BGT sẽ thực hiện hòa trộn giữa thực thi với giá trị gụ thể
và thực thi với giá trị tượng trung Bằng cách tự động kiểm tra trước mỗi
thao tac néu moi giá trị tham gia đều là cụ thể thì thao tác đó sẽ được thực
hiện bình thường giống chương trình ban dầu Ngược lại, nếu có ít nhất một
giả trị là tượng trưng, thì thao tác sẽ được thực hiện tượng trưng hóa bằng
cách cập nhật các điều kiện chơ đường thực thi hiện tại Quả trình này cử
tiếp tục cho đến khi tất cả các đường thực thi của chương trình đã được
Trang 25đuyệt Chỉ tiết vẻ cách thức thực hiện của kỹ thuật này được trình bay trong
ví dụ hình 2.6
Vi dụ trong hình 2.6 là đoạn giả mã trong hình 2.3 nhưng dòng 15 được thay bởi lệnh = 1Ø nên đỏng 6 gọi hàm /mice(1) Kết quả của hàm twice (19 là =8
Tiếp tục thực thi đến dòng 7 câu lệnh điêu kiện tré thanh if (20 =x)
Quá trình thực thi tượng trưng sẽ duyệt theo cả hai nhánh của biểu thức
điều kiện: Nhánh sai thi rang bude x # Ø được thêm vào tập rằng buộc (kí hiệu PCI khởi tạo với giá trị Ø) PC; = ¬ = 0) cho đường thực thi tương ứng và nhánh đúng ràng buậc x — Ø được thêm vào tập rằng buộc ĐC; = ( = 0} cho đường thực thị nảy,
Tiếp tục thực hiện với lệnh ở dòng 8 biểu thức điều kiện trong trường
hợp này trở thành ÿƒ @ > 10)
Quá trình thực thi tượng trưng sẽ duyệt theo cả hai nhánh của biểu thức
diều kiện: Nhánh sai với rằng buộc x < 7Ø dược thêm vào tập rằng
buée PC, = @«& =O) ^ @ < 10) và nhánh đúng ràng buộc x >> 1Ø được
thêm vao lap rang bude PC2’— fx — 0) ø @ > 10)
Tiếp tục thực thi dến dòng 9 pặp một lệnh phát sinh lỗi trạng thải hiện tại sẽ được đánh đấu lại Quá trình thực hiện kết thúc với câu lệnh
retum ở dòng 17 Trong đó, tất cả các đường thực thị đã được duyệt
thích hợp giữa thực thi cụ thể với thực thi Lượng trưng
Một trong những lợi thể chính trong việc hòa trộn giữa thực thi tương trưng với thực thi cụ thể là làm giảm thời gian chờ trong khi giải các ràng buộc
của các SMT solvcr.
Trang 26Hầu hết các ứng dụng trên thực tế đều tương tác với môi trường bên ngoài
bằng cách gọi các thư viện mả thực lủ tượng lrưng không thể thực hiện được
hoặc sử dụng lời gọi hé thống như tạo tệp, xóa tệp hay cập nhật trong hệ điều hành Nếu tất cả các tham số được truyền cho những lời gọi hàm như vậy đều là
cụ thể, thì lời gọi được thực hiện một cách dơn giản như thực thi một chương trình thông thường Tuy nhiên, nêu tổn tại một vải tham số là tượng trưng thì kỹ thuật thực thi tượng trưng động có thể sử đụng các tham số cụ thể trước Chẳng
hạn tron EGT những tham số cu thé nay dược dùng để hỗ trợ trong việc giải
các ràng buộc trên đường thực thị hiện tại
Kỹ thuật thực thi tượng trưng nói chưng hay thực thi tượng trưng động nói
riêng đã đóng póp đáng kế trong lĩnh vực kiểm chứng, kiểm thử tự động, Nhưng
kỹ thuật nảy cũng gặp phải một sé van để khi thực hiện Những vấn dé này và giải pháp giải quyết được trình bày trong phan tiép theo
2.2.3 Thực thi tượng trưng động và giải pháp
a) Vấn dễ bùng nỗ dường Lhực thi
IDễ 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 thí 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 dược sử dụng dễ giải quyết vẫn dé nay là
" Sử dụng kỹ thuật đự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 nay
= Sir dung ky thuật phân tích chương trình đễ làm giảm đô phức tap của những đường đang duyệt
Chỉ 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 bay van dé này
Trang 27b) 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 thú 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 thí hiện tại của chương trinh (kí hiệu lá PƠ) như sau: PCO — (x — y > 10) 4Œ > 0) A (y < 12) Chương trình tiếp tục
đuyệt đến câu lệnh điều kién cé rang buds (x —y < 2) Trong trường
hợp này tập mới dược ra (kí hiệu là PCŒ') có kết quả như sau PCA (x i p> ID AG < 12) 4 fe—y <2) Trong dd, ring buộc
z > 0 đã bị loại bố vì không liên quan đến ràng x—y < 2
* Gidi 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 dõi khi giống nhau vỉ thế co
cùng một cách giải quyết Diễ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) A (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 lập này la có thể
dụng lại kết quá Ví đụ {x — 6, y — 3} cũng
thỏa min: (x+y < 10) A(x > 5A Cy 20)
€) 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
lai truy cập đồng thời Đây là van đề làm cho việc kiểm thử trở nôn khó
khăn hơn Miặc dù vậy, thực thi tượng trưng dộng dã được sử đụng, một cách hiệu quả để kiểm tra chương trình đồng thời, bao gồm: Các ứng dung với dầu vào phức tạp dữ liệu |19, 22, hệ thống phan Lan [13],
các chương trình GPGPU |9| (General-Purpose Compufation on GPU)
Trang 28Sau 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 SMY 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
Trang 29Chuong 3 SATISFIABILITY MODULO THEORIES (SMT)
Satisfiability Modulo ‘Theories (SM‘T) biét đến như là sự mở rộng của
SÁT đố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 Lự déng SMT la thank phần dược sử dụng nhiều và mang lại hiệu
quả to lớn SMT đự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ì Logie mệnh dé cia SAT solving Trong chương nảy luận văn sẽ trình bày cụ thể hơn về 8AT cũng như về SMT Cụ thể hơn, luận văn sẽ đi sâu trinh bày về bải toán SAT, thuật toán để giải bài toán SÁT từ
đó, mỡ rộng trình bảy cho bài toán SMT và thuật toán dễ giải bài toán SMT dựa
trên tư tưởng ofa SAT
3.1 SAT sulver
Bai ton Satisfiability (SAT) [6] là một trong những vấn để quan trọng
của ngành l<hoa học máy lính Bài toán SAT cé thể hiểu đơn giản là trả lời cho
câu hỏi có tôn tại hay không một phép gán giá trị đứng (true) hoặc sai (false) cho tất cả các biến của công thức mệnh đề cho trước sao cho công thức cho nhận gia
trị đúng Kết quả của BA'I' solver thuộc một trong hai trường hợp sau
1 Mễu tim được một phép gán thỏa mãn công thức mệnh để thì trả về kết
quả là SAT
2 Nếu không tần tại một phép gắn nào thỏa mãn thỉ ta nói rằng bải toán là
không thỏa mãn trả về UNSAT,
SAT duoc img dung để giải quyết nhiều vẫn đề của cũng nghệ thông tin
như: Kiểm chứng phần mềm vả phần cứng, lập kế hoạch vả thuyết tự động Hởi
vậy việc giải bài toán SAT là cần thiết
3.1.1 Bai toin SAT
Trong phần này, luận văn trình bảy vỀ công thức Logie mệnh để và các thành phần liên quan trong bài toán SAT.
Trang 30* Công thức logic mệnh dé (prepositional formula) |6| là công thức
được định nghĩa trên tập các biến mệnh để xị, x„ cùng với các phép toán trên nó như phép phú dịnh (—), phép hội (^), phép tuyển (v)
‘Trong đó miễn giá trị của các biển mệnh dễ là {true, false}
* Literal la mét bién ménh dễ hoặc phủ định của nó
* Ménh dé (Clause) là một công thức chỉ chứa phép tuyển của các
literal
«Công thức chuẩn lắc hội (Conjunobive Normal Form) kí hiệu CNE là
công thức có dạng hêi của các tuyển trên các literal + Phép gản (assignment) [26]: Cho công thức logic mệnh đề ạ, một phép gán của ọ trên miên dữ liệu D là một ánh xạ tương ứng của các
biến mệnh đề tới một phần tử của D Một phép gắn gọi là toàn bộ nếu
tất cả các biến mệnh để đều được gán giá trị Ngược lại, thủ goi là phép gán bộ phận
* SAT (Satisfiability) va UNSAT [6]: Bat toan SAT 1a bài toán quyết
định xem cá lồn Lai phép gan giá trị chân tri cho cdc bién ménh dé cua
công thức cho trước mà tại đó công thức nhận giá trị đừng Nếu tồn tại
một phép gán như vậy thì khẳng định bài toán là SAT Trong trường hợp ngược lại la ndi bai toan a UNSAT
Xét ví dụ sau với công thức
tEF~ (Xi V¿ V Xa) Á 0y V —XI) Á (OX) V 782) Trong đó: Xị, X;, —Xa, Xạ, Xa, ~X2 14 cde literal, (x, Vx ¥ 7x4), (% V 7x1)
va (Ox, V ¬%;) là các mệnh đề Các phép toán trên 3 mệnh đề đều là phép hội
nên E là 1 CNE, tồn tại phcp gán xị — truc (đúng), xạ — fxlse (sai), xạ — truc
(đúng) để F = true (đúng) nên F là SÁT
3.1.2 Thuật toán DPLL cho SAT
SÁT là bài toán quan trọng được ứng dung trong nhiễu lĩnh vực của công
nghệ thông tứrn nỏi chưng và công nghệ phần mềm nói riêng Dưới đây trình bảy
Trang 31thu tuc DPLL (Davis Putnam Logemann Loveland nim 1962) mé ta cdc bude
giải bai loan SAT
'thủ tục DPLL [26] được sử dụng để tim một phép gán thỏa mãn cho công thức F có dạng CNE Phép gán được xác định dân tùng bước một Phép gán
thành phần ở bước Liếp theo dược xác dịnh dựa trên phép gán thành phần ở hước
hiện tại Nếu việc tìm kiếm that bai hoặc gặp phải trường hợp xung đột thì áp dụng luật backtrack (quay lui) ngay tại vị trí tìm kiếm thất bại
Thuật toán T3PLI là thuật toán khá phổ biến và được sử dụng trong hầu
hết các máy giải SAT Mục đích chính của nẻ là tìm ra một phép gán MI thỏa mãn công thức Tr tồn tại ở đạng CNT Trong đó:
= M6t literal 1a duge định nghĩa trong M nếu / nhận giá trị đúng hoặc sai trong
ÂM Ngược lại, ï không dược dịnh nghĩa trong M
®_ Một mệnh đề là đúng trong Mi nếu tồn tại một literal thuộc mệnh đề nhận giả
trị đẳng trong Mi
« Một công thức E là đứng trong M hoặc 8A'T trong MI nếu tất cã các mệnh dễ
trong của F đều nhân giá trị đúng trong MI khi đó ta nói MI là mô hình của F
ký kiệu là M E F
Về cơ bản, DPLL chỉnh là thuật toán tìm kiém theo chiều sâu Với những, cải tiễn nhất dịnh dễ khắc phục vấn dễ về không gian trạng thái
Thủ tục DPLL thực hiện với đầu vào là một biểu thức F có định đạng
ƠNE và thực hiện tính toán một chuỗi hữu hạn các trạng thái là các phép gan
thỏa mãn cho các mệnh dé con cla F nhu @ || F = - => S Trạng thái khởi tạo
la trang thai rng ki higu ($) và kết thúc khi gặp trạng 8 Trạng thải nảy nhận giá tri false nêu F là không thỏa mãn (UNSATT) hoặc trả về một phép gán M thỏa min F’ Qf if F’), trong d6 M 14 mé hinh cla F (M & F) khi F théa man Trong
truéng hop nay F’ JA trang thai cuối củng và là biểu thức dạng CNE dã dược biến dỗi từ bằng cách thêm vào một số các mệnh dễ trong suốt quá trinh thực
hiện thú tục DPLL Né khác với công thức F ở đầu vào
Thủ tục DPLLI đễ giải bài toán SAT dược trinh bày trong hình 3.1
Trang 32Algorithm : DPLL-SAT
Inpuf: Một công thức lô gic mệnh dé B
Output: “Satisfiable” néu công thức là thỏa mãn và “Unsatisfiable” trong trường hợp ngược lại
Hinh 3.].a Hinh vé mé ta thit tec DPLI
Cơ chế hoạt déng cla DPLL duge thể hiện trong hình 3.1
(luật quay lui) đl>0
BCP Conflict Analyze Conflict
(Luật unit Propagete) [ (xung độp) (bộ phần tích xung đột) TNSAT
Hình 3.1.b Sơ dỗ cơ chế hoạt dộng của thủ tục JAPLL, cho SAT [6]
Trang 33Trong đó, đï là biển kiếm tra để quyết định có quay lai không
Thủ Lục DPLTL áp dụng luật unit propagate để suy luận phép gán liếp theo
từ phép gán MI hiện tại và công thức CNF hiện tại È Luật declde được áp dụng
+khi không thể xác định được giá trị của một literal trong công thức F thông qua
luật uniL propagatc Luật Eail và luật backtraok dược áp dụng khi xây ra trường
hợp không thỏa mãn khi một hoặc nhiều mệnh để của công thức CNF F nhận giá
trị sai trong phép gán hiện tại M Nếu công thức dạng CNE T là NSAT luật fail
được áp dụng khi toán bộ các litcral trong công thức F đều được xác định
gua lai thi ta 4p dung ludt backtrack
Dưới đây là các luật cơ bản của DPLL [25]
* Luat Unit Propagate:
ME, C= FailState Nếu |
M không còn chứa literal quyết định nào
« Luat Backtrack:
_ (MIEN &
MIÊN || EC=— M-I||F,C Nếu
N không chứa literal quyết định
* Vida img dung DPLL
Cho công thức F — (1 v 2)^ (3v 4) ^( Sv 6) A (6v 'Šv 2) Áp dụng
thuật toán DPLL để từm một mô hinh M thóa mãn biểu thức E
$||( 1v 2).( 3v 4) 05v 63(6v Sv 2) — (uật dovide )
Trang 341" C1 v 3, C3 49,0 -5¥76),(Gv—5v72) => (Lait unit propagate)
Ngoài 4 luật cơ bản kể trên, thuật toán DPLL với việc học mệnh đề
(elause learning) còn bổ sung thêm hai luật mới luật learn và ludt forget
Trong hai luật này mệnh đề C được gọi là luật learn và luật forget tương
ứng Trong luật Backtrack ménh d8 C +⁄Ƒ là ménh dé xung dét (conflict) Thì
mệnh đề xung đột được học bằng luật learn đề tránh xảy ra trường hợp xung đột tương tự Luật forgoL được áp dụng để giải phóng bộ nhớ bằng cách loại bỏ
mệnh để €' trong trường hợp nhiễu lần ménh dé C lả nguyên nhân xẩy ra xung
đột
Vi du 2: Vi dụ này áp dụng luat backtrack và luật learn để Lừm một mô
vy oh)
hình đầu vào của công thức đạng F =(¬l¡ v l;) A (Gb v ah va) AG
$lÏ( hvÒAC Gv 2v) ÁC lv độ = Guat decide}
hy || Gh vb) 4 Gb v ab v L) ^ (¬ v —¬l¿) = (luat unit propagate)
Lb] Gh vb) A Gb v sh vA Gb v ala) = (luật decidc)
Trang 35L* hl] Gh vb} 4 Gb v —h v L) A (Gh v sl) = Cudt unit propagate)
Wb bh C hv LYAC SY Vb) AC dy la) => (luat backtrack)
bể b||[CSh v 5) A (sh v ah v Wa (ob v Sl) = (uit leam)
LC sh VL)AC de ¥ se VDAC dy vc) => (ludt unit propagate)
hth al] (Ch vb) A Cl v ¬b v lộ A (¬b v —k) Đây là trạng thái cuối cùng,
Một phép gắn thồa mãn đã được chỉ ra MI(h — đúng, lạ — đúng, là — sai)
một đặc tả toán học Phương pháp truyền thống để tìm lỗi của phần cứng hay
phan mém dé là kiểm thử và phương pháp mỗ phỏng Tuy nhiễn, với sự phức tạp ngây cảng tăng của hệ thống thỉ việc sử dụng các kỹ thuật phức tạp hơn dễ
dim bảo tính chính xác của hệ thống là cần thiết SMT solver la một trong những kỹ thuật hiệu quả dang dược áp dụng hiện nay
SMT là vấn đề quyết định tính thỏa mãn của công thức được biểu diễn trên nền tăng lý thuyết Logic wi tx c4p I (First order logic) Vé nguyên tắc, có
thể coi SMT là phần mở rộng của SAT trong ly thuyét Logic vi tt cdp L Dé duy
trì quá trinh quyết định lý thuyết bậc nhất thường được giới hạn không chứa các phép toán lượng tử tồn tại C1) và voi moi Cv) Cling tong ty SAT, việc chỉ ra một phép gản MI thỏa mãn công thực đầu vào F trên nền tảng Logic vị từ cấp I
được gọi là SMT solver
3.3.1 Bài toán của SMIT
Bài toán của SMT (Satisability Modulo Thcorics) |25| lá vẫn dể quyết
định tính thỏa mãn của một công thức trên một nền tầng lý thuyết (Lheory) nào
đó Trong khi SAT chỉ tập trung vào tính thỏa măn của công thức mệnh để Thì
Trang 36SMT lai nhim phat hign tinh thỏa mãn của một công thức ở dạng phức tạp và có
ý nghĩa hơn
Việc giải bài toán SMIT gôm hai phần
1 Giải công thức dạng trùu tượng của 5MT với SAT solver
2 Quyết dịnh thủ Lục cho nền tăng lý thuyết T-ký hiệu là DDr bằng cách
kiểm tra tính nhất quán (consistency) của các afoms được giải bởi SÁT solver hoặc suy luận kết quả từ các atoms này
Vi dụ: Cho công thức #' = > 2) + @ > 5) A ` + y < 8) trên nền tảng lý
thuyết số học phi tuyến (non-linear arithmetic) 7 Ta thực hiện các bước sau để giải
Bước 1: Chúng ta xác định các atom của È là: x3 2, y > 5$ x” + y < ở Ta tiến
hành trừu tượng hóa các atoms nay bằng các biến mạnh đề tương ứng Ai,
Az, Ag ta duge # =4; +24; 121
Bước 2: Giả sử sai khi giải véi SAT solver ta được phép gán Mí thỏa mãn biểu
thức E như sau: 44; — true, A; — irue, Az — true
Bước 3: Ap dung thủ tục ID để kiểm tra tính nhất quán (consistency) ta thc
(x >2) =true hiện: 4 (y > 5) = true
(x? + y <8) = true
‘Trong trréng hop ndy DP, chi ra ring khéng nhat quan trên lý thuyết T
di cho ki hiéu T- inconsistency Trong trường hợp nếu DPy chỉ ra là nhất quản taki higu T - consistency
Cách tiếp cân của SMT có thể phân thành hai nhém: Kager va Lazy
Trong cách tiếp cận Zager, biểu thức đầu vào được chuyển thành công thức
logic ménh dé dang ME mà không làm thay déi tính thỏa mãn của nó Chẳng,
hạn như cách thức trừu tượng hóa ở ví dụ trên
Đối với cách tiếp cận /zsy chúng La sử dụng mội solver cụ thể với từng lý
thuyết 7 riêng cho việc quyết định tính thỏa mãn của các biểu thức dang CNE
tương ứng trên lý thuyết này Sau đó, thủ tục quyết định cho SMT có thể dễ
Trang 37đảng thực hiện bằng cách chuyển biểu thức sang định dạng DNF (disjunctive
normal form) va sit dung 7- sohver để kiểm tra xem hội của DNE có thóa mãn
hay không,
3.3.2 Thuật toán DPLL cho SMT
Trong phần này chúng t6i trinh bay vé DPLL [17] cho SMT Nó là một
biến thé của thủ tục DPLL cho SAT trên một nền tầng lý thuyết 7 nào đó Sự
khác biệt chính ở dây đó là chúng ta thực hiện với các literal trên nền tắng I.ogic
xị tử bic mét (first - order logic) thay vi các literal trên nên tảng Logic mệnh đề Trong đỏ uác luật Decide, Fail, Unil Propagation, Restart 1a khémg thay đổi Các
literal vẫn giữ nguyên về ngữ nghĩa so với logic mệnh dề Chỉ có các luật
Learn, luật Forget, luat Backtrack (Backjump) la ¢6 thay đổi để phủ hợp khi làm
việc với SMÍT
Sau đây là một số các luật cơ bản được áp đụng trong SMIT solver các luật
nảy đều được áp dụng trên một lý thuyết 7 nào đó
Ï chưa được định nghĩa trong M
ĩ hoặc ] e F hoặc trong M1 N
Trang 38Thủ tục DPLL được áp dụng trong nhiéu SMT solver hiện nay và mang
đến hiệu quả lo lớn trong kỹ thuật giải rằng buộc Phần tiếp thoo luận văn sẽ
trình bảy một số SMTT solver được đánh giá là hiệu quả trong kỹ thuật giải ràng
buệc đựa trên thi tue DPLL
3.2.3 SMT solver BoolecLor, Z3, và STP
Đối với mội công cụ kiểm chứng ly déng cdc SMT solver déng vai tro quyết dịnh hiệu suất thực hiện của công cụ đó Trong phần tiếp theo hiận văn
trinh bay mét vai SMT solver được đánh giá là mang lại hiệu quả †o lớn trong
lĩnh vực kiểm chứng phần mềm Cụ thể, phần tiếp thco trình bảy ba SMT solver Boalecter, ⁄3, STP là những SMTT solver dược dánh giá cao về tốc độ xử lý trên
nền tảng lý thuyết bítvector và máng mở rộng
a BuolecLer
Boolector [2l] là bô giải SMT miễn phí rất hiệu quả trên nền táng lý
thuyết không chứa phép lượng tử hóa tần tại (7), mọi (V) của Hit-Vector kết
hợp với lý thuyết mở rộng của mảng Bit - Vector có thể được sử dụng để thể
hiện thiết kế và đặc tả trực tiếp ở mức độ từ (word - level) Trong khi mảng có
thể sử dụng để mô hình bệ nhớ Ví dụ hộ nhở chỉnh của phần mềm, hộ nhở phụ
(cache) hoặc các thành phần FIFO (Fizst In First OuQ của các hệ thống phần
cứng Sự kết hợp giữa Bit - Vector và mảng làm cho lý luận về phần mềm, phần
cứng ở mức dộ thích hợp hơn so với logic mệnh dé Boolector cung cấp mô hình
cu thé cho Bit-Vector và mang Boolector dugc danh gid 14 SMT solver có hiệu suất thực hiện nhanh hơn so với Z3 khi tham gia cuộc thi giữa các SMTT vào năm
2008 và 2009
Kiến trúc của loolector được thể hiện trong hình 3.2 Trong dé Boolector
phụ thuộc vào việc viết lại và BịL - Blasting cho BíL - Vector và lý thuyết mắng
mở rộng Dữ liệu đầu vào của Boolector là các công thức thuộc định dạng SAZ7
— LIB hoặc định dang BTOR.
Trang 39— BTOR Li dinh dang Bil - Vector ở mức thấp với ngữ nghĩa rỡ rằng,
dễ phân tích BTOR cũng hỗ tre mang Bit - Vector và kiếm chứng
mô hình (modei checking) cho các thuộc tính của chương trình
Ngoài ra, BoolccLor cũng cưng cấp một hệ thống API C phong phú
cho phép sử dụng Boolector như là một thư viện Boolector được thực thi trong ngôn ngữ C
Hình 3.2 Sơ dỗ tổng quan của Boolector [21]
- Parser (Bộ phân tích cú pháp): Thanh phan nay sẽ tiến hành dọc
các giá trị (Input) và xây dựng cú pháp tra trong dạng mệt dé thi
có hướng (DAG) Trong quá trình phân tích, những luật viết lại cơ
bản được áp dụng để giản hóa đỗ thị có hưởng nay Boolector có
thể phần tích hai định dạng #MT-LIB và BTOR
- Rewriter (Bộ viết lại): Bộ ông cụ cung cấp các luật viết lại để đơn
giần hóa các đầu vào Nó được chia làm ba cấp đô: Cấp đô 1 là viết
Trang 40
lại các luật sơ bản, chẳng han ((2 a a) ©> L ) duoc áp dung trong
quá trình xây dung công thức Cấp dé 2 1a Ap dung luật thay thể các
luật phức tạp bằng các thuật ngữ đơn giản bằng kỹ thuật phân tích
tĩnh Tuy nhiên, trước khi được thay thế các luật này sẽ được lưu
trữ lại Cấp dé thực 3 thực hiện chuẩn hỏa các biểu thức số học
'trong trường hợp xấu nhất có thể giới han độ sâu đề quy
Array Cunsistency Checker (Bộ kiểm chứng Lính nhất quản của
mắng): Bộ kiểm chứng là thành phần chính trong cho cách tiếp cân cho lý thuyết mở rộng không chứa các phép lượng tử hóa của mảng
Nó tiến hành kiểm chứng xem phép gán hiện tại được tạo ra bởi
SATT solver xem liệu có nhất quản với lý thuyết
‘Under-approximation: Doolector hỗ trợ kỹ thuật xấp xỉ mức cơ sở của các biên bit-vector và thao tác dọc (rcad) trong máng bit-veotor
Thành phan này có trách nhiệm thực hiện xp XỈ cơ sở trục tiếp từ
công thức CNT Doolector cũng hỗ trợ kỹ thuật xấp xỉ cơ sở và
chiến lược làm mịn Kỹ thuật xấp xỉ cơ sở có thể được làm mịn ở cả
các bước dễ làm tăng khả năng quyết định cho lý thuyết mở rộng
của mắng và xấp xỉ mức cơ sở
Model Generator (Độ sinh mê hình): Là thành phần cung cấp các
mô hình cu thé trong trường hợp thỏa mãn (SA'I) Nhin chung, một công thức thỏa mãn tương ứng với một lỗi được tim thay Tinh
nắng cung cấp một phản ví đụ cụ thể được trực tiếp sử dụng để gỡ
lỗi Dây là một trong nhưng tính năng chính của kiểm chứng mô
hình Boolector có thể trã về bit-vector cụ thé va các mô hình mảng