Mô hình quá trình giải các ràng buộc của các solver

Một phần của tài liệu (LUẬN văn THẠC sĩ) kiểm chứng chương trình dựa trên SMT (Trang 76 - 82)

Hình 4 .6 là đồ thị luồng điều khiển của chương trình trên

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

 Bước 5: Sau bước 4 KLEE chỉ ra lỗi truy cập ngoài kích thước của mảng (out of bounds) sinh được 26 ca kiểm thử trong đó có 4 ca kiểm thử tiêu biểu sau:

 Ca kiểm thử 1: Xâu vào gồm 5 kí tự thường và 3 kí tự kết thúc xâu "abcde\0\0\0"

 Ca kiểm thử 2: Xâu vào gồm 2 kí tự thường và 6 kí tự kết thúc xâu " xy\0\0\0\0\0\0"

 Ca kiểm thử 3: Xâu vào là gồm 5 kí tự thường và 3 kí tự kết thúc xâu và 3 kí tự kết thúc xâu "xyztk\0\0\0".

 Ca kiểm thử 4: Xâu vào là gồm 5 kí tự thường và 3 kí tự kết thúc xâu và 3 kí tự kết thúc xâu "abztk\0\0\0". Độ bao phủ trong trường hợp này là 100%. 4 PC2 SAT Test 2 1 PC121 2 PC122 3 STP Z3 Boolector MetaSMT PC1111 PC1112 5 PC1121 6 PC1122 7 SAT Test 3 SAT Test 4 SAT Test 5 SAT Test 6 SAT Test 7 UNSAT Test 2

Trong chương này luận văn đã trình bày về công cụ kiểm chứng, kiểm thử tự động KLEE. Một công cụ hiệu quả trong việc sinh ca kiểm thử đảm bảo độ phủ mã nguồn chương trình cao (trung bình hơn 90% theo [4]). KLEE kết hợp thực thi tượng trưng động, những phương pháp tối ưu riêng và metaSMT tao ra hiệu quả to lớn do thời gian thực hiện nhanh và sinh ca kiểm thử đủ tốt. Đồng thời, luận văn cũng trình bày các phương pháp ứng dụng công cụ KLEE để kiểm chứng một số thuật toán của chương trình như lỗi chia cho không, lỗi truy cập ngoài kích thước của mảng, lỗi gọi hàm abort() và kiểm thử tự động hàm so sánh hai chuỗi bằng ngôn ngữ C. Dựa trên những kết quả thu được từ công cụ KLEE luận văn chỉ ra được hiệu quả và ứng dụng to lớn của công cụ KLEE trong lĩnh vực kiểm chứng phần mềm.

KẾT LUẬN

Thực thi tượng trưng (Symbolic Execution) là kỹ thuật giúp trừu tượng hóa chương trình dưới dạng các biểu thức Logic (các ràng buộc Logic vị từ cấp I). Dựa trên việc kết hợp với SMT solver để giải các ràng buộc này, một số tính chất của chương trình có thể kiểm chứng được. Phương pháp này cũng được áp dụng để sinh ra các dữ liệu kiểm thử một cách tự động. Luận văn tập trung trình bày kỹ thuật thực thi tượng trưng kết hợp với các SMT solver và đã đạt được một số kết quả như sau:

1.Tìm hiểu và nghiên cứu tài liệu về thực thi tượng trưng và kỹ thuật thực thi tượng trưng động, tìm hiểu về SMT và công cụ giải SMT (SMT solver). Luận văn cũng trình bày về ba SMT solver được đánh giá là hiệu quả là Boolector, Z3, STP. Luận văn trình bày sự kết hợp giữa SMT solver và thực thi tượng trưng động là một phương pháp kiểm chứng chương trình thay thế cho phương pháp kiểm chứng mô hình (model checking), một phương pháp có hạn chế với vấn đề bùng nổ trạng thái.

2.Trình bày về công cụ KLEE và mô hình hoạt động của nó, KLEE là một công cụ kiểm chứng chương trình và sinh dữ liệu kiểm thử tự động sử dụng thực thi tượng trưng động và kỹ thuật giải các ràng buộc bằng một số các công cụ SMT hiệu quả.

3.Trình bày về các ứng dụng của KLEE với một số tính chất cần kiểm chứng của chương trình dựa trên thực thi tượng trưng và SMT solver như phát hiện lỗi chia cho 0, lỗi tràn bộ đệm, lỗi truy cập ngoài chỉ số mảng; ứng dụng của KLEE sinh dữ liệu kiểm thử tự động với chương trình so sánh 2 xâu ký tự.

Luận văn tập trung trình bày về nền tảng lý thuyết và cơ chế hoạt động công cụ KLEE, một công cụ kiểm chứng và sinh dữ liệu kiểm thử tự động. Trên cơ sở đó ứng dụng KLEE để kiểm chứng một số lỗi tương ứng của chương trình. Trong thời gian tới, luận văn có thể tiếp tục phát triển theo các định hướng sau:

1. Xây dựng giao diện trực quan hóa việc sinh dữ liệu kiểm thử tự động dựa trên KLEE.

