Kiểm chứng chương trình dựa trên SMT

82 587 1
Kiểm chứng chương trình dựa trên SMT

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ LÊ THỊ HẰNG KIỂM CHỨNG CHƢƠNG TRÌNH DỰA TRÊN SMT LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội - Năm 2014 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ LÊ THỊ HẰNG KIỂM CHỨNG CHƢƠNG TRÌNH DỰA TRÊN SMT Ngành: Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm Mã số: 60480103 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƢỜI HƢỚNG DẪN KHOA HỌC: TS. TÔ VĂN KHÁNH Hà Nội - Năm 2014 i LỜI CAM ĐOAN Tô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 SMT là sản phẩm nghiên cứu của riêng tôi dướ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à đượ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 dẫ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. Hà Nội, tháng 11 năm 2014 Học viên Lê Thị Hằng. ii LỜI CẢM ƠN Trước hết, tôi xin được bày tỏ lòng biết ơn chân thành và sâu sắc đến thầy 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 gửi lời cám ơn đến tập thể các thầy cô giáo trong Khoa CNTT – Trường ĐH Công Nghệ - ĐH 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 tinh 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ô và các bạn. Hà Nội, tháng 11 năm 2014 Học viên Lê Thị Hằng iii MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN ii MỤC LỤC iii BẢNG CÁC THUẬT NGỮ VIẾT TẮT v DANH MỤC HÌNH VẼ vi Chƣơng 1. GIỚI THIỆU 1 1.1. Đảm bảo chất lƣợng phần mềm 1 1.2. Mục tiêu của luận văn 2 1.3. Nội dung luận văn 2 Chƣơng 2. KIỂM CHỨNG CHƢƠNG TRÌNH VÀ THỰC THI TƢỢNG TRƢNG 3 2.1. Kiểm chứng chƣơng trình 3 2.1.1. Tổng quan về kiểm chứng chương trình 3 2.1.2. Kiểm chứng mô hình 4 2.2. Thực thi tƣợng trƣng 8 2.2.1. Tổng quan về thực thi tượng trưng 9 2.2.2. Kỹ thuật thực thi tượng trưng động 13 2.2.3 Thực thi tƣợng trƣng động và giải pháp 17 Chƣơng 3. SATISFIABILITY MODULO THEORIES (SMT) 20 3.1 SAT solver 20 3.1.1 Bài toán SAT 20 3.1.2 Thuật toán DPLL cho SAT 21 3.2 SMT solver 26 3.3.1 Bài toán của SMT 26 3.3.2 Thuật toán DPLL cho SMT 28 3.2.3 SMT solver Boolector, Z3, và STP 29 Chƣơng 4. KIỂM CHỨNG DỰA TRÊN KLEE 39 4.1. Giới thiệu về khung làm việc của KLEE 39 4.1.1. Đầu vào của KLEE 41 iv 4.4.2. Tối ưu hóa tập các ràng buộc với KLEE 42 4.1.3. Giải ràng buộc tự động với metaSMT 45 4.2. Độ bao phủ mã nguồn của ca kiểm thử đƣợc sinh bởi KLEE 49 4.3. Thực thi tƣơng trƣng động với KLEE 55 4.4. Thực thi tƣợng trƣng động và giải pháp của KLEE 56 4.5. Một số bài toán kiểm chứng và kiểm thử tự động dựa trên KLEE 57 4.3.1. Kiểm tra lỗi chia cho 0 trong chương trình 57 4.3.2. Phát 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 hàm abort 62 4.3.4. Sinh dữ liệu kiểm thử tự động 63 KẾT LUẬN 69 v BẢNG CÁC THUẬT NGỮ VIẾT TẮT STT Thuật ngữ viết tắt Thuật ngữ đầy đủ 1. DPLL Davis Putnam Logemann Loveland 2. EGT Execution Generated Testing 3. SAT Satisfiability 4. SMT Satisfiability Modulo Theories 5. AOT A head Of Time 6. JIT Just In Time 7. API Application Programing Interface 8. CNF Conjunctive Normal Form 9. FIFO First In First Out 10. DAG Directed Acyclic Graph 11. CI Constraint Independence 12. CEC Counter Example Cache 13. BC Branch Cache 14 PC Path Condition 15 GCC GNU Compiler Collection 16 SE Symbolic Execution 17 GPU Graphics Processing Unit vi DANH MỤC HÌNH VẼ Hình 2.1. Sơ đồ của hệ thống kiểm chứng [3] 4 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] 6 Hình 2.3. Một đoạn mã nguồn C++ và thực thi tượng trưng tương ứng 10 Hình 2.4. Một đoạn mã nguồn chứa vòng lặp 12 Hình 2.5 Công thức biểu diễn thực thi tượng trưng cho vòng lặp [5] 12 Hình 2.6 Đoạn mã nguồn C chứa biểu thức không tuyến tính 13 Hình 2.6 Đoạn mã nguồn C kết hợp đầu vào cụ thể và tượng trưng 14 Hình 3.1.a Hình vẽ mô tả thủ tục DPLL 23 Hình 3.1.b. Sơ đồ cơ chế hoạt động của thủ tục DPLL cho SAT [6] 23 Hình 3.2. Sơ đồ tổng quan của Boolector [21] 30 Hình 3.3 Sơ đồ tổng quan của Z3 [15] 33 Hình 3.4 Sơ đồ kiến trúc của STP solver [26] 36 Hình 4.1 Kiến trúc tổng quan của KLEE 40 Hình 4.2 Kiến trúc của metaSMT [10] 46 Hình 4.3. Biểu thức đầu vào dạng đồ thị [8] 48 Hình 4.4. Mô hình quá trình giải ràng buộc của metaSMT [10] 49 Hình 4.6 là đồ thị luồng điều khiển của chương trình trên. 50 Hình 4.5. Ví dụ về mã nguồn hàm ReturnAverage 50 Hình 4.6 Đồ thị luồng điều khiển của hàm ReturnAverager [14] 51 Hình 4.7. Minh họa việc loại đường thực thi dư thừa 53 Hình 4.3.1.a. Hàm phát sinh lỗi chia cho 0 57 Hình 4.3.1.b. Gọi tượng trưng trong KLEE cho hàm có lỗi chia cho 0 58 Hình 4.3.1.c. Cây thực thi tượng trưng chương trình phát hiện lỗi chia cho 0 58 Hình 4.3.1.d Mô hình quá trình giải các ràng buộc của các solver 59 Hình 4.3.2.a Hà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 thi tượng trưng của chương trình phát hiện lỗi truy cập ngoài kích thước của mảng. 60 Hình 4.3.2.c. Cây thực thi tượng trưng của chương trình phát hiện lỗi truy cập ngoài kích thước của mảng. 61 Hình 4.3.2.d. Cây thực thi tượng trưng của chương trình phát hiện lỗi truy cập ngoài kích thước của mảng 62 Hình 4.3.3.a Đoạn mã nguồn có gọi hàm abort() 62 vii Hình 4.3.3.b. Cây thực thi tượng trưng phát hiện lỗi hàm abort() 63 Hình 4.3.4.a Đoạn mã nguồn so sánh hai chuỗi 64 Hình 4.3.4.b Thực hiện tượng trưng hóa cho hàm so sánh chuỗi 64 Hình 4.3.4.c. Cây thực thi tượng trưng kiểm thử hàm so sánh chuỗi 65 Hình 4.3.4.d. Mô hình quá trình giải các ràng buộc của các solver 67 1 Chƣơng 1. GIỚI THIỆU 1.1. Đảm bảo 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 tạ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 trong các lĩnh vực như dịch vụ y tế hay vũ trụ hàng không lại càng được coi trọng. Bởi chỉ một sai sót nhỏ của hệ thống có thể gây ra những tổn thất to lớn về tính mạng con người cũng như về kinh tế. Trong những năm gần đây, chúng ta 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ỗi phần mềm chẳng hạn ngày 04/06/1996 tàu 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 động 64 - bit thành số nguyên dương 16-bit. Sự việc này xảy ra đã lâu, nhưng cho đến nay nó vẫn đượ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 đượ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 (Software verification). Tuy 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ác 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 đề bùng nổ trạng thái khi thực hiện với các hệ thống lớn, phức tạp trong thực tế. [...]... văn gồm 4 chương, trong đó phần giới thiệu được trình bày trong chương 1 Chương 2 trình bày về kiểm chứng chương trình, thực thi tượng trưng và một số kỹ thuật thực thi tượ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ề SMT một công cụ giải các công thức logic trên lý thuyết vị từ cấp I và 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... phần mềm Trong chương này 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 Đồng thời luận văn cũng trình bày về thực thi tượng trưng (symbolic execution), thực thi 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... 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 nó 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 được và hướng nghiên cứu tiếp theo 3 Chƣơng 2 KIỂM CHỨNG CHƢƠNG TRÌNH VÀ THỰC THI TƢỢNG TRƢNG Kiểm chứng chương trình là một trong những vấn đề...2 Luận văn trình bày phương pháp kiểm chứng dựa trên SMT (SAT Modulo Theories) sử dụng thực thi tượng trưng (symbolic 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 tiê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 dựa trên SMT Một phương pháp có nhiều ưu điểm... 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) và kỹ thuật kiểm chứng (Software verification) Trong khi các kỹ thuật kiểm thử chỉ được thực hiện khi đã có mã nguồn... của hệ thống kiểm chứng [3] 2.1.2 Kiểm chứng mô hình Các kỹ thuật kiểm chứng đang được sử dụng hiện nay đó là áp dụng các phương pháp hình thức (formal methods) Mục đích của các phương pháp này là cố gắng chứng minh một cách tự động rằng chương trình sẽ thực thi đúng đắn 5 trên mọi môi trường được đặc tả Có thể kể đến một số phương pháp như: Phương pháp suy diễn (deductive methods), kiểm chứng mô hình... pháp có nhiều ưu điểm cho vấn đề bùng nổ trạng thái của kiểm chứng mô hình Luận văn sẽ trình bày về công cụ KLEE, 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 ba SMT solver được đánh giá là hiệu quả đó là Z3, Boolector và 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,... 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ét cạn tất cả các trạng thái có thể có của hệ thống Các công cụ kiểm chứng phần mềm mà sử dụng kỹ thuật kiểm chứng mô hình sẽ tiến hành kiểm tra tất cả những kịch bản có thể có của hệ thống Bằng cách này, nó có thể chỉ ra rằng mô hình hệ thống có thật sự thỏa mãn các thuộc tính nhất định Những thuộc tính của chương trình. .. 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 20 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. .. đượ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 tính 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 tượng trưng tương ứng một tập các giá trị đầu vào (input) Kiểm chứng mô hình và kiểm thử là hai kỹ thuật phổ biến thường . 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. dung luận văn 2 Chƣơng 2. KIỂM CHỨNG CHƢƠNG TRÌNH VÀ THỰC THI TƢỢNG TRƢNG 3 2.1. Kiểm chứng chƣơng trình 3 2.1.1. Tổng quan về kiểm chứng chương trình 3 2.1.2. Kiểm chứng mô hình 4 2.2. Thực. cụ kiểm chứng. Chương 3 trình bày về SMT một công cụ giải các công thức logic trên lý thuyết vị từ cấp I và 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ý

Ngày đăng: 04/09/2015, 23:06

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan