Thực hiện kiểm định các thủ tục cây với định dạng khai báo đầu vào phù hợp với khai báo HIP ta được kết quả như sau:
Hình 8 – Kết quả kiểm định đặc tả cấu trúc dữ liệu cây
Kết quả kiểm định đặc tả các thủ tục thành công, và các suy diễn chứng minh tự động (kết quả suy diễn SLEEK) được trả về trong file
sleek_log__home_loris_Desktop_HIP_SLEEK_HIP_LV_Tree_ss.txt 3.4.4 Kiểm định với cấu trúc dữ liệu Queue
Trong phần này luận văn trình bày kiểm định dữ liệu với cấu trúc dữ liệu hàng và lựa chọn cấu trúc dữ liệu điển hình của hàng là “hàng ưu tiên” (Priority Queue) để thực nghiệm kiểm định với công cụ HIP/SLEEK.
Khái niệm: Hàng là Là tập hợp trong đó mỗi phần tử là một cặp (giá trị ưu tiên, đối tượng) ta có thể so sánh đượccác giá trị ưutiên.
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang79
- insert thực hiện chèn vào hàng một giá trị có độ ưu tiên là v. - ripplethực hiện khôi phục các thuộc tính Heap của hàng. - deletemaxthực hiện việc xóa bỏ Node gốc của hàng. - deleteone thực hiện xóa một giá trị khỏi hàng ưu tiên. 3.4.4.1 Mô tả cấu trúc dữ liệu Queue
Có nhiều cách thể hiện cho cấu trúc dữ liệu hàng, luận văn lựa chọn thể hiện cấu trúc dữ liệu hàng bởi heap như minh họa sau:
Hình 9 – Cấu trúc dữ liệu hàng Trong đó dữ liệu tại mỗi Node gồm có các thông tin như sau:
- val thông tin giá trị ưu tiên - nleft số Node con trái - nright số Node con phải - left con trỏ trỏ đến con trái - right con trỏ trỏ đến con phải
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang80
3.4.4.2 Dạng thức File đầu vào của Queue
Với cấu trúc dữ liệu mô tả như trên, các đặc tả dưới đây sẽ đặc tả các thủ tục và dữ liệu phù hợp với khai báo đầu vào của HIP.
Đặc tả khai báo dữ liệu
Đặc tả khai báo vị từ Shape và các thuộc tính của nó
Đặc tả khai báo các thủ tục với dạng tiền điều kiện/hậu điều kiện (Pre/Post)
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang82 Đặc tả thủ tục xóa giá trị khỏi hàng ưu tiên
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang83 Đặc tả thủ tục khôi phục thuộc tính Heap của hàng ưu tiên
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang85
3.4.4.3 Kết quả kiểm địnhQueue với HIP/SLEEK
Thực hiện kiểm định các thủ tục hàng ưu tiên với định dạng khai báo đầu vào phù hợp với khai báo HIP ta được kết quả như sau:
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang86
Hình 10 - Kết quả kiểm định đặc tả cấu trúc dữ liệu hàng
Kết quả kiểm định đặc tả các thủ tục thành công, và các suy diễn chứng minh tự động (kết quả suy diễn SLEEK) được trả về trong file
sleek_log__home_loris_Desktop_HIP_SLEEK_HIP_LV_PriorityQueue_ss.txt 3.5 Kết luận chương
Trong chương 3 luận văn đã trình bày về công cụ HIP/SLEEK được phát
triển bởi nhóm tác giả “Wei-Ngan Chin, Cristina David, Huu Hai Nguyen, và
Shengchao Qin”. Đây là công cụ ứng dụng lý thuyết Separation Logic đã trình bày
ở chương 2 thực hiện kiểm định Module chương trình tự động thông qua việc suy diễn ở mức mã nguồn chương trình. Luận văn đã thực nghiệm kiểm định một vài cấu trúc dữ liệu điển hình và trình bày các kết quả thực nghiệm trên công cụ thực tế. Việc tìm hiểu công cụ HIP/SLEEK đã làm rõ một số vấn đề sau:
-Lý thuyết kiểm định chương trình tự động ứng dụng Separation Logic là có thể áp dụng được trong thực tế khi xây dựng các công cụ kiểm định chương trình tự động.
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang87
-Kỹ thuật đặc tả chương trình ứng dụng lý thuyết Separation Logic là hoàn toàn đúng đắn và có thể áp dụng trên các cấu trúc dữ liệu phức tạp, các dữ liệu có tính động.
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang88
CÔNG VIỆC LIÊN QUAN
4.1 Dạng thức phân tích/kiểm tra Shape
Trong nghiên cứu phân tích dữ liệu của chương trình, phân tích Shape được sử dụng để kiểm tra cấu trúc dữ liệu người dùng là khá phổ biến. Một trong những
kỹ thuật nổi bật là Pointer Assertion Logic của Moeller và Schwartzbach, kỹ thuật
này mô tả tính bất biến của các loại đồ thị. Nhưng kỹ thuật này chủ yếu tập trung cho việc cung cấp ngữ nghĩa cho những suy diễn dựa trên Hoare Logic trong các hệ thống kiểm định, trong luận văn dạng phân tích Shape được đề cập có phạm vi áp dụng cho những chương trình thao tác với dữ liệu con trỏ.
Khác với các nghiên cứu phân tích Shape trước đây chủ yếu phân tích dữ liệu Shape bất biến, kỹ thuật phân tích Shape được sử dụng trong luận văn còn đặc tả được các thuộc tính Size và Bag của các cấu trúc dữ.Ngoài ra việc xây dựng nên vị từ user-defined shape, cũng cho phép mô tả các cấu trúc dữ liệu phức tạp như cây AVL, cây đỏ đen, danh sách sắp xếp, danh sách nối đôi, ngăn xếp, hàng đợi… 4.2 Thuộc tính Size
Theo nhiều hướng nghiên cứu khác, thì những thuộc tính Size được coi là một trong những khai phá lớn nhất trong ngôn ngữ đặc tả, trước đây các cấu trúc dữ liệu dễ dàng phân tích hơn nhờ những thuộc tính bất biến. Phân tích Size xuất hiện sau những chương trình dựa trên đối tượng, những chương trình này bị hạn chế bởi việc quản lý kích thước các đối tượng bất biến được định danh và những kích thước các đối tượng động không thể định danh, không thể hỗ trợ cho những dạng thức Shape phức tạp.
Hệ thống Applied Type System (ATS)là một hệ thống chứng minh chương trình bởi việc sử dụng linear logic, ATS cũng có khả năng thao tác với các cấu trúc dữ liệu phức tạp và có sự chia sẻ dữ liệu đồng thời. Tuy nhiên với hệ thống này, người dùng vẫn phải cung cấp các thuộc tính cũng như các trạng thái sẽ áp dụng cho chương trình một các chính xác và đầy đủ, khi đó vai trò của ATS cũng thực hiện
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang89
việc chứng minh tính đúng đắn chương trình. Trong luận văn sử dụng mô tả với các ràng buộc phân tích shape, size, bag và cung cấp khả năng kiểm định Module tự động.
4.3 Thuộc tính Set/Bag
Kỹ thuật phân tích Set (tập) sử dụng để kiểm định cấu trúc dữ liệu chương trình được đề xuất bởi Kuncak, trong đó đề cập tới khái niệm về first order là sự kết hợp giữa khái niệm Set và giải thuậtPresburger. Sử dụng các kết quả của kỹ thuật này trong việc xây dựng các đặc tả ràng buộc kết hợp, tuy nhiên giải thuật đưa ra là rất phức tạp.Trong luận văn thì phân tích thuộc tính Reachability có liên quan tới thuộc tính Set/bag nhưng việc sử dụng đơn giản hơn để gần gũi với khái niệm mức vị từ.
4.4 Kỹ thuật Fold/Unfold
Fold/Unfold(gấp/mở gấp)là những kỹ thuật được sử dụng trong biến đổi chương trình, được biết đến tương tự như kỹ thuật Unroll/Roll.Thủ tục này được sử dụng một cách tự động trong suốt quá trình kiểm tra các suy diễn Entailment Checking.
Thủ tục tự động sử dụng kỹ thuật Unroll/Roll được đưa ra bởi Berdine, nhưng lại gặp khó khăn khi làm việc với các vị từ cho đoạn danh sách (lseg) và cây (tree). Kỹ thuật Fold/Unfold được đề cập trong luận văn là phổ biến, tự động và có tính dừng sử dụng trong kiểm tra suy diễn công thức Heap.
4.5 Một số ứng dụng kiểm định Logic khác
Những ứng dụng kiểm định chương trình dựa trên lý thuyết suy diễn Hoare Logic ra đời từ khá lâu so với các ứng dụng trên nền tảng Separation Logic. Sau đây đề cập tới một số ứng dụng điển hình và những điểm hạn chế của các ứng dụng này.
ESC/Java là ứng dụng kiểm tra những chương trình tĩnh cho Java, được phát triển bởi Compaq Systems Research Center.Với mong muốn tìm ra nhiều lỗi hơn so với những công cụ kiểm định tĩnh trước đó. Ứng dụng ESC/Javacho phép
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang90
chương trình kiểm định có thể qua được những lỗi mà đã được thiết kế bởi ESC/Java tức là chấp nhận những kết quả sai của chương trình. Với cách thức kiểm định được đề cập trong luận văn, nếu một chương trình được kiểm định thì nó luôn được đảm bảo tính đúng đắn là phù hợp với những đặc tả chương trình thực thi.
ESC/Java2 là sự cải tiến tiếp theo của ESC/Java. Trong đó được thiết kế phù hợp với nhiều hơn các phiên bản Java và nhiều hơn các cấu trúc JML. Tuy nhiên nó vẫn gặp nhiều khó khăn cho việc kiểm định các chương trình sử dụng cấu trúc dữ liệu Heap mà yêu cầu thuộc tính Reachability.
Spec là một chương trình được phát triển bởi Microsoft Research, nó được sử dụng để kiểm định các chương trình được viết với ngôn ngữ C#. Điểm khác biệt là Spec sử dụng các trường đặc biệt trong thủ tục để lưu trữ các tính chất bất biến, thì trong luận văn đề cập tới khái niệm vị từ. Việc sử dụng vị từ giúp người dùng dễ dàng hình dung hơn với các đặc tính bất biến của chương trình.
VeriFast là công cụ được phát triển để kiểm địnhnhững thuộc tính an toàn của những chương trình làm việc với con trỏ. Công cụ này cũng hỗ trợ những vị từ dưới dạng thức của Separation Logic tuy nhiên các kỹ thuật đặc tả được đề cập còn khá đơn giản.
Còn rất nhiều những công cụ kiểm định khác sử dụng Logic để suy diễn tính đúng đắn của chương trình. Những so sánh trên đây giúp cho người đọc dễ hình dung hơn những điểm khác biệt cơ bản của công cụ được đề cập tới trong luận văn và các công cụ được đưa ra so sánh. Điểm nhấn mạnh mà luận văn đưa ra đó là khái niệm vị từ User-defined, được sử dụng để mô tả các thuộc tính sử dụng để phân tích chương trình một cách hiệu quả hơn.
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang91
KẾT LUẬN
1. CÁC NHIỆM VỤ ĐÃ HOÀN THÀNH
Lĩnh vực ứng dụng Separation Logic còn khá mới mẻ, do đó khi nghiên cứu tìm hiểu về Separation Logic người viết luận văn đã cố gắng tìm hiểu và trình bày những khía cạnh cơ bản nhất và tập trung vào hoàn thành những mục tiêu đề ra của luận văn:
1) Nghiên cứu tổng quan về nền tảng Separation Logic, nêu rõ vai trò của Separation Logic đối với việc phát triển các ứng dụng kiểm định phần mềm tự động.
2) Nghiên cứu cơ bản về Separation Logic và kỹ thuật đặc tả chương trình ứng dụng Separation Logic ứng dụng xây dựng công cụ kiểm định tự động.
3) Nghiên cứu công cụ HIP/SLEEK ứng dụng Separation Logic kiểm định cácModeule chương trình tự động.
2. CÁC KẾT QUẢ ĐẠT ĐƯỢC Về mặt lý thuyết:
1) Trình bày được nền tảng cơ sở xây dựnglên lý thuyết Separation Logic và vai trò của nó trong hoạt động kiểm định phần mềm tự động.
2) Trình bày được cơ bản lý thuyết Separation Logic, kỹ thuật đặc tả chương trình dựa trên Separation Logic và mô hình tính đúng đắn của suy diễn kiểm định. Đây chính là nền tảng xây dựng lên các công cụ kiểm định chương trình tự động ứng dụng Separation Logic.
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang92
Về mặt thực nghiệm:
1) Trình bày được một mô hình kiểm định ứng dụng lý thuyết Separation Logic trong kiểm định Module chương trình là công cụ HIP/SLEEK.
2) Trình bày được thực nghiệm kiểm định đặc tả một số cấu trúc dữ liệu ứng dụng lý thuyết Separation Logicvà kết quả thực nghiệm thực tế với công cụ HIP/SLEEK. Thực nghiệm này đóng vai trò khai phá cho những ứng dụng kiểm định đặc tả áp dụng công cụ HIP/SLEEK vào việc kiểm chứng tính đúng đắn của chương trình.
3. CÁC VẤN ĐỀ CÒN TỒN ĐỌNG
Do khối lượng lý thuyết là khá lớn và lý thuyết về Separation Logic còn khá mới mẻ nên luận văn còn một số vấn đề tồn đọng như sau:
1) Chưa đề cập tới các quy tắc xấp xỉ trong lý thuyết của Separation Logic và trong suydiễn kiểm định chương trình.
2) Chưa đưa ra được hiệu năng kiểm định tự động của các mô hình ứng dụng lý thuyết Separation Logic với các mô hình suy diễn tự động khác.
4. ĐỊNH HƯỚNG PHÁT TRIỂN
Với đề tài này, người viết luận văn mong muốn trong thời gian tới tiếp tục bổ sung hoàn thiện lý thuyết về Separation Logic, đặc biệt là lý thuyết về các mô hình xấp xỉ và làm rõ hơn việc chứng minh các định lý đề cập trong luận văn. Đồng thời trình bày thêm các ứng dụng kiểm định tự động khác ứng dụng lý thuyết Separation Logic và trong tương lai phát triển một công cụ kiểm định tự động toàn bộ cấu trúc chương trình.
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang93
TÀI LIỆU THAM KHẢO
[1].BURDY, L., CHEON, Y., COK, D. R., ERNST, M. D., KINIRY, J. R., LEAVENS, G. T.,LEINO, K. R. M., and POLL, E., “An overview of JML tools and applications,” Software Tools for Technology Transfer, 2005.
[2].CHIN, W.-N., DAVID, C., NGUYEN, H. H., and QIN, S., “Multiple pre/post specifica-tions for heap-manipulating methods,” in HASE, 2007.
[3].CHIN, W.-N., DAVID, C., NGUYEN, H. H., and QIN, S., “Enhancing modular oo veri-fication with separation logic,” inPOPL, 2008.
[4].CHIN, W. and KHOO, S., “Calculating sized types,” in ACM SIGPLAN PEPM, (Boston, United States), pp. 62–72, Jan. 2000.
[5].CHIN, W., KHOO, S., QIN, S., POPEEA, C., and NGUYEN, H., “Verifying Safety Poli-cies with Size Properties and Alias Controls,” inIEEE/ACM Intl. Conf. on Software En-gineering, (St. Louis, Missouri), May 2005.
[6].COK, D. R. and KINIRY, J., “ESC/Java2: Uniting ESC/Java and JML.,” in Int’l Work-shop on Construction and Analysis of Safe, Secure, and Interoperable Smart Devices, pp. 108–128, 2004.
[7].C.A.R. Hoare. An axiomatic basis for computer programming. Communications of the ACM, 12(10):576–580, 1969.
[8].C.A.R. Hoare and J. He. A Trace Model for Pointers and Objects. InEuropean Conference on Object-Oriented Programming, volume 1628 of Lecture Notes in Computer Science, pages 1–17. Springer, 1999.
[9].C.A.R. Hoare. The verifying compiler: A grand challenge for computing research. Journal of ACM, 50(1):63–69, 2003.
Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang94
[10].JACOBS, B., SMANS, J., and PIESSENS, F., “A Quick Tour of the VeriFast Program Verifier,” inAPLAS, pp. 304–311, 2010.
[11].K.R.M. Leino. Specification and verification of object-oriented software. lecture notes. Marktoberdorf international summer school, 2008.
[12].LEINO, K. R. M., “Dafny: An automatic program verifier for functional correctness,” in LPAR (Dakar), pp. 348–370, 2010.
[13].M. Barnett, K. R. M. Leino, and W. Schulte. The Spec# programming system: An overview. InInt’l Workshop on Construction and Analysis of Safe, Secure, and Interop-erable Smart Devices, volume 3362 of Lecture Notes in Computer Science, pages 49–69. Springer, 2004.
[14].NGUYEN, H. H., DAVID, C., QIN, S., and CHIN, W., “Automated Verification of Shape And Size Properties via Separation Logic,” inIntl Conf. on Verification, Model Checking and Abstract Interpretation, (Nice, France), Jan. 2007.
[15].REYNOLDS, J., “Separation Logic: A Logic for Shared Mutable Data Structures,” in IEEE Logic in Computer Science, (Copenhagen, Denmark), July 2002.
[16].W.N. Chin, S.C. Khoo, S.C. Qin, C. Popeea, and H.H. Nguyen. Verifying Safet Policies with Size Properties and Alias Controls. InACM SIGSOFT International Conference on Software Engineering, pages 186–195. ACM, 2005.