2. Xây dựng một giao diện Kiểm chứng chương trình dựa trên KLEE cho phép kiểm chứng một số tính chất nhất định của chương trình

3. Dựa trên KLEE xây dựng một công cụ trừu tượng hóa chương trình, biểu diễn bởi các ràng buộc Logic.

4. Đưa thêm các SMT solver mạnh khác vào KLEE để tận dụng thế mạnh của các SMT solver khác trong từng loại ràng buộc.

TÀI LIỆU THAM KHẢO Tài liệu tiếng anh

1. Armin Biere, Marijn Heule, Hans van Maaren, Toby Walsch IOS Press (2008), Handbook of Satisfiability, Dimitris Achlioptas.

2. C. Barrett, A. Stump, and C. Tinelli (2012), The SMT-LIB standard: Version 2.0, Clark Barrett, Aaron Stump and Cesare Tinelli.

3. Christel Baier Joost, Pieter Katoen (2008), Principles of Model Checking

The MITPress Cambrid ge, Massachusetts Lon don , England.

4. Cristian Cadar, Daniel Dunbar, Dawson Engler (2008), KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs”, Stanford University.

5. Cristian Cadar, Koushik Sen (2013), “Symbolic Execution for Software Testing: Three Decades Later”, Communications of the ACM.

6. Daniel Kroening, Ofer Strichman (2008), Decision Procedures An Algorithmic Point of View, Springer-Verlag.

7. D. Detlefs, G. Nelson, and J. B. Saxe (2005), “Simplify: a theorem prover for program checking”. J. ACM.

8. Finn Haedicke, Stefan Frehse, Gorschwin Fey, Daniel Große, Rolf Drechsler (2007), “metaSMT: Focus On Your Application Not On Solver Integration”, Institute of Computer Science - University of Bremen, 28359 Bremen, Germany.

9. G. Li, P. Li, G. Sawaya, I. Ghosh (2012), “GKLEE Concolic verification and test generation for GPUs”, In PPoPP’12.

10. Heinz Riener, Mathias Soeken, Clemens Werther, Görschwin Fey, Rolf Drechsler (2014), “metaSMT: A Unified Interface to SMT-LIB2”,

Forum on specification & Design Languages Munich, Germany.

11. Hristina Palikareva, Cristian Cadar (2013), “Multi-solver Support in Symbolic Execution”, International Conference on Computer Aided Verification (CAV 2013).

12. Javier Larrosa, Inês Lynce, Joao Marques-Silva (2010) “Satisfiability:Algorithms, Applications and Extensions” , ACM Symposium on Applied Computing (SAC).

13. K. Sen and G. Agha (2006), “Automated systematic testing of open distributed programs” . In FASE’06.

14. Kshirasagar Nail, Priyadarshi Tripathy (2008) Software testing and quality assurance theory and practice, John Wiley & Sons, Inc., Hoboken, New Jersey, Canada.

15. Leonardo de Moura and Nikolaj Bjørner (2008) “Z3: An Efficient SMT Solver” , TACAS'08.

16. Ma Li Center for Logic, Language and Cognition (2009), “An Overview of Model Checking”, Peking University.

17. Nieuwenhuis, R., Oliveras and Tinelli (2005), Abstract DPLL and abstract DPLL modulo theories. In Logic for Programming, Articial Intelligence, and Reasoning, F. Baader and A. Voronkov, Eds., vol. 3452 of Lecture Notes in Computer Science. Springer-Verlag.

18. Niklas Ee´n, Niklas Sorensson (2003), “An extensible SAT solver” In Proc Sixth International Conference on Theory and Applications of Satisfiability Testing.

19. P. Collingbourne, C. Cadar, and P. H. Kelly (2011), “Symbolic crosschecking of floating-point and SIMD code”. In EuroSys’11.

20. Ranise, S., Tinelli, C. (2003): “The SMT-LIB format: An initial proposal”, In: PDPAR'03.

21. Robert Daniel Brummayer Bakk’s PhD thesis (2009), Efficient SMT Solving for Bit-Vectors and the Extensional Theory of Arrays, Johannes Kepler University Linz Austria.

22. S. Bucur, V. Ureche, C. Zamfir, and G. Candea (2011), “Parallel symbolic execution for automated real-world software testing”, School of Computer and Communication Sciences, Switzerland.

23. Stephen A. Cook (1971), The complexity of theorem-proving procedures, ACM.

24. Tomas Balyo’s Master thesis (2010), Solving Boolean Satisability Problems, Charles University.

25. To Van Khanh’s PhD thesis (2013), SMT for Polynomial constraints and Its Applications, Japan Advanced Institute of Science and Technology.

26. Vijay Ganesh and David L. Dill (2007), “A Decision Procedure for Bit- Vectors and Arrays”, CAV'07 Proceedings of the 19th international conference on Computer aided verification.

Một phần của tài liệu (LUẬN văn THẠC sĩ) kiểm chứng chương trình dựa trên SMT (Trang 76 - 82)

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

(82 trang